@yuuvis/client-framework 0.6.5

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 (392) hide show
  1. package/README.md +62 -0
  2. package/actions/README.md +3 -0
  3. package/actions/index.d.ts +6 -0
  4. package/actions/lib/actions/copy-action/copy-action.d.ts +17 -0
  5. package/actions/lib/actions/cut-action/cut-action.d.ts +17 -0
  6. package/actions/lib/actions/delete-action/delete/delete.component.d.ts +22 -0
  7. package/actions/lib/actions/delete-action/delete-action.d.ts +17 -0
  8. package/actions/lib/actions/download-action/download-action.d.ts +17 -0
  9. package/actions/lib/actions.icon.d.ts +7 -0
  10. package/actions/lib/actions.interface.d.ts +86 -0
  11. package/actions/lib/actions.module.d.ts +8 -0
  12. package/actions/lib/actions.service.d.ts +38 -0
  13. package/actions/lib/components/contextmenu/contextmenu.component.d.ts +11 -0
  14. package/app-bar/README.md +3 -0
  15. package/app-bar/index.d.ts +1 -0
  16. package/app-bar/lib/app-bar.component.d.ts +47 -0
  17. package/clipboard/README.md +3 -0
  18. package/clipboard/index.d.ts +1 -0
  19. package/clipboard/lib/clipboard.component.d.ts +16 -0
  20. package/common/README.md +3 -0
  21. package/common/index.d.ts +5 -0
  22. package/common/lib/components/focus-indicator/focus-indicator.component.d.ts +7 -0
  23. package/common/lib/components/token-input/token-input.component.d.ts +55 -0
  24. package/common/lib/components/token-input/token-input.interface.d.ts +8 -0
  25. package/common/lib/directives/busy-overlay.directive.d.ts +25 -0
  26. package/common/lib/directives/click-double.directive.d.ts +17 -0
  27. package/common/lib/directives/container-size.directive.d.ts +30 -0
  28. package/common/lib/directives/drag-select.directive.d.ts +21 -0
  29. package/common/lib/directives/file-drop-zone/file-drop-zone.directive.d.ts +18 -0
  30. package/common/lib/directives/file-drop-zone/file-drop-zone.interface.d.ts +5 -0
  31. package/common/lib/directives/focus-within.directive.d.ts +36 -0
  32. package/common/lib/directives/index.d.ts +8 -0
  33. package/common/lib/directives/light-dismiss.directive.d.ts +19 -0
  34. package/common/lib/directives/longpress.directive.d.ts +13 -0
  35. package/common/lib/directives/noop-value-accessor.directive.d.ts +10 -0
  36. package/esm2022/actions/index.mjs +7 -0
  37. package/esm2022/actions/lib/actions/copy-action/copy-action.mjs +31 -0
  38. package/esm2022/actions/lib/actions/cut-action/cut-action.mjs +30 -0
  39. package/esm2022/actions/lib/actions/delete-action/delete/delete.component.mjs +67 -0
  40. package/esm2022/actions/lib/actions/delete-action/delete-action.mjs +44 -0
  41. package/esm2022/actions/lib/actions/download-action/download-action.mjs +33 -0
  42. package/esm2022/actions/lib/actions.icon.mjs +8 -0
  43. package/esm2022/actions/lib/actions.interface.mjs +19 -0
  44. package/esm2022/actions/lib/actions.module.mjs +16 -0
  45. package/esm2022/actions/lib/actions.service.mjs +89 -0
  46. package/esm2022/actions/lib/components/contextmenu/contextmenu.component.mjs +27 -0
  47. package/esm2022/actions/yuuvis-client-framework-actions.mjs +5 -0
  48. package/esm2022/app-bar/index.mjs +2 -0
  49. package/esm2022/app-bar/lib/app-bar.component.mjs +89 -0
  50. package/esm2022/app-bar/yuuvis-client-framework-app-bar.mjs +5 -0
  51. package/esm2022/clipboard/index.mjs +2 -0
  52. package/esm2022/clipboard/lib/clipboard.component.mjs +48 -0
  53. package/esm2022/clipboard/yuuvis-client-framework-clipboard.mjs +5 -0
  54. package/esm2022/common/index.mjs +6 -0
  55. package/esm2022/common/lib/components/focus-indicator/focus-indicator.component.mjs +41 -0
  56. package/esm2022/common/lib/components/token-input/token-input.component.mjs +324 -0
  57. package/esm2022/common/lib/components/token-input/token-input.interface.mjs +2 -0
  58. package/esm2022/common/lib/directives/busy-overlay.directive.mjs +88 -0
  59. package/esm2022/common/lib/directives/click-double.directive.mjs +61 -0
  60. package/esm2022/common/lib/directives/container-size.directive.mjs +56 -0
  61. package/esm2022/common/lib/directives/drag-select.directive.mjs +114 -0
  62. package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.directive.mjs +153 -0
  63. package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.interface.mjs +2 -0
  64. package/esm2022/common/lib/directives/focus-within.directive.mjs +81 -0
  65. package/esm2022/common/lib/directives/index.mjs +9 -0
  66. package/esm2022/common/lib/directives/light-dismiss.directive.mjs +44 -0
  67. package/esm2022/common/lib/directives/longpress.directive.mjs +36 -0
  68. package/esm2022/common/lib/directives/noop-value-accessor.directive.mjs +42 -0
  69. package/esm2022/common/yuuvis-client-framework-common.mjs +5 -0
  70. package/esm2022/forms/index.mjs +19 -0
  71. package/esm2022/forms/lib/elements/catalog/catalog.component.mjs +118 -0
  72. package/esm2022/forms/lib/elements/datetime/datetime.component.mjs +82 -0
  73. package/esm2022/forms/lib/elements/datetime-range/datetime-range.component.mjs +166 -0
  74. package/esm2022/forms/lib/elements/number/number.component.mjs +195 -0
  75. package/esm2022/forms/lib/elements/number-range/number-range.component.mjs +176 -0
  76. package/esm2022/forms/lib/elements/organization/organization.component.mjs +268 -0
  77. package/esm2022/forms/lib/elements/string/string.component.mjs +254 -0
  78. package/esm2022/forms/lib/form-input/form-input.component.mjs +88 -0
  79. package/esm2022/forms/lib/forms.module.mjs +58 -0
  80. package/esm2022/forms/yuuvis-client-framework-forms.mjs +5 -0
  81. package/esm2022/icons/index.mjs +4 -0
  82. package/esm2022/icons/lib/icon.service.mjs +59 -0
  83. package/esm2022/icons/lib/icons.mjs +31 -0
  84. package/esm2022/icons/lib/object-type-icon/object-type-icon.component.mjs +29 -0
  85. package/esm2022/icons/yuuvis-client-framework-icons.mjs +5 -0
  86. package/esm2022/index.mjs +2 -0
  87. package/esm2022/lib/yuuvis-client-framework.module.mjs +15 -0
  88. package/esm2022/list/index.mjs +3 -0
  89. package/esm2022/list/lib/list-item.directive.mjs +72 -0
  90. package/esm2022/list/lib/list.component.mjs +133 -0
  91. package/esm2022/list/yuuvis-client-framework-list.mjs +5 -0
  92. package/esm2022/metadata-form/index.mjs +4 -0
  93. package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +31 -0
  94. package/esm2022/metadata-form/lib/metadata-form-element-registry.service.mjs +99 -0
  95. package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +126 -0
  96. package/esm2022/metadata-form/lib/object-metadata-element-template.directive.mjs +52 -0
  97. package/esm2022/metadata-form/yuuvis-client-framework-metadata-form.mjs +5 -0
  98. package/esm2022/object-details/index.mjs +7 -0
  99. package/esm2022/object-details/lib/object-audit/object-audit.component.mjs +195 -0
  100. package/esm2022/object-details/lib/object-details-shell/object-details-shell.component.mjs +127 -0
  101. package/esm2022/object-details/lib/object-details.component.mjs +61 -0
  102. package/esm2022/object-details/lib/object-metadata/form-section-group.pipe.mjs +17 -0
  103. package/esm2022/object-details/lib/object-metadata/object-metadata.component.mjs +201 -0
  104. package/esm2022/object-details/lib/object-metadata/object-metadata.interface.mjs +2 -0
  105. package/esm2022/object-details/yuuvis-client-framework-object-details.mjs +5 -0
  106. package/esm2022/object-flavor/index.mjs +6 -0
  107. package/esm2022/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.mjs +25 -0
  108. package/esm2022/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.mjs +21 -0
  109. package/esm2022/object-flavor/lib/flavor-chip/flavor-chip.component.mjs +35 -0
  110. package/esm2022/object-flavor/lib/object-flavor/object-flavor.component.mjs +93 -0
  111. package/esm2022/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.mjs +43 -0
  112. package/esm2022/object-flavor/yuuvis-client-framework-object-flavor.mjs +5 -0
  113. package/esm2022/object-form/index.mjs +5 -0
  114. package/esm2022/object-form/lib/form-scripting.api.interface.mjs +2 -0
  115. package/esm2022/object-form/lib/form-scripting.service.mjs +160 -0
  116. package/esm2022/object-form/lib/object-form-element/object-form-element.component.mjs +87 -0
  117. package/esm2022/object-form/lib/object-form-extension.interface.mjs +36 -0
  118. package/esm2022/object-form/lib/object-form-group/object-form-group.component.mjs +85 -0
  119. package/esm2022/object-form/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.mjs +23 -0
  120. package/esm2022/object-form/lib/object-form-script/object-form-script.service.mjs +115 -0
  121. package/esm2022/object-form/lib/object-form-script/object-form-scripting-scope.mjs +251 -0
  122. package/esm2022/object-form/lib/object-form-translate.service.mjs +73 -0
  123. package/esm2022/object-form/lib/object-form.component.mjs +627 -0
  124. package/esm2022/object-form/lib/object-form.interface.mjs +9 -0
  125. package/esm2022/object-form/lib/object-form.model.mjs +20 -0
  126. package/esm2022/object-form/lib/object-form.service.mjs +127 -0
  127. package/esm2022/object-form/lib/object-form.utils.mjs +55 -0
  128. package/esm2022/object-form/lib/object-form.validation.mjs +48 -0
  129. package/esm2022/object-form/yuuvis-client-framework-object-form.mjs +5 -0
  130. package/esm2022/object-preview/index.mjs +3 -0
  131. package/esm2022/object-preview/lib/components/index.mjs +3 -0
  132. package/esm2022/object-preview/lib/components/object-email-preview/object-email-preview.component.mjs +45 -0
  133. package/esm2022/object-preview/lib/components/object-preview/object-preview.component.mjs +78 -0
  134. package/esm2022/object-preview/lib/services/object-preview.service.mjs +92 -0
  135. package/esm2022/object-preview/yuuvis-client-framework-object-preview.mjs +5 -0
  136. package/esm2022/object-summary/index.mjs +5 -0
  137. package/esm2022/object-summary/lib/multi-object-summary/multi-object-summary.component.mjs +33 -0
  138. package/esm2022/object-summary/lib/object-summary/object-summary.component.mjs +273 -0
  139. package/esm2022/object-summary/lib/object-summary-data/object-summary-data.component.mjs +80 -0
  140. package/esm2022/object-summary/lib/object-summary.module.mjs +15 -0
  141. package/esm2022/object-summary/yuuvis-client-framework-object-summary.mjs +5 -0
  142. package/esm2022/pagination/index.mjs +3 -0
  143. package/esm2022/pagination/lib/pagination.component.mjs +48 -0
  144. package/esm2022/pagination/lib/pagination.interface.mjs +2 -0
  145. package/esm2022/pagination/yuuvis-client-framework-pagination.mjs +5 -0
  146. package/esm2022/panel/index.mjs +2 -0
  147. package/esm2022/panel/lib/panel.component.mjs +20 -0
  148. package/esm2022/panel/yuuvis-client-framework-panel.mjs +5 -0
  149. package/esm2022/renderer/index.mjs +11 -0
  150. package/esm2022/renderer/lib/property-renderer/abstract.renderer.mjs +29 -0
  151. package/esm2022/renderer/lib/property-renderer/datetime.renderer.mjs +13 -0
  152. package/esm2022/renderer/lib/property-renderer/decimal.renderer.component.mjs +12 -0
  153. package/esm2022/renderer/lib/property-renderer/filesize.renderer.component.mjs +28 -0
  154. package/esm2022/renderer/lib/property-renderer/icon.renderer.component.mjs +23 -0
  155. package/esm2022/renderer/lib/property-renderer/integer.renderer.component.mjs +12 -0
  156. package/esm2022/renderer/lib/property-renderer/organization.renderer.mjs +19 -0
  157. package/esm2022/renderer/lib/property-renderer/string.renderer.component.mjs +12 -0
  158. package/esm2022/renderer/lib/property-renderer/unknown.renderer.mjs +12 -0
  159. package/esm2022/renderer/lib/renderer.directive.mjs +51 -0
  160. package/esm2022/renderer/lib/services/renderer/renderer.interface.mjs +2 -0
  161. package/esm2022/renderer/lib/services/renderer/renderer.service.mjs +84 -0
  162. package/esm2022/renderer/yuuvis-client-framework-renderer.mjs +5 -0
  163. package/esm2022/sequence-list/index.mjs +6 -0
  164. package/esm2022/sequence-list/lib/due-date-picker/due-date-picker.component.mjs +99 -0
  165. package/esm2022/sequence-list/lib/sequence-list-template-manage/sequence-list-template-manage.component.mjs +183 -0
  166. package/esm2022/sequence-list/lib/sequence-list-templates/sequence-list-templates.component.mjs +114 -0
  167. package/esm2022/sequence-list/lib/sequence-list.component.mjs +146 -0
  168. package/esm2022/sequence-list/lib/sequence-list.interface.mjs +2 -0
  169. package/esm2022/sequence-list/yuuvis-client-framework-sequence-list.mjs +5 -0
  170. package/esm2022/simple-search/index.mjs +3 -0
  171. package/esm2022/simple-search/lib/simple-search/simple-search.component.mjs +111 -0
  172. package/esm2022/simple-search/lib/simple-search/simple-search.interface.mjs +2 -0
  173. package/esm2022/simple-search/yuuvis-client-framework-simple-search.mjs +5 -0
  174. package/esm2022/tile-list/index.mjs +11 -0
  175. package/esm2022/tile-list/lib/tile/tile.component.mjs +53 -0
  176. package/esm2022/tile-list/lib/tile-config/action-select/action-select.component.mjs +22 -0
  177. package/esm2022/tile-list/lib/tile-config/icon-select/icon-select.component.mjs +33 -0
  178. package/esm2022/tile-list/lib/tile-config/property-select/property-select.component.mjs +91 -0
  179. package/esm2022/tile-list/lib/tile-config/tile-config-tile/tile-config-tile.component.mjs +66 -0
  180. package/esm2022/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.mjs +46 -0
  181. package/esm2022/tile-list/lib/tile-config/tile-config.component.mjs +156 -0
  182. package/esm2022/tile-list/lib/tile-extension/directive/tile-extension.directive.mjs +37 -0
  183. package/esm2022/tile-list/lib/tile-extension/extensions/email.extension.mjs +42 -0
  184. package/esm2022/tile-list/lib/tile-extension/tile-extension.service.mjs +35 -0
  185. package/esm2022/tile-list/lib/tile-list/tile-list.component.mjs +510 -0
  186. package/esm2022/tile-list/lib/tile-list/tile-list.interface.mjs +2 -0
  187. package/esm2022/tile-list/yuuvis-client-framework-tile-list.mjs +5 -0
  188. package/esm2022/token-search/index.mjs +3 -0
  189. package/esm2022/token-search/token-search.component.mjs +78 -0
  190. package/esm2022/token-search/token-search.interface.mjs +2 -0
  191. package/esm2022/token-search/yuuvis-client-framework-token-search.mjs +5 -0
  192. package/esm2022/tree/index.mjs +3 -0
  193. package/esm2022/tree/lib/tree-node/tree-node.component.mjs +65 -0
  194. package/esm2022/tree/lib/tree.component.mjs +148 -0
  195. package/esm2022/tree/lib/tree.interface.mjs +2 -0
  196. package/esm2022/tree/lib/tree.service.mjs +95 -0
  197. package/esm2022/tree/yuuvis-client-framework-tree.mjs +5 -0
  198. package/esm2022/upload-progress/index.mjs +2 -0
  199. package/esm2022/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.mjs +49 -0
  200. package/esm2022/upload-progress/lib/upload-progress/upload-progress.component.mjs +37 -0
  201. package/esm2022/upload-progress/yuuvis-client-framework-upload-progress.mjs +5 -0
  202. package/esm2022/user-avatar/index.mjs +3 -0
  203. package/esm2022/user-avatar/lib/user-avatar.component.mjs +69 -0
  204. package/esm2022/user-avatar/lib/user-avatar.module.mjs +24 -0
  205. package/esm2022/user-avatar/yuuvis-client-framework-user-avatar.mjs +5 -0
  206. package/esm2022/yuuvis-client-framework.mjs +5 -0
  207. package/fesm2022/yuuvis-client-framework-actions.mjs +333 -0
  208. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -0
  209. package/fesm2022/yuuvis-client-framework-app-bar.mjs +96 -0
  210. package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -0
  211. package/fesm2022/yuuvis-client-framework-clipboard.mjs +55 -0
  212. package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -0
  213. package/fesm2022/yuuvis-client-framework-common.mjs +1020 -0
  214. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -0
  215. package/fesm2022/yuuvis-client-framework-forms.mjs +1355 -0
  216. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -0
  217. package/fesm2022/yuuvis-client-framework-icons.mjs +123 -0
  218. package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -0
  219. package/fesm2022/yuuvis-client-framework-list.mjs +209 -0
  220. package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -0
  221. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +302 -0
  222. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -0
  223. package/fesm2022/yuuvis-client-framework-object-details.mjs +583 -0
  224. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -0
  225. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +200 -0
  226. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -0
  227. package/fesm2022/yuuvis-client-framework-object-form.mjs +1664 -0
  228. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -0
  229. package/fesm2022/yuuvis-client-framework-object-preview.mjs +213 -0
  230. package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -0
  231. package/fesm2022/yuuvis-client-framework-object-summary.mjs +397 -0
  232. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -0
  233. package/fesm2022/yuuvis-client-framework-pagination.mjs +55 -0
  234. package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -0
  235. package/fesm2022/yuuvis-client-framework-panel.mjs +27 -0
  236. package/fesm2022/yuuvis-client-framework-panel.mjs.map +1 -0
  237. package/fesm2022/yuuvis-client-framework-renderer.mjs +262 -0
  238. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -0
  239. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +519 -0
  240. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -0
  241. package/fesm2022/yuuvis-client-framework-simple-search.mjs +118 -0
  242. package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -0
  243. package/fesm2022/yuuvis-client-framework-tile-list.mjs +1036 -0
  244. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -0
  245. package/fesm2022/yuuvis-client-framework-token-search.mjs +85 -0
  246. package/fesm2022/yuuvis-client-framework-token-search.mjs.map +1 -0
  247. package/fesm2022/yuuvis-client-framework-tree.mjs +307 -0
  248. package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -0
  249. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +84 -0
  250. package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -0
  251. package/fesm2022/yuuvis-client-framework-user-avatar.mjs +96 -0
  252. package/fesm2022/yuuvis-client-framework-user-avatar.mjs.map +1 -0
  253. package/fesm2022/yuuvis-client-framework.mjs +22 -0
  254. package/fesm2022/yuuvis-client-framework.mjs.map +1 -0
  255. package/forms/README.md +3 -0
  256. package/forms/index.d.ts +9 -0
  257. package/forms/lib/elements/catalog/catalog.component.d.ts +68 -0
  258. package/forms/lib/elements/datetime/datetime.component.d.ts +32 -0
  259. package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +51 -0
  260. package/forms/lib/elements/number/number.component.d.ts +77 -0
  261. package/forms/lib/elements/number-range/number-range.component.d.ts +66 -0
  262. package/forms/lib/elements/organization/organization.component.d.ts +93 -0
  263. package/forms/lib/elements/string/string.component.d.ts +104 -0
  264. package/forms/lib/form-input/form-input.component.d.ts +48 -0
  265. package/forms/lib/forms.module.d.ts +16 -0
  266. package/icons/README.md +5 -0
  267. package/icons/index.d.ts +3 -0
  268. package/icons/lib/icon.service.d.ts +38 -0
  269. package/icons/lib/icons.d.ts +1 -0
  270. package/icons/lib/object-type-icon/object-type-icon.component.d.ts +11 -0
  271. package/index.d.ts +1 -0
  272. package/lib/yuuvis-client-framework.module.d.ts +7 -0
  273. package/list/README.md +3 -0
  274. package/list/index.d.ts +2 -0
  275. package/list/lib/list-item.directive.d.ts +15 -0
  276. package/list/lib/list.component.d.ts +36 -0
  277. package/metadata-form/README.md +21 -0
  278. package/metadata-form/index.d.ts +3 -0
  279. package/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.d.ts +5 -0
  280. package/metadata-form/lib/metadata-form-element-registry.service.d.ts +47 -0
  281. package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +31 -0
  282. package/metadata-form/lib/object-metadata-element-template.directive.d.ts +27 -0
  283. package/object-details/README.md +28 -0
  284. package/object-details/index.d.ts +6 -0
  285. package/object-details/lib/object-audit/object-audit.component.d.ts +59 -0
  286. package/object-details/lib/object-details-shell/object-details-shell.component.d.ts +51 -0
  287. package/object-details/lib/object-details.component.d.ts +36 -0
  288. package/object-details/lib/object-metadata/form-section-group.pipe.d.ts +8 -0
  289. package/object-details/lib/object-metadata/object-metadata.component.d.ts +48 -0
  290. package/object-details/lib/object-metadata/object-metadata.interface.d.ts +26 -0
  291. package/object-flavor/README.md +3 -0
  292. package/object-flavor/index.d.ts +5 -0
  293. package/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.d.ts +12 -0
  294. package/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.d.ts +12 -0
  295. package/object-flavor/lib/flavor-chip/flavor-chip.component.d.ts +17 -0
  296. package/object-flavor/lib/object-flavor/object-flavor.component.d.ts +26 -0
  297. package/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.d.ts +10 -0
  298. package/object-form/README.md +3 -0
  299. package/object-form/index.d.ts +4 -0
  300. package/object-form/lib/form-scripting.api.interface.d.ts +131 -0
  301. package/object-form/lib/form-scripting.service.d.ts +30 -0
  302. package/object-form/lib/object-form-element/object-form-element.component.d.ts +22 -0
  303. package/object-form/lib/object-form-extension.interface.d.ts +22 -0
  304. package/object-form/lib/object-form-group/object-form-group.component.d.ts +22 -0
  305. package/object-form/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.d.ts +10 -0
  306. package/object-form/lib/object-form-script/object-form-script.service.d.ts +45 -0
  307. package/object-form/lib/object-form-script/object-form-scripting-scope.d.ts +50 -0
  308. package/object-form/lib/object-form-translate.service.d.ts +15 -0
  309. package/object-form/lib/object-form.component.d.ts +60 -0
  310. package/object-form/lib/object-form.interface.d.ts +113 -0
  311. package/object-form/lib/object-form.model.d.ts +18 -0
  312. package/object-form/lib/object-form.service.d.ts +39 -0
  313. package/object-form/lib/object-form.utils.d.ts +20 -0
  314. package/object-form/lib/object-form.validation.d.ts +21 -0
  315. package/object-preview/README.md +3 -0
  316. package/object-preview/index.d.ts +2 -0
  317. package/object-preview/lib/components/index.d.ts +2 -0
  318. package/object-preview/lib/components/object-email-preview/object-email-preview.component.d.ts +16 -0
  319. package/object-preview/lib/components/object-preview/object-preview.component.d.ts +13 -0
  320. package/object-preview/lib/services/object-preview.service.d.ts +37 -0
  321. package/object-summary/README.md +3 -0
  322. package/object-summary/index.d.ts +4 -0
  323. package/object-summary/lib/multi-object-summary/multi-object-summary.component.d.ts +7 -0
  324. package/object-summary/lib/object-summary/object-summary.component.d.ts +73 -0
  325. package/object-summary/lib/object-summary-data/object-summary-data.component.d.ts +11 -0
  326. package/object-summary/lib/object-summary.module.d.ts +7 -0
  327. package/package.json +173 -0
  328. package/pagination/README.md +3 -0
  329. package/pagination/index.d.ts +2 -0
  330. package/pagination/lib/pagination.component.d.ts +18 -0
  331. package/pagination/lib/pagination.interface.d.ts +5 -0
  332. package/panel/README.md +3 -0
  333. package/panel/index.d.ts +1 -0
  334. package/panel/lib/panel.component.d.ts +12 -0
  335. package/renderer/README.md +5 -0
  336. package/renderer/index.d.ts +10 -0
  337. package/renderer/lib/property-renderer/abstract.renderer.d.ts +14 -0
  338. package/renderer/lib/property-renderer/datetime.renderer.d.ts +6 -0
  339. package/renderer/lib/property-renderer/decimal.renderer.component.d.ts +6 -0
  340. package/renderer/lib/property-renderer/filesize.renderer.component.d.ts +7 -0
  341. package/renderer/lib/property-renderer/icon.renderer.component.d.ts +6 -0
  342. package/renderer/lib/property-renderer/integer.renderer.component.d.ts +6 -0
  343. package/renderer/lib/property-renderer/organization.renderer.d.ts +7 -0
  344. package/renderer/lib/property-renderer/string.renderer.component.d.ts +6 -0
  345. package/renderer/lib/property-renderer/unknown.renderer.d.ts +6 -0
  346. package/renderer/lib/renderer.directive.d.ts +17 -0
  347. package/renderer/lib/services/renderer/renderer.interface.d.ts +8 -0
  348. package/renderer/lib/services/renderer/renderer.service.d.ts +35 -0
  349. package/sequence-list/README.md +3 -0
  350. package/sequence-list/index.d.ts +5 -0
  351. package/sequence-list/lib/due-date-picker/due-date-picker.component.d.ts +28 -0
  352. package/sequence-list/lib/sequence-list-template-manage/sequence-list-template-manage.component.d.ts +52 -0
  353. package/sequence-list/lib/sequence-list-templates/sequence-list-templates.component.d.ts +36 -0
  354. package/sequence-list/lib/sequence-list.component.d.ts +43 -0
  355. package/sequence-list/lib/sequence-list.interface.d.ts +16 -0
  356. package/simple-search/README.md +3 -0
  357. package/simple-search/index.d.ts +2 -0
  358. package/simple-search/lib/simple-search/simple-search.component.d.ts +55 -0
  359. package/simple-search/lib/simple-search/simple-search.interface.d.ts +4 -0
  360. package/styles/client-framework.scss +27 -0
  361. package/tile-list/README.md +3 -0
  362. package/tile-list/index.d.ts +10 -0
  363. package/tile-list/lib/tile/tile.component.d.ts +22 -0
  364. package/tile-list/lib/tile-config/action-select/action-select.component.d.ts +13 -0
  365. package/tile-list/lib/tile-config/icon-select/icon-select.component.d.ts +11 -0
  366. package/tile-list/lib/tile-config/property-select/property-select.component.d.ts +25 -0
  367. package/tile-list/lib/tile-config/tile-config-tile/tile-config-tile.component.d.ts +20 -0
  368. package/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.d.ts +17 -0
  369. package/tile-list/lib/tile-config/tile-config.component.d.ts +47 -0
  370. package/tile-list/lib/tile-extension/directive/tile-extension.directive.d.ts +11 -0
  371. package/tile-list/lib/tile-extension/extensions/email.extension.d.ts +10 -0
  372. package/tile-list/lib/tile-extension/tile-extension.service.d.ts +16 -0
  373. package/tile-list/lib/tile-list/tile-list.component.d.ts +116 -0
  374. package/tile-list/lib/tile-list/tile-list.interface.d.ts +18 -0
  375. package/token-search/README.md +3 -0
  376. package/token-search/index.d.ts +2 -0
  377. package/token-search/token-search.component.d.ts +22 -0
  378. package/token-search/token-search.interface.d.ts +4 -0
  379. package/tree/README.md +3 -0
  380. package/tree/index.d.ts +2 -0
  381. package/tree/lib/tree-node/tree-node.component.d.ts +21 -0
  382. package/tree/lib/tree.component.d.ts +53 -0
  383. package/tree/lib/tree.interface.d.ts +11 -0
  384. package/tree/lib/tree.service.d.ts +35 -0
  385. package/upload-progress/README.md +3 -0
  386. package/upload-progress/index.d.ts +1 -0
  387. package/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.d.ts +17 -0
  388. package/upload-progress/lib/upload-progress/upload-progress.component.d.ts +16 -0
  389. package/user-avatar/README.md +3 -0
  390. package/user-avatar/index.d.ts +2 -0
  391. package/user-avatar/lib/user-avatar.component.d.ts +44 -0
  392. package/user-avatar/lib/user-avatar.module.d.ts +8 -0
@@ -0,0 +1,583 @@
1
+ import * as i1$1 from '@angular/common';
2
+ import { CommonModule, JsonPipe } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { signal, input, effect, computed, Component, inject, EventEmitter, Input, Output, viewChildren, output, Pipe } from '@angular/core';
5
+ import * as i1 from '@yuuvis/client-core';
6
+ import { YuvEventType, LocaleDatePipe, TranslateModule, RetentionField, TranslateService, ObjectConfigService, EventService, DmsService, SystemService, UserService, PendingChangesService, NotificationService, Situation, ConfigService } from '@yuuvis/client-core';
7
+ import * as i1$2 from '@yuuvis/components/split-tabs';
8
+ import { YvcSplitTabsModule } from '@yuuvis/components/split-tabs';
9
+ import { YuvMediaViewerComponent } from '@yuuvis/media-viewer';
10
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
+ import * as i2 from '@angular/forms';
12
+ import { ReactiveFormsModule } from '@angular/forms';
13
+ import { RouterLink } from '@angular/router';
14
+ import { BusyOverlayDirective } from '@yuuvis/client-framework/common';
15
+ import { YUV_ICONS } from '@yuuvis/client-framework/icons';
16
+ import * as i4 from '@yuuvis/components/icon';
17
+ import { YvcIconModule, ICONS } from '@yuuvis/components/icon';
18
+ import { finalize } from 'rxjs';
19
+ import { PanelComponent } from '@yuuvis/client-framework/panel';
20
+ import { ObjectFormComponent } from '@yuuvis/client-framework/object-form';
21
+
22
+ class ObjectAuditComponent {
23
+ #dmsObjectEffect;
24
+ get objectID() {
25
+ return this._objectID;
26
+ }
27
+ constructor(auditService, backend, appCache, eventService, system, fb, translate
28
+ // private iconRegistry: IconRegistryService,
29
+ // @Inject(ROUTES) private routes: YuvRoutes
30
+ ) {
31
+ this.auditService = auditService;
32
+ this.backend = backend;
33
+ this.appCache = appCache;
34
+ this.eventService = eventService;
35
+ this.system = system;
36
+ this.fb = fb;
37
+ this.translate = translate;
38
+ this.FILTER_CACHE_KEY = 'yuv.audit.filters';
39
+ this.icons = {
40
+ filter: YUV_ICONS.filter,
41
+ arrowNext: YUV_ICONS.arrowNext
42
+ };
43
+ this.resolvedItems = signal([]);
44
+ this.searchPanelShow = false;
45
+ this.error = false;
46
+ this.busy = false;
47
+ this.searchActions = [];
48
+ this.auditLabels = {};
49
+ this.dmsObject = input(undefined);
50
+ this.#dmsObjectEffect = effect(() => {
51
+ const o = this.dmsObject();
52
+ if (!o) {
53
+ this._objectID = undefined;
54
+ this._objectTypeID = undefined;
55
+ this.auditsRes = undefined;
56
+ }
57
+ else if (!this._objectID || this._objectID !== o.id) {
58
+ this._objectID = o.id;
59
+ this._objectTypeID = o.objectTypeId;
60
+ this.query();
61
+ }
62
+ else {
63
+ this.query();
64
+ }
65
+ });
66
+ /**
67
+ * A list of audits that should not be shown. Use the audit codes (like 100, 301, etc.).
68
+ * This will also disable the corresponding filters.
69
+ */
70
+ this.skipActions = input([]);
71
+ /**
72
+ * Whether or not to ignore admin and user separation of audit entries
73
+ */
74
+ this.allActions = input(false);
75
+ this.link = input(undefined, { alias: 'versionsLink' });
76
+ this.versionsLink = computed(() => {
77
+ const link = this.link();
78
+ return link ? `${link}` : undefined;
79
+ });
80
+ // this.versionStatePath = this.routes && this.routes.versions ? this.routes.versions.path : null;
81
+ // this.versionStateQueryParam = this.routes && this.routes.versions ? this.routes.versions.queryParams.version : null;
82
+ // this.iconRegistry.registerIcons([filter, arrowNext, arrowNext]);
83
+ this.auditLabels = {
84
+ a100: this.translate.instant('yuv.audit.label.create.metadata'),
85
+ a101: this.translate.instant('yuv.audit.label.create.metadata.withcontent'),
86
+ a110: this.translate.instant('yuv.audit.label.create.tag'),
87
+ a200: this.translate.instant('yuv.audit.label.delete'),
88
+ a201: this.translate.instant('yuv.audit.label.delete.content'), // #v
89
+ a202: this.translate.instant('yuv.audit.label.delete.marked'),
90
+ a210: this.translate.instant('yuv.audit.label.delete.tag'), // #v
91
+ a220: this.translate.instant('yuv.audit.label.delete.version'), // #v
92
+ a300: this.translate.instant('yuv.audit.label.update.metadata'),
93
+ a301: this.translate.instant('yuv.audit.label.update.content'),
94
+ a302: this.translate.instant('yuv.audit.label.update.metadata.withcontent'),
95
+ a303: this.translate.instant('yuv.audit.label.update.move.content'),
96
+ a310: this.translate.instant('yuv.audit.label.update.tag'),
97
+ a325: this.translate.instant('yuv.audit.label.update.restore'),
98
+ a340: this.translate.instant('yuv.audit.label.update.move'),
99
+ a400: this.translate.instant('yuv.audit.label.get.content'),
100
+ a401: this.translate.instant('yuv.audit.label.get.metadata'),
101
+ a402: this.translate.instant('yuv.audit.label.get.rendition.text'),
102
+ a403: this.translate.instant('yuv.audit.label.get.rendition.pdf'),
103
+ a404: this.translate.instant('yuv.audit.label.get.rendition.thumbnail'),
104
+ a10000: this.translate.instant('yuv.audit.label.get.custom')
105
+ };
106
+ this.eventService
107
+ .on(YuvEventType.DMS_OBJECT_UPDATED)
108
+ .pipe(takeUntilDestroyed())
109
+ .subscribe((e) => {
110
+ const dmsObject = e.data;
111
+ // reload audit entries when update belongs to the current dms object
112
+ if (dmsObject.id === this.objectID) {
113
+ this.query();
114
+ }
115
+ });
116
+ }
117
+ fetchAuditEntries() {
118
+ if (!this._objectID || !this._objectTypeID)
119
+ return;
120
+ this.error = false;
121
+ this.busy = true;
122
+ this.auditService
123
+ .getAuditEntries(this._objectID, { skipActions: this.skipActions() })
124
+ .pipe(finalize(() => (this.busy = false)))
125
+ .subscribe({
126
+ next: (res) => {
127
+ this.auditsRes = res;
128
+ this.resolvedItems.set(this.mapResult(res));
129
+ },
130
+ error: () => {
131
+ this.onError();
132
+ }
133
+ });
134
+ }
135
+ mapResult(res) {
136
+ return (res.items
137
+ // TODO: Remove this filter once the system:ren:text audit lifecycle planning is complete and the tag's purpose is fully defined.
138
+ // https://help.optimal-systems.com/yuuvis/Momentum/latest/index.html#_content_renditions_asynchronous_full_text_indexing.html
139
+ .filter((i) => !i.detail.includes('[system:ren:text, 1]'))
140
+ .map((i) => {
141
+ const r = { ...i, label: this.auditLabels['a' + i.action] };
142
+ // tag related audits
143
+ if ([110, 210, 310].includes(i.action)) {
144
+ const params = this.getAuditEntryParams(i);
145
+ if (params) {
146
+ r.more = `
147
+ ${this.system.getLocalizedLabel(params[0])}: ${this.system.getLocalizedLabel(`${params[0]}:${params[1]}`)}
148
+ `;
149
+ }
150
+ }
151
+ // restore audit
152
+ else if (i.action === 325) {
153
+ const params = this.getAuditEntryParams(i);
154
+ r.more = this.translate.instant('yuv.audit.label.update.restore.more', { version: params[0] || '[?]' });
155
+ }
156
+ // custom audits
157
+ else if (i.action === 10000) {
158
+ r.label = this.system.getLocalizedLabel(`audit:custom:${i.subaction}`) || `${i.subaction}`;
159
+ }
160
+ return r;
161
+ }));
162
+ }
163
+ getAuditEntryParams(auditItem) {
164
+ const m = auditItem.detail.match(/\[(.*?)\]/);
165
+ return m && m[1] ? m[1].split(',').map((i) => i.trim()) : [];
166
+ }
167
+ /**
168
+ * Execute a query from the search panel.
169
+ */
170
+ query() {
171
+ this.fetchAuditEntries();
172
+ }
173
+ goToPage(page) {
174
+ if (this.auditsRes) {
175
+ this.busy = true;
176
+ this.auditService
177
+ .getPage(this.auditsRes, page)
178
+ .pipe(finalize(() => (this.busy = false)))
179
+ .subscribe({
180
+ next: (res) => {
181
+ this.auditsRes = res;
182
+ this.resolvedItems.set(this.mapResult(res));
183
+ },
184
+ error: () => {
185
+ this.onError();
186
+ }
187
+ });
188
+ }
189
+ }
190
+ onError() {
191
+ this.auditsRes = undefined;
192
+ this.error = true;
193
+ }
194
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectAuditComponent, deps: [{ token: i1.AuditService }, { token: i1.BackendService }, { token: i1.AppCacheService }, { token: i1.EventService }, { token: i1.SystemService }, { token: i2.UntypedFormBuilder }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
195
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ObjectAuditComponent, isStandalone: true, selector: "yuv-object-audit", inputs: { dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, skipActions: { classPropertyName: "skipActions", publicName: "skipActions", isSignal: true, isRequired: false, transformFunction: null }, allActions: { classPropertyName: "allActions", publicName: "allActions", isSignal: true, isRequired: false, transformFunction: null }, link: { classPropertyName: "link", publicName: "versionsLink", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsRes?.items?.length === 1, onPage: auditsRes && auditsRes.page > 1 }\" [yuvBusyOverlay]=\"busy\">\n @if (error) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsRes) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <div class=\"timeline\">\n @for (item of resItems; track $index) {\n <div class=\"audit\">\n <div class=\"date\">{{ item.creationDate | localeDate }}</div>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\">{{ item.label }}</span>\n @if (item.detail === 'OBJECT_DOCUMENT_CHANGED') {\n @if (link()) {\n <a class=\"version\" [routerLink]=\"link()\" [queryParams]=\"{ version: item.version }\">{{ item.version }}</a>\n } @else {\n <span class=\"version\">{{ item.version }}</span>\n }\n }\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\">{{ item.createdBy.title }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsRes.hasMoreItems || auditsRes.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\" [disabled]=\"auditsRes.page === 1\" (click)=\"goToPage(auditsRes.page - 1)\">\n <yvc-icon class=\"prev\" [svg]=\"icons.arrowNext\"></yvc-icon>\n </button>\n <div class=\"page\">\n {{ auditsRes.page }}\n </div>\n <button [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\" [disabled]=\"!auditsRes.hasMoreItems\" (click)=\"goToPage(auditsRes.page + 1)\">\n <yvc-icon class=\"next\" [svg]=\"icons.arrowNext\"></yvc-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n", styles: [":host .yuv-audit{position:relative;height:100%;display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:\"items\" \"footer\";background-color:var(--panel-background-grey);container-type:inline-size;container-name:cmp}:host .yuv-audit .error{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .yuv-audit .error>div{background-color:var(--color-error);color:#fff;margin:var(--app-pane-padding);padding:var(--app-pane-padding);border-radius:calc(var(--app-pane-padding) / 2)}:host .yuv-audit .search{position:absolute;left:0;top:0;bottom:0;max-width:90%;background-color:var(--panel-background);border-right:1px solid var(--panel-divider-color);animation:yuvFadeInLeft var(--app-default-transition-duration);padding:var(--app-pane-padding);display:flex;z-index:3;flex-flow:column}:host .yuv-audit .search h3{color:var(--text-color-caption);margin:0 0 var(--app-pane-padding) 0;font-size:var(--font-title);font-weight:var(--font-weight-light)}:host .yuv-audit .search button.group{color:var(--text-color-caption);margin:0 0 var(--app-pane-padding) 0;font-size:var(--font-subhead);font-weight:var(--font-weight-normal);padding:0;cursor:pointer}:host .yuv-audit .search button.group:focus{color:var(--color-accent);outline:0;background-color:transparent;border-color:transparent}:host .yuv-audit .search .controls{flex:1;overflow-y:auto}:host .yuv-audit .search .controls .form-control{margin-top:var(--app-pane-padding)}:host .yuv-audit .search .buttons{display:flex;justify-content:flex-end}:host .yuv-audit .btn-search{position:absolute;top:var(--app-pane-padding);left:var(--app-pane-padding);background-color:var(--panel-background);padding:calc(var(--app-pane-padding) / 2);border:1px solid var(--panel-divider-color);z-index:1;box-shadow:0 0 10px 10px var(--panel-background-grey)}:host .yuv-audit .btn-search.badge{color:var(--color-accent)}:host .yuv-audit .btn-search yvc-icon{display:block}:host .yuv-audit .audits{grid-area:items}:host .yuv-audit .empty{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--text-color-caption)}:host .yuv-audit .footer{grid-area:footer;background-color:var(--panel-background);border-top:1px solid var(--panel-divider-color);display:flex}:host .yuv-audit .footer .paging{flex:1;display:flex;align-items:center;justify-content:flex-end;color:var(--text-color-caption)}:host .yuv-audit .footer .paging .page{padding:0 calc(var(--app-pane-padding) / 2)}:host .yuv-audit .footer .paging .prev{transform:rotate(180deg)}:host .yuv-audit .footer button{padding:0}:host .timeline{--track-color: var(--panel-divider-color);--track-size: calc(var(--app-pane-padding) * 3);overflow-y:auto;padding:var(--app-pane-padding) var(--app-pane-padding) calc(var(--app-pane-padding) * 2) var(--app-pane-padding)}@container (max-width: 450px){:host .timeline .audit{grid-template-columns:var(--track-size) auto;grid-template-rows:var(--track-size) auto;grid-template-areas:\"line date\" \"node node\"}:host .timeline .audit .date{justify-self:start}:host .timeline .audit .date,:host .timeline .audit:after{translate:0 .5em}:host .timeline .audit .node{margin:0;width:100%}:host .timeline .audit:last-child:before{height:100%}}:host .timeline :where(.audit){display:grid;grid-template-columns:1fr var(--track-size) 1fr;grid-template-areas:\"date line node\"}:host .timeline :where(.audit) .date{grid-area:date;justify-self:end;align-self:center}:host .timeline :where(.audit) .node{grid-area:node;justify-self:start;background-color:var(--panel-background);border:1px solid var(--panel-divider-color);border-radius:.25em;margin:calc(var(--app-pane-padding) / 2) 0;padding:var(--app-pane-padding);box-sizing:border-box;display:grid;gap:calc(var(--app-pane-padding) / 8)}:host .timeline :where(.audit) .node .label{display:flex;align-items:end}:host .timeline :where(.audit) .node .label .title{flex:1;word-break:break-all;font-weight:700;color:var(--text-color-body)}:host .timeline :where(.audit) .node .label .version{line-height:1em;border-radius:2px;background-color:rgba(var(--color-accent-rgb),.15);color:var(--color-accent);font-size:var(--font-hint);font-family:monospace;align-self:center;margin-left:var(--app-pane-padding);padding:4px 6px;display:block}:host .timeline :where(.audit) .node .meta{color:var(--text-color-caption)}:host .timeline :where(.audit):before{grid-area:line;content:\"\";width:calc(50% - 1px);height:100%;border-inline-end:1px solid var(--track-color)}:host .timeline :where(.audit):after{grid-area:line;content:\"\";width:11px;height:11px;border-radius:50%;border:2px solid var(--track-color);background-color:var(--panel-background-grey);box-sizing:border-box;align-self:center;justify-self:center}:host .timeline :where(.audit):first-child:before{height:50%;align-self:end}:host .timeline :where(.audit):last-child:before{height:50%;align-self:start}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay"] }, { kind: "pipe", type: LocaleDatePipe, name: "localeDate" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i4.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }] }); }
196
+ }
197
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectAuditComponent, decorators: [{
198
+ type: Component,
199
+ args: [{ selector: 'yuv-object-audit', standalone: true, imports: [CommonModule, RouterLink, ReactiveFormsModule, BusyOverlayDirective, LocaleDatePipe, TranslateModule, YvcIconModule], template: "<div class=\"yuv-audit\" [ngClass]=\"{ singleEntry: auditsRes?.items?.length === 1, onPage: auditsRes && auditsRes.page > 1 }\" [yuvBusyOverlay]=\"busy\">\n @if (error) {\n <div class=\"error\">\n <div translate>yuv.audit.fetch.error</div>\n </div>\n }\n\n @if (auditsRes) {\n <!-- list of audits -->\n @let resItems = resolvedItems();\n @if (resItems.length) {\n <div class=\"timeline\">\n @for (item of resItems; track $index) {\n <div class=\"audit\">\n <div class=\"date\">{{ item.creationDate | localeDate }}</div>\n <div class=\"node\">\n <div class=\"label\">\n <span class=\"title\">{{ item.label }}</span>\n @if (item.detail === 'OBJECT_DOCUMENT_CHANGED') {\n @if (link()) {\n <a class=\"version\" [routerLink]=\"link()\" [queryParams]=\"{ version: item.version }\">{{ item.version }}</a>\n } @else {\n <span class=\"version\">{{ item.version }}</span>\n }\n }\n </div>\n <div class=\"more meta\">{{ item.more }}</div>\n <div class=\"creator meta\">{{ item.createdBy.title }}</div>\n </div>\n </div>\n }\n </div>\n } @else {\n <div class=\"empty\" translate>yuv.audit.result.empty</div>\n }\n\n <!-- controls -->\n @if (auditsRes.hasMoreItems || auditsRes.page > 1) {\n <div class=\"footer\" yuvOfflineDisabled>\n <div class=\"paging\">\n <button [attr.aria-label]=\"'yuv.audit.label.paging.prev' | translate\" [disabled]=\"auditsRes.page === 1\" (click)=\"goToPage(auditsRes.page - 1)\">\n <yvc-icon class=\"prev\" [svg]=\"icons.arrowNext\"></yvc-icon>\n </button>\n <div class=\"page\">\n {{ auditsRes.page }}\n </div>\n <button [attr.aria-label]=\"'yuv.audit.label.paging.next' | translate\" [disabled]=\"!auditsRes.hasMoreItems\" (click)=\"goToPage(auditsRes.page + 1)\">\n <yvc-icon class=\"next\" [svg]=\"icons.arrowNext\"></yvc-icon>\n </button>\n </div>\n </div>\n }\n }\n</div>\n", styles: [":host .yuv-audit{position:relative;height:100%;display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:\"items\" \"footer\";background-color:var(--panel-background-grey);container-type:inline-size;container-name:cmp}:host .yuv-audit .error{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center}:host .yuv-audit .error>div{background-color:var(--color-error);color:#fff;margin:var(--app-pane-padding);padding:var(--app-pane-padding);border-radius:calc(var(--app-pane-padding) / 2)}:host .yuv-audit .search{position:absolute;left:0;top:0;bottom:0;max-width:90%;background-color:var(--panel-background);border-right:1px solid var(--panel-divider-color);animation:yuvFadeInLeft var(--app-default-transition-duration);padding:var(--app-pane-padding);display:flex;z-index:3;flex-flow:column}:host .yuv-audit .search h3{color:var(--text-color-caption);margin:0 0 var(--app-pane-padding) 0;font-size:var(--font-title);font-weight:var(--font-weight-light)}:host .yuv-audit .search button.group{color:var(--text-color-caption);margin:0 0 var(--app-pane-padding) 0;font-size:var(--font-subhead);font-weight:var(--font-weight-normal);padding:0;cursor:pointer}:host .yuv-audit .search button.group:focus{color:var(--color-accent);outline:0;background-color:transparent;border-color:transparent}:host .yuv-audit .search .controls{flex:1;overflow-y:auto}:host .yuv-audit .search .controls .form-control{margin-top:var(--app-pane-padding)}:host .yuv-audit .search .buttons{display:flex;justify-content:flex-end}:host .yuv-audit .btn-search{position:absolute;top:var(--app-pane-padding);left:var(--app-pane-padding);background-color:var(--panel-background);padding:calc(var(--app-pane-padding) / 2);border:1px solid var(--panel-divider-color);z-index:1;box-shadow:0 0 10px 10px var(--panel-background-grey)}:host .yuv-audit .btn-search.badge{color:var(--color-accent)}:host .yuv-audit .btn-search yvc-icon{display:block}:host .yuv-audit .audits{grid-area:items}:host .yuv-audit .empty{grid-area:items;display:flex;flex-flow:column;align-items:center;justify-content:center;color:var(--text-color-caption)}:host .yuv-audit .footer{grid-area:footer;background-color:var(--panel-background);border-top:1px solid var(--panel-divider-color);display:flex}:host .yuv-audit .footer .paging{flex:1;display:flex;align-items:center;justify-content:flex-end;color:var(--text-color-caption)}:host .yuv-audit .footer .paging .page{padding:0 calc(var(--app-pane-padding) / 2)}:host .yuv-audit .footer .paging .prev{transform:rotate(180deg)}:host .yuv-audit .footer button{padding:0}:host .timeline{--track-color: var(--panel-divider-color);--track-size: calc(var(--app-pane-padding) * 3);overflow-y:auto;padding:var(--app-pane-padding) var(--app-pane-padding) calc(var(--app-pane-padding) * 2) var(--app-pane-padding)}@container (max-width: 450px){:host .timeline .audit{grid-template-columns:var(--track-size) auto;grid-template-rows:var(--track-size) auto;grid-template-areas:\"line date\" \"node node\"}:host .timeline .audit .date{justify-self:start}:host .timeline .audit .date,:host .timeline .audit:after{translate:0 .5em}:host .timeline .audit .node{margin:0;width:100%}:host .timeline .audit:last-child:before{height:100%}}:host .timeline :where(.audit){display:grid;grid-template-columns:1fr var(--track-size) 1fr;grid-template-areas:\"date line node\"}:host .timeline :where(.audit) .date{grid-area:date;justify-self:end;align-self:center}:host .timeline :where(.audit) .node{grid-area:node;justify-self:start;background-color:var(--panel-background);border:1px solid var(--panel-divider-color);border-radius:.25em;margin:calc(var(--app-pane-padding) / 2) 0;padding:var(--app-pane-padding);box-sizing:border-box;display:grid;gap:calc(var(--app-pane-padding) / 8)}:host .timeline :where(.audit) .node .label{display:flex;align-items:end}:host .timeline :where(.audit) .node .label .title{flex:1;word-break:break-all;font-weight:700;color:var(--text-color-body)}:host .timeline :where(.audit) .node .label .version{line-height:1em;border-radius:2px;background-color:rgba(var(--color-accent-rgb),.15);color:var(--color-accent);font-size:var(--font-hint);font-family:monospace;align-self:center;margin-left:var(--app-pane-padding);padding:4px 6px;display:block}:host .timeline :where(.audit) .node .meta{color:var(--text-color-caption)}:host .timeline :where(.audit):before{grid-area:line;content:\"\";width:calc(50% - 1px);height:100%;border-inline-end:1px solid var(--track-color)}:host .timeline :where(.audit):after{grid-area:line;content:\"\";width:11px;height:11px;border-radius:50%;border:2px solid var(--track-color);background-color:var(--panel-background-grey);box-sizing:border-box;align-self:center;justify-self:center}:host .timeline :where(.audit):first-child:before{height:50%;align-self:end}:host .timeline :where(.audit):last-child:before{height:50%;align-self:start}\n"] }]
200
+ }], ctorParameters: () => [{ type: i1.AuditService }, { type: i1.BackendService }, { type: i1.AppCacheService }, { type: i1.EventService }, { type: i1.SystemService }, { type: i2.UntypedFormBuilder }, { type: i1.TranslateService }] });
201
+
202
+ class ObjectDetailsShellComponent {
203
+ /**
204
+ * DmsObject to show the details for.
205
+ */
206
+ set dmsObject(o) {
207
+ this._dmsObject = o;
208
+ // this.objectTypeId = o ? this.systemService.getLeadingObjectTypeID(o.objectTypeId, o.data[BaseObjectTypeField.SECONDARY_OBJECT_TYPE_IDS] as string) : undefined;
209
+ if (this._dmsObject) {
210
+ this._getHeaderData();
211
+ this.retentionEndDate = this._dmsObject.data[RetentionField.RETENTION_END]
212
+ ? new Date(this._dmsObject.data[RetentionField.RETENTION_END])
213
+ : undefined;
214
+ const today = new Date();
215
+ this.retentionEnded = this.retentionEndDate && today > this.retentionEndDate;
216
+ }
217
+ }
218
+ get dmsObject() {
219
+ return this._dmsObject;
220
+ }
221
+ /**
222
+ * ID of a DmsObject. The object will be fetched from the backend upfront.
223
+ */
224
+ set objectId(id) {
225
+ if (id) {
226
+ this._getDmsObject(id);
227
+ }
228
+ else {
229
+ this.dmsObject = undefined;
230
+ }
231
+ }
232
+ constructor() {
233
+ this.translate = inject(TranslateService);
234
+ this.objectConfigService = inject(ObjectConfigService);
235
+ this.eventService = inject(EventService);
236
+ this.dmsService = inject(DmsService);
237
+ this.systemService = inject(SystemService);
238
+ this.userService = inject(UserService);
239
+ this._subs = [];
240
+ this.busy = false;
241
+ this.isAdvancedUser = this.userService.isAdvancedUser;
242
+ this.dmsObjectChange = new EventEmitter();
243
+ this.objectConfigService
244
+ .getObjectConfigs$()
245
+ // this.objectConfigService.getObjectConfigs$(this.bucket || '')
246
+ .pipe(takeUntilDestroyed())
247
+ .subscribe((res) => {
248
+ this.oc = res;
249
+ if (this._dmsObject)
250
+ this._getHeaderData();
251
+ });
252
+ this.eventService
253
+ .on(YuvEventType.DMS_OBJECT_UPDATED)
254
+ .pipe(takeUntilDestroyed())
255
+ .subscribe((e) => {
256
+ const o = e.data;
257
+ if (this._dmsObject && this._dmsObject.id === o.id)
258
+ this.dmsObject = o;
259
+ });
260
+ }
261
+ _getHeaderData() {
262
+ if (this._dmsObject) {
263
+ const oc = this.oc[this._dmsObject.objectTypeId];
264
+ // const ic = oc.icon ? (this._dmsObject.data[oc.icon.propertyName] as string) : this._dmsObject.objectTypeId;
265
+ const icon = {
266
+ title: this.systemService.getLocalizedLabel(this._dmsObject.objectTypeId)
267
+ };
268
+ if (oc.icon)
269
+ icon.svg = oc.icon.svg;
270
+ else
271
+ icon.src = this.systemService.getObjectTypeIconUri(this._dmsObject.objectTypeId);
272
+ this.headerData = {
273
+ icon,
274
+ title: oc.title ? this.dmsObject?.data[oc.title.propertyName] : undefined,
275
+ description: oc.description ? this.dmsObject?.data[oc.description.propertyName] : undefined
276
+ };
277
+ }
278
+ else
279
+ this.headerData = undefined;
280
+ }
281
+ _getDmsObject(id) {
282
+ this.busy = true;
283
+ this.dmsService.getDmsObject(id).subscribe({
284
+ next: (dmsObject) => (this.dmsObject = dmsObject),
285
+ error: () => {
286
+ this.dmsObject = undefined;
287
+ this.contextError = this.translate.instant('yuv.object-metadata.context.load.error');
288
+ },
289
+ complete: () => {
290
+ this.busy = false;
291
+ this.dmsObjectChange.emit(this.dmsObject);
292
+ }
293
+ });
294
+ }
295
+ ngOnInit() {
296
+ this._subs.push(this.eventService.on(YuvEventType.DMS_OBJECT_DELETED).subscribe((event) => {
297
+ if (event.data?.id === this._dmsObject?.id) {
298
+ this._dmsObject = undefined;
299
+ }
300
+ }));
301
+ }
302
+ ngOnDestroy() {
303
+ this._subs.forEach((s) => s.unsubscribe());
304
+ }
305
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectDetailsShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
306
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ObjectDetailsShellComponent, isStandalone: true, selector: "yuv-object-details-shell", inputs: { layoutSettingsID: "layoutSettingsID", dmsObject: "dmsObject", objectId: "objectId" }, outputs: { dmsObjectChange: "dmsObjectChange" }, ngImport: i0, template: "<yuv-panel\n *ngIf=\"dmsObject; else tplEmpty\"\n [yuvBusyOverlay]=\"busy\"\n [icon]=\"headerData?.icon\"\n [title]=\"headerData?.title\"\n [description]=\"headerData?.description\"\n>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</yuv-panel>\n\n<ng-template #tplEmpty>\n <div class=\"empty\">\n <div class=\"error\" *ngIf=\"contextError; else tplEmptyNoError\">{{ contextError }}</div>\n </div>\n</ng-template>\n\n<ng-template #tplEmptyNoError> EMPTY </ng-template>\n\n\n", styles: [":host{display:block}:host yuv-panel{height:100%}:host .content{height:100%}:host .empty{height:100%;display:grid;align-items:center;justify-content:center}:host .empty .error{max-width:40ch;margin:var(--app-pane-padding);color:var(--text-color-caption);padding:calc(var(--app-pane-padding) * .75);border-radius:.5em;line-height:1.5em;border:1px solid var(--panel-divider-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PanelComponent, selector: "yuv-panel", inputs: ["icon", "title", "description"] }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay"] }] }); }
307
+ }
308
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectDetailsShellComponent, decorators: [{
309
+ type: Component,
310
+ args: [{ selector: 'yuv-object-details-shell', standalone: true, imports: [CommonModule, PanelComponent, BusyOverlayDirective], template: "<yuv-panel\n *ngIf=\"dmsObject; else tplEmpty\"\n [yuvBusyOverlay]=\"busy\"\n [icon]=\"headerData?.icon\"\n [title]=\"headerData?.title\"\n [description]=\"headerData?.description\"\n>\n <div class=\"content\">\n <ng-content></ng-content>\n </div>\n</yuv-panel>\n\n<ng-template #tplEmpty>\n <div class=\"empty\">\n <div class=\"error\" *ngIf=\"contextError; else tplEmptyNoError\">{{ contextError }}</div>\n </div>\n</ng-template>\n\n<ng-template #tplEmptyNoError> EMPTY </ng-template>\n\n\n", styles: [":host{display:block}:host yuv-panel{height:100%}:host .content{height:100%}:host .empty{height:100%;display:grid;align-items:center;justify-content:center}:host .empty .error{max-width:40ch;margin:var(--app-pane-padding);color:var(--text-color-caption);padding:calc(var(--app-pane-padding) * .75);border-radius:.5em;line-height:1.5em;border:1px solid var(--panel-divider-color)}\n"] }]
311
+ }], ctorParameters: () => [], propDecorators: { layoutSettingsID: [{
312
+ type: Input
313
+ }], dmsObject: [{
314
+ type: Input
315
+ }], dmsObjectChange: [{
316
+ type: Output
317
+ }], objectId: [{
318
+ type: Input
319
+ }] } });
320
+
321
+ class ObjectMetadataComponent {
322
+ constructor() {
323
+ this.#pendingChanges = inject(PendingChangesService);
324
+ this.#notificationService = inject(NotificationService);
325
+ this.translate = inject(TranslateService);
326
+ this.#system = inject(SystemService);
327
+ this.#dmsService = inject(DmsService);
328
+ this.objectForms = viewChildren(ObjectFormComponent);
329
+ this.#formSubscriptions = [];
330
+ this.#initialData = {};
331
+ this.arrow = ICONS.arrowDown;
332
+ this.busy = signal(false);
333
+ this.empty = signal(false);
334
+ this.controlsVisible = signal(false);
335
+ // form of the dms object itself
336
+ this.mainFormOptions = signal(undefined);
337
+ // forms off allpied flavors
338
+ this.flavorFormOptions = signal([]);
339
+ // state of all individual forms
340
+ this.#formStates = new Map();
341
+ /**
342
+ * Form situation, if not set default will be 'EDIT'
343
+ */
344
+ this.situation = Situation.EDIT;
345
+ /**
346
+ * Set to 'true' to prevent all metadata from being edited
347
+ */
348
+ this.formDisabled = false;
349
+ this.dmsObject = input();
350
+ this.#dmsObjectEffect = effect(() => {
351
+ this.#init(this.dmsObject());
352
+ });
353
+ this.flavoredDmsObject = input();
354
+ this.#flavoredDmsObjectEffect = effect(() => {
355
+ const flavoredDmsObject = this.flavoredDmsObject();
356
+ this.#init(flavoredDmsObject?.object, flavoredDmsObject?.flavors);
357
+ });
358
+ /**
359
+ * Emits the updated `DmsObject` when metadata have been saved.
360
+ */
361
+ this.indexDataSaved = output();
362
+ /**
363
+ * Emits the current state of the metadata form.
364
+ */
365
+ this.statusChanged = output();
366
+ }
367
+ #pendingChanges;
368
+ #notificationService;
369
+ #system;
370
+ #dmsService;
371
+ #pendingTaskId;
372
+ #dmsObject;
373
+ #formSubscriptions;
374
+ #initialData;
375
+ // state of all individual forms
376
+ #formStates;
377
+ #dmsObjectEffect;
378
+ #flavoredDmsObjectEffect;
379
+ #init(object, flavors) {
380
+ if (object && (!this.#dmsObject || this.#dmsObject !== object)) {
381
+ this.#initialData = structuredClone(object.data);
382
+ this.#objectToForm(object, flavors);
383
+ }
384
+ this.#dmsObject = object;
385
+ }
386
+ #objectToForm(object, flavors) {
387
+ if (object) {
388
+ const mappedFlavors = (flavors || []).reduce((acc, curr) => ({ ...acc, [curr.sot]: curr }), {});
389
+ this.#system.getObjectTypeForms([object.objectTypeId, ...(flavors || []).map((f) => f.sot)], this.situation).subscribe({
390
+ next: (res) => {
391
+ this.mainFormOptions.set(res[object.objectTypeId]
392
+ ? {
393
+ formModel: res[object.objectTypeId],
394
+ data: object.data,
395
+ disabled: this.formDisabled || !object.permissions?.writeIndexData,
396
+ }
397
+ : undefined);
398
+ this.flavorFormOptions.set(Object.keys(res)
399
+ .filter((id) => id !== object.objectTypeId)
400
+ .map((id) => ({
401
+ id,
402
+ label: res[id].label,
403
+ icon: mappedFlavors[id]?.icon,
404
+ formOptions: {
405
+ formModel: res[id],
406
+ data: object.data
407
+ }
408
+ })));
409
+ this.empty.set(!this.mainFormOptions() && !this.flavorFormOptions().length);
410
+ }
411
+ });
412
+ }
413
+ }
414
+ onFormStatusChanged(formId, evt) {
415
+ this.#formStates.set(formId, evt);
416
+ this.#getCombinedFormState();
417
+ if (this.combinedFormState?.dirty)
418
+ this.#startPending();
419
+ else
420
+ this.#finishPending();
421
+ this.controlsVisible.set(!!this.combinedFormState?.dirty);
422
+ if (this.combinedFormState)
423
+ this.statusChanged.emit(this.combinedFormState);
424
+ }
425
+ #getCombinedFormState() {
426
+ const combinedFormState = {
427
+ dirty: false,
428
+ indexdataChanged: false,
429
+ invalid: false,
430
+ data: {}
431
+ };
432
+ this.#formStates.forEach((s) => {
433
+ if (s.dirty) {
434
+ combinedFormState.dirty = s.dirty;
435
+ }
436
+ if (s.indexdataChanged) {
437
+ combinedFormState.indexdataChanged = s.indexdataChanged;
438
+ }
439
+ if (s.invalid) {
440
+ combinedFormState.invalid = s.invalid;
441
+ }
442
+ combinedFormState.data = { ...combinedFormState.data, ...s.data };
443
+ });
444
+ this.combinedFormState = combinedFormState;
445
+ return this.combinedFormState;
446
+ }
447
+ #setCombinedFormPristine() {
448
+ this.objectForms().forEach((f) => {
449
+ f.setFormPristine();
450
+ });
451
+ }
452
+ save() {
453
+ if (this.#dmsObject && this.combinedFormState) {
454
+ this.busy.set(true);
455
+ this.#dmsService.updateDmsObject(this.#dmsObject.id, this.combinedFormState.data).subscribe({
456
+ next: () => {
457
+ this.#setCombinedFormPristine();
458
+ this.indexDataSaved.emit(this.#dmsObject);
459
+ this.#finishPending();
460
+ },
461
+ error: (err) => {
462
+ this.#notificationService.error('',
463
+ // this._dmsObject?.title || '',
464
+ err.status === 404 ? this.translate.instant('yuv.object-metadata.context.load.error') : this.translate.instant('yuv.object-metadata.save.error'));
465
+ },
466
+ complete: () => {
467
+ this.controlsVisible.set(false);
468
+ this.busy.set(false);
469
+ }
470
+ });
471
+ }
472
+ }
473
+ /**
474
+ * Reset te form to its initial state
475
+ */
476
+ resetForm() {
477
+ if (this.objectForms()?.length) {
478
+ this.objectForms().forEach((f) => {
479
+ f.resetForm();
480
+ });
481
+ this.#formStates.clear();
482
+ }
483
+ }
484
+ #startPending() {
485
+ // because this method will be called every time the form status changes,
486
+ // pending task will only be started once until it was finished
487
+ if (!this.#pendingChanges.hasPendingTask(this.#pendingTaskId || ' ')) {
488
+ this.#pendingTaskId = this.#pendingChanges.startTask(this.translate.instant('yuv.object-metadata.pending-changes.alert'));
489
+ }
490
+ }
491
+ #finishPending() {
492
+ if (this.#pendingTaskId)
493
+ this.#pendingChanges.finishTask(this.#pendingTaskId);
494
+ }
495
+ ngOnDestroy() {
496
+ this.#formSubscriptions.forEach((s) => s.unsubscribe());
497
+ }
498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectMetadataComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
499
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ObjectMetadataComponent, isStandalone: true, selector: "yuv-object-metadata", inputs: { situation: { classPropertyName: "situation", publicName: "situation", isSignal: false, isRequired: false, transformFunction: null }, formDisabled: { classPropertyName: "formDisabled", publicName: "formDisabled", isSignal: false, isRequired: false, transformFunction: null }, dmsObject: { classPropertyName: "dmsObject", publicName: "dmsObject", isSignal: true, isRequired: false, transformFunction: null }, flavoredDmsObject: { classPropertyName: "flavoredDmsObject", publicName: "flavoredDmsObject", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { indexDataSaved: "indexDataSaved", statusChanged: "statusChanged" }, host: { properties: { "class.empty": "empty()" } }, viewQueries: [{ propertyName: "objectForms", predicate: ObjectFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<main>\n @if (empty()) {\n <div class=\"empty\">\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n </div>\n } @else {\n <yuv-object-form [formOptions]=\"mainFormOptions()\" (statusChanged)=\"onFormStatusChanged('main', $event)\"></yuv-object-form>\n\n @for (fo of flavorFormOptions(); track $index) {\n <details [attr.open]=\"$index === 0\">\n <summary><yvc-icon [svg]=\"fo.icon\"></yvc-icon> {{ fo.label }}<yvc-icon class=\"arr\" [svg]=\"arrow\"></yvc-icon></summary>\n <yuv-object-form [formOptions]=\"fo.formOptions\" (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"></yuv-object-form>\n </details>\n }\n }\n</main>\n<footer [ngClass]=\"{ visible: controlsVisible() }\">\n <button class=\"secondary\" (click)=\"resetForm()\" [hidden]=\"!combinedFormState?.dirty\" [disabled]=\"!combinedFormState?.dirty\">\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button class=\"primary\" [ngClass]=\"{ spinning: busy() }\" (click)=\"save()\" [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid\">\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n</footer>\n", styles: [":host{--om-footer-background: var(--panel-background);--om-footer-border-color: var(--panel-divider-color);--om-section-max-width: 70ch;display:flex;height:100%;overflow:hidden;position:relative;background-color:var(--panel-background-grey)}:host.empty main{justify-content:center;align-items:center}:host main{overflow-y:auto;width:100%;display:flex;flex-flow:column}:host footer{position:absolute;bottom:0;left:0;right:0;grid-area:footer;background:var(--om-footer-background);border-top:1px solid var(--om-footer-border-color);opacity:0;display:flex;align-items:center;justify-content:end;gap:calc(var(--app-pane-padding) / 4);padding:calc(var(--app-pane-padding) / 2)}:host footer.visible{animation:controlsAppear .2s ease-in-out forwards}:host main{padding:var(--app-pane-padding)}:host main details{background-color:var(--panel-background);border:1px solid var(--panel-divider-color);width:var(--om-section-max-width);max-width:100%;margin-inline:auto;box-sizing:border-box}:host main details:not(:last-child){margin-block-end:var(--app-pane-padding)}:host main details[open] yvc-icon.arr{transform:rotate(180deg)}:host main details summary{padding:calc(var(--app-pane-padding) / 2);cursor:pointer;display:flex;align-items:center;font-weight:700;color:var(--text-color-caption);position:relative}:host main details summary::marker{display:none}:host main details summary yvc-icon{--icon-size: 18px;margin-inline-end:calc(var(--app-pane-padding) / 2)}:host main details summary yvc-icon.arr{position:absolute;inset-inline-end:0}@keyframes controlsAppear{0%{opacity:0;translate:0 var(--app-pane-padding)}to{opacity:1;translate:0 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ObjectFormComponent, selector: "yuv-object-form", inputs: ["formOptions", "inert", "elementExtensions", "isInnerTableForm"], outputs: ["statusChanged", "onFormReady"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i4.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }] }); }
500
+ }
501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectMetadataComponent, decorators: [{
502
+ type: Component,
503
+ args: [{ selector: 'yuv-object-metadata', standalone: true, imports: [CommonModule, ObjectFormComponent, TranslateModule, ReactiveFormsModule, YvcIconModule], host: {
504
+ '[class.empty]': 'empty()'
505
+ }, template: "<main>\n @if (empty()) {\n <div class=\"empty\">\n <p>{{ 'yuv.object-metadata.empty.message' | translate }}</p>\n </div>\n } @else {\n <yuv-object-form [formOptions]=\"mainFormOptions()\" (statusChanged)=\"onFormStatusChanged('main', $event)\"></yuv-object-form>\n\n @for (fo of flavorFormOptions(); track $index) {\n <details [attr.open]=\"$index === 0\">\n <summary><yvc-icon [svg]=\"fo.icon\"></yvc-icon> {{ fo.label }}<yvc-icon class=\"arr\" [svg]=\"arrow\"></yvc-icon></summary>\n <yuv-object-form [formOptions]=\"fo.formOptions\" (statusChanged)=\"onFormStatusChanged(fo.id, $event)\"></yuv-object-form>\n </details>\n }\n }\n</main>\n<footer [ngClass]=\"{ visible: controlsVisible() }\">\n <button class=\"secondary\" (click)=\"resetForm()\" [hidden]=\"!combinedFormState?.dirty\" [disabled]=\"!combinedFormState?.dirty\">\n {{ 'yuv.object-metadata.button.reset' | translate }}\n </button>\n <button class=\"primary\" [ngClass]=\"{ spinning: busy() }\" (click)=\"save()\" [disabled]=\"!combinedFormState?.dirty || combinedFormState?.invalid\">\n {{ 'yuv.object-metadata.button.save' | translate }}\n </button>\n</footer>\n", styles: [":host{--om-footer-background: var(--panel-background);--om-footer-border-color: var(--panel-divider-color);--om-section-max-width: 70ch;display:flex;height:100%;overflow:hidden;position:relative;background-color:var(--panel-background-grey)}:host.empty main{justify-content:center;align-items:center}:host main{overflow-y:auto;width:100%;display:flex;flex-flow:column}:host footer{position:absolute;bottom:0;left:0;right:0;grid-area:footer;background:var(--om-footer-background);border-top:1px solid var(--om-footer-border-color);opacity:0;display:flex;align-items:center;justify-content:end;gap:calc(var(--app-pane-padding) / 4);padding:calc(var(--app-pane-padding) / 2)}:host footer.visible{animation:controlsAppear .2s ease-in-out forwards}:host main{padding:var(--app-pane-padding)}:host main details{background-color:var(--panel-background);border:1px solid var(--panel-divider-color);width:var(--om-section-max-width);max-width:100%;margin-inline:auto;box-sizing:border-box}:host main details:not(:last-child){margin-block-end:var(--app-pane-padding)}:host main details[open] yvc-icon.arr{transform:rotate(180deg)}:host main details summary{padding:calc(var(--app-pane-padding) / 2);cursor:pointer;display:flex;align-items:center;font-weight:700;color:var(--text-color-caption);position:relative}:host main details summary::marker{display:none}:host main details summary yvc-icon{--icon-size: 18px;margin-inline-end:calc(var(--app-pane-padding) / 2)}:host main details summary yvc-icon.arr{position:absolute;inset-inline-end:0}@keyframes controlsAppear{0%{opacity:0;translate:0 var(--app-pane-padding)}to{opacity:1;translate:0 0}}\n"] }]
506
+ }], propDecorators: { situation: [{
507
+ type: Input
508
+ }], formDisabled: [{
509
+ type: Input
510
+ }] } });
511
+
512
+ class ObjectDetailsComponent {
513
+ #configService;
514
+ #userService;
515
+ /**
516
+ * If you want to set the order of the tabs within object details, you can use
517
+ * this input property. The tab order will be defined by the index of the
518
+ * input array containing the following values in the desired order:
519
+ *
520
+ * - `summary`: Object summary tab
521
+ * - `indexdata`: Indexdata edit form tab
522
+ * - `preview`: Content preview tab
523
+ * - `history: Object history tab (audits)
524
+ */
525
+ set panelOrder(po) {
526
+ const def = ['summary', 'indexdata', 'preview', 'history'];
527
+ po = po || def;
528
+ this._splitTabConfig = {
529
+ primary: {
530
+ tabs: po,
531
+ active: po[0]
532
+ }
533
+ };
534
+ }
535
+ constructor() {
536
+ this.#configService = inject(ConfigService);
537
+ this.#userService = inject(UserService);
538
+ this.isAdvancedUser = this.#userService.isAdvancedUser;
539
+ this._splitTabConfig = {};
540
+ this.currentUser = signal(this.#userService.getCurrentUser());
541
+ if (this.#configService.get('client.objectDetailsTabs'))
542
+ this.panelOrder = this.#configService.get('client.objectDetailsTabs');
543
+ }
544
+ onIndexdataSaved(updatedObject) {
545
+ this.dmsObject = updatedObject;
546
+ }
547
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
548
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ObjectDetailsComponent, isStandalone: true, selector: "yuv-object-details", inputs: { panelOrder: "panelOrder", layoutSettingsID: "layoutSettingsID", dmsObject: "dmsObject", objectId: "objectId" }, ngImport: i0, template: "<yuv-object-details-shell [objectId]=\"objectId\" [(dmsObject)]=\"dmsObject\" [layoutSettingsID]=\"layoutSettingsID\">\n <yvc-split-tabs class=\"content\" [config]=\"_splitTabConfig\" [layoutSettingsID]=\"layoutSettingsID\">\n <!-- content -->\n <ng-template [yvcTab]=\"{ id: 'content', label: 'yuv.object-details.tabs.content.title' | translate }\">\n @if (dmsObject && dmsObject.content) {\n <yuv-media-viewer\n [id]=\"dmsObject.id\"\n [metadata]=\"{ data: dmsObject.data, editable: true, user: currentUser() }\"\n [type]=\"dmsObject.content.mimeType\"\n ></yuv-media-viewer>\n }\n\n <span>{{ currentUser() | json }}</span>\n </ng-template>\n <!-- indexdata -->\n <ng-template [yvcTab]=\"{ id: 'indexdata', label: 'yuv.object-metadata.tabs.indexdata.title' | translate }\">\n <yuv-object-metadata [dmsObject]=\"dmsObject\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </ng-template>\n <!-- history -->\n <ng-template [yvcTab]=\"{ id: 'history', label: 'yuv.object-metadata.tabs.history.title' | translate }\">\n <yuv-object-audit [dmsObject]=\"dmsObject\"></yuv-object-audit>\n </ng-template>\n </yvc-split-tabs>\n</yuv-object-details-shell>\n", styles: [":host{display:block}:host yuv-object-details-shell,:host yvc-split-tabs,:host yuv-object-form-edit{height:100%}\n"], dependencies: [{ kind: "pipe", type: JsonPipe, name: "json" }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcSplitTabsModule }, { kind: "component", type: i1$2.SplitTabsComponent, selector: "yvc-split-tabs", inputs: ["layoutSettingsID", "config", "panelOrder"], outputs: ["layoutSettingsChange"] }, { kind: "component", type: ObjectDetailsShellComponent, selector: "yuv-object-details-shell", inputs: ["layoutSettingsID", "dmsObject", "objectId"], outputs: ["dmsObjectChange"] }, { kind: "component", type: YuvMediaViewerComponent, selector: "yuv-media-viewer", inputs: ["id", "type", "metadata", "src"] }, { kind: "component", type: ObjectMetadataComponent, selector: "yuv-object-metadata", inputs: ["situation", "formDisabled", "dmsObject", "flavoredDmsObject"], outputs: ["indexDataSaved", "statusChanged"] }, { kind: "component", type: ObjectAuditComponent, selector: "yuv-object-audit", inputs: ["dmsObject", "skipActions", "allActions", "versionsLink"] }] }); }
549
+ }
550
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ObjectDetailsComponent, decorators: [{
551
+ type: Component,
552
+ args: [{ selector: 'yuv-object-details', standalone: true, imports: [JsonPipe, CommonModule, YvcSplitTabsModule, ObjectDetailsShellComponent, YuvMediaViewerComponent, ObjectMetadataComponent, ObjectAuditComponent], template: "<yuv-object-details-shell [objectId]=\"objectId\" [(dmsObject)]=\"dmsObject\" [layoutSettingsID]=\"layoutSettingsID\">\n <yvc-split-tabs class=\"content\" [config]=\"_splitTabConfig\" [layoutSettingsID]=\"layoutSettingsID\">\n <!-- content -->\n <ng-template [yvcTab]=\"{ id: 'content', label: 'yuv.object-details.tabs.content.title' | translate }\">\n @if (dmsObject && dmsObject.content) {\n <yuv-media-viewer\n [id]=\"dmsObject.id\"\n [metadata]=\"{ data: dmsObject.data, editable: true, user: currentUser() }\"\n [type]=\"dmsObject.content.mimeType\"\n ></yuv-media-viewer>\n }\n\n <span>{{ currentUser() | json }}</span>\n </ng-template>\n <!-- indexdata -->\n <ng-template [yvcTab]=\"{ id: 'indexdata', label: 'yuv.object-metadata.tabs.indexdata.title' | translate }\">\n <yuv-object-metadata [dmsObject]=\"dmsObject\" (indexDataSaved)=\"onIndexdataSaved($event)\"> </yuv-object-metadata>\n </ng-template>\n <!-- history -->\n <ng-template [yvcTab]=\"{ id: 'history', label: 'yuv.object-metadata.tabs.history.title' | translate }\">\n <yuv-object-audit [dmsObject]=\"dmsObject\"></yuv-object-audit>\n </ng-template>\n </yvc-split-tabs>\n</yuv-object-details-shell>\n", styles: [":host{display:block}:host yuv-object-details-shell,:host yvc-split-tabs,:host yuv-object-form-edit{height:100%}\n"] }]
553
+ }], ctorParameters: () => [], propDecorators: { panelOrder: [{
554
+ type: Input
555
+ }], layoutSettingsID: [{
556
+ type: Input
557
+ }], dmsObject: [{
558
+ type: Input
559
+ }], objectId: [{
560
+ type: Input
561
+ }] } });
562
+
563
+ class FormSectionGroupPipe {
564
+ transform(form, id) {
565
+ return form.get(id);
566
+ }
567
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormSectionGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
568
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FormSectionGroupPipe, isStandalone: true, name: "formSectionGroup" }); }
569
+ }
570
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormSectionGroupPipe, decorators: [{
571
+ type: Pipe,
572
+ args: [{
573
+ name: 'formSectionGroup',
574
+ standalone: true
575
+ }]
576
+ }] });
577
+
578
+ /**
579
+ * Generated bundle index. Do not edit.
580
+ */
581
+
582
+ export { FormSectionGroupPipe, ObjectAuditComponent, ObjectDetailsComponent, ObjectDetailsShellComponent, ObjectMetadataComponent };
583
+ //# sourceMappingURL=yuuvis-client-framework-object-details.mjs.map