@yuuvis/client-framework 2.0.0-beta.0 → 2.0.0-beta.3

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 (389) hide show
  1. package/actions/lib/actions/delete-action/delete/delete.component.d.ts +3 -3
  2. package/actions/lib/actions/delete-action/delete-action.d.ts +1 -1
  3. package/actions/lib/actions.service.d.ts +7 -3
  4. package/actions/lib/components/contextmenu/contextmenu.component.d.ts +3 -1
  5. package/autocomplete/README.md +3 -0
  6. package/autocomplete/index.d.ts +3 -0
  7. package/autocomplete/lib/autocomplete.component.d.ts +72 -0
  8. package/autocomplete/lib/autocomplete.interface.d.ts +4 -0
  9. package/autocomplete/lib/autocomplete.module.d.ts +7 -0
  10. package/common/index.d.ts +4 -4
  11. package/common/lib/common.module.d.ts +19 -0
  12. package/common/lib/common.utils.d.ts +2 -0
  13. package/common/lib/components/confirm/confirm.component.d.ts +7 -0
  14. package/common/lib/components/confirm/confirm.interface.d.ts +7 -0
  15. package/common/lib/components/confirm/confirm.service.d.ts +9 -0
  16. package/common/lib/components/dialog/dialog.component.d.ts +6 -0
  17. package/common/lib/components/dialog/dialog.options.d.ts +7 -0
  18. package/common/lib/components/index.d.ts +5 -0
  19. package/common/lib/directives/autofocus-child.directive.d.ts +13 -0
  20. package/common/lib/directives/autofocus-delayed.directive.d.ts +18 -0
  21. package/common/lib/directives/drag-scroll.directive.d.ts +20 -0
  22. package/common/lib/directives/index.d.ts +8 -4
  23. package/common/lib/directives/noop-value-accessor.directive.d.ts +2 -2
  24. package/common/lib/mat-form-field.abstract.d.ts +41 -0
  25. package/common/lib/services/index.d.ts +1 -1
  26. package/common/lib/services/layout-settings/layout-settings.service.d.ts +18 -0
  27. package/datepicker/README.md +3 -0
  28. package/datepicker/index.d.ts +5 -0
  29. package/datepicker/lib/calendar/calendar.component.d.ts +72 -0
  30. package/datepicker/lib/date-input/date-input-element/date-input-element.component.d.ts +43 -0
  31. package/datepicker/lib/date-input/date-input-hour-element/date-input-hour-element.component.d.ts +11 -0
  32. package/datepicker/lib/date-input/date-input.component.d.ts +61 -0
  33. package/datepicker/lib/datepicker-calendar/datepicker-calendar-trigger.component.d.ts +7 -0
  34. package/datepicker/lib/datepicker-calendar/datepicker-calendar.component.d.ts +12 -0
  35. package/datepicker/lib/datepicker.component.d.ts +80 -0
  36. package/datepicker/lib/datepicker.interface.d.ts +34 -0
  37. package/datepicker/lib/datepicker.module.d.ts +9 -0
  38. package/datepicker/lib/datepicker.service.d.ts +46 -0
  39. package/datepicker/lib/datepicker.utils.d.ts +23 -0
  40. package/datepicker/lib/time-input/time-input.component.d.ts +36 -0
  41. package/datepicker/lib/time-input/time-input.interface.d.ts +6 -0
  42. package/fesm2022/yuuvis-client-framework-actions.mjs +147 -105
  43. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  44. package/fesm2022/yuuvis-client-framework-app-bar.mjs +7 -8
  45. package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
  46. package/fesm2022/yuuvis-client-framework-autocomplete.mjs +210 -0
  47. package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -0
  48. package/fesm2022/yuuvis-client-framework-clipboard.mjs +9 -9
  49. package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
  50. package/fesm2022/yuuvis-client-framework-common.mjs +853 -780
  51. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
  52. package/fesm2022/yuuvis-client-framework-datepicker.mjs +1688 -0
  53. package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -0
  54. package/fesm2022/yuuvis-client-framework-forms.mjs +945 -1157
  55. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  56. package/fesm2022/yuuvis-client-framework-icons.mjs +85 -12
  57. package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
  58. package/fesm2022/yuuvis-client-framework-list.mjs +81 -45
  59. package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
  60. package/fesm2022/yuuvis-client-framework-master-details.mjs +112 -0
  61. package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -0
  62. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +60 -0
  63. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -0
  64. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +125 -100
  65. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  66. package/fesm2022/yuuvis-client-framework-object-details.mjs +49 -59
  67. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  68. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +188 -77
  69. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  70. package/fesm2022/yuuvis-client-framework-object-form.mjs +99 -184
  71. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  72. package/fesm2022/yuuvis-client-framework-object-preview.mjs +11 -11
  73. package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
  74. package/fesm2022/yuuvis-client-framework-object-summary.mjs +46 -42
  75. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
  76. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +126 -0
  77. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -0
  78. package/fesm2022/yuuvis-client-framework-pagination.mjs +7 -9
  79. package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
  80. package/fesm2022/yuuvis-client-framework-panel.mjs +8 -7
  81. package/fesm2022/yuuvis-client-framework-panel.mjs.map +1 -1
  82. package/fesm2022/yuuvis-client-framework-popout.mjs +212 -0
  83. package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -0
  84. package/fesm2022/yuuvis-client-framework-renderer.mjs +99 -72
  85. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  86. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +29 -112
  87. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  88. package/fesm2022/yuuvis-client-framework-simple-search.mjs +40 -21
  89. package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
  90. package/fesm2022/yuuvis-client-framework-split-view.mjs +188 -0
  91. package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -0
  92. package/fesm2022/yuuvis-client-framework-tile-list.mjs +100 -93
  93. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  94. package/fesm2022/yuuvis-client-framework-tree.mjs +15 -15
  95. package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
  96. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +16 -21
  97. package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
  98. package/fesm2022/yuuvis-client-framework.mjs +4 -4
  99. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  100. package/forms/index.d.ts +7 -1
  101. package/forms/lib/elements/catalog/catalog.component.d.ts +17 -56
  102. package/forms/lib/elements/data-grid/edit-table-data/edit-data.component.d.ts +5 -4
  103. package/forms/lib/elements/datetime/datetime.component.d.ts +19 -10
  104. package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +12 -27
  105. package/forms/lib/elements/index.d.ts +0 -1
  106. package/forms/lib/elements/number/number.component.d.ts +21 -30
  107. package/forms/lib/elements/number-range/number-range.component.d.ts +12 -7
  108. package/forms/lib/elements/organization/organization.component.d.ts +23 -51
  109. package/forms/lib/elements/range-select-date/range-select-date.component.d.ts +12 -7
  110. package/forms/lib/elements/range-select-filesize/range-select-filesize.component.d.ts +12 -7
  111. package/forms/lib/elements/string/string.component.d.ts +15 -20
  112. package/forms/lib/forms.module.d.ts +8 -11
  113. package/icons/index.d.ts +1 -0
  114. package/icons/lib/icon.component.d.ts +20 -0
  115. package/lib/assets/i18n/de.json +7 -23
  116. package/lib/assets/i18n/en.json +10 -26
  117. package/list/index.d.ts +1 -0
  118. package/list/lib/list-item.directive.d.ts +5 -4
  119. package/list/lib/list.component.d.ts +6 -3
  120. package/list/lib/list.module.d.ts +8 -0
  121. package/master-details/README.md +3 -0
  122. package/master-details/index.d.ts +2 -0
  123. package/master-details/lib/master-details.component.d.ts +58 -0
  124. package/master-details/lib/master-details.interface.d.ts +7 -0
  125. package/master-details/lib/master-details.module.d.ts +7 -0
  126. package/metadata-form/index.d.ts +4 -1
  127. package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +4 -17
  128. package/metadata-form/lib/metadata-form-field/metadata-form-field.interface.d.ts +11 -0
  129. package/metadata-form/lib/object-metadata-element-error.directive.d.ts +13 -0
  130. package/metadata-form/lib/object-metadata-element-label.directive.d.ts +10 -0
  131. package/metadata-form/lib/object-metadata-element-template.directive.d.ts +3 -3
  132. package/metadata-form-defaults/README.md +3 -0
  133. package/metadata-form-defaults/index.d.ts +2 -0
  134. package/metadata-form-defaults/lib/metadata-form-defaults.module.d.ts +7 -0
  135. package/object-details/lib/object-audit/object-audit.component.d.ts +3 -9
  136. package/object-details/lib/object-details.component.d.ts +0 -2
  137. package/object-details/lib/object-metadata/object-metadata.component.d.ts +4 -3
  138. package/object-details/lib/retention-badge/retention-badge.component.d.ts +0 -3
  139. package/object-flavor/index.d.ts +1 -0
  140. package/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.d.ts +1 -2
  141. package/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.d.ts +3 -2
  142. package/object-flavor/lib/default-apply-flavor/default-apply-flavor.component.d.ts +19 -0
  143. package/object-flavor/lib/flavor-chip/flavor-chip.component.d.ts +1 -1
  144. package/object-flavor/lib/object-flavor/object-flavor.component.d.ts +3 -6
  145. package/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.d.ts +0 -1
  146. package/object-form/index.d.ts +1 -1
  147. package/object-form/lib/object-form-element/object-form-element.component.d.ts +2 -2
  148. package/object-form/lib/object-form-group/object-form-group.component.d.ts +1 -3
  149. package/object-form/lib/object-form.component.d.ts +2 -2
  150. package/object-form/lib/object-form.interface.d.ts +0 -44
  151. package/object-form/lib/object-form.module.d.ts +7 -0
  152. package/object-form/lib/object-form.service.d.ts +1 -2
  153. package/object-form/lib/object-form.utils.d.ts +1 -1
  154. package/object-summary/lib/object-summary/object-summary.component.d.ts +13 -15
  155. package/overflow-menu/README.md +3 -0
  156. package/overflow-menu/index.d.ts +3 -0
  157. package/overflow-menu/lib/overflow-menu.component.d.ts +31 -0
  158. package/overflow-menu/lib/overflow-menu.interface.d.ts +9 -0
  159. package/overflow-menu/lib/overflow-menu.module.d.ts +7 -0
  160. package/package.json +43 -69
  161. package/popout/README.md +3 -0
  162. package/popout/index.d.ts +3 -0
  163. package/popout/lib/popout.component.d.ts +58 -0
  164. package/popout/lib/popout.interface.d.ts +17 -0
  165. package/popout/lib/popout.module.d.ts +7 -0
  166. package/renderer/lib/property-renderer/abstract.renderer.d.ts +4 -4
  167. package/renderer/lib/property-renderer/icon.renderer.component.d.ts +2 -0
  168. package/renderer/lib/renderer.directive.d.ts +4 -3
  169. package/sequence-list/index.d.ts +0 -1
  170. package/sequence-list/lib/sequence-list.component.d.ts +0 -4
  171. package/simple-search/index.d.ts +0 -1
  172. package/simple-search/lib/simple-search/simple-search.component.d.ts +6 -10
  173. package/split-view/README.md +3 -0
  174. package/split-view/index.d.ts +4 -0
  175. package/split-view/lib/split-area.directive.d.ts +16 -0
  176. package/split-view/lib/split-view.component.d.ts +76 -0
  177. package/split-view/lib/split-view.interface.d.ts +10 -0
  178. package/split-view/lib/split-view.module.d.ts +8 -0
  179. package/styles/client-framework.scss +21 -67
  180. package/tile-list/lib/tile/tile.component.d.ts +1 -2
  181. package/tile-list/lib/tile-config/property-select/property-select.component.d.ts +0 -1
  182. package/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.d.ts +1 -2
  183. package/tile-list/lib/tile-config/tile-config.component.d.ts +0 -3
  184. package/tile-list/lib/tile-list/tile-list.component.d.ts +5 -5
  185. package/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.d.ts +0 -5
  186. package/upload-progress/lib/upload-progress/upload-progress.component.d.ts +0 -4
  187. package/common/lib/components/focus-indicator/focus-indicator.component.d.ts +0 -7
  188. package/common/lib/components/token-input/token-input.component.d.ts +0 -55
  189. package/common/lib/components/token-input/token-input.interface.d.ts +0 -8
  190. package/common/lib/services/error-messages/error-messages.service.d.ts +0 -7
  191. package/esm2022/actions/index.mjs +0 -7
  192. package/esm2022/actions/lib/actions/copy-action/copy-action.mjs +0 -31
  193. package/esm2022/actions/lib/actions/cut-action/cut-action.mjs +0 -30
  194. package/esm2022/actions/lib/actions/delete-action/delete/delete.component.mjs +0 -67
  195. package/esm2022/actions/lib/actions/delete-action/delete-action.mjs +0 -38
  196. package/esm2022/actions/lib/actions/download-action/download-action.mjs +0 -33
  197. package/esm2022/actions/lib/actions.icon.mjs +0 -8
  198. package/esm2022/actions/lib/actions.interface.mjs +0 -19
  199. package/esm2022/actions/lib/actions.module.mjs +0 -16
  200. package/esm2022/actions/lib/actions.service.mjs +0 -89
  201. package/esm2022/actions/lib/components/contextmenu/contextmenu.component.mjs +0 -27
  202. package/esm2022/actions/yuuvis-client-framework-actions.mjs +0 -5
  203. package/esm2022/app-bar/index.mjs +0 -2
  204. package/esm2022/app-bar/lib/app-bar.component.mjs +0 -89
  205. package/esm2022/app-bar/yuuvis-client-framework-app-bar.mjs +0 -5
  206. package/esm2022/clipboard/index.mjs +0 -2
  207. package/esm2022/clipboard/lib/clipboard.component.mjs +0 -48
  208. package/esm2022/clipboard/yuuvis-client-framework-clipboard.mjs +0 -5
  209. package/esm2022/common/index.mjs +0 -7
  210. package/esm2022/common/lib/components/focus-indicator/focus-indicator.component.mjs +0 -41
  211. package/esm2022/common/lib/components/token-input/token-input.component.mjs +0 -324
  212. package/esm2022/common/lib/components/token-input/token-input.interface.mjs +0 -2
  213. package/esm2022/common/lib/directives/busy-overlay.directive.mjs +0 -88
  214. package/esm2022/common/lib/directives/click-double.directive.mjs +0 -61
  215. package/esm2022/common/lib/directives/container-size.directive.mjs +0 -56
  216. package/esm2022/common/lib/directives/drag-select.directive.mjs +0 -114
  217. package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.directive.mjs +0 -153
  218. package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.interface.mjs +0 -2
  219. package/esm2022/common/lib/directives/focus-within.directive.mjs +0 -81
  220. package/esm2022/common/lib/directives/index.mjs +0 -9
  221. package/esm2022/common/lib/directives/light-dismiss.directive.mjs +0 -44
  222. package/esm2022/common/lib/directives/longpress.directive.mjs +0 -36
  223. package/esm2022/common/lib/directives/noop-value-accessor.directive.mjs +0 -42
  224. package/esm2022/common/lib/services/error-messages/error-messages.service.mjs +0 -68
  225. package/esm2022/common/lib/services/index.mjs +0 -2
  226. package/esm2022/common/yuuvis-client-framework-common.mjs +0 -5
  227. package/esm2022/forms/index.mjs +0 -24
  228. package/esm2022/forms/lib/elements/catalog/catalog.component.mjs +0 -118
  229. package/esm2022/forms/lib/elements/data-grid/data-grid/data-grid.component.mjs +0 -172
  230. package/esm2022/forms/lib/elements/data-grid/edit-table-data/edit-data.component.mjs +0 -95
  231. package/esm2022/forms/lib/elements/data-grid/model/data-grid.interface.mjs +0 -9
  232. package/esm2022/forms/lib/elements/datetime/datetime.component.mjs +0 -82
  233. package/esm2022/forms/lib/elements/datetime-range/datetime-range.component.mjs +0 -166
  234. package/esm2022/forms/lib/elements/index.mjs +0 -11
  235. package/esm2022/forms/lib/elements/number/number.component.mjs +0 -195
  236. package/esm2022/forms/lib/elements/number-range/number-range.component.mjs +0 -176
  237. package/esm2022/forms/lib/elements/organization/organization.component.mjs +0 -286
  238. package/esm2022/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.mjs +0 -38
  239. package/esm2022/forms/lib/elements/range-select-date/range-select-date.component.mjs +0 -181
  240. package/esm2022/forms/lib/elements/range-select-date/range-select-date.interface.mjs +0 -2
  241. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.component.mjs +0 -98
  242. package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.interface.mjs +0 -2
  243. package/esm2022/forms/lib/elements/string/string.component.mjs +0 -261
  244. package/esm2022/forms/lib/form-input/form-input.component.mjs +0 -88
  245. package/esm2022/forms/lib/forms.module.mjs +0 -58
  246. package/esm2022/forms/yuuvis-client-framework-forms.mjs +0 -5
  247. package/esm2022/icons/index.mjs +0 -4
  248. package/esm2022/icons/lib/icon.service.mjs +0 -59
  249. package/esm2022/icons/lib/icons.mjs +0 -32
  250. package/esm2022/icons/lib/object-type-icon/object-type-icon.component.mjs +0 -29
  251. package/esm2022/icons/yuuvis-client-framework-icons.mjs +0 -5
  252. package/esm2022/index.mjs +0 -2
  253. package/esm2022/lib/yuuvis-client-framework.module.mjs +0 -15
  254. package/esm2022/list/index.mjs +0 -3
  255. package/esm2022/list/lib/list-item.directive.mjs +0 -72
  256. package/esm2022/list/lib/list.component.mjs +0 -135
  257. package/esm2022/list/yuuvis-client-framework-list.mjs +0 -5
  258. package/esm2022/metadata-form/index.mjs +0 -4
  259. package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +0 -32
  260. package/esm2022/metadata-form/lib/metadata-form-element-registry.service.mjs +0 -99
  261. package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +0 -83
  262. package/esm2022/metadata-form/lib/object-metadata-element-template.directive.mjs +0 -52
  263. package/esm2022/metadata-form/yuuvis-client-framework-metadata-form.mjs +0 -5
  264. package/esm2022/object-details/index.mjs +0 -8
  265. package/esm2022/object-details/lib/object-audit/object-audit.component.mjs +0 -195
  266. package/esm2022/object-details/lib/object-details-shell/object-details-shell.component.mjs +0 -127
  267. package/esm2022/object-details/lib/object-details.component.mjs +0 -61
  268. package/esm2022/object-details/lib/object-metadata/form-section-group.pipe.mjs +0 -17
  269. package/esm2022/object-details/lib/object-metadata/object-metadata.component.mjs +0 -202
  270. package/esm2022/object-details/lib/object-metadata/object-metadata.interface.mjs +0 -2
  271. package/esm2022/object-details/lib/retention-badge/retention-badge.component.mjs +0 -27
  272. package/esm2022/object-details/yuuvis-client-framework-object-details.mjs +0 -5
  273. package/esm2022/object-flavor/index.mjs +0 -6
  274. package/esm2022/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.mjs +0 -25
  275. package/esm2022/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.mjs +0 -21
  276. package/esm2022/object-flavor/lib/flavor-chip/flavor-chip.component.mjs +0 -35
  277. package/esm2022/object-flavor/lib/object-flavor/object-flavor.component.mjs +0 -93
  278. package/esm2022/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.mjs +0 -43
  279. package/esm2022/object-flavor/yuuvis-client-framework-object-flavor.mjs +0 -5
  280. package/esm2022/object-form/index.mjs +0 -5
  281. package/esm2022/object-form/lib/form-scripting.api.interface.mjs +0 -2
  282. package/esm2022/object-form/lib/form-scripting.service.mjs +0 -160
  283. package/esm2022/object-form/lib/object-form-element/object-form-element.component.mjs +0 -87
  284. package/esm2022/object-form/lib/object-form-extension.interface.mjs +0 -36
  285. package/esm2022/object-form/lib/object-form-group/object-form-group.component.mjs +0 -85
  286. package/esm2022/object-form/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.mjs +0 -23
  287. package/esm2022/object-form/lib/object-form-script/object-form-script.service.mjs +0 -115
  288. package/esm2022/object-form/lib/object-form-script/object-form-scripting-scope.mjs +0 -251
  289. package/esm2022/object-form/lib/object-form-translate.service.mjs +0 -73
  290. package/esm2022/object-form/lib/object-form.component.mjs +0 -628
  291. package/esm2022/object-form/lib/object-form.interface.mjs +0 -9
  292. package/esm2022/object-form/lib/object-form.model.mjs +0 -20
  293. package/esm2022/object-form/lib/object-form.service.mjs +0 -130
  294. package/esm2022/object-form/lib/object-form.utils.mjs +0 -55
  295. package/esm2022/object-form/lib/object-form.validation.mjs +0 -48
  296. package/esm2022/object-form/yuuvis-client-framework-object-form.mjs +0 -5
  297. package/esm2022/object-preview/index.mjs +0 -3
  298. package/esm2022/object-preview/lib/components/index.mjs +0 -3
  299. package/esm2022/object-preview/lib/components/object-email-preview/object-email-preview.component.mjs +0 -45
  300. package/esm2022/object-preview/lib/components/object-preview/object-preview.component.mjs +0 -78
  301. package/esm2022/object-preview/lib/services/object-preview.service.mjs +0 -119
  302. package/esm2022/object-preview/yuuvis-client-framework-object-preview.mjs +0 -5
  303. package/esm2022/object-summary/index.mjs +0 -5
  304. package/esm2022/object-summary/lib/multi-object-summary/multi-object-summary.component.mjs +0 -33
  305. package/esm2022/object-summary/lib/object-summary/object-summary.component.mjs +0 -275
  306. package/esm2022/object-summary/lib/object-summary-data/object-summary-data.component.mjs +0 -80
  307. package/esm2022/object-summary/lib/object-summary.module.mjs +0 -15
  308. package/esm2022/object-summary/yuuvis-client-framework-object-summary.mjs +0 -5
  309. package/esm2022/pagination/index.mjs +0 -3
  310. package/esm2022/pagination/lib/pagination.component.mjs +0 -46
  311. package/esm2022/pagination/lib/pagination.interface.mjs +0 -2
  312. package/esm2022/pagination/yuuvis-client-framework-pagination.mjs +0 -5
  313. package/esm2022/panel/index.mjs +0 -2
  314. package/esm2022/panel/lib/panel.component.mjs +0 -20
  315. package/esm2022/panel/yuuvis-client-framework-panel.mjs +0 -5
  316. package/esm2022/renderer/index.mjs +0 -11
  317. package/esm2022/renderer/lib/property-renderer/abstract.renderer.mjs +0 -29
  318. package/esm2022/renderer/lib/property-renderer/datetime.renderer.mjs +0 -13
  319. package/esm2022/renderer/lib/property-renderer/decimal.renderer.component.mjs +0 -12
  320. package/esm2022/renderer/lib/property-renderer/filesize.renderer.component.mjs +0 -28
  321. package/esm2022/renderer/lib/property-renderer/icon.renderer.component.mjs +0 -23
  322. package/esm2022/renderer/lib/property-renderer/integer.renderer.component.mjs +0 -12
  323. package/esm2022/renderer/lib/property-renderer/organization.renderer.mjs +0 -19
  324. package/esm2022/renderer/lib/property-renderer/string.renderer.component.mjs +0 -12
  325. package/esm2022/renderer/lib/property-renderer/unknown.renderer.mjs +0 -12
  326. package/esm2022/renderer/lib/renderer.directive.mjs +0 -51
  327. package/esm2022/renderer/lib/services/renderer/renderer.interface.mjs +0 -2
  328. package/esm2022/renderer/lib/services/renderer/renderer.service.mjs +0 -84
  329. package/esm2022/renderer/yuuvis-client-framework-renderer.mjs +0 -5
  330. package/esm2022/sequence-list/index.mjs +0 -4
  331. package/esm2022/sequence-list/lib/due-date-picker/due-date-picker.component.mjs +0 -99
  332. package/esm2022/sequence-list/lib/sequence-list.component.mjs +0 -141
  333. package/esm2022/sequence-list/lib/sequence-list.interface.mjs +0 -2
  334. package/esm2022/sequence-list/yuuvis-client-framework-sequence-list.mjs +0 -5
  335. package/esm2022/simple-search/index.mjs +0 -3
  336. package/esm2022/simple-search/lib/simple-search/simple-search.component.mjs +0 -111
  337. package/esm2022/simple-search/lib/simple-search/simple-search.interface.mjs +0 -2
  338. package/esm2022/simple-search/yuuvis-client-framework-simple-search.mjs +0 -5
  339. package/esm2022/tile-list/index.mjs +0 -11
  340. package/esm2022/tile-list/lib/tile/tile.component.mjs +0 -53
  341. package/esm2022/tile-list/lib/tile-config/action-select/action-select.component.mjs +0 -25
  342. package/esm2022/tile-list/lib/tile-config/icon-select/icon-select.component.mjs +0 -33
  343. package/esm2022/tile-list/lib/tile-config/property-select/property-select.component.mjs +0 -91
  344. package/esm2022/tile-list/lib/tile-config/tile-config-tile/tile-config-tile.component.mjs +0 -66
  345. package/esm2022/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.mjs +0 -46
  346. package/esm2022/tile-list/lib/tile-config/tile-config.component.mjs +0 -156
  347. package/esm2022/tile-list/lib/tile-extension/directive/tile-extension.directive.mjs +0 -37
  348. package/esm2022/tile-list/lib/tile-extension/extensions/email.extension.mjs +0 -42
  349. package/esm2022/tile-list/lib/tile-extension/tile-extension.service.mjs +0 -35
  350. package/esm2022/tile-list/lib/tile-list/tile-list.component.mjs +0 -510
  351. package/esm2022/tile-list/lib/tile-list/tile-list.interface.mjs +0 -2
  352. package/esm2022/tile-list/yuuvis-client-framework-tile-list.mjs +0 -5
  353. package/esm2022/token-search/index.mjs +0 -3
  354. package/esm2022/token-search/token-search.component.mjs +0 -78
  355. package/esm2022/token-search/token-search.interface.mjs +0 -2
  356. package/esm2022/token-search/yuuvis-client-framework-token-search.mjs +0 -5
  357. package/esm2022/tree/index.mjs +0 -3
  358. package/esm2022/tree/lib/tree-node/tree-node.component.mjs +0 -65
  359. package/esm2022/tree/lib/tree.component.mjs +0 -148
  360. package/esm2022/tree/lib/tree.interface.mjs +0 -2
  361. package/esm2022/tree/lib/tree.service.mjs +0 -95
  362. package/esm2022/tree/yuuvis-client-framework-tree.mjs +0 -5
  363. package/esm2022/upload-progress/index.mjs +0 -2
  364. package/esm2022/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.mjs +0 -49
  365. package/esm2022/upload-progress/lib/upload-progress/upload-progress.component.mjs +0 -37
  366. package/esm2022/upload-progress/yuuvis-client-framework-upload-progress.mjs +0 -5
  367. package/esm2022/user-avatar/index.mjs +0 -3
  368. package/esm2022/user-avatar/lib/user-avatar.component.mjs +0 -69
  369. package/esm2022/user-avatar/lib/user-avatar.module.mjs +0 -24
  370. package/esm2022/user-avatar/yuuvis-client-framework-user-avatar.mjs +0 -5
  371. package/esm2022/yuuvis-client-framework.mjs +0 -5
  372. package/fesm2022/yuuvis-client-framework-token-search.mjs +0 -85
  373. package/fesm2022/yuuvis-client-framework-token-search.mjs.map +0 -1
  374. package/fesm2022/yuuvis-client-framework-user-avatar.mjs +0 -96
  375. package/fesm2022/yuuvis-client-framework-user-avatar.mjs.map +0 -1
  376. package/forms/lib/form-input/form-input.component.d.ts +0 -48
  377. package/object-form/lib/object-form-translate.service.d.ts +0 -15
  378. package/object-form/lib/object-form.model.d.ts +0 -18
  379. package/sequence-list/lib/due-date-picker/due-date-picker.component.d.ts +0 -28
  380. package/simple-search/lib/simple-search/simple-search.interface.d.ts +0 -4
  381. package/token-search/README.md +0 -3
  382. package/token-search/index.d.ts +0 -2
  383. package/token-search/token-search.component.d.ts +0 -22
  384. package/token-search/token-search.interface.d.ts +0 -4
  385. package/user-avatar/README.md +0 -3
  386. package/user-avatar/index.d.ts +0 -2
  387. package/user-avatar/lib/user-avatar.component.d.ts +0 -44
  388. package/user-avatar/lib/user-avatar.module.d.ts +0 -8
  389. /package/{metadata-form → metadata-form-defaults}/lib/metadata-default-templates/metadata-default-templates.component.d.ts +0 -0
@@ -1,324 +0,0 @@
1
- import { Component, ElementRef, HostListener, NgZone, contentChild, inject, input, output, viewChild } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { YvcOverlayService } from '@yuuvis/components/overlay';
4
- import { YvcAutocompleteModule } from '@yuuvis/components/autocomplete';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "@yuuvis/components/autocomplete";
8
- // TODO: Move to @yuuvis/components
9
- export class TokenInputComponent {
10
- constructor() {
11
- this.elRef = inject(ElementRef);
12
- this.overlay = inject(YvcOverlayService);
13
- this.ngZone = inject(NgZone);
14
- this.optionsTemplate = viewChild.required('options');
15
- /**
16
- * Template to be used for rendering selected tokens
17
- */
18
- this.tokenTemplate = contentChild('tokenTemplate');
19
- /**
20
- * Template to be used for rendering autocomplete suggestion entries
21
- */
22
- this.optionTemplate = contentChild('optionTemplate');
23
- this.TEXT_TOKEN_TYPE = 'txt';
24
- this.tokens = input([]);
25
- this.caseSensitive = input(false);
26
- this.change = output();
27
- this._cleanFormTokens = [this._newTextToken()];
28
- this.formTokens = structuredClone(this._cleanFormTokens);
29
- this.autocompleteValues = [];
30
- this.autocompleteSelectedIndex = -1;
31
- this.focusedTokenIndex = -1;
32
- }
33
- onArrowUpKey(event) {
34
- event.preventDefault();
35
- event.stopPropagation();
36
- if (this.autocompleteSelectedIndex > 0)
37
- this.autocompleteSelectedIndex--;
38
- }
39
- onArrowDownKey(event) {
40
- event.preventDefault();
41
- event.stopPropagation();
42
- if (this.autocompleteValues && this.autocompleteSelectedIndex < this.autocompleteValues.length - 1)
43
- this.autocompleteSelectedIndex++;
44
- }
45
- onEnterKey(event) {
46
- if (this.autocompleteValues.length && this.autocompleteSelectedIndex >= 0) {
47
- event.preventDefault();
48
- event.stopPropagation();
49
- this.onOptionSelect(this.autocompleteValues[this.autocompleteSelectedIndex]);
50
- }
51
- }
52
- clear() {
53
- this.formTokens = structuredClone(this._cleanFormTokens);
54
- this._inputElement.innerText = '';
55
- this._emitChange(true);
56
- }
57
- onInputFocus(e) {
58
- this._inputElement = e.target;
59
- this.focusedTokenIndex = this._inputElement ? this.formTokens.findIndex((t) => t.id === this._inputElement.getAttribute('data-id')) : -1;
60
- // console.log('FIndex: ' + this.focusedTokenIndex);
61
- }
62
- onInput(e) {
63
- this._processValue();
64
- this._emitChange();
65
- }
66
- onArrowLeft(e) {
67
- const cp = this._getCaretPos(e.target);
68
- if (cp === 0) {
69
- e.stopPropagation();
70
- e.preventDefault();
71
- this._focusInput(-1);
72
- }
73
- }
74
- onArrowRight(e) {
75
- const cp = this._getCaretPos(e.target);
76
- if (cp === e.target.innerText.length) {
77
- e.stopPropagation();
78
- e.preventDefault();
79
- this._focusInput(1);
80
- }
81
- }
82
- onDelete(e, index) {
83
- const cp = this._getCaretPos(e.target);
84
- if (cp === e.target.innerText.length) {
85
- e.stopPropagation();
86
- e.preventDefault();
87
- // remove next token
88
- if (index < this.formTokens.length - 2) {
89
- this.formTokens.splice(index + 1, 1);
90
- // if prev token is also a text token => merge
91
- const nextIdx = index + 1;
92
- if (nextIdx < this.formTokens.length && this.formTokens[nextIdx].type === this.TEXT_TOKEN_TYPE) {
93
- const content = this.formTokens[index].label;
94
- const nextContent = this.formTokens[nextIdx].label;
95
- const mergedToken = {
96
- id: this.formTokens[index + 1].id,
97
- label: `${content} ${nextContent}`,
98
- type: this.TEXT_TOKEN_TYPE
99
- };
100
- this.formTokens.splice(index + 1, 2, mergedToken);
101
- const el = this.elRef.nativeElement.querySelector(`[data-id="${this.formTokens[index + 1].id}"]`);
102
- if (el) {
103
- el.innerText = mergedToken.label;
104
- this._setCaretPos(el, content.length);
105
- }
106
- }
107
- this._emitChange();
108
- }
109
- }
110
- }
111
- onBackspace(e, index) {
112
- const cp = this._getCaretPos(e.target);
113
- if (cp === 0) {
114
- e.stopPropagation();
115
- e.preventDefault();
116
- // remove prev token
117
- if (index > 0) {
118
- this.formTokens.splice(index - 1, 1);
119
- // if prev token is also a text token => merge
120
- const prevIdx = index - 2;
121
- if (prevIdx >= 0 && this.formTokens[prevIdx].type === this.TEXT_TOKEN_TYPE) {
122
- const content = this.formTokens[index - 1].label;
123
- const prevContent = this.formTokens[prevIdx].label;
124
- const mergedToken = {
125
- id: this.formTokens[prevIdx].id,
126
- label: `${prevContent} ${content}`,
127
- type: this.TEXT_TOKEN_TYPE
128
- };
129
- this.formTokens.splice(prevIdx, 2, mergedToken);
130
- const el = this.elRef.nativeElement.querySelector(`[data-id="${this.formTokens[prevIdx].id}"]`);
131
- if (el) {
132
- el.innerText = mergedToken.label;
133
- this._setCaretPos(el, prevContent.length);
134
- }
135
- }
136
- else {
137
- this._focusFirst();
138
- }
139
- this._emitChange();
140
- }
141
- }
142
- }
143
- _focusFirst() {
144
- const el = this.elRef.nativeElement.querySelector(`[contenteditable]`);
145
- if (el)
146
- setTimeout(() => {
147
- el?.focus();
148
- });
149
- }
150
- _focusInput(offset) {
151
- const inputs = Array.from(this.elRef.nativeElement.querySelectorAll('[contenteditable]'));
152
- let i = inputs.findIndex((i) => i === document.activeElement);
153
- i = i + offset;
154
- if (i > inputs.length - 1)
155
- i = 0;
156
- if (i < 0)
157
- i = inputs.length - 1;
158
- this.ngZone.run(() => inputs[i].focus());
159
- this._setCaretPos(inputs[i], offset > 0 || inputs[i].innerText.length === 0 ? 0 : inputs[i].innerText.length);
160
- }
161
- _setCaretPos(element, pos) {
162
- const targetNode = element.childNodes.length ? element.childNodes[0] : element;
163
- const range = document.createRange();
164
- range.selectNode(element);
165
- range.setStart(targetNode, pos);
166
- range.setEnd(targetNode, pos);
167
- const selection = window.getSelection();
168
- selection.removeAllRanges();
169
- selection.addRange(range);
170
- }
171
- _getCaretPos(node) {
172
- const selection = window.getSelection();
173
- const range = selection.getRangeAt(0);
174
- const clonedRange = range.cloneRange();
175
- clonedRange.selectNodeContents(node);
176
- clonedRange.setEnd(range.endContainer, range.endOffset);
177
- return clonedRange.toString().length;
178
- }
179
- onOptionSelect(o) {
180
- let tokensAdded = 0;
181
- let tokensRemoved = 0;
182
- const inputValue = this._getInputValue();
183
- const wordTokens = this._tokenize(inputValue);
184
- const lastWord = wordTokens[wordTokens.length - 1];
185
- if (lastWord.length === inputValue.length) {
186
- this.formTokens.pop();
187
- tokensRemoved++;
188
- }
189
- this.formTokens.splice(this.focusedTokenIndex + 1, 0, structuredClone(o));
190
- tokensAdded++;
191
- const shadowTokens = [];
192
- // check for inbetween tokens
193
- let txtTokenCount = -1;
194
- this.formTokens.forEach((t, i) => {
195
- if (t.type === this.TEXT_TOKEN_TYPE) {
196
- txtTokenCount++;
197
- t.id = this._textTokenId(txtTokenCount);
198
- }
199
- shadowTokens.push(t);
200
- const nextToken = this.formTokens[i + 1];
201
- if (t.type !== this.TEXT_TOKEN_TYPE && nextToken && nextToken.type !== this.TEXT_TOKEN_TYPE) {
202
- // add inbetween token
203
- txtTokenCount++;
204
- shadowTokens.push(this._newTextToken(txtTokenCount));
205
- tokensAdded++;
206
- }
207
- });
208
- if (this.formTokens[this.formTokens.length - 1].type !== this.TEXT_TOKEN_TYPE) {
209
- // add empty text token at the end
210
- txtTokenCount++;
211
- shadowTokens.push(this._newTextToken(txtTokenCount));
212
- tokensAdded++;
213
- }
214
- this.formTokens = shadowTokens;
215
- this._inputElement.innerText = inputValue.substring(0, inputValue.length - lastWord.length).trim();
216
- this._emitChange();
217
- setTimeout(() => {
218
- // console.log(`fi: ${this.focusedTokenIndex}, ta: ${tokensAdded}, tr: ${tokensRemoved}, ne: ${this.focusedTokenIndex + (tokensAdded - tokensRemoved)}`);
219
- this._focusTokenInput(this.focusedTokenIndex + (tokensAdded - tokensRemoved));
220
- });
221
- this.closeOptions();
222
- }
223
- _focusTokenInput(index) {
224
- const selector = index === undefined ? 'div:last-child' : `div:nth-child(${index + 1})`;
225
- console.log(selector);
226
- const lastInput = this.elRef.nativeElement.querySelector(selector);
227
- lastInput.focus();
228
- return lastInput;
229
- }
230
- // private _focusInput(): HTMLElement {
231
- // const lastInput: HTMLElement = (
232
- // this.elRef.nativeElement as HTMLElement
233
- // ).querySelector('[contenteditable]:last-child') as HTMLElement;
234
- // lastInput.focus();
235
- // return lastInput;
236
- // }
237
- openOptions() {
238
- if (this._overlayRef || !this.autocompleteValues.length)
239
- return;
240
- this._overlayRef = this.overlay.open(this.optionsTemplate(), null, {
241
- lightDismiss: true,
242
- maxHeight: '97vh'
243
- }, this.elRef);
244
- }
245
- closeOptions() {
246
- if (this._overlayRef) {
247
- this._overlayRef.close();
248
- this._overlayRef = undefined;
249
- }
250
- this.autocompleteSelectedIndex = -1;
251
- this.autocompleteValues = [];
252
- }
253
- onTokenEnter(e) {
254
- e.preventDefault();
255
- }
256
- _emitChange(focusFirst = false) {
257
- // need to set timeout so DOM changes are applied before accessing elements
258
- setTimeout(() => {
259
- this.formTokens.forEach((t) => {
260
- if (t.type === this.TEXT_TOKEN_TYPE) {
261
- const el = this.elRef.nativeElement.querySelector(`[data-id="${t.id}"]`);
262
- if (el)
263
- t.label = el.innerText;
264
- }
265
- });
266
- this.change.emit(this.formTokens
267
- .filter((t) => t.type !== this.TEXT_TOKEN_TYPE || t.label.length > 0)
268
- .map((t) => ({
269
- id: t.id,
270
- label: t.label,
271
- type: t.type
272
- })));
273
- if (focusFirst)
274
- this._focusFirst();
275
- });
276
- }
277
- _newTextToken(idx) {
278
- const index = idx !== undefined ? idx : this.formTokens?.length ? this.formTokens.filter((t) => t.type === this.TEXT_TOKEN_TYPE).length : 0;
279
- return {
280
- id: this._textTokenId(index),
281
- label: '',
282
- type: this.TEXT_TOKEN_TYPE
283
- };
284
- }
285
- _textTokenId(i) {
286
- return `txt_${i}`;
287
- }
288
- _tokenize(value) {
289
- const wordTokens = value.split(/\W+/).filter((t) => t?.length);
290
- return wordTokens;
291
- }
292
- _getInputValue() {
293
- return this._inputElement.innerText.replaceAll('&nbsp;', '');
294
- }
295
- _processValue() {
296
- const wordTokens = this._tokenize(this._getInputValue());
297
- const lastWord = wordTokens[wordTokens.length - 1];
298
- this.autocompleteValues =
299
- !lastWord || lastWord.length < 2
300
- ? []
301
- : this.tokens().filter((t) => lastWord && new RegExp(lastWord, this.caseSensitive() ? '' : 'i').test(t.label));
302
- this.autocompleteSelectedIndex = this.autocompleteValues.length ? 0 : -1;
303
- if (this.autocompleteValues.length)
304
- this.openOptions();
305
- else
306
- this.closeOptions();
307
- }
308
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
309
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TokenInputComponent, isStandalone: true, selector: "yuv-token-input", inputs: { tokens: { classPropertyName: "tokens", publicName: "tokens", isSignal: true, isRequired: false, transformFunction: null }, caseSensitive: { classPropertyName: "caseSensitive", publicName: "caseSensitive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { listeners: { "keydown.arrowUp": "onArrowUpKey($event)", "keydown.arrowDown": "onArrowDownKey($event)", "keydown.enter": "onEnterKey($event)" } }, queries: [{ propertyName: "tokenTemplate", first: true, predicate: ["tokenTemplate"], descendants: true, isSignal: true }, { propertyName: "optionTemplate", first: true, predicate: ["optionTemplate"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "optionsTemplate", first: true, predicate: ["options"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- fi {{focusedTokenIndex}} -->\n\n@for (ft of formTokens; let i = $index; track $index) {\n @if (ft.type === TEXT_TOKEN_TYPE) {\n <div\n contenteditable\n [attr.data-id]=\"ft.id\"\n (input)=\"onInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (keydown.enter)=\"onTokenEnter($event)\"\n (keydown.arrowLeft)=\"onArrowLeft($event)\"\n (keydown.arrowRight)=\"onArrowRight($event)\"\n (keydown.delete)=\"onDelete($event, i)\"\n (keydown.backspace)=\"onBackspace($event, i)\"\n ></div>\n } @else {\n @if (tokenTemplate()) {\n <ng-container *ngTemplateOutlet=\"tokenTemplate()!; context: { $implicit: ft }\"></ng-container>\n } @else {\n <div class=\"chip\">{{ ft.label }}</div>\n }\n }\n}\n\n<ng-template #options>\n <yvc-autocomplete-options\n class=\"popover animateIn\"\n [values]=\"autocompleteValues\"\n [(focusedIndex)]=\"autocompleteSelectedIndex\"\n [autocompleteOptionTemplate]=\"optionTemplate() || null\"\n (optionSelect)=\"onOptionSelect($event)\"\n [field]=\"'label'\"\n ></yvc-autocomplete-options>\n</ng-template>\n", styles: [":host{--token-input-chip-border-color: var(--item-focus-border-color);--token-input-chip-background-color: var(--item-focus-background-color);--token-padding-y: .15em;display:flex;align-items:center;flex-flow:row wrap;padding:2px}:host [contenteditable],:host .chip{border:1px solid transparent;border-radius:2px}:host [contenteditable]{display:inline-block;padding:var(--token-padding-y) 2px;min-width:1px}:host [contenteditable]:focus-visible{outline:0}:host [contenteditable]:last-child{flex:1}:host .chip{padding:var(--token-padding-y) .25em;border-color:var(--token-input-chip-border-color);background-color:var(--token-input-chip-background-color)}:host .chip>span{font-size:var(--font-hint);color:var(--text-color-hint)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: YvcAutocompleteModule }, { kind: "component", type: i2.AutocompleteOptionsComponent, selector: "yvc-autocomplete-options", inputs: ["autocompleteOptionTemplate", "values", "field", "focusedIndex"], outputs: ["focusedIndexChange", "optionSelect"] }] }); }
310
- }
311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TokenInputComponent, decorators: [{
312
- type: Component,
313
- args: [{ selector: 'yuv-token-input', standalone: true, imports: [CommonModule, YvcAutocompleteModule], template: "<!-- fi {{focusedTokenIndex}} -->\n\n@for (ft of formTokens; let i = $index; track $index) {\n @if (ft.type === TEXT_TOKEN_TYPE) {\n <div\n contenteditable\n [attr.data-id]=\"ft.id\"\n (input)=\"onInput($event)\"\n (focus)=\"onInputFocus($event)\"\n (keydown.enter)=\"onTokenEnter($event)\"\n (keydown.arrowLeft)=\"onArrowLeft($event)\"\n (keydown.arrowRight)=\"onArrowRight($event)\"\n (keydown.delete)=\"onDelete($event, i)\"\n (keydown.backspace)=\"onBackspace($event, i)\"\n ></div>\n } @else {\n @if (tokenTemplate()) {\n <ng-container *ngTemplateOutlet=\"tokenTemplate()!; context: { $implicit: ft }\"></ng-container>\n } @else {\n <div class=\"chip\">{{ ft.label }}</div>\n }\n }\n}\n\n<ng-template #options>\n <yvc-autocomplete-options\n class=\"popover animateIn\"\n [values]=\"autocompleteValues\"\n [(focusedIndex)]=\"autocompleteSelectedIndex\"\n [autocompleteOptionTemplate]=\"optionTemplate() || null\"\n (optionSelect)=\"onOptionSelect($event)\"\n [field]=\"'label'\"\n ></yvc-autocomplete-options>\n</ng-template>\n", styles: [":host{--token-input-chip-border-color: var(--item-focus-border-color);--token-input-chip-background-color: var(--item-focus-background-color);--token-padding-y: .15em;display:flex;align-items:center;flex-flow:row wrap;padding:2px}:host [contenteditable],:host .chip{border:1px solid transparent;border-radius:2px}:host [contenteditable]{display:inline-block;padding:var(--token-padding-y) 2px;min-width:1px}:host [contenteditable]:focus-visible{outline:0}:host [contenteditable]:last-child{flex:1}:host .chip{padding:var(--token-padding-y) .25em;border-color:var(--token-input-chip-border-color);background-color:var(--token-input-chip-background-color)}:host .chip>span{font-size:var(--font-hint);color:var(--text-color-hint)}\n"] }]
314
- }], propDecorators: { onArrowUpKey: [{
315
- type: HostListener,
316
- args: ['keydown.arrowUp', ['$event']]
317
- }], onArrowDownKey: [{
318
- type: HostListener,
319
- args: ['keydown.arrowDown', ['$event']]
320
- }], onEnterKey: [{
321
- type: HostListener,
322
- args: ['keydown.enter', ['$event']]
323
- }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL3Rva2VuLWlucHV0L3Rva2VuLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uL3NyYy9saWIvY29tcG9uZW50cy90b2tlbi1pbnB1dC90b2tlbi1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFlLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBaUIsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQUV4RSxtQ0FBbUM7QUFRbkMsTUFBTSxPQUFPLG1CQUFtQjtJQVBoQztRQVFVLFVBQUssR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0IsWUFBTyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsb0JBQWUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFtQixTQUFTLENBQUMsQ0FBQztRQUNsRTs7V0FFRztRQUNILGtCQUFhLEdBQUcsWUFBWSxDQUFtQixlQUFlLENBQUMsQ0FBQztRQUNoRTs7V0FFRztRQUNILG1CQUFjLEdBQUcs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LFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQzlCLENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDL0gsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7WUFDbEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBL1VVLG1CQUFtQjttR0FBbkIsbUJBQW1CLHM0QkNkaEMsc21DQWtDQSxreEJEeEJZLFlBQVkscU1BQUUscUJBQXFCOzs0RkFJbEMsbUJBQW1CO2tCQVAvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxxQkFBcUIsQ0FBQzs4QkFrQ0QsWUFBWTtzQkFBeEQsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFLSSxjQUFjO3NCQUE1RCxZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQUtGLFVBQVU7c0JBQXBELFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIE5nWm9uZSwgVGVtcGxhdGVSZWYsIGNvbnRlbnRDaGlsZCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbm5lcklucHV0VG9rZW4sIElucHV0VG9rZW4gfSBmcm9tICcuL3Rva2VuLWlucHV0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7IFl2Y0F1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9hdXRvY29tcGxldGUnO1xuXG4vLyBUT0RPOiBNb3ZlIHRvIEB5dXV2aXMvY29tcG9uZW50c1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXV2LXRva2VuLWlucHV0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgWXZjQXV0b2NvbXBsZXRlTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rva2VuLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3Rva2VuLWlucHV0LmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBUb2tlbklucHV0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBvdmVybGF5ID0gaW5qZWN0KFl2Y092ZXJsYXlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBvcHRpb25zVGVtcGxhdGUgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8VGVtcGxhdGVSZWY8YW55Pj4oJ29wdGlvbnMnKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHRvIGJlIHVzZWQgZm9yIHJlbmRlcmluZyBzZWxlY3RlZCB0b2tlbnNcbiAgICovXG4gIHRva2VuVGVtcGxhdGUgPSBjb250ZW50Q2hpbGQ8VGVtcGxhdGVSZWY8YW55Pj4oJ3Rva2VuVGVtcGxhdGUnKTtcbiAgLyoqXG4gICAqIFRlbXBsYXRlIHRvIGJlIHVzZWQgZm9yIHJlbmRlcmluZyBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbiBlbnRyaWVzXG4gICAqL1xuICBvcHRpb25UZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZDxUZW1wbGF0ZVJlZjxhbnk+Pignb3B0aW9uVGVtcGxhdGUnKTtcblxuICBURVhUX1RPS0VOX1RZUEUgPSAndHh0JztcbiAgcHJpdmF0ZSBfaW5wdXRFbGVtZW50PzogSFRNTElucHV0RWxlbWVudDtcbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZj86IFl2Y092ZXJsYXlSZWY7XG5cbiAgdG9rZW5zID0gaW5wdXQ8SW5wdXRUb2tlbltdPihbXSk7XG4gIGNhc2VTZW5zaXRpdmUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgY2hhbmdlID0gb3V0cHV0PElucHV0VG9rZW5bXT4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jbGVhbkZvcm1Ub2tlbnM6IElucHV0VG9rZW5bXSA9IFt0aGlzLl9uZXdUZXh0VG9rZW4oKV07XG4gIGZvcm1Ub2tlbnM6IElucHV0VG9rZW5bXSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLl9jbGVhbkZvcm1Ub2tlbnMpO1xuICBhdXRvY29tcGxldGVWYWx1ZXM6IElucHV0VG9rZW5bXSA9IFtdO1xuICBhdXRvY29tcGxldGVTZWxlY3RlZEluZGV4ID0gLTE7XG4gIGZvY3VzZWRUb2tlbkluZGV4ID0gLTE7XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd1VwJywgWyckZXZlbnQnXSkgb25BcnJvd1VwS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVTZWxlY3RlZEluZGV4ID4gMCkgdGhpcy5hdXRvY29tcGxldGVTZWxlY3RlZEluZGV4LS07XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd0Rvd24nLCBbJyRldmVudCddKSBvbkFycm93RG93bktleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzICYmIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0ZWRJbmRleCA8IHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzLmxlbmd0aCAtIDEpIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0ZWRJbmRleCsrO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uZW50ZXInLCBbJyRldmVudCddKSBvbkVudGVyS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzLmxlbmd0aCAmJiB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdCh0aGlzLmF1dG9jb21wbGV0ZVZhbHVlc1t0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdGVkSW5kZXhdKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmZvcm1Ub2tlbnMgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5fY2xlYW5Gb3JtVG9rZW5zKTtcbiAgICB0aGlzLl9pbnB1dEVsZW1lbnQhLmlubmVyVGV4dCA9ICcnO1xuICAgIHRoaXMuX2VtaXRDaGFuZ2UodHJ1ZSk7XG4gIH1cblxuICBvbklucHV0Rm9jdXMoZTogYW55KSB7XG4gICAgdGhpcy5faW5wdXRFbGVtZW50ID0gZS50YXJnZXQ7XG4gICAgdGhpcy5mb2N1c2VkVG9rZW5JbmRleCA9IHRoaXMuX2lucHV0RWxlbWVudCA/IHRoaXMuZm9ybVRva2Vucy5maW5kSW5kZXgoKHQpID0+IHQuaWQgPT09IHRoaXMuX2lucHV0RWxlbWVudCEuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJykpIDogLTE7XG4gICAgLy8gY29uc29sZS5sb2coJ0ZJbmRleDogJyArIHRoaXMuZm9jdXNlZFRva2VuSW5kZXgpO1xuICB9XG5cbiAgb25JbnB1dChlOiBhbnkpIHtcbiAgICB0aGlzLl9wcm9jZXNzVmFsdWUoKTtcbiAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBvbkFycm93TGVmdChlOiBFdmVudCkge1xuICAgIGNvbnN0IGNwID0gdGhpcy5fZ2V0Q2FyZXRQb3MoZS50YXJnZXQgYXMgTm9kZSk7XG4gICAgaWYgKGNwID09PSAwKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5fZm9jdXNJbnB1dCgtMSk7XG4gICAgfVxuICB9XG4gIG9uQXJyb3dSaWdodChlOiBFdmVudCkge1xuICAgIGNvbnN0IGNwID0gdGhpcy5fZ2V0Q2FyZXRQb3MoZS50YXJnZXQgYXMgTm9kZSk7XG4gICAgaWYgKGNwID09PSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmlubmVyVGV4dC5sZW5ndGgpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLl9mb2N1c0lucHV0KDEpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGVsZXRlKGU6IEV2ZW50LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgY3AgPSB0aGlzLl9nZXRDYXJldFBvcyhlLnRhcmdldCBhcyBOb2RlKTtcbiAgICBpZiAoY3AgPT09IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCkuaW5uZXJUZXh0Lmxlbmd0aCkge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgLy8gcmVtb3ZlIG5leHQgdG9rZW5cbiAgICAgIGlmIChpbmRleCA8IHRoaXMuZm9ybVRva2Vucy5sZW5ndGggLSAyKSB7XG4gICAgICAgIHRoaXMuZm9ybVRva2Vucy5zcGxpY2UoaW5kZXggKyAxLCAxKTtcblxuICAgICAgICAvLyBpZiBwcmV2IHRva2VuIGlzIGFsc28gYSB0ZXh0IHRva2VuID0+IG1lcmdlXG4gICAgICAgIGNvbnN0IG5leHRJZHggPSBpbmRleCArIDE7XG4gICAgICAgIGlmIChuZXh0SWR4IDwgdGhpcy5mb3JtVG9rZW5zLmxlbmd0aCAmJiB0aGlzLmZvcm1Ub2tlbnNbbmV4dElkeF0udHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5mb3JtVG9rZW5zW2luZGV4XS5sYWJlbDtcbiAgICAgICAgICBjb25zdCBuZXh0Q29udGVudCA9IHRoaXMuZm9ybVRva2Vuc1tuZXh0SWR4XS5sYWJlbDtcbiAgICAgICAgICBjb25zdCBtZXJnZWRUb2tlbjogSW5wdXRUb2tlbiA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmZvcm1Ub2tlbnNbaW5kZXggKyAxXS5pZCxcbiAgICAgICAgICAgIGxhYmVsOiBgJHtjb250ZW50fSAke25leHRDb250ZW50fWAsXG4gICAgICAgICAgICB0eXBlOiB0aGlzLlRFWFRfVE9LRU5fVFlQRVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5mb3JtVG9rZW5zLnNwbGljZShpbmRleCArIDEsIDIsIG1lcmdlZFRva2VuKTtcblxuICAgICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pZD1cIiR7dGhpcy5mb3JtVG9rZW5zW2luZGV4ICsgMV0uaWR9XCJdYCk7XG4gICAgICAgICAgaWYgKGVsKSB7XG4gICAgICAgICAgICBlbC5pbm5lclRleHQgPSBtZXJnZWRUb2tlbi5sYWJlbDtcbiAgICAgICAgICAgIHRoaXMuX3NldENhcmV0UG9zKGVsLCBjb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkJhY2tzcGFjZShlOiBFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGNwID0gdGhpcy5fZ2V0Q2FyZXRQb3MoZS50YXJnZXQgYXMgTm9kZSk7XG4gICAgaWYgKGNwID09PSAwKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAvLyByZW1vdmUgcHJldiB0b2tlblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICB0aGlzLmZvcm1Ub2tlbnMuc3BsaWNlKGluZGV4IC0gMSwgMSk7XG4gICAgICAgIC8vIGlmIHByZXYgdG9rZW4gaXMgYWxzbyBhIHRleHQgdG9rZW4gPT4gbWVyZ2VcbiAgICAgICAgY29uc3QgcHJldklkeCA9IGluZGV4IC0gMjtcbiAgICAgICAgaWYgKHByZXZJZHggPj0gMCAmJiB0aGlzLmZvcm1Ub2tlbnNbcHJldklkeF0udHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5mb3JtVG9rZW5zW2luZGV4IC0gMV0ubGFiZWw7XG4gICAgICAgICAgY29uc3QgcHJldkNvbnRlbnQgPSB0aGlzLmZvcm1Ub2tlbnNbcHJldklkeF0ubGFiZWw7XG4gICAgICAgICAgY29uc3QgbWVyZ2VkVG9rZW46IElucHV0VG9rZW4gPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5mb3JtVG9rZW5zW3ByZXZJZHhdLmlkLFxuICAgICAgICAgICAgbGFiZWw6IGAke3ByZXZDb250ZW50fSAke2NvbnRlbnR9YCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuVEVYVF9UT0tFTl9UWVBFXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmZvcm1Ub2tlbnMuc3BsaWNlKHByZXZJZHgsIDIsIG1lcmdlZFRva2VuKTtcbiAgICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgfCBudWxsID0gKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihgW2RhdGEtaWQ9XCIke3RoaXMuZm9ybVRva2Vuc1twcmV2SWR4XS5pZH1cIl1gKTtcbiAgICAgICAgICBpZiAoZWwpIHtcbiAgICAgICAgICAgIGVsLmlubmVyVGV4dCA9IG1lcmdlZFRva2VuLmxhYmVsO1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZXRQb3MoZWwsIHByZXZDb250ZW50Lmxlbmd0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2ZvY3VzRmlyc3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZm9jdXNGaXJzdCgpIHtcbiAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgfCBudWxsID0gKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcihgW2NvbnRlbnRlZGl0YWJsZV1gKTtcbiAgICBpZiAoZWwpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWw/LmZvY3VzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzSW5wdXQob2Zmc2V0OiBudW1iZXIpIHtcbiAgICBjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IEFycmF5LmZyb20odGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjb250ZW50ZWRpdGFibGVdJykpO1xuICAgIGxldCBpID0gaW5wdXRzLmZpbmRJbmRleCgoaSkgPT4gaSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgaSA9IGkgKyBvZmZzZXQ7XG4gICAgaWYgKGkgPiBpbnB1dHMubGVuZ3RoIC0gMSkgaSA9IDA7XG4gICAgaWYgKGkgPCAwKSBpID0gaW5wdXRzLmxlbmd0aCAtIDE7XG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IGlucHV0c1tpXS5mb2N1cygpKTtcblxuICAgIHRoaXMuX3NldENhcmV0UG9zKGlucHV0c1tpXSwgb2Zmc2V0ID4gMCB8fCBpbnB1dHNbaV0uaW5uZXJUZXh0Lmxlbmd0aCA9PT0gMCA/IDAgOiBpbnB1dHNbaV0uaW5uZXJUZXh0Lmxlbmd0aCk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRDYXJldFBvcyhlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zOiBudW1iZXIpIHtcbiAgICBjb25zdCB0YXJnZXROb2RlID0gZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA/IGVsZW1lbnQuY2hpbGROb2Rlc1swXSA6IGVsZW1lbnQ7XG4gICAgY29uc3QgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNlbGVjdE5vZGUoZWxlbWVudCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQodGFyZ2V0Tm9kZSwgcG9zKTtcbiAgICByYW5nZS5zZXRFbmQodGFyZ2V0Tm9kZSwgcG9zKTtcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgc2VsZWN0aW9uIS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWxlY3Rpb24hLmFkZFJhbmdlKHJhbmdlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENhcmV0UG9zKG5vZGU6IE5vZGUpOiBudW1iZXIge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbiEuZ2V0UmFuZ2VBdCgwKTtcbiAgICBjb25zdCBjbG9uZWRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICBjbG9uZWRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7XG4gICAgY2xvbmVkUmFuZ2Uuc2V0RW5kKHJhbmdlLmVuZENvbnRhaW5lciwgcmFuZ2UuZW5kT2Zmc2V0KTtcbiAgICByZXR1cm4gY2xvbmVkUmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7XG4gIH1cblxuICBvbk9wdGlvblNlbGVjdChvOiBJbnB1dFRva2VuKSB7XG4gICAgbGV0IHRva2Vuc0FkZGVkID0gMDtcbiAgICBsZXQgdG9rZW5zUmVtb3ZlZCA9IDA7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuX2dldElucHV0VmFsdWUoKTtcbiAgICBjb25zdCB3b3JkVG9rZW5zOiBzdHJpbmdbXSA9IHRoaXMuX3Rva2VuaXplKGlucHV0VmFsdWUpO1xuICAgIGNvbnN0IGxhc3RXb3JkID0gd29yZFRva2Vuc1t3b3JkVG9rZW5zLmxlbmd0aCAtIDFdO1xuICAgIGlmIChsYXN0V29yZC5sZW5ndGggPT09IGlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZvcm1Ub2tlbnMucG9wKCk7XG4gICAgICB0b2tlbnNSZW1vdmVkKys7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtVG9rZW5zLnNwbGljZSh0aGlzLmZvY3VzZWRUb2tlbkluZGV4ICsgMSwgMCwgc3RydWN0dXJlZENsb25lKG8pKTtcbiAgICB0b2tlbnNBZGRlZCsrO1xuXG4gICAgY29uc3Qgc2hhZG93VG9rZW5zOiBJbnB1dFRva2VuW10gPSBbXTtcbiAgICAvLyBjaGVjayBmb3IgaW5iZXR3ZWVuIHRva2Vuc1xuICAgIGxldCB0eHRUb2tlbkNvdW50ID0gLTE7XG4gICAgdGhpcy5mb3JtVG9rZW5zLmZvckVhY2goKHQ6IElucHV0VG9rZW4sIGk6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHQudHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgICAgdHh0VG9rZW5Db3VudCsrO1xuICAgICAgICB0LmlkID0gdGhpcy5fdGV4dFRva2VuSWQodHh0VG9rZW5Db3VudCk7XG4gICAgICB9XG4gICAgICBzaGFkb3dUb2tlbnMucHVzaCh0KTtcbiAgICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMuZm9ybVRva2Vuc1tpICsgMV07XG4gICAgICBpZiAodC50eXBlICE9PSB0aGlzLlRFWFRfVE9LRU5fVFlQRSAmJiBuZXh0VG9rZW4gJiYgbmV4dFRva2VuLnR5cGUgIT09IHRoaXMuVEVYVF9UT0tFTl9UWVBFKSB7XG4gICAgICAgIC8vIGFkZCBpbmJldHdlZW4gdG9rZW5cbiAgICAgICAgdHh0VG9rZW5Db3VudCsrO1xuICAgICAgICBzaGFkb3dUb2tlbnMucHVzaCh0aGlzLl9uZXdUZXh0VG9rZW4odHh0VG9rZW5Db3VudCkpO1xuICAgICAgICB0b2tlbnNBZGRlZCsrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZm9ybVRva2Vuc1t0aGlzLmZvcm1Ub2tlbnMubGVuZ3RoIC0gMV0udHlwZSAhPT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpIHtcbiAgICAgIC8vIGFkZCBlbXB0eSB0ZXh0IHRva2VuIGF0IHRoZSBlbmRcbiAgICAgIHR4dFRva2VuQ291bnQrKztcbiAgICAgIHNoYWRvd1Rva2Vucy5wdXNoKHRoaXMuX25ld1RleHRUb2tlbih0eHRUb2tlbkNvdW50KSk7XG4gICAgICB0b2tlbnNBZGRlZCsrO1xuICAgIH1cbiAgICB0aGlzLmZvcm1Ub2tlbnMgPSBzaGFkb3dUb2tlbnM7XG4gICAgdGhpcy5faW5wdXRFbGVtZW50IS5pbm5lclRleHQgPSBpbnB1dFZhbHVlLnN1YnN0cmluZygwLCBpbnB1dFZhbHVlLmxlbmd0aCAtIGxhc3RXb3JkLmxlbmd0aCkudHJpbSgpO1xuICAgIHRoaXMuX2VtaXRDaGFuZ2UoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBmaTogJHt0aGlzLmZvY3VzZWRUb2tlbkluZGV4fSwgdGE6ICR7dG9rZW5zQWRkZWR9LCB0cjogJHt0b2tlbnNSZW1vdmVkfSwgbmU6ICR7dGhpcy5mb2N1c2VkVG9rZW5JbmRleCArICh0b2tlbnNBZGRlZCAtIHRva2Vuc1JlbW92ZWQpfWApO1xuXG4gICAgICB0aGlzLl9mb2N1c1Rva2VuSW5wdXQodGhpcy5mb2N1c2VkVG9rZW5JbmRleCArICh0b2tlbnNBZGRlZCAtIHRva2Vuc1JlbW92ZWQpKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2xvc2VPcHRpb25zKCk7XG4gIH1cblxuICBwcml2YXRlIF9mb2N1c1Rva2VuSW5wdXQoaW5kZXg/OiBudW1iZXIpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gJ2RpdjpsYXN0LWNoaWxkJyA6IGBkaXY6bnRoLWNoaWxkKCR7aW5kZXggKyAxfSlgO1xuICAgIGNvbnNvbGUubG9nKHNlbGVjdG9yKTtcblxuICAgIGNvbnN0IGxhc3RJbnB1dDogSFRNTEVsZW1lbnQgPSAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSBhcyBIVE1MRWxlbWVudDtcbiAgICBsYXN0SW5wdXQuZm9jdXMoKTtcbiAgICByZXR1cm4gbGFzdElucHV0O1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBfZm9jdXNJbnB1dCgpOiBIVE1MRWxlbWVudCB7XG4gIC8vICAgY29uc3QgbGFzdElucHV0OiBIVE1MRWxlbWVudCA9IChcbiAgLy8gICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudFxuICAvLyAgICkucXVlcnlTZWxlY3RvcignW2NvbnRlbnRlZGl0YWJsZV06bGFzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xuICAvLyAgIGxhc3RJbnB1dC5mb2N1cygpO1xuICAvLyAgIHJldHVybiBsYXN0SW5wdXQ7XG4gIC8vIH1cblxuICBvcGVuT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZiB8fCAhdGhpcy5hdXRvY29tcGxldGVWYWx1ZXMubGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5vcGVuKFxuICAgICAgdGhpcy5vcHRpb25zVGVtcGxhdGUoKSxcbiAgICAgIG51bGwsXG4gICAgICB7XG4gICAgICAgIGxpZ2h0RGlzbWlzczogdHJ1ZSxcbiAgICAgICAgbWF4SGVpZ2h0OiAnOTd2aCdcbiAgICAgIH0sXG4gICAgICB0aGlzLmVsUmVmXG4gICAgKTtcbiAgfVxuXG4gIGNsb3NlT3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3RlZEluZGV4ID0gLTE7XG4gICAgdGhpcy5hdXRvY29tcGxldGVWYWx1ZXMgPSBbXTtcbiAgfVxuXG4gIG9uVG9rZW5FbnRlcihlOiBFdmVudCkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXRDaGFuZ2UoZm9jdXNGaXJzdCA9IGZhbHNlKSB7XG4gICAgLy8gbmVlZCB0byBzZXQgdGltZW91dCBzbyBET00gY2hhbmdlcyBhcmUgYXBwbGllZCBiZWZvcmUgYWNjZXNzaW5nIGVsZW1lbnRzXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Ub2tlbnMuZm9yRWFjaCgodCkgPT4ge1xuICAgICAgICBpZiAodC50eXBlID09PSB0aGlzLlRFWFRfVE9LRU5fVFlQRSkge1xuICAgICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCB8IG51bGwgPSAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pZD1cIiR7dC5pZH1cIl1gKTtcbiAgICAgICAgICBpZiAoZWwpIHQubGFiZWwgPSBlbC5pbm5lclRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jaGFuZ2UuZW1pdChcbiAgICAgICAgdGhpcy5mb3JtVG9rZW5zXG4gICAgICAgICAgLmZpbHRlcigodDogSW5uZXJJbnB1dFRva2VuKSA9PiB0LnR5cGUgIT09IHRoaXMuVEVYVF9UT0tFTl9UWVBFIHx8IHQubGFiZWwubGVuZ3RoID4gMClcbiAgICAgICAgICAubWFwKCh0OiBJbm5lcklucHV0VG9rZW4pID0+ICh7XG4gICAgICAgICAgICBpZDogdC5pZCxcbiAgICAgICAgICAgIGxhYmVsOiB0LmxhYmVsLFxuICAgICAgICAgICAgdHlwZTogdC50eXBlXG4gICAgICAgICAgfSkpXG4gICAgICApO1xuICAgICAgaWYgKGZvY3VzRmlyc3QpIHRoaXMuX2ZvY3VzRmlyc3QoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX25ld1RleHRUb2tlbihpZHg/OiBudW1iZXIpOiBJbm5lcklucHV0VG9rZW4ge1xuICAgIGNvbnN0IGluZGV4ID0gaWR4ICE9PSB1bmRlZmluZWQgPyBpZHggOiB0aGlzLmZvcm1Ub2tlbnM/Lmxlbmd0aCA/IHRoaXMuZm9ybVRva2Vucy5maWx0ZXIoKHQpID0+IHQudHlwZSA9PT0gdGhpcy5URVhUX1RPS0VOX1RZUEUpLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLl90ZXh0VG9rZW5JZChpbmRleCksXG4gICAgICBsYWJlbDogJycsXG4gICAgICB0eXBlOiB0aGlzLlRFWFRfVE9LRU5fVFlQRVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF90ZXh0VG9rZW5JZChpOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdHh0XyR7aX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfdG9rZW5pemUodmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB3b3JkVG9rZW5zOiBzdHJpbmdbXSA9IHZhbHVlLnNwbGl0KC9cXFcrLykuZmlsdGVyKCh0OiBzdHJpbmcpID0+IHQ/Lmxlbmd0aCk7XG4gICAgcmV0dXJuIHdvcmRUb2tlbnM7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0RWxlbWVudCEuaW5uZXJUZXh0LnJlcGxhY2VBbGwoJyZuYnNwOycsICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Byb2Nlc3NWYWx1ZSgpIHtcbiAgICBjb25zdCB3b3JkVG9rZW5zOiBzdHJpbmdbXSA9IHRoaXMuX3Rva2VuaXplKHRoaXMuX2dldElucHV0VmFsdWUoKSk7XG4gICAgY29uc3QgbGFzdFdvcmQgPSB3b3JkVG9rZW5zW3dvcmRUb2tlbnMubGVuZ3RoIC0gMV07XG5cbiAgICB0aGlzLmF1dG9jb21wbGV0ZVZhbHVlcyA9XG4gICAgICAhbGFzdFdvcmQgfHwgbGFzdFdvcmQubGVuZ3RoIDwgMlxuICAgICAgICA/IFtdXG4gICAgICAgIDogdGhpcy50b2tlbnMoKS5maWx0ZXIoKHQ6IElucHV0VG9rZW4pID0+IGxhc3RXb3JkICYmIG5ldyBSZWdFeHAobGFzdFdvcmQsIHRoaXMuY2FzZVNlbnNpdGl2ZSgpID8gJycgOiAnaScpLnRlc3QodC5sYWJlbCkpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VsZWN0ZWRJbmRleCA9IHRoaXMuYXV0b2NvbXBsZXRlVmFsdWVzLmxlbmd0aCA/IDAgOiAtMTtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGVWYWx1ZXMubGVuZ3RoKSB0aGlzLm9wZW5PcHRpb25zKCk7XG4gICAgZWxzZSB0aGlzLmNsb3NlT3B0aW9ucygpO1xuICB9XG59XG4iLCI8IS0tIGZpIHt7Zm9jdXNlZFRva2VuSW5kZXh9fSAtLT5cblxuQGZvciAoZnQgb2YgZm9ybVRva2VuczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrICRpbmRleCkge1xuICBAaWYgKGZ0LnR5cGUgPT09IFRFWFRfVE9LRU5fVFlQRSkge1xuICAgIDxkaXZcbiAgICAgIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgW2F0dHIuZGF0YS1pZF09XCJmdC5pZFwiXG4gICAgICAoaW5wdXQpPVwib25JbnB1dCgkZXZlbnQpXCJcbiAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblRva2VuRW50ZXIoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd0xlZnQpPVwib25BcnJvd0xlZnQoJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bi5hcnJvd1JpZ2h0KT1cIm9uQXJyb3dSaWdodCgkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJvbkRlbGV0ZSgkZXZlbnQsIGkpXCJcbiAgICAgIChrZXlkb3duLmJhY2tzcGFjZSk9XCJvbkJhY2tzcGFjZSgkZXZlbnQsIGkpXCJcbiAgICA+PC9kaXY+XG4gIH0gQGVsc2Uge1xuICAgIEBpZiAodG9rZW5UZW1wbGF0ZSgpKSB7XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9rZW5UZW1wbGF0ZSgpITsgY29udGV4dDogeyAkaW1wbGljaXQ6IGZ0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJjaGlwXCI+e3sgZnQubGFiZWwgfX08L2Rpdj5cbiAgICB9XG4gIH1cbn1cblxuPG5nLXRlbXBsYXRlICNvcHRpb25zPlxuICA8eXZjLWF1dG9jb21wbGV0ZS1vcHRpb25zXG4gICAgY2xhc3M9XCJwb3BvdmVyIGFuaW1hdGVJblwiXG4gICAgW3ZhbHVlc109XCJhdXRvY29tcGxldGVWYWx1ZXNcIlxuICAgIFsoZm9jdXNlZEluZGV4KV09XCJhdXRvY29tcGxldGVTZWxlY3RlZEluZGV4XCJcbiAgICBbYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGVdPVwib3B0aW9uVGVtcGxhdGUoKSB8fCBudWxsXCJcbiAgICAob3B0aW9uU2VsZWN0KT1cIm9uT3B0aW9uU2VsZWN0KCRldmVudClcIlxuICAgIFtmaWVsZF09XCInbGFiZWwnXCJcbiAgPjwveXZjLWF1dG9jb21wbGV0ZS1vcHRpb25zPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4taW5wdXQuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24vc3JjL2xpYi9jb21wb25lbnRzL3Rva2VuLWlucHV0L3Rva2VuLWlucHV0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJbnB1dFRva2VuIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBJbm5lcklucHV0VG9rZW4gZXh0ZW5kcyBJbnB1dFRva2VuIHtcbiAgaXNJbmJldHdlZW5Ub2tlbj86IGJvb2xlYW47XG59XG4iXX0=
@@ -1,88 +0,0 @@
1
- import { Directive, ElementRef, HostBinding, Input, inject } from '@angular/core';
2
- import { Utils } from '@yuuvis/client-core';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * A directive that will overlay its host component with a translucent background
6
- * and a loading spinner once the condition resolves with true. This is useful for example to
7
- * prevent user intercation while component data is loading or some processing is done.
8
- *
9
- * It'll also set the `inert` attribute on the host element. This will disable the host and
10
- * all elements inside (like buttons, inputs etc.)
11
- *
12
- * @example
13
- * <div class="result-list" [yuvBusyOverlay]="waitingForServerResponse">...</div>
14
- *
15
- */
16
- export class BusyOverlayDirective {
17
- constructor() {
18
- this.stylePosition = 'initial';
19
- this.#elRef = inject(ElementRef);
20
- this.#overlayId = null;
21
- }
22
- #elRef;
23
- #overlayId;
24
- /**
25
- * The Boolean expression to evaluate as the condition for showing the busy overlay
26
- */
27
- set yuvBusyOverlay(b) {
28
- if (b === true) {
29
- this.#addBusyOverlay();
30
- }
31
- else if (this.#overlayId) {
32
- this.#removeBusyOverlay();
33
- }
34
- }
35
- #addBusyOverlay() {
36
- this.stylePosition = 'relative';
37
- const overlay = document.createElement('div');
38
- overlay.style.position = 'absolute';
39
- overlay.style.transition = 'opacity 200ms';
40
- overlay.style.opacity = '0';
41
- overlay.style.inset = '0';
42
- overlay.style.display = 'grid';
43
- overlay.style.alignItems = 'center';
44
- overlay.style.justifyContent = 'center';
45
- overlay.style.zIndex = '5';
46
- overlay.style.backgroundColor = 'var(--busy-overlay-background)';
47
- this.#overlayId = `p${Utils.uuid()}`;
48
- overlay.setAttribute('id', this.#overlayId);
49
- const spinner = document.createElement('div');
50
- spinner.setAttribute('class', 'yuv-loader');
51
- overlay.append(spinner);
52
- const el = this.#elRef.nativeElement;
53
- el.setAttribute('inert', '');
54
- el.append(overlay);
55
- setTimeout(() => {
56
- overlay.style.opacity = '1';
57
- });
58
- }
59
- #removeBusyOverlay() {
60
- const el = this.#elRef.nativeElement.querySelector(`#${this.#overlayId}`);
61
- if (el) {
62
- el.style.opacity = '0';
63
- setTimeout(() => {
64
- el.remove();
65
- }, 200);
66
- }
67
- this.#elRef.nativeElement.removeAttribute('inert');
68
- this.#overlayId = null;
69
- }
70
- ngOnInit() {
71
- this.stylePosition = getComputedStyle(this.#elRef.nativeElement).position;
72
- }
73
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BusyOverlayDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
74
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: BusyOverlayDirective, isStandalone: true, selector: "[yuvBusyOverlay]", inputs: { yuvBusyOverlay: "yuvBusyOverlay" }, host: { properties: { "style.position": "this.stylePosition" } }, ngImport: i0 }); }
75
- }
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BusyOverlayDirective, decorators: [{
77
- type: Directive,
78
- args: [{
79
- selector: '[yuvBusyOverlay]',
80
- standalone: true
81
- }]
82
- }], propDecorators: { stylePosition: [{
83
- type: HostBinding,
84
- args: ['style.position']
85
- }], yuvBusyOverlay: [{
86
- type: Input
87
- }] } });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzeS1vdmVybGF5LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uL3NyYy9saWIvZGlyZWN0aXZlcy9idXN5LW92ZXJsYXkuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFNUM7Ozs7Ozs7Ozs7O0dBV0c7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBSmpDO1FBS2lDLGtCQUFhLEdBQUcsU0FBUyxDQUFDO1FBRXpELFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUIsZUFBVSxHQUFrQixJQUFJLENBQUM7S0FxRGxDO0lBdkRDLE1BQU0sQ0FBc0I7SUFFNUIsVUFBVSxDQUF1QjtJQUNqQzs7T0FFRztJQUNILElBQWEsY0FBYyxDQUFDLENBQVU7UUFDcEMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQztRQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7UUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxnQ0FBZ0MsQ0FBQztRQUVqRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDckMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQTRCLENBQUM7UUFDcEQsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMxRSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2QsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDNUUsQ0FBQzsrR0F6RFUsb0JBQW9CO21HQUFwQixvQkFBb0I7OzRGQUFwQixvQkFBb0I7a0JBSmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzhCQUVnQyxhQUFhO3NCQUEzQyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFRaEIsY0FBYztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1jb3JlJztcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHdpbGwgb3ZlcmxheSBpdHMgaG9zdCBjb21wb25lbnQgd2l0aCBhIHRyYW5zbHVjZW50IGJhY2tncm91bmRcbiAqIGFuZCBhIGxvYWRpbmcgc3Bpbm5lciBvbmNlIHRoZSBjb25kaXRpb24gcmVzb2x2ZXMgd2l0aCB0cnVlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZXhhbXBsZSB0b1xuICogcHJldmVudCB1c2VyIGludGVyY2F0aW9uIHdoaWxlIGNvbXBvbmVudCBkYXRhIGlzIGxvYWRpbmcgb3Igc29tZSBwcm9jZXNzaW5nIGlzIGRvbmUuXG4gKlxuICogSXQnbGwgYWxzbyBzZXQgdGhlIGBpbmVydGAgYXR0cmlidXRlIG9uIHRoZSBob3N0IGVsZW1lbnQuIFRoaXMgd2lsbCBkaXNhYmxlIHRoZSBob3N0IGFuZFxuICogYWxsIGVsZW1lbnRzIGluc2lkZSAobGlrZSBidXR0b25zLCBpbnB1dHMgZXRjLilcbiAqXG4gKiBAZXhhbXBsZVxuICogPGRpdiBjbGFzcz1cInJlc3VsdC1saXN0XCIgW3l1dkJ1c3lPdmVybGF5XT1cIndhaXRpbmdGb3JTZXJ2ZXJSZXNwb25zZVwiPi4uLjwvZGl2PlxuICpcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3l1dkJ1c3lPdmVybGF5XScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQnVzeU92ZXJsYXlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnBvc2l0aW9uJykgc3R5bGVQb3NpdGlvbiA9ICdpbml0aWFsJztcblxuICAjZWxSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgI292ZXJsYXlJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgQm9vbGVhbiBleHByZXNzaW9uIHRvIGV2YWx1YXRlIGFzIHRoZSBjb25kaXRpb24gZm9yIHNob3dpbmcgdGhlIGJ1c3kgb3ZlcmxheVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHl1dkJ1c3lPdmVybGF5KGI6IGJvb2xlYW4pIHtcbiAgICBpZiAoYiA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy4jYWRkQnVzeU92ZXJsYXkoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuI292ZXJsYXlJZCkge1xuICAgICAgdGhpcy4jcmVtb3ZlQnVzeU92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICAjYWRkQnVzeU92ZXJsYXkoKSB7XG4gICAgdGhpcy5zdHlsZVBvc2l0aW9uID0gJ3JlbGF0aXZlJztcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgb3ZlcmxheS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgb3ZlcmxheS5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgMjAwbXMnO1xuICAgIG92ZXJsYXkuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICBvdmVybGF5LnN0eWxlLmluc2V0ID0gJzAnO1xuICAgIG92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdncmlkJztcbiAgICBvdmVybGF5LnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICBvdmVybGF5LnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XG4gICAgb3ZlcmxheS5zdHlsZS56SW5kZXggPSAnNSc7XG4gICAgb3ZlcmxheS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndmFyKC0tYnVzeS1vdmVybGF5LWJhY2tncm91bmQpJztcblxuICAgIHRoaXMuI292ZXJsYXlJZCA9IGBwJHtVdGlscy51dWlkKCl9YDtcbiAgICBvdmVybGF5LnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLiNvdmVybGF5SWQpO1xuICAgIGNvbnN0IHNwaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzcGlubmVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAneXV2LWxvYWRlcicpO1xuICAgIG92ZXJsYXkuYXBwZW5kKHNwaW5uZXIpO1xuICAgIGNvbnN0IGVsID0gdGhpcy4jZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBlbC5zZXRBdHRyaWJ1dGUoJ2luZXJ0JywgJycpO1xuICAgIGVsLmFwcGVuZChvdmVybGF5KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIG92ZXJsYXkuc3R5bGUub3BhY2l0eSA9ICcxJztcbiAgICB9KTtcbiAgfVxuXG4gICNyZW1vdmVCdXN5T3ZlcmxheSgpIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy4jb3ZlcmxheUlkfWApO1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuc3R5bGUub3BhY2l0eSA9ICcwJztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbC5yZW1vdmUoKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICAgIHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdpbmVydCcpO1xuICAgIHRoaXMuI292ZXJsYXlJZCA9IG51bGw7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN0eWxlUG9zaXRpb24gPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQpLnBvc2l0aW9uO1xuICB9XG59XG4iXX0=
@@ -1,61 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
- import { Subject } from 'rxjs';
4
- import { debounceTime } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- /**
7
- * Fixes the issue of 'click' event beeing triggered on 'doubleclick' by defining new outputs that
8
- * distinguish between single and double click.
9
- */
10
- export class ClickDoubleDirective {
11
- constructor() {
12
- this.debounceTime = 200;
13
- this.doubleClick = new EventEmitter();
14
- this.singleClick = new EventEmitter();
15
- this.clicksSubject = new Subject();
16
- this.clicksSubject.pipe(takeUntilDestroyed(), debounceTime(this.debounceTime)).subscribe({
17
- next: (event) => {
18
- if (event.type === 'click') {
19
- this.singleClick.emit(event);
20
- }
21
- else {
22
- this.doubleClick.emit(event);
23
- }
24
- }
25
- });
26
- }
27
- clickEvent(event) {
28
- event.preventDefault();
29
- event.stopPropagation();
30
- this.clicksSubject.next(event);
31
- }
32
- doubleClickEvent(event) {
33
- event.preventDefault();
34
- event.stopPropagation();
35
- this.clicksSubject.next(event);
36
- }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClickDoubleDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
38
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ClickDoubleDirective, isStandalone: true, selector: "[click.single],[click.double]", inputs: { debounceTime: "debounceTime" }, outputs: { doubleClick: "click.double", singleClick: "click.single" }, host: { listeners: { "click": "clickEvent($event)", "dblclick": "doubleClickEvent($event)" } }, ngImport: i0 }); }
39
- }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClickDoubleDirective, decorators: [{
41
- type: Directive,
42
- args: [{
43
- selector: '[click.single],[click.double]',
44
- standalone: true
45
- }]
46
- }], ctorParameters: () => [], propDecorators: { debounceTime: [{
47
- type: Input
48
- }], doubleClick: [{
49
- type: Output,
50
- args: ['click.double']
51
- }], singleClick: [{
52
- type: Output,
53
- args: ['click.single']
54
- }], clickEvent: [{
55
- type: HostListener,
56
- args: ['click', ['$event']]
57
- }], doubleClickEvent: [{
58
- type: HostListener,
59
- args: ['dblclick', ['$event']]
60
- }] } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stZG91YmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uL3NyYy9saWIvZGlyZWN0aXZlcy9jbGljay1kb3VibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU5Qzs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sb0JBQW9CO0lBTy9CO1FBTlMsaUJBQVksR0FBRyxHQUFHLENBQUM7UUFDSixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWpELGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQWMsQ0FBQztRQUdoRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDdkYsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBaUI7UUFDaEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOytHQTlCVSxvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7d0RBRVUsWUFBWTtzQkFBcEIsS0FBSztnQkFDa0IsV0FBVztzQkFBbEMsTUFBTTt1QkFBQyxjQUFjO2dCQUNFLFdBQVc7c0JBQWxDLE1BQU07dUJBQUMsY0FBYztnQkFpQnRCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT2pDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuLyoqXG4gKiBGaXhlcyB0aGUgaXNzdWUgb2YgJ2NsaWNrJyBldmVudCBiZWVpbmcgdHJpZ2dlcmVkIG9uICdkb3VibGVjbGljaycgYnkgZGVmaW5pbmcgbmV3IG91dHB1dHMgdGhhdFxuICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBzaW5nbGUgYW5kIGRvdWJsZSBjbGljay5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2NsaWNrLnNpbmdsZV0sW2NsaWNrLmRvdWJsZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENsaWNrRG91YmxlRGlyZWN0aXZlIHtcbiAgQElucHV0KCkgZGVib3VuY2VUaW1lID0gMjAwO1xuICBAT3V0cHV0KCdjbGljay5kb3VibGUnKSBkb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnY2xpY2suc2luZ2xlJykgc2luZ2xlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBjbGlja3NTdWJqZWN0ID0gbmV3IFN1YmplY3Q8TW91c2VFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsaWNrc1N1YmplY3QucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSwgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgIHRoaXMuc2luZ2xlQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kb3VibGVDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICBjbGlja0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsaWNrc1N1YmplY3QubmV4dChldmVudCk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbJyRldmVudCddKVxuICBkb3VibGVDbGlja0V2ZW50KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsaWNrc1N1YmplY3QubmV4dChldmVudCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,56 +0,0 @@
1
- import { Directive, ElementRef, NgZone, inject, output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- /**
4
- * Directive to watch the size of an element inside the DOM. Usefull for example to provide
5
- * a different layout (different components) depending on the available screen estate. You
6
- * should first try to use CSS container queries but somtimes you need a different set of
7
- * components to be loaded for a certain component size.
8
- *
9
- * Let's say you have components designed for bigger screens. You do not want to load them
10
- * if there is not enough space for them. So you rather load components that are designed to
11
- * take less space by providing the best user experience on smaller devices.
12
- *
13
- * ```html
14
- * <div yuvContainerSize (containerHeight)="onContainerResize($event)" (containerWidth)="onContainerResize($event)"></div>
15
- * ```
16
- *
17
- */
18
- export class ContainerSizeDirective {
19
- constructor() {
20
- this.elRef = inject(ElementRef);
21
- this.ngZone = inject(NgZone);
22
- this.containerHeight = output();
23
- this.containerWidth = output();
24
- this._resizeObserver = new ResizeObserver((entries) => {
25
- const size = entries[0].borderBoxSize[0];
26
- if (!this._size || size.blockSize !== this._size.blockSize) {
27
- this._emit(size.blockSize, true);
28
- }
29
- if (!this._size || size.inlineSize !== this._size.inlineSize) {
30
- this._emit(size.inlineSize);
31
- }
32
- this._size = size;
33
- });
34
- this._resizeObserver.observe(this.elRef.nativeElement);
35
- }
36
- _emit(value, isHeight = false) {
37
- // ResizeObserver callback is not covered by change detection
38
- // so it has to be executed withing ngZone
39
- this.ngZone.run(() => {
40
- (isHeight ? this.containerHeight : this.containerWidth).emit(value);
41
- });
42
- }
43
- ngOnDestroy() {
44
- this._resizeObserver.unobserve(this.elRef.nativeElement);
45
- }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContainerSizeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
47
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: ContainerSizeDirective, isStandalone: true, selector: "[yuvContainerSize]", outputs: { containerHeight: "containerHeight", containerWidth: "containerWidth" }, ngImport: i0 }); }
48
- }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContainerSizeDirective, decorators: [{
50
- type: Directive,
51
- args: [{
52
- selector: '[yuvContainerSize]',
53
- standalone: true
54
- }]
55
- }], ctorParameters: () => [] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXNpemUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay9jb21tb24vc3JjL2xpYi9kaXJlY3RpdmVzL2NvbnRhaW5lci1zaXplLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFekY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFLSCxNQUFNLE9BQU8sc0JBQXNCO0lBbUJqQztRQWxCUSxVQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNCLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEMsb0JBQWUsR0FBRyxNQUFNLEVBQVUsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLE1BQU0sRUFBVSxDQUFDO1FBRzFCLG9CQUFlLEdBQUcsSUFBSSxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUdELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFhLEVBQUUsUUFBUSxHQUFHLEtBQUs7UUFDM0MsNkRBQTZEO1FBQzdELDBDQUEwQztRQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0QsQ0FBQzsrR0FqQ1Usc0JBQXNCO21HQUF0QixzQkFBc0I7OzRGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtvQkFDOUIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBOZ1pvbmUsIE9uRGVzdHJveSwgaW5qZWN0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gd2F0Y2ggdGhlIHNpemUgb2YgYW4gZWxlbWVudCBpbnNpZGUgdGhlIERPTS4gVXNlZnVsbCBmb3IgZXhhbXBsZSB0byBwcm92aWRlXG4gKiBhIGRpZmZlcmVudCBsYXlvdXQgKGRpZmZlcmVudCBjb21wb25lbnRzKSBkZXBlbmRpbmcgb24gdGhlIGF2YWlsYWJsZSBzY3JlZW4gZXN0YXRlLiBZb3VcbiAqIHNob3VsZCBmaXJzdCB0cnkgdG8gdXNlIENTUyBjb250YWluZXIgcXVlcmllcyBidXQgc29tdGltZXMgeW91IG5lZWQgYSBkaWZmZXJlbnQgc2V0IG9mXG4gKiBjb21wb25lbnRzIHRvIGJlIGxvYWRlZCBmb3IgYSBjZXJ0YWluIGNvbXBvbmVudCBzaXplLlxuICpcbiAqIExldCdzIHNheSB5b3UgaGF2ZSBjb21wb25lbnRzIGRlc2lnbmVkIGZvciBiaWdnZXIgc2NyZWVucy4gWW91IGRvIG5vdCB3YW50IHRvIGxvYWQgdGhlbVxuICogaWYgdGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBmb3IgdGhlbS4gU28geW91IHJhdGhlciBsb2FkIGNvbXBvbmVudHMgdGhhdCBhcmUgZGVzaWduZWQgdG9cbiAqIHRha2UgbGVzcyBzcGFjZSBieSBwcm92aWRpbmcgdGhlIGJlc3QgdXNlciBleHBlcmllbmNlIG9uIHNtYWxsZXIgZGV2aWNlcy5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IHl1dkNvbnRhaW5lclNpemUgKGNvbnRhaW5lckhlaWdodCk9XCJvbkNvbnRhaW5lclJlc2l6ZSgkZXZlbnQpXCIgKGNvbnRhaW5lcldpZHRoKT1cIm9uQ29udGFpbmVyUmVzaXplKCRldmVudClcIj48L2Rpdj5cbiAqIGBgYFxuICpcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3l1dkNvbnRhaW5lclNpemVdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBDb250YWluZXJTaXplRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBjb250YWluZXJIZWlnaHQgPSBvdXRwdXQ8bnVtYmVyPigpO1xuICBjb250YWluZXJXaWR0aCA9IG91dHB1dDxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBfc2l6ZT86IFJlc2l6ZU9ic2VydmVyU2l6ZTtcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICBjb25zdCBzaXplID0gZW50cmllc1swXS5ib3JkZXJCb3hTaXplWzBdO1xuICAgIGlmICghdGhpcy5fc2l6ZSB8fCBzaXplLmJsb2NrU2l6ZSAhPT0gdGhpcy5fc2l6ZS5ibG9ja1NpemUpIHtcbiAgICAgIHRoaXMuX2VtaXQoc2l6ZS5ibG9ja1NpemUsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX3NpemUgfHwgc2l6ZS5pbmxpbmVTaXplICE9PSB0aGlzLl9zaXplLmlubGluZVNpemUpIHtcbiAgICAgIHRoaXMuX2VtaXQoc2l6ZS5pbmxpbmVTaXplKTtcbiAgICB9XG4gICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgX2VtaXQodmFsdWU6IG51bWJlciwgaXNIZWlnaHQgPSBmYWxzZSkge1xuICAgIC8vIFJlc2l6ZU9ic2VydmVyIGNhbGxiYWNrIGlzIG5vdCBjb3ZlcmVkIGJ5IGNoYW5nZSBkZXRlY3Rpb25cbiAgICAvLyBzbyBpdCBoYXMgdG8gYmUgZXhlY3V0ZWQgd2l0aGluZyBuZ1pvbmVcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgKGlzSGVpZ2h0ID8gdGhpcy5jb250YWluZXJIZWlnaHQgOiB0aGlzLmNvbnRhaW5lcldpZHRoKS5lbWl0KHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG59XG4iXX0=