@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,1355 @@
1
+ import * as i0 from '@angular/core';
2
+ import { forwardRef, Component, Input, inject, input, EventEmitter, ViewChild, HostListener, HostBinding, Output, ElementRef, Renderer2, ViewEncapsulation, NgModule } from '@angular/core';
3
+ import * as i2 from '@angular/forms';
4
+ import { NG_VALUE_ACCESSOR, FormsModule, FormBuilder, Validators, NG_VALIDATORS, ReactiveFormsModule, UntypedFormGroup, UntypedFormControl } from '@angular/forms';
5
+ import * as i1 from '@yuuvis/client-core';
6
+ import { Classification, OperatorLabel, Operator, FileSizePipe, LocaleNumberPipe, Utils, SystemService, UserService, YuvUser, TranslateModule, ClassificationPrefix, Situation } from '@yuuvis/client-core';
7
+ import * as i3 from '@yuuvis/components/dropdown';
8
+ import { YvcDropdownModule } from '@yuuvis/components/dropdown';
9
+ import { TranslateService, TranslateModule as TranslateModule$1 } from '@ngx-translate/core';
10
+ import * as i2$1 from '@yuuvis/components/datepicker';
11
+ import { YvcDatepickerModule } from '@yuuvis/components/datepicker';
12
+ import * as i1$1 from '@angular/common';
13
+ import { CommonModule } from '@angular/common';
14
+ import { YUV_ICONS, IconService } from '@yuuvis/client-framework/icons';
15
+ import * as i2$2 from '@yuuvis/components/autocomplete';
16
+ import { YvcAutocompleteModule } from '@yuuvis/components/autocomplete';
17
+ import * as i3$1 from '@yuuvis/components/icon';
18
+ import { YvcIconModule } from '@yuuvis/components/icon';
19
+ import { of, forkJoin } from 'rxjs';
20
+ import { catchError } from 'rxjs/operators';
21
+ import * as i2$3 from '@yuuvis/components/chips';
22
+ import { YvcChipsModule } from '@yuuvis/components/chips';
23
+ import { FocusWithinDirective } from '@yuuvis/client-framework/common';
24
+ import { YvcCheckboxModule } from '@yuuvis/components/checkbox';
25
+ import { YvcFocusWithin } from '@yuuvis/components/common';
26
+
27
+ /**
28
+ * Component rendering a simple catalog as form element.
29
+ * There are two ways how to use this component. One is to add options as an array
30
+ * of strings on your own, the second one is to apply a special classification.
31
+ *
32
+ * Classifications are used within form models and rendered as object forms. Elements
33
+ * with a classification of `catalog[Item1, Item2, Item3]` will use this component
34
+ * as well. So you may also choose to set a classification like this in order to
35
+ * apply your options.
36
+ *
37
+ * @example
38
+ * <!-- setting options as string array -->
39
+ * <yuv-catalog [options]="cities" [(ngModel)]="hometown"></yuv-catalog>
40
+ *
41
+ * <!-- setting options using a classification -->
42
+ * <yuv-catalog [classification]="'catalog[Berlin, Chicago, Paris]'" [(ngModel)]="hometown"></yuv-catalog>
43
+ */
44
+ class CatalogComponent {
45
+ /**
46
+ * Array of selectable entries
47
+ */
48
+ set options(options) {
49
+ this._options = options && typeof options[0] === 'string' ? options.map((o) => ({ label: o, value: o })) : options || [];
50
+ this.filter = this.filter || this._options?.length > this.enableFilterWhenOptionsExceed;
51
+ }
52
+ /**
53
+ * Additional semantics for the form element.
54
+ */
55
+ set classifications(c) {
56
+ const ce = this.systemService.getClassifications(c).get(Classification.STRING_CATALOG);
57
+ if (ce && ce.options) {
58
+ this.options = ce.options;
59
+ }
60
+ }
61
+ constructor(systemService) {
62
+ this.systemService = systemService;
63
+ this._options = [];
64
+ this.getLabel = (value) => (this._options ? this._options.find((o) => o.value === value) || { label: value } : { label: value }).label;
65
+ /**
66
+ * Enable filtering of options
67
+ */
68
+ this.filter = false;
69
+ /**
70
+ * By default a filter panel will shown if the number of options exceeds 10 entries. You could
71
+ * change this number.
72
+ */
73
+ this.enableFilterWhenOptionsExceed = 10;
74
+ /**
75
+ * Indicator that multiple items could be selected
76
+ */
77
+ this.multiselect = false;
78
+ /**
79
+ * Will attch the overlay to this HTMLelement
80
+ */
81
+ this.appendTo = null;
82
+ /**
83
+ * Will prevent the input from being changed (default: false)
84
+ */
85
+ this.readonly = false;
86
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
87
+ this.propagateChange = (_) => { };
88
+ }
89
+ writeValue(value) {
90
+ this.value = value === undefined ? null : value;
91
+ }
92
+ registerOnChange(fn) {
93
+ this.propagateChange = fn;
94
+ }
95
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
96
+ registerOnTouched(fn) { }
97
+ onChange(value) {
98
+ this.value = value;
99
+ this.propagateChange(this.value);
100
+ }
101
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CatalogComponent, deps: [{ token: i1.SystemService }], target: i0.ɵɵFactoryTarget.Component }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CatalogComponent, isStandalone: true, selector: "yuv-catalog", inputs: { filter: "filter", situation: "situation", enableFilterWhenOptionsExceed: "enableFilterWhenOptionsExceed", options: "options", multiselect: "multiselect", classifications: "classifications", appendTo: "appendTo", readonly: "readonly" }, host: { classAttribute: "yuv-catalog" }, providers: [
103
+ {
104
+ provide: NG_VALUE_ACCESSOR,
105
+ useExisting: forwardRef(() => CatalogComponent),
106
+ multi: true
107
+ }
108
+ ], ngImport: i0, template: "<yvc-dropdown [multiple]=\"multiselect\" [options]=\"_options\" [(ngModel)]=\"value\" (ngModelChange)=\"onChange($event)\" [filter]=\"filter\"\n [disabled]=\"readonly\"></yvc-dropdown>\n", styles: [":host{display:block}:host ::ng-deep .p-checkbox{flex-shrink:0}:host ::ng-deep .p-multiselect-item{white-space:normal;min-width:33ch}:host ::ng-deep .p-overlay{max-width:300px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i3.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }] }); }
109
+ }
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CatalogComponent, decorators: [{
111
+ type: Component,
112
+ args: [{ selector: 'yuv-catalog', standalone: true, imports: [FormsModule, YvcDropdownModule], providers: [
113
+ {
114
+ provide: NG_VALUE_ACCESSOR,
115
+ useExisting: forwardRef(() => CatalogComponent),
116
+ multi: true
117
+ }
118
+ ], host: { class: 'yuv-catalog' }, template: "<yvc-dropdown [multiple]=\"multiselect\" [options]=\"_options\" [(ngModel)]=\"value\" (ngModelChange)=\"onChange($event)\" [filter]=\"filter\"\n [disabled]=\"readonly\"></yvc-dropdown>\n", styles: [":host{display:block}:host ::ng-deep .p-checkbox{flex-shrink:0}:host ::ng-deep .p-multiselect-item{white-space:normal;min-width:33ch}:host ::ng-deep .p-overlay{max-width:300px}\n"] }]
119
+ }], ctorParameters: () => [{ type: i1.SystemService }], propDecorators: { filter: [{
120
+ type: Input
121
+ }], situation: [{
122
+ type: Input
123
+ }], enableFilterWhenOptionsExceed: [{
124
+ type: Input
125
+ }], options: [{
126
+ type: Input
127
+ }], multiselect: [{
128
+ type: Input
129
+ }], classifications: [{
130
+ type: Input
131
+ }], appendTo: [{
132
+ type: Input
133
+ }], readonly: [{
134
+ type: Input
135
+ }] } });
136
+
137
+ class DatetimeComponent {
138
+ constructor() {
139
+ this.translate = inject(TranslateService);
140
+ this.value = null;
141
+ this.locale = this.translate.currentLang;
142
+ /**
143
+ * Whether or not to allow only values in the future (default: false)
144
+ */
145
+ this.onlyFutureDates = false;
146
+ /**
147
+ * Will prevent the input from being changed (default: false)
148
+ */
149
+ this.readonly = false;
150
+ /**
151
+ * Enables setting time as well (default: false)
152
+ */
153
+ this.withTime = false;
154
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
155
+ this.propagateChange = (fn) => { };
156
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
157
+ this.validationChange = () => { };
158
+ this._setLabels();
159
+ this.translate.onLangChange.subscribe((e) => (this.locale = e.lang));
160
+ }
161
+ _setLabels() {
162
+ this.labels = {
163
+ calendarApply: this.translate.instant('yuv.form.element.datetime.calendar.select'),
164
+ calendarCancel: this.translate.instant('yuv.form.element.datetime.calendar.cancel'),
165
+ shortcut: { today: this.translate.instant('yuv.form.element.datetime.calendar.today') }
166
+ };
167
+ }
168
+ writeValue(value) {
169
+ if (typeof value === 'string') {
170
+ value = new Date(value);
171
+ this.propagateChange(value);
172
+ }
173
+ this.value = value || null;
174
+ }
175
+ registerOnChange(fn) {
176
+ this.propagateChange = fn;
177
+ }
178
+ registerOnValidatorChange(fn) {
179
+ this.validationChange = fn;
180
+ }
181
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
182
+ registerOnTouched() { }
183
+ onValueChange(e) {
184
+ this.propagateChange(e);
185
+ }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatetimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DatetimeComponent, isStandalone: true, selector: "yuv-datetime", inputs: { onlyFutureDates: "onlyFutureDates", readonly: "readonly", withTime: "withTime" }, providers: [
188
+ {
189
+ provide: NG_VALUE_ACCESSOR,
190
+ useExisting: forwardRef(() => DatetimeComponent),
191
+ multi: true
192
+ }
193
+ ], ngImport: i0, template: "<yvc-datepicker #picker [calendar]=\"true\" [disabled]=\"readonly\" [locale]=\"locale\" [withTime]=\"withTime\" [labels]=\"labels!\"\n [onlyFutureDates]=\"onlyFutureDates\"\n [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"></yvc-datepicker>", styles: [":host{display:flex}:host yvc-datepicker{flex:1}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: YvcDatepickerModule }, { kind: "component", type: i2$1.Datepicker, selector: "yvc-datepicker", inputs: ["calendar", "readonly", "hour12", "locale", "labels", "withTime", "onlyFutureDates", "minDate", "maxDate", "disabled"] }] }); }
194
+ }
195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatetimeComponent, decorators: [{
196
+ type: Component,
197
+ args: [{ selector: 'yuv-datetime', standalone: true, imports: [FormsModule, YvcDatepickerModule, DatetimeComponent], providers: [
198
+ {
199
+ provide: NG_VALUE_ACCESSOR,
200
+ useExisting: forwardRef(() => DatetimeComponent),
201
+ multi: true
202
+ }
203
+ ], template: "<yvc-datepicker #picker [calendar]=\"true\" [disabled]=\"readonly\" [locale]=\"locale\" [withTime]=\"withTime\" [labels]=\"labels!\"\n [onlyFutureDates]=\"onlyFutureDates\"\n [ngModelOptions]=\"{standalone: true}\" [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"></yvc-datepicker>", styles: [":host{display:flex}:host yvc-datepicker{flex:1}\n"] }]
204
+ }], ctorParameters: () => [], propDecorators: { onlyFutureDates: [{
205
+ type: Input
206
+ }], readonly: [{
207
+ type: Input
208
+ }], withTime: [{
209
+ type: Input
210
+ }] } });
211
+
212
+ class DatetimeRangeComponent {
213
+ constructor() {
214
+ this.fb = inject(FormBuilder);
215
+ /**
216
+ * Enables setting time as well (default: false)
217
+ */
218
+ this.withTime = false;
219
+ /**
220
+ * Will prevent the input from being changed (default: false)
221
+ */
222
+ this.readonly = false;
223
+ this.operator = 'eq';
224
+ this.rangeForm = this.fb.group({
225
+ dateValue: [undefined, Validators.required],
226
+ dateValueFrom: []
227
+ });
228
+ this._isValid = true;
229
+ // options for search situation
230
+ this.availableSearchOptions = [
231
+ { label: OperatorLabel.EQUAL, value: Operator.EQUAL },
232
+ { label: OperatorLabel.GREATER_OR_EQUAL, value: Operator.GREATER_OR_EQUAL },
233
+ { label: OperatorLabel.LESS_OR_EQUAL, value: Operator.LESS_OR_EQUAL },
234
+ { label: OperatorLabel.INTERVAL_INCLUDE_BOTH, value: Operator.INTERVAL_INCLUDE_BOTH }
235
+ ];
236
+ // the selected search option
237
+ this.searchOption = this.availableSearchOptions[1].value;
238
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
239
+ this.propagateChange = (_) => { };
240
+ }
241
+ writeValue(value) {
242
+ if (value && (value.firstValue || value.secondValue)) {
243
+ const match = this.availableSearchOptions.find((o) => o.value === value.operator);
244
+ this.searchOption = match ? match.value : this.availableSearchOptions[0].value;
245
+ this.value = value;
246
+ this.rangeForm.patchValue({
247
+ dateValueFrom: value.secondValue && value.firstValue,
248
+ dateValue: value.secondValue || value.firstValue
249
+ });
250
+ }
251
+ else {
252
+ this.searchOption = this.availableSearchOptions[0].value;
253
+ this.value = undefined;
254
+ this.rangeForm.reset();
255
+ }
256
+ }
257
+ registerOnChange(fn) {
258
+ this.propagateChange = fn;
259
+ }
260
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
261
+ registerOnTouched(fn) { }
262
+ onValueChange() {
263
+ const dateValue = this.rangeForm.value.dateValue || undefined;
264
+ if (this.searchOption === Operator.INTERVAL_INCLUDE_BOTH) {
265
+ const dateValueFrom = this.rangeForm.value.dateValueFrom || undefined;
266
+ if (dateValueFrom || dateValue) {
267
+ this._isValid = this.rangeForm.valid && !!dateValueFrom && !!dateValue;
268
+ this.value = !this._isValid ?
269
+ // {
270
+ // operator: this.searchOption,
271
+ // firstValue: undefined,
272
+ // secondValue: undefined
273
+ // }
274
+ undefined
275
+ :
276
+ {
277
+ operator: this.searchOption,
278
+ firstValue: dateValueFrom,
279
+ secondValue: dateValue
280
+ };
281
+ }
282
+ }
283
+ else {
284
+ this._isValid = this.rangeForm.valid;
285
+ this.value = !this._isValid ?
286
+ // {
287
+ // operator: this.searchOption,
288
+ // firstValue: undefined,
289
+ // secondValue: undefined
290
+ // }
291
+ undefined
292
+ :
293
+ {
294
+ operator: this.searchOption,
295
+ firstValue: dateValue,
296
+ secondValue: undefined
297
+ };
298
+ }
299
+ this.propagateChange(this.value);
300
+ }
301
+ validate() {
302
+ let err;
303
+ if (this.searchOption === Operator.EQUAL) {
304
+ err = {
305
+ datecontrol: {
306
+ valid: false
307
+ }
308
+ };
309
+ }
310
+ else {
311
+ // make sure that on ranges, the first value is earlier than the last
312
+ if (this.searchOption === Operator.INTERVAL_INCLUDE_BOTH && this.value && this.value.firstValue && this.value.secondValue) {
313
+ this._isValid = new Date(this.value.firstValue).getTime() < new Date(this.value.secondValue).getTime();
314
+ err = {
315
+ daterangeorder: {
316
+ valid: false
317
+ }
318
+ };
319
+ }
320
+ else {
321
+ err = {
322
+ daterange: {
323
+ valid: false
324
+ }
325
+ };
326
+ }
327
+ }
328
+ return this._isValid ? null : err;
329
+ }
330
+ ngOnInit() {
331
+ this.rangeForm.valueChanges.subscribe(() => this.onValueChange());
332
+ }
333
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatetimeRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
334
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DatetimeRangeComponent, isStandalone: true, selector: "yuv-datetime-range", inputs: { withTime: "withTime", readonly: "readonly", operator: "operator" }, providers: [
335
+ {
336
+ provide: NG_VALUE_ACCESSOR,
337
+ useExisting: forwardRef(() => DatetimeRangeComponent),
338
+ multi: true
339
+ },
340
+ {
341
+ provide: NG_VALIDATORS,
342
+ useExisting: forwardRef(() => DatetimeRangeComponent),
343
+ multi: true
344
+ }
345
+ ], ngImport: i0, template: "<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n @if (searchOption === 'gtelte') {\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValueFrom\"></yuv-datetime>\n }\n <yvc-dropdown\n [disableClearButton]=\"true\"\n [(ngModel)]=\"searchOption\"\n (ngModelChange)=\"onValueChange()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [options]=\"availableSearchOptions\"\n ></yvc-dropdown>\n\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValue\"></yuv-datetime>\n</form>\n", styles: [":host form{display:flex;flex-flow:row nowrap;align-items:center}:host form yuv-datetime{flex:1 1 auto}:host form yvc-dropdown{--yvc-form-element-border-color: var(--text-color-hint);--yvc-form-element-focus-border-color: var(--color-accent);padding:0;min-width:auto;border-radius:2px;background-color:var(--list-item-hover-background)}:host form yvc-dropdown:hover{background-color:var(--list-item-selected-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i3.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DatetimeComponent, selector: "yuv-datetime", inputs: ["onlyFutureDates", "readonly", "withTime"] }] }); }
346
+ }
347
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DatetimeRangeComponent, decorators: [{
348
+ type: Component,
349
+ args: [{ selector: 'yuv-datetime-range', standalone: true, imports: [CommonModule, FormsModule, YvcDropdownModule, ReactiveFormsModule, DatetimeComponent], providers: [
350
+ {
351
+ provide: NG_VALUE_ACCESSOR,
352
+ useExisting: forwardRef(() => DatetimeRangeComponent),
353
+ multi: true
354
+ },
355
+ {
356
+ provide: NG_VALIDATORS,
357
+ useExisting: forwardRef(() => DatetimeRangeComponent),
358
+ multi: true
359
+ }
360
+ ], template: "<form class=\"eo-datetime-range\" [formGroup]=\"rangeForm\">\n @if (searchOption === 'gtelte') {\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValueFrom\"></yuv-datetime>\n }\n <yvc-dropdown\n [disableClearButton]=\"true\"\n [(ngModel)]=\"searchOption\"\n (ngModelChange)=\"onValueChange()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [options]=\"availableSearchOptions\"\n ></yvc-dropdown>\n\n <yuv-datetime [withTime]=\"withTime\" formControlName=\"dateValue\"></yuv-datetime>\n</form>\n", styles: [":host form{display:flex;flex-flow:row nowrap;align-items:center}:host form yuv-datetime{flex:1 1 auto}:host form yvc-dropdown{--yvc-form-element-border-color: var(--text-color-hint);--yvc-form-element-focus-border-color: var(--color-accent);padding:0;min-width:auto;border-radius:2px;background-color:var(--list-item-hover-background)}:host form yvc-dropdown:hover{background-color:var(--list-item-selected-background)}\n"] }]
361
+ }], propDecorators: { withTime: [{
362
+ type: Input
363
+ }], readonly: [{
364
+ type: Input
365
+ }], operator: [{
366
+ type: Input
367
+ }] } });
368
+
369
+ /**
370
+ * Creates form input for number values.
371
+ *
372
+ * Implements `ControlValueAccessor` so it can be used within Angular forms.
373
+ *
374
+ * @example
375
+ * <yuv-number [scale]="2"></yuv-number>
376
+ *
377
+ */
378
+ class NumberComponent {
379
+ /**
380
+ * Number of decimal places
381
+ */
382
+ set scale(val) {
383
+ this._scale = Math.min(val || 0, 30);
384
+ }
385
+ get scale() {
386
+ return this._scale;
387
+ }
388
+ /**
389
+ * Overall amount of digits allowed (including decimal places)
390
+ */
391
+ set precision(val) {
392
+ this._precision = Math.min(val || 100, 100);
393
+ }
394
+ get precision() {
395
+ return this._precision;
396
+ }
397
+ /**
398
+ * Set to true to group number by pattern
399
+ */
400
+ set grouping(val) {
401
+ this._grouping = val ?? true;
402
+ }
403
+ get grouping() {
404
+ return this._grouping;
405
+ }
406
+ /**
407
+ * The pattern to group number value by
408
+ */
409
+ set groupPattern(val) {
410
+ this._pattern = val;
411
+ }
412
+ get groupPattern() {
413
+ return this._pattern;
414
+ }
415
+ /**
416
+ * classification property adds some semantics to the value of this component.
417
+ * If you provide a value of `filesize` numbers typed into the control will be
418
+ * handled like file sizes (calculates differnt units)
419
+ */
420
+ set classifications(classifications) {
421
+ this.numberPipe =
422
+ classifications && classifications.includes(Classification.NUMBER_FILESIZE) ? new FileSizePipe(this.translate) : new LocaleNumberPipe(this.translate);
423
+ }
424
+ static betweenTwoNumbers(val, minVal, maxVal) {
425
+ const min = !Utils.isEmpty(minVal) ? minVal : -Infinity;
426
+ const max = !Utils.isEmpty(maxVal) ? maxVal : Infinity;
427
+ return val >= min && val <= max;
428
+ }
429
+ constructor(translate) {
430
+ this.translate = translate;
431
+ this.innerValue = null;
432
+ this._grouping = false;
433
+ this.validationErrors = [];
434
+ /**
435
+ * Will prevent the input from being changed (default: false)
436
+ */
437
+ this.readonly = false;
438
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
439
+ this.propagateChange = (_) => { };
440
+ this.numberPipe = new LocaleNumberPipe(this.translate);
441
+ }
442
+ writeValue(value) {
443
+ this.value = value != null ? value : null;
444
+ this.innerValue = value != null ? this.numberPipe.numberToString(value, this.grouping, this.groupPattern, this.scale) : null;
445
+ }
446
+ registerOnChange(fn) {
447
+ this.propagateChange = fn;
448
+ }
449
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
450
+ registerOnTouched() { }
451
+ onValueChange(evt) {
452
+ this.validationErrors = [];
453
+ if (Utils.isEmpty(evt)) {
454
+ this.value = undefined;
455
+ this.propagateChange(this.value);
456
+ return;
457
+ }
458
+ // validate input
459
+ const val = this.numberPipe.stringToNumber(evt);
460
+ // general number validation
461
+ if (isNaN(val) || typeof val !== 'number') {
462
+ this.validationErrors.push({ key: 'number' });
463
+ }
464
+ else {
465
+ const split = evt.replaceAll(this.numberPipe.separator, '').split(this.numberPipe.decimalSeparator);
466
+ // check precision
467
+ if (this.precision !== undefined) {
468
+ const prePointDigits = this.precision - (this.scale || 0);
469
+ if (split[0]?.length > prePointDigits) {
470
+ this.validationErrors.push({ key: 'precision', params: { prePointDigits } });
471
+ }
472
+ }
473
+ // check scale
474
+ if (this.scale && split[1]?.length > this.scale) {
475
+ this.validationErrors.push({ key: 'scale', params: { scale: this.scale } });
476
+ }
477
+ // min max
478
+ if (!NumberComponent.betweenTwoNumbers(val, this.minValue, this.maxValue)) {
479
+ if (Utils.isEmpty(this.minValue)) {
480
+ this.validationErrors.push({ key: 'maxvalue', params: { maxValue: this.maxValue } });
481
+ }
482
+ else if (Utils.isEmpty(this.maxValue)) {
483
+ this.validationErrors.push({ key: 'minvalue', params: { minValue: this.minValue } });
484
+ }
485
+ else {
486
+ this.validationErrors.push({ key: 'minmax', params: { minValue: this.minValue, maxValue: this.maxValue } });
487
+ }
488
+ }
489
+ if (!this.validationErrors.length) {
490
+ this.value = val;
491
+ }
492
+ }
493
+ this.propagateChange(this.value);
494
+ }
495
+ // called when the input looses focus
496
+ format() {
497
+ if (!this.readonly && typeof this.value === 'number' && this.validationErrors.length === 0) {
498
+ this.innerValue = this.numberPipe.numberToString(this.value, this.grouping, this.groupPattern, this.scale);
499
+ }
500
+ }
501
+ // called when the input get focus
502
+ unformat() {
503
+ if (!this.readonly && typeof this.value === 'number' && this.validationErrors.length === 0) {
504
+ this.innerValue = this.numberPipe.transform(this.value, false);
505
+ }
506
+ }
507
+ // returns null when valid else the validation object
508
+ validate() {
509
+ return this.validationErrors.length ? Utils.arrayToObject(this.validationErrors, 'key', (err) => ({ valid: false, ...err })) : null;
510
+ }
511
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
512
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NumberComponent, isStandalone: true, selector: "yuv-number", inputs: { scale: "scale", precision: "precision", grouping: "grouping", groupPattern: "groupPattern", readonly: "readonly", minValue: "minValue", maxValue: "maxValue", classifications: "classifications" }, providers: [
513
+ {
514
+ provide: NG_VALUE_ACCESSOR,
515
+ useExisting: forwardRef(() => NumberComponent),
516
+ multi: true
517
+ },
518
+ {
519
+ provide: NG_VALIDATORS,
520
+ useExisting: forwardRef(() => NumberComponent),
521
+ multi: true
522
+ }
523
+ ], ngImport: i0, template: "<input type=\"string\" [(ngModel)]=\"innerValue\" (focus)=\"unformat()\" (blur)=\"format()\" class=\"input-number\"\n [readonly]=\"readonly\" (ngModelChange)=\"onValueChange($event)\" />\n", styles: [":host{display:block}:host input{width:100%;border:0;background-color:transparent}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
524
+ }
525
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberComponent, decorators: [{
526
+ type: Component,
527
+ args: [{ selector: 'yuv-number', standalone: true, imports: [FormsModule], providers: [
528
+ {
529
+ provide: NG_VALUE_ACCESSOR,
530
+ useExisting: forwardRef(() => NumberComponent),
531
+ multi: true
532
+ },
533
+ {
534
+ provide: NG_VALIDATORS,
535
+ useExisting: forwardRef(() => NumberComponent),
536
+ multi: true
537
+ }
538
+ ], template: "<input type=\"string\" [(ngModel)]=\"innerValue\" (focus)=\"unformat()\" (blur)=\"format()\" class=\"input-number\"\n [readonly]=\"readonly\" (ngModelChange)=\"onValueChange($event)\" />\n", styles: [":host{display:block}:host input{width:100%;border:0;background-color:transparent}\n"] }]
539
+ }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { scale: [{
540
+ type: Input
541
+ }], precision: [{
542
+ type: Input
543
+ }], grouping: [{
544
+ type: Input
545
+ }], groupPattern: [{
546
+ type: Input
547
+ }], readonly: [{
548
+ type: Input
549
+ }], minValue: [{
550
+ type: Input
551
+ }], maxValue: [{
552
+ type: Input
553
+ }], classifications: [{
554
+ type: Input
555
+ }] } });
556
+
557
+ /**
558
+ * Creates form input for ranges of numeric values.
559
+ *
560
+ * Implements `ControlValueAccessor` so it can be used within Angular forms.
561
+ *
562
+ * @example
563
+ * <yuv-number-range [scale]="2"></yuv-number-range>
564
+ *
565
+ */
566
+ class NumberRangeComponent {
567
+ constructor() {
568
+ /**
569
+ * Set to true to group number by pattern
570
+ */
571
+ this.grouping = false;
572
+ /**
573
+ * Will prevent the input from being changed (default: false)
574
+ */
575
+ this.readonly = false;
576
+ /**
577
+ * classification property adds some semantics to the value of this component.
578
+ * If you provide a value of `filesize` numbers typed into the control will be
579
+ * handled like file sizes (calculates differnt units)
580
+ */
581
+ this.classifications = [];
582
+ this.rangeForm = new UntypedFormGroup({
583
+ numberValue: new UntypedFormControl(),
584
+ numberValueFrom: new UntypedFormControl()
585
+ });
586
+ this.isValid = true;
587
+ // options for search situation
588
+ this.availableSearchOptions = [
589
+ { label: OperatorLabel.EQUAL, value: Operator.EQUAL },
590
+ { label: OperatorLabel.GREATER_OR_EQUAL, value: Operator.GREATER_OR_EQUAL },
591
+ { label: OperatorLabel.LESS_OR_EQUAL, value: Operator.LESS_OR_EQUAL },
592
+ { label: OperatorLabel.INTERVAL_INCLUDE_BOTH, value: Operator.INTERVAL_INCLUDE_BOTH }
593
+ ];
594
+ // the selected search option
595
+ this.searchOption = this.availableSearchOptions[1].value;
596
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
597
+ this.propagateChange = (_) => { };
598
+ this.rangeForm.valueChanges.forEach(() => {
599
+ this.onValueChange();
600
+ });
601
+ }
602
+ writeValue(value) {
603
+ if (value && (value.firstValue != null || value.secondValue != null)) {
604
+ const match = this.availableSearchOptions.find((o) => o.value === value.operator);
605
+ this.searchOption = match ? match.value : this.availableSearchOptions[0].value;
606
+ this.value = value;
607
+ if (value.secondValue == null) {
608
+ this.rangeForm.setValue({
609
+ numberValueFrom: null,
610
+ numberValue: value.firstValue != null ? value.firstValue : null
611
+ });
612
+ }
613
+ else {
614
+ this.rangeForm.setValue({
615
+ numberValueFrom: value.firstValue != null ? value.firstValue : null,
616
+ numberValue: value.secondValue
617
+ });
618
+ }
619
+ }
620
+ else {
621
+ this.searchOption = this.availableSearchOptions[0].value;
622
+ this.value = undefined;
623
+ this.rangeForm.reset();
624
+ }
625
+ }
626
+ registerOnChange(fn) {
627
+ this.propagateChange = fn;
628
+ }
629
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function
630
+ registerOnTouched(fn) { }
631
+ onValueChange() {
632
+ this.isValid = this.rangeForm.valid;
633
+ if (this.searchOption === Operator.INTERVAL_INCLUDE_BOTH) {
634
+ this.isValid = this.rangeForm.valid && this.rangeForm.value.numberValueFrom != null && this.rangeForm.value.numberValue != null;
635
+ this.value = !this.isValid
636
+ ? {
637
+ operator: this.searchOption,
638
+ firstValue: undefined,
639
+ secondValue: undefined
640
+ }
641
+ : {
642
+ operator: this.searchOption,
643
+ firstValue: this.rangeForm.value.numberValueFrom,
644
+ secondValue: this.rangeForm.value.numberValue
645
+ };
646
+ }
647
+ else {
648
+ this.value = !this.isValid
649
+ ? {
650
+ operator: this.searchOption,
651
+ firstValue: undefined,
652
+ secondValue: undefined
653
+ }
654
+ : {
655
+ operator: this.searchOption,
656
+ firstValue: this.rangeForm.value.numberValue,
657
+ secondValue: undefined
658
+ };
659
+ }
660
+ this.propagateChange(this.value);
661
+ }
662
+ // returns null when valid else the validation object
663
+ validate() {
664
+ let err;
665
+ if (this.searchOption === Operator.EQUAL) {
666
+ err = { number: { valid: false } };
667
+ }
668
+ else if (this.searchOption === Operator.INTERVAL_INCLUDE_BOTH && this.value?.firstValue && this.value?.secondValue) {
669
+ // make sure that on ranges, the first value is earlier than the last
670
+ this.isValid = this.value.firstValue < this.value.secondValue;
671
+ err = { numberrangeorder: { valid: false } };
672
+ }
673
+ else {
674
+ err = { numberrange: { valid: false } };
675
+ }
676
+ return this.isValid ? null : err;
677
+ }
678
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
679
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NumberRangeComponent, isStandalone: true, selector: "yuv-number-range", inputs: { scale: "scale", precision: "precision", grouping: "grouping", pattern: "pattern", readonly: "readonly", classifications: "classifications", minValue: "minValue", maxValue: "maxValue" }, providers: [
680
+ {
681
+ provide: NG_VALUE_ACCESSOR,
682
+ useExisting: forwardRef(() => NumberRangeComponent),
683
+ multi: true
684
+ },
685
+ {
686
+ provide: NG_VALIDATORS,
687
+ useExisting: forwardRef(() => NumberRangeComponent),
688
+ multi: true
689
+ }
690
+ ], ngImport: i0, template: "<form class=\"yuv-number-range\" [formGroup]=\"rangeForm\">\n @if(searchOption === 'gtelte'){\n <yuv-number\n class=\"first\"\n [readonly]=\"readonly\"\n [scale]=\"scale\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValueFrom\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n ></yuv-number>}\n\n <yvc-dropdown\n class=\"no-trigger\"\n [(ngModel)]=\"searchOption\"\n (ngModelChange)=\"onValueChange()\"\n [disabled]=\"readonly\"\n [disableClearButton]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\"\n [options]=\"availableSearchOptions\"\n ></yvc-dropdown>\n\n <yuv-number\n [scale]=\"scale\"\n [readonly]=\"readonly\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValue\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n >\n </yuv-number>\n</form>\n", styles: [":host{display:block}:host>form{display:flex;align-items:center}:host>form yuv-number{flex:1 1 auto}:host>form yuv-number.first ::ng-deep .input-number{text-align:right}:host>form yvc-dropdown{--yvc-form-element-border-color: var(--text-color-hint);--yvc-form-element-focus-border-color: var(--color-accent);padding:0;min-width:auto;border-radius:2px;background-color:var(--list-item-hover-background)}:host>form yvc-dropdown:hover{background-color:var(--list-item-selected-background)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: NumberComponent, selector: "yuv-number", inputs: ["scale", "precision", "grouping", "groupPattern", "readonly", "minValue", "maxValue", "classifications"] }, { kind: "ngmodule", type: YvcDropdownModule }, { kind: "component", type: i3.Dropdown, selector: "yvc-dropdown", inputs: ["options", "filter", "disabled", "multiple", "disableClearButton"], outputs: ["onDropdownOptionsClose"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
691
+ }
692
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NumberRangeComponent, decorators: [{
693
+ type: Component,
694
+ args: [{ selector: 'yuv-number-range', standalone: true, imports: [CommonModule, NumberComponent, YvcDropdownModule, FormsModule, ReactiveFormsModule], providers: [
695
+ {
696
+ provide: NG_VALUE_ACCESSOR,
697
+ useExisting: forwardRef(() => NumberRangeComponent),
698
+ multi: true
699
+ },
700
+ {
701
+ provide: NG_VALIDATORS,
702
+ useExisting: forwardRef(() => NumberRangeComponent),
703
+ multi: true
704
+ }
705
+ ], template: "<form class=\"yuv-number-range\" [formGroup]=\"rangeForm\">\n @if(searchOption === 'gtelte'){\n <yuv-number\n class=\"first\"\n [readonly]=\"readonly\"\n [scale]=\"scale\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValueFrom\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n ></yuv-number>}\n\n <yvc-dropdown\n class=\"no-trigger\"\n [(ngModel)]=\"searchOption\"\n (ngModelChange)=\"onValueChange()\"\n [disabled]=\"readonly\"\n [disableClearButton]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\"\n [options]=\"availableSearchOptions\"\n ></yvc-dropdown>\n\n <yuv-number\n [scale]=\"scale\"\n [readonly]=\"readonly\"\n [precision]=\"precision\"\n [grouping]=\"grouping\"\n [groupPattern]=\"pattern\"\n formControlName=\"numberValue\"\n [classifications]=\"classifications\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\"\n >\n </yuv-number>\n</form>\n", styles: [":host{display:block}:host>form{display:flex;align-items:center}:host>form yuv-number{flex:1 1 auto}:host>form yuv-number.first ::ng-deep .input-number{text-align:right}:host>form yvc-dropdown{--yvc-form-element-border-color: var(--text-color-hint);--yvc-form-element-focus-border-color: var(--color-accent);padding:0;min-width:auto;border-radius:2px;background-color:var(--list-item-hover-background)}:host>form yvc-dropdown:hover{background-color:var(--list-item-selected-background)}\n"] }]
706
+ }], ctorParameters: () => [], propDecorators: { scale: [{
707
+ type: Input
708
+ }], precision: [{
709
+ type: Input
710
+ }], grouping: [{
711
+ type: Input
712
+ }], pattern: [{
713
+ type: Input
714
+ }], readonly: [{
715
+ type: Input
716
+ }], classifications: [{
717
+ type: Input
718
+ }], minValue: [{
719
+ type: Input
720
+ }], maxValue: [{
721
+ type: Input
722
+ }] } });
723
+
724
+ /**
725
+ * Creates form input for organisation values.
726
+ * Implements `ControlValueAccessor` so it can be used within Angular forms.
727
+ *
728
+ * [Screenshot](../assets/images/yuv-organization.gif)
729
+ *
730
+ * @example
731
+ * <yuv-organization [multiselect]="true"></yuv-organization>
732
+ */
733
+ class OrganizationComponent {
734
+ constructor() {
735
+ this.system = inject(SystemService);
736
+ this.userService = inject(UserService);
737
+ this.minLength = 2;
738
+ this.icons = {
739
+ organizationMulti: YUV_ICONS['group'],
740
+ organization: YUV_ICONS['user']
741
+ };
742
+ this.isValidInput = true;
743
+ this.value = null;
744
+ this._innerValue = [];
745
+ this.autocompleteRes = [];
746
+ this.filterRoles = [];
747
+ /**
748
+ * Indicator that multiple strings could be inserted, they will be rendered as chips (default: false).
749
+ */
750
+ this.multiselect = false;
751
+ /**
752
+ * Will prevent the input from being changed (default: false)
753
+ */
754
+ this.readonly = false;
755
+ /**
756
+ * Set this to true and the component will try to gain focus once it has been rendered.
757
+ * Notice that this is not reliable. If there are any other components that are rendered
758
+ * later and also try to be focused, they will 'win', because there can only be one focus.
759
+ */
760
+ this.autofocus = false;
761
+ /**
762
+ * Will attch the overlay to this HTMLelement
763
+ */
764
+ this.appendTo = null;
765
+ /**
766
+ * Whether or not to exclude the current user from autocomplete result
767
+ */
768
+ this.excludeMe = false;
769
+ /**
770
+ * Whether or not the emitted value should be an object containing id and title
771
+ * or, if set to false only the ID
772
+ */
773
+ this.withMetadata = input(false);
774
+ this.userSelect = new EventEmitter();
775
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
776
+ this.propagateChange = (_) => { };
777
+ }
778
+ set innerValue(iv) {
779
+ this._innerValue = iv || [];
780
+ this.userSelect.emit(this._innerValue);
781
+ }
782
+ get innerValue() {
783
+ return this._innerValue;
784
+ }
785
+ // prevent ENTER from being propagated, because the component could be located
786
+ // inside some other component that also relys on ENTER
787
+ onKeydownHandler(event) {
788
+ event.stopPropagation();
789
+ }
790
+ get _inputDisabled() {
791
+ return !this.multiselect && this.innerValue?.length === 1;
792
+ }
793
+ set classifications(c) {
794
+ this._classifications = c;
795
+ if (c?.length) {
796
+ const classifications = this.system.getClassifications(c);
797
+ if (classifications.has(Classification.STRING_ORGANIZATION)) {
798
+ const options = classifications.get(Classification.STRING_ORGANIZATION).options;
799
+ this.filterRoles = options;
800
+ }
801
+ }
802
+ else {
803
+ this.filterRoles = [];
804
+ }
805
+ }
806
+ get classifications() {
807
+ return this._classifications;
808
+ }
809
+ writeValue(value) {
810
+ if (value) {
811
+ this.value = value;
812
+ this.resolveFn(value);
813
+ }
814
+ else {
815
+ this.value = null;
816
+ this.innerValue = [];
817
+ }
818
+ }
819
+ registerOnChange(fn) {
820
+ this.propagateChange = fn;
821
+ }
822
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
823
+ registerOnTouched(fn) { }
824
+ propagate() {
825
+ this.propagateChange(this.#getPropagateValue());
826
+ }
827
+ #getPropagateValue() {
828
+ return this.multiselect
829
+ ? this.withMetadata()
830
+ ? this.value
831
+ ? this._innerValue.map((v) => ({
832
+ id: v.id,
833
+ title: v.title
834
+ }))
835
+ : this.value
836
+ : this.value
837
+ : this.withMetadata()
838
+ ? this.value
839
+ ? {
840
+ id: this._innerValue[0].id,
841
+ title: this._innerValue[0].title
842
+ }
843
+ : this.value
844
+ : this.value;
845
+ }
846
+ focusInput() {
847
+ this.autoCompleteInput.focusInput();
848
+ }
849
+ resolveFn(value) {
850
+ const map = (value instanceof Array ? value : [value]).map((v) => {
851
+ const match = this.innerValue.find((iv) => iv.id === v);
852
+ return match
853
+ ? of(match)
854
+ : this.userService.getUserById(v).pipe(catchError(() => of(new YuvUser({
855
+ id: v,
856
+ title: v,
857
+ image: null
858
+ }, undefined))));
859
+ });
860
+ return forkJoin(map).subscribe((data) => {
861
+ this.innerValue = data;
862
+ // setTimeout(() => this.autoCompleteInput.cd.markForCheck());
863
+ });
864
+ }
865
+ autocompleteFn(query) {
866
+ if (query.length >= this.minLength) {
867
+ this.userService.queryUser(query, this.excludeMe, this.filterRoles).subscribe({
868
+ next: (users) => {
869
+ this.autocompleteRes = users.filter((user) => !this.innerValue.some((value) => value.id === user.id));
870
+ this.propagateValidity(this.autocompleteRes.length > 0);
871
+ },
872
+ error: () => {
873
+ this.autocompleteRes = [];
874
+ this.propagateValidity(this.autocompleteRes.length > 0);
875
+ }
876
+ });
877
+ }
878
+ else {
879
+ this.autocompleteRes = [];
880
+ }
881
+ }
882
+ // returns null when valid else the validation object
883
+ validate() {
884
+ return this.isValidInput ? null : { empty: { valid: false } };
885
+ }
886
+ propagateValidity(valid = true) {
887
+ if (this.isValidInput !== valid) {
888
+ this.isValidInput = valid;
889
+ this.propagate();
890
+ }
891
+ }
892
+ // handle selection changes to the model
893
+ onSelect() {
894
+ if (this.multiselect) {
895
+ this.value = this.innerValue.map((v) => v.id);
896
+ }
897
+ else {
898
+ // internal autocomplete control is always set to multiselect
899
+ // so the resolved value is always an array
900
+ this.innerValue = this.innerValue.slice(-1);
901
+ this.value = this.innerValue[0].id;
902
+ }
903
+ this.propagate();
904
+ }
905
+ // handle selection changes to the model
906
+ onUnselect(value) {
907
+ this.innerValue = this.innerValue.filter((v) => v.id !== value.id);
908
+ const _value = this.innerValue.map((v) => v.id);
909
+ this.value = this.multiselect ? _value : null;
910
+ if (!this.multiselect) {
911
+ this.clearInnerInput();
912
+ }
913
+ this.propagate();
914
+ }
915
+ onAutoCompleteBlur() {
916
+ this.clearInnerInput();
917
+ }
918
+ clearInnerInput() {
919
+ this.autoCompleteInput.clearInput();
920
+ }
921
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OrganizationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
922
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: OrganizationComponent, isStandalone: true, selector: "yuv-organization", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, situation: { classPropertyName: "situation", publicName: "situation", isSignal: false, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: false, isRequired: false, transformFunction: null }, classifications: { classPropertyName: "classifications", publicName: "classifications", isSignal: false, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: false, isRequired: false, transformFunction: null }, autofocus: { classPropertyName: "autofocus", publicName: "autofocus", isSignal: false, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: false, isRequired: false, transformFunction: null }, excludeMe: { classPropertyName: "excludeMe", publicName: "excludeMe", isSignal: false, isRequired: false, transformFunction: null }, withMetadata: { classPropertyName: "withMetadata", publicName: "withMetadata", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { userSelect: "userSelect" }, host: { listeners: { "keydown.enter": "onKeydownHandler($event)" }, properties: { "class.inputDisabled": "this._inputDisabled" } }, providers: [
923
+ {
924
+ provide: NG_VALUE_ACCESSOR,
925
+ useExisting: forwardRef(() => OrganizationComponent),
926
+ multi: true
927
+ },
928
+ {
929
+ provide: NG_VALIDATORS,
930
+ useExisting: forwardRef(() => OrganizationComponent),
931
+ multi: true
932
+ }
933
+ ], viewQueries: [{ propertyName: "autoCompleteInput", first: true, predicate: ["autocomplete"], descendants: true }], ngImport: i0, template: "<yvc-autocomplete\n [(ngModel)]=\"innerValue\"\n #autocomplete\n (suggestionSelect)=\"onSelect()\"\n [placeholder]=\"placeholder\"\n (suggestionUnselect)=\"onUnselect($event)\"\n (blur)=\"onAutoCompleteBlur()\"\n [disabled]=\"readonly\"\n [autocompleteValues]=\"autocompleteRes\"\n field=\"id\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #autocompleteOptionTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n \n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n</yvc-autocomplete>\n\n<yvc-icon\n class=\"classify\"\n [title]=\"'yuv.form.element.organization.classify.icon.title' | translate\"\n [svg]=\"multiselect ? icons.organizationMulti : icons.organization\"\n (click)=\"focusInput()\"\n></yvc-icon>\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep .chip{--yvc-form-element-border-color: var(--text-color-hint)}:host yvc-autocomplete{flex:1;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}:host yvc-icon.classify{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8);color:var(--text-color-hint)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: YvcAutocompleteModule }, { kind: "component", type: i2$2.AutoComplete, selector: "yvc-autocomplete", inputs: ["field", "placeholder", "minLength", "multiple", "typeahead", "distinctValues", "forceSelection", "autocompleteValues", "disabled"], outputs: ["autocompleteFnc", "blur", "focus", "suggestionUnselect", "suggestionSelect"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i3$1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
934
+ }
935
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OrganizationComponent, decorators: [{
936
+ type: Component,
937
+ args: [{ selector: 'yuv-organization', standalone: true, imports: [CommonModule, FormsModule, YvcAutocompleteModule, YvcIconModule, TranslateModule], providers: [
938
+ {
939
+ provide: NG_VALUE_ACCESSOR,
940
+ useExisting: forwardRef(() => OrganizationComponent),
941
+ multi: true
942
+ },
943
+ {
944
+ provide: NG_VALIDATORS,
945
+ useExisting: forwardRef(() => OrganizationComponent),
946
+ multi: true
947
+ }
948
+ ], template: "<yvc-autocomplete\n [(ngModel)]=\"innerValue\"\n #autocomplete\n (suggestionSelect)=\"onSelect()\"\n [placeholder]=\"placeholder\"\n (suggestionUnselect)=\"onUnselect($event)\"\n (blur)=\"onAutoCompleteBlur()\"\n [disabled]=\"readonly\"\n [autocompleteValues]=\"autocompleteRes\"\n field=\"id\"\n [forceSelection]=\"true\"\n (autocompleteFnc)=\"autocompleteFn($event)\"\n [multiple]=\"true\"\n>\n <!-- template for item inside the dropdown -->\n <ng-template #autocompleteOptionTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n \n <!-- template for chip -->\n <ng-template #chipTemplate let-item>\n <span class=\"chip\">{{ item.title }}</span>\n </ng-template>\n</yvc-autocomplete>\n\n<yvc-icon\n class=\"classify\"\n [title]=\"'yuv.form.element.organization.classify.icon.title' | translate\"\n [svg]=\"multiselect ? icons.organizationMulti : icons.organization\"\n (click)=\"focusInput()\"\n></yvc-icon>\n", styles: [":host{display:flex;align-items:center}:host ::ng-deep .chip{--yvc-form-element-border-color: var(--text-color-hint)}:host yvc-autocomplete{flex:1;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}:host yvc-icon.classify{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8);color:var(--text-color-hint)}\n"] }]
949
+ }], propDecorators: { autoCompleteInput: [{
950
+ type: ViewChild,
951
+ args: ['autocomplete']
952
+ }], onKeydownHandler: [{
953
+ type: HostListener,
954
+ args: ['keydown.enter', ['$event']]
955
+ }], _inputDisabled: [{
956
+ type: HostBinding,
957
+ args: ['class.inputDisabled']
958
+ }], placeholder: [{
959
+ type: Input
960
+ }], situation: [{
961
+ type: Input
962
+ }], multiselect: [{
963
+ type: Input
964
+ }], classifications: [{
965
+ type: Input
966
+ }], readonly: [{
967
+ type: Input
968
+ }], autofocus: [{
969
+ type: Input
970
+ }], appendTo: [{
971
+ type: Input
972
+ }], excludeMe: [{
973
+ type: Input
974
+ }], userSelect: [{
975
+ type: Output
976
+ }] } });
977
+
978
+ /**
979
+ * Creates form input for strings. Based on the input values different kinds of inputs will be generated.
980
+ *
981
+ * Implements `ControlValueAccessor` so it can be used within Angular forms.
982
+ *
983
+ * @example
984
+ * <!-- string input validating input to be between 5 and 10 characters -->
985
+ * <yuv-string [minLength]="5" [maxLength]="10"></yuv-string>
986
+ *
987
+ * <!-- string input that only allow digits -->
988
+ * <yuv-string [regex]="[0-9]*"></yuv-string>
989
+ *
990
+ * <!-- string input rendering a large textarea -->
991
+ * <yuv-string [rows]="10"></yuv-string>
992
+ *
993
+ */
994
+ class StringComponent {
995
+ constructor() {
996
+ this.iconsService = inject(IconService);
997
+ this.elementRef = inject(ElementRef);
998
+ this.classifiytionIcons = {
999
+ email: this.iconsService.getIcon(ClassificationPrefix.EMAIL_ICON) || '',
1000
+ url: this.iconsService.getIcon(ClassificationPrefix.URL_ICON) || '',
1001
+ phone: this.iconsService.getIcon(ClassificationPrefix.PHONE_ICON) || ''
1002
+ };
1003
+ // provides all css variables defined by |yuuvis/comonents
1004
+ this.fe = true;
1005
+ /**
1006
+ * Indicator that multiple strings could be inserted, they will be rendered as chips (default: false).
1007
+ */
1008
+ this.multiselect = false;
1009
+ /**
1010
+ * Will prevent the input from being changed (default: false)
1011
+ */
1012
+ this.readonly = false;
1013
+ /**
1014
+ * Enable autofucus for the input (default: false)
1015
+ */
1016
+ this.autofocus = false;
1017
+ this.valid = false;
1018
+ this.validationErrors = [];
1019
+ this._classifications = [];
1020
+ this.propagateChange = (_) => { };
1021
+ }
1022
+ /**
1023
+ * Additional semantics for the form element. Possible values are
1024
+ * `email` (validates and creates a link to send an email once there
1025
+ * is a valid email address) and `url` (validates and creates a link
1026
+ * to an URL typed into the form element).
1027
+ */
1028
+ set classifications(c) {
1029
+ this._classifications = c;
1030
+ if (c && c.length) {
1031
+ if (c.includes(Classification.STRING_EMAIL)) {
1032
+ this.classify = {
1033
+ hrefPrefix: ClassificationPrefix.EMAIL,
1034
+ icon: this.classifiytionIcons.email
1035
+ };
1036
+ }
1037
+ else if (c.includes(Classification.STRING_URL)) {
1038
+ this.classify = {
1039
+ hrefPrefix: ClassificationPrefix.URL,
1040
+ icon: this.classifiytionIcons.url
1041
+ };
1042
+ }
1043
+ else if (c.includes(Classification.STRING_PHONE)) {
1044
+ this.classify = {
1045
+ hrefPrefix: ClassificationPrefix.PHONE,
1046
+ icon: this.classifiytionIcons.phone
1047
+ };
1048
+ }
1049
+ }
1050
+ }
1051
+ get classifications() {
1052
+ return this._classifications;
1053
+ }
1054
+ propagate() {
1055
+ this.propagateChange(this.value);
1056
+ }
1057
+ writeValue(value) {
1058
+ this.formatedValue = Utils.formatMailTo(value, this.classify?.hrefPrefix === ClassificationPrefix.EMAIL);
1059
+ this.value = value || null;
1060
+ }
1061
+ registerOnChange(fn) {
1062
+ this.propagateChange = fn;
1063
+ }
1064
+ registerOnTouched() { }
1065
+ onValueChange(val) {
1066
+ this.maxEntryCountIfInvalid = undefined;
1067
+ this.validationErrors = [];
1068
+ if (Utils.isEmpty(val)) {
1069
+ this.value = null;
1070
+ this.propagate();
1071
+ return;
1072
+ }
1073
+ const multiCheck = (check) => !!(this.multiselect ? val : [val]).find((v) => check(v));
1074
+ // validate regular expression
1075
+ if (this.regex && multiCheck((v) => !RegExp(this.regex).test(v))) {
1076
+ this.validationErrors.push({ key: 'regex' });
1077
+ }
1078
+ // validate classification settings
1079
+ if (this.classifications && this.classifications.length) {
1080
+ this.classifications.forEach((c) => {
1081
+ if (multiCheck((v) => !this.validateClassification(v, c))) {
1082
+ this.validationErrors.push({ key: 'classification' + c });
1083
+ }
1084
+ });
1085
+ }
1086
+ // validate min length
1087
+ if (!Utils.isEmpty(this.minLength) && multiCheck((v) => v.length < this.minLength)) {
1088
+ this.validationErrors.push({ key: 'minlength', params: { minLength: this.minLength } });
1089
+ }
1090
+ // validate max length
1091
+ if (!Utils.isEmpty(this.maxLength) && multiCheck((v) => v.length > this.maxLength)) {
1092
+ this.validationErrors.push({ key: 'maxlength', params: { maxLength: this.maxLength } });
1093
+ }
1094
+ // validate invalid if only whitespaces
1095
+ if (multiCheck((v) => v.length > 0 && !v.trim().length)) {
1096
+ this.validationErrors.push({ key: 'onlyWhitespaces' });
1097
+ }
1098
+ if (this.validationErrors.length && this.multiselect && this.value) {
1099
+ // Setting maxEntryCountIfInvalid to the actual length of the value array to prevent the user to add more entries.
1100
+ this.maxEntryCountIfInvalid = this.value.length;
1101
+ }
1102
+ this.formatedValue = Utils.formatMailTo(val, this.classify?.hrefPrefix === ClassificationPrefix.EMAIL);
1103
+ this.propagate();
1104
+ }
1105
+ onBlur() {
1106
+ if (this.trimValue()) {
1107
+ this.propagate();
1108
+ }
1109
+ }
1110
+ /**
1111
+ * Trims the current value and returns wether or not it has been trimmed
1112
+ */
1113
+ trimValue() {
1114
+ if (this.value) {
1115
+ if (this.multiselect) {
1116
+ const lengthBefore = this.value.join('').length;
1117
+ this.value = this.value.map((v) => v.trim());
1118
+ return this.value.join('').length !== lengthBefore;
1119
+ }
1120
+ else {
1121
+ const lengthBefore = this.value.length;
1122
+ this.value = this.value.trim();
1123
+ return this.value.length !== lengthBefore;
1124
+ }
1125
+ }
1126
+ return false;
1127
+ }
1128
+ validateClassification(string, classification) {
1129
+ if (this.situation === Situation.SEARCH) {
1130
+ return true;
1131
+ }
1132
+ else {
1133
+ let pattern;
1134
+ if (classification === Classification.STRING_EMAIL) {
1135
+ pattern =
1136
+ /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
1137
+ }
1138
+ else if (classification === Classification.STRING_URL) {
1139
+ pattern = /(http|ftp|https):\/\/[\w-]+(\.[\w-]+)?([\w.,@?^=%&amp;:\/~+#-]*[\w@?^=%&amp;\/~+#-])?/;
1140
+ }
1141
+ else if (classification === Classification.STRING_PHONE) {
1142
+ pattern = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-x\s\./0-9]*$/g;
1143
+ }
1144
+ return pattern ? pattern.test(string) : true;
1145
+ }
1146
+ }
1147
+ /**
1148
+ * returns null when valid else the validation object
1149
+ */
1150
+ validate() {
1151
+ if (this.validationErrors.length) {
1152
+ this.valid = false;
1153
+ return Utils.arrayToObject(this.validationErrors, 'key', (err) => ({ valid: false, ...err }));
1154
+ }
1155
+ else {
1156
+ this.valid = true;
1157
+ return null;
1158
+ }
1159
+ }
1160
+ ngAfterViewInit() {
1161
+ if (this.autofocus) {
1162
+ if (!this.multiselect) {
1163
+ const el = this.elementRef.nativeElement.querySelector(this.rows && this.rows > 1 ? 'textarea' : 'input');
1164
+ if (el)
1165
+ el.focus();
1166
+ }
1167
+ }
1168
+ }
1169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StringComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1170
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: StringComponent, isStandalone: true, selector: "yuv-string", inputs: { multiselect: "multiselect", rows: "rows", readonly: "readonly", autofocus: "autofocus", classifications: "classifications", situation: "situation", regex: "regex", minLength: "minLength", maxLength: "maxLength" }, host: { properties: { "class.yvc-form-element": "this.fe" } }, providers: [
1171
+ {
1172
+ provide: NG_VALUE_ACCESSOR,
1173
+ useExisting: forwardRef(() => StringComponent),
1174
+ multi: true
1175
+ },
1176
+ {
1177
+ provide: NG_VALIDATORS,
1178
+ useExisting: forwardRef(() => StringComponent),
1179
+ multi: true
1180
+ }
1181
+ ], ngImport: i0, template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input type=\"text\" (blur)=\"onBlur()\" [readonly]=\"readonly\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" />\n}\n@else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <yvc-chips\n [(ngModel)]=\"value\"\n [disabled]=\"readonly\"\n [max]=\"maxEntryCountIfInvalid\"\n (onBlur)=\"onBlur()\"\n (ngModelChange)=\"onValueChange($event)\"\n [ngClass]=\"{ invalid: validationErrors.length }\"\n >\n <ng-template let-item #chipTemplate>\n <span class=\"p-autocomplete-token-label\">\n @if (classify && !validationErrors.length) {\n <div class=\"classify inchip\">\n <a href=\"{{ classify.hrefPrefix + item }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n </div>\n }\n <div class=\"label\">\n {{ item }}\n </div>\n </span>\n </ng-template>\n </yvc-chips>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n class=\"input-textarea\"\n pInputTextarea\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n (ngModelChange)=\"onValueChange($event)\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n } @else {\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n }\n </div>\n}\n", styles: [":host{font-family:Roboto;display:flex;flex-flow:row nowrap;align-items:center}:host .p-autocomplete-token-label{display:flex;align-items:center;-webkit-user-select:text;user-select:text}:host .p-autocomplete-token-label .label{padding:0 calc(var(--app-pane-padding) / 4);word-break:break-word}:host .classify{color:var(--text-color-hint)}:host .classify a{color:var(--text-color-hint);display:block;border-radius:2px}:host .classify a:hover,:host .classify a:focus{background-color:var(--color-accent);color:#fff}:host .classify yvc-icon{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8)}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;color:var(--text-color-body);border:1px solid var(--yvc-form-element-border-color)}:host yvc-chips{width:100%}:host input{color:var(--text-color-body);padding:0;border:1px solid var(--yvc-form-element-border-color);display:flex;flex-wrap:wrap;align-items:center;width:100%;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: YvcChipsModule }, { kind: "component", type: i2$3.Chips, selector: "yvc-chips", inputs: ["field", "placeholder", "max", "disabled"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i3$1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
1182
+ }
1183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StringComponent, decorators: [{
1184
+ type: Component,
1185
+ args: [{ selector: 'yuv-string', standalone: true, imports: [CommonModule, YvcChipsModule, YvcIconModule, FormsModule], providers: [
1186
+ {
1187
+ provide: NG_VALUE_ACCESSOR,
1188
+ useExisting: forwardRef(() => StringComponent),
1189
+ multi: true
1190
+ },
1191
+ {
1192
+ provide: NG_VALIDATORS,
1193
+ useExisting: forwardRef(() => StringComponent),
1194
+ multi: true
1195
+ }
1196
+ ], template: "@if ((!rows || rows <= 1) && !multiselect) {\n <input type=\"text\" (blur)=\"onBlur()\" [readonly]=\"readonly\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\" />\n}\n@else if ((!rows || rows <= 1) && multiselect) {\n <!-- single line input with multiselect-->\n <yvc-chips\n [(ngModel)]=\"value\"\n [disabled]=\"readonly\"\n [max]=\"maxEntryCountIfInvalid\"\n (onBlur)=\"onBlur()\"\n (ngModelChange)=\"onValueChange($event)\"\n [ngClass]=\"{ invalid: validationErrors.length }\"\n >\n <ng-template let-item #chipTemplate>\n <span class=\"p-autocomplete-token-label\">\n @if (classify && !validationErrors.length) {\n <div class=\"classify inchip\">\n <a href=\"{{ classify.hrefPrefix + item }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n </div>\n }\n <div class=\"label\">\n {{ item }}\n </div>\n </span>\n </ng-template>\n </yvc-chips>\n} @else if (rows && rows > 1) {\n <!-- multi line text inputs -->\n <textarea\n class=\"input-textarea\"\n pInputTextarea\n (blur)=\"onBlur()\"\n [(ngModel)]=\"value\"\n [rows]=\"rows\"\n [readonly]=\"readonly\"\n (ngModelChange)=\"onValueChange($event)\"\n ></textarea>\n}\n\n@if (classify) {\n <div class=\"classify\">\n @if (value && !validationErrors.length && (classify.hrefPrefix !== '' || !multiselect || value.length <= 1)) {\n <a href=\"{{ classify.hrefPrefix + formatedValue }}\">\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n </a>\n } @else {\n <yvc-icon [svg]=\"classify.icon!\"></yvc-icon>\n }\n </div>\n}\n", styles: [":host{font-family:Roboto;display:flex;flex-flow:row nowrap;align-items:center}:host .p-autocomplete-token-label{display:flex;align-items:center;-webkit-user-select:text;user-select:text}:host .p-autocomplete-token-label .label{padding:0 calc(var(--app-pane-padding) / 4);word-break:break-word}:host .classify{color:var(--text-color-hint)}:host .classify a{color:var(--text-color-hint);display:block;border-radius:2px}:host .classify a:hover,:host .classify a:focus{background-color:var(--color-accent);color:#fff}:host .classify yvc-icon{width:18px;height:18px;padding:calc(var(--app-pane-padding) / 8)}:host textarea.input-textarea{width:100%;resize:vertical;background-color:transparent;color:var(--text-color-body);border:1px solid var(--yvc-form-element-border-color)}:host yvc-chips{width:100%}:host input{color:var(--text-color-body);padding:0;border:1px solid var(--yvc-form-element-border-color);display:flex;flex-wrap:wrap;align-items:center;width:100%;background:transparent}\n"] }]
1197
+ }], propDecorators: { fe: [{
1198
+ type: HostBinding,
1199
+ args: ['class.yvc-form-element']
1200
+ }], multiselect: [{
1201
+ type: Input
1202
+ }], rows: [{
1203
+ type: Input
1204
+ }], readonly: [{
1205
+ type: Input
1206
+ }], autofocus: [{
1207
+ type: Input
1208
+ }], classifications: [{
1209
+ type: Input
1210
+ }], situation: [{
1211
+ type: Input
1212
+ }], regex: [{
1213
+ type: Input
1214
+ }], minLength: [{
1215
+ type: Input
1216
+ }], maxLength: [{
1217
+ type: Input
1218
+ }] } });
1219
+
1220
+ /**
1221
+ * Component for wrapping a form element. Provides a label and focus behaviour.
1222
+ *
1223
+ * @example
1224
+ * <yuv-form-input [label]="'my form element'">
1225
+ * <!-- form element to be wrapped -->
1226
+ * </yuv-form-input>
1227
+ */
1228
+ class FormInputComponent {
1229
+ constructor() {
1230
+ this.renderer = inject(Renderer2);
1231
+ this.isDisabled = false;
1232
+ this.isInvalid = false;
1233
+ this.isRequired = false;
1234
+ }
1235
+ /**
1236
+ * A label string for the wrapped form element
1237
+ */
1238
+ set label(val) {
1239
+ this._label = val;
1240
+ }
1241
+ /**
1242
+ * Indicator that the wrapped form element is invalid. Will then render appropriate styles.
1243
+ * You may also provide an array of error messages.
1244
+ */
1245
+ set invalid(iv) {
1246
+ if (iv === null || iv === undefined) {
1247
+ this.isInvalid = false;
1248
+ this.renderer.removeAttribute(this.labelEl.nativeElement, 'title');
1249
+ }
1250
+ else if (Array.isArray(iv)) {
1251
+ this.isInvalid = iv.length > 0;
1252
+ if (this.isInvalid) {
1253
+ this.renderer.setAttribute(this.labelEl.nativeElement, 'title', iv.join(';'));
1254
+ }
1255
+ }
1256
+ else {
1257
+ this.isInvalid = iv;
1258
+ }
1259
+ }
1260
+ /**
1261
+ * Indicator that the wrapped form element is disabled. Will then render appropriate styles.
1262
+ */
1263
+ set disabled(d) {
1264
+ this.isDisabled = d;
1265
+ }
1266
+ /**
1267
+ * Indicator that the wrapped form element is mandatory. Will then render appropriate styles.
1268
+ */
1269
+ set required(d) {
1270
+ this.isRequired = d;
1271
+ }
1272
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1273
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FormInputComponent, isStandalone: true, selector: "yuv-form-input", inputs: { label: "label", tag: "tag", description: "description", invalid: "invalid", disabled: "disabled", required: "required" }, host: { properties: { "class.disabled": "this.isDisabled", "class.invalid": "this.isInvalid", "class.required": "this.isRequired" } }, viewQueries: [{ propertyName: "labelEl", first: true, predicate: ["label"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"fe-wrapper\" yuvFocusWithin>\n @if (tag) {\n <div class=\"tag\" title=\"{{ tag.title }}\">{{ tag.label }}</div>\n }\n <label class=\"form-input__label\" #label>{{ _label }}</label>\n <div class=\"control\">\n <ng-content></ng-content>\n </div>\n</div>\n@if (description) {\n <div class=\"description\">{{ description }}</div>\n}\n", styles: ["yuv-form-input .yvc-form-element{--yvc-form-element-border-color: transparent;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}yuv-form-input .fe-wrapper{display:flex;transition:all .2s ease-in-out;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 4) 0;border-bottom:1px solid var(--text-color-hint)}yuv-form-input .fe-wrapper.focusWithin{border-color:var(--color-accent)}yuv-form-input .fe-wrapper.focusWithin>.form-input__label{color:var(--color-accent)}yuv-form-input .fe-wrapper>div.control{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 4);order:1;min-height:20px}yuv-form-input .fe-wrapper>div.control>span{display:inline-block;border-radius:2px;font-size:var(--font-body);line-height:1.5em;background-color:var(--color-accent);padding:0 calc(var(--app-pane-padding) / 4);color:#fff}yuv-form-input .fe-wrapper>.triggers{order:3;display:none}yuv-form-input .fe-wrapper>.triggers.visible{order:2}yuv-form-input .fe-wrapper>.triggers.visible,yuv-form-input .fe-wrapper>.triggers:hover{display:flex}yuv-form-input .fe-wrapper>.form-input__label{text-align:end;transition:all .2s ease-in-out;-webkit-user-select:none;user-select:none;order:4;flex:0 1 auto;padding:2px calc(var(--app-pane-padding) / 4);margin-right:3px;color:var(--text-color-caption);border-radius:2px;font-size:var(--font-caption)}yuv-form-input .fe-wrapper>.form-input__label:hover+.triggers{display:flex}yuv-form-input .fe-wrapper>.tag{order:5;flex:0 0 auto;border-radius:2px;font-size:var(--font-body);display:inline-block;line-height:1.5em;padding:2px;cursor:default;background-color:rgba(var(--color-accent-rgb),.2);color:var(--color-accent);font-family:monospace}yuv-form-input.checkbox{position:relative}yuv-form-input.checkbox .fe-wrapper>.form-input__label{text-align:start}yuv-form-input .description{font-size:var(--font-hint);font-style:italic;padding:calc(var(--app-pane-padding) / 8) calc(var(--app-pane-padding) / 8) 0 calc(var(--app-pane-padding) / 8);color:var(--text-color-caption)}yuv-form-input.required .fe-wrapper>.form-input__label{font-weight:700}yuv-form-input.required .fe-wrapper>.form-input__label:after{content:\"*\";padding:0 4px}yuv-form-input.invalid .fe-wrapper{background:rgba(var(--color-error),.15);border-color:var(--color-error)}yuv-form-input.invalid .fe-wrapper>.form-input__label{background-color:var(--color-error);color:#fff;margin:0 4px}yuv-form-input.invalid .fe-wrapper>.form-input__label:after{content:\"!\";margin-left:calc(var(--app-pane-padding) / 2)}yuv-form-input.disabled .fe-wrapper{opacity:.7;background-color:var(--item-focus-background-color)}yuv-form-input.checkbox .fe-wrapper{border-color:transparent!important}yuv-form-input.checkbox .fe-wrapper>div.control{flex:0 0 auto}yuv-form-input.checkbox .fe-wrapper>.form-input__label{flex:0 1 auto}yuv-form-input:not(.skipToggle) .form-input__label{cursor:pointer}.yuv-form-input .fe-wrapper .fe-wrapper{background:transparent;padding:0}.yuv-form-input input:not([type=checkbox]),.yuv-form-input .p-inputtext{padding:0;border:0!important;display:flex;flex-wrap:wrap;align-items:center;width:100%}.yuv-form-input input{background-color:transparent}.yuv-form-input button.p-button{background:transparent;border:0;border-radius:2px;color:var(--text-color-caption);cursor:pointer;width:20px;height:20px;padding:0;min-width:20px}.yuv-form-input button.p-button:enabled:active,.yuv-form-input button.p-button:enabled:focus{border:0;box-shadow:none;background:var(--color-accent);color:#fff}.yuv-form-input button.p-button:enabled:active,.yuv-form-input button.p-button:enabled:hover{border:0;background:var(--color-accent);color:#fff}.yuv-form-input button.p-button .fa{color:currentColor!important}.yuv-form-input button.p-button yuv-icon{width:16px;height:16px;margin:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: FocusWithinDirective, selector: "[yuvFocusWithin]", outputs: ["yuvFocusWithin", "yuvFocusWithinBlur"] }], encapsulation: i0.ViewEncapsulation.None }); }
1274
+ }
1275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormInputComponent, decorators: [{
1276
+ type: Component,
1277
+ args: [{ selector: 'yuv-form-input', standalone: true, imports: [CommonModule, FocusWithinDirective], encapsulation: ViewEncapsulation.None, template: "<div class=\"fe-wrapper\" yuvFocusWithin>\n @if (tag) {\n <div class=\"tag\" title=\"{{ tag.title }}\">{{ tag.label }}</div>\n }\n <label class=\"form-input__label\" #label>{{ _label }}</label>\n <div class=\"control\">\n <ng-content></ng-content>\n </div>\n</div>\n@if (description) {\n <div class=\"description\">{{ description }}</div>\n}\n", styles: ["yuv-form-input .yvc-form-element{--yvc-form-element-border-color: transparent;--yvc-form-element-focus-border-color: transparent;--yvc-form-element-focus-outline-color: transparent}yuv-form-input .fe-wrapper{display:flex;transition:all .2s ease-in-out;flex-flow:row nowrap;align-items:center;padding:calc(var(--app-pane-padding) / 4) 0;border-bottom:1px solid var(--text-color-hint)}yuv-form-input .fe-wrapper.focusWithin{border-color:var(--color-accent)}yuv-form-input .fe-wrapper.focusWithin>.form-input__label{color:var(--color-accent)}yuv-form-input .fe-wrapper>div.control{flex:1 1 auto;padding:0 calc(var(--app-pane-padding) / 4);order:1;min-height:20px}yuv-form-input .fe-wrapper>div.control>span{display:inline-block;border-radius:2px;font-size:var(--font-body);line-height:1.5em;background-color:var(--color-accent);padding:0 calc(var(--app-pane-padding) / 4);color:#fff}yuv-form-input .fe-wrapper>.triggers{order:3;display:none}yuv-form-input .fe-wrapper>.triggers.visible{order:2}yuv-form-input .fe-wrapper>.triggers.visible,yuv-form-input .fe-wrapper>.triggers:hover{display:flex}yuv-form-input .fe-wrapper>.form-input__label{text-align:end;transition:all .2s ease-in-out;-webkit-user-select:none;user-select:none;order:4;flex:0 1 auto;padding:2px calc(var(--app-pane-padding) / 4);margin-right:3px;color:var(--text-color-caption);border-radius:2px;font-size:var(--font-caption)}yuv-form-input .fe-wrapper>.form-input__label:hover+.triggers{display:flex}yuv-form-input .fe-wrapper>.tag{order:5;flex:0 0 auto;border-radius:2px;font-size:var(--font-body);display:inline-block;line-height:1.5em;padding:2px;cursor:default;background-color:rgba(var(--color-accent-rgb),.2);color:var(--color-accent);font-family:monospace}yuv-form-input.checkbox{position:relative}yuv-form-input.checkbox .fe-wrapper>.form-input__label{text-align:start}yuv-form-input .description{font-size:var(--font-hint);font-style:italic;padding:calc(var(--app-pane-padding) / 8) calc(var(--app-pane-padding) / 8) 0 calc(var(--app-pane-padding) / 8);color:var(--text-color-caption)}yuv-form-input.required .fe-wrapper>.form-input__label{font-weight:700}yuv-form-input.required .fe-wrapper>.form-input__label:after{content:\"*\";padding:0 4px}yuv-form-input.invalid .fe-wrapper{background:rgba(var(--color-error),.15);border-color:var(--color-error)}yuv-form-input.invalid .fe-wrapper>.form-input__label{background-color:var(--color-error);color:#fff;margin:0 4px}yuv-form-input.invalid .fe-wrapper>.form-input__label:after{content:\"!\";margin-left:calc(var(--app-pane-padding) / 2)}yuv-form-input.disabled .fe-wrapper{opacity:.7;background-color:var(--item-focus-background-color)}yuv-form-input.checkbox .fe-wrapper{border-color:transparent!important}yuv-form-input.checkbox .fe-wrapper>div.control{flex:0 0 auto}yuv-form-input.checkbox .fe-wrapper>.form-input__label{flex:0 1 auto}yuv-form-input:not(.skipToggle) .form-input__label{cursor:pointer}.yuv-form-input .fe-wrapper .fe-wrapper{background:transparent;padding:0}.yuv-form-input input:not([type=checkbox]),.yuv-form-input .p-inputtext{padding:0;border:0!important;display:flex;flex-wrap:wrap;align-items:center;width:100%}.yuv-form-input input{background-color:transparent}.yuv-form-input button.p-button{background:transparent;border:0;border-radius:2px;color:var(--text-color-caption);cursor:pointer;width:20px;height:20px;padding:0;min-width:20px}.yuv-form-input button.p-button:enabled:active,.yuv-form-input button.p-button:enabled:focus{border:0;box-shadow:none;background:var(--color-accent);color:#fff}.yuv-form-input button.p-button:enabled:active,.yuv-form-input button.p-button:enabled:hover{border:0;background:var(--color-accent);color:#fff}.yuv-form-input button.p-button .fa{color:currentColor!important}.yuv-form-input button.p-button yuv-icon{width:16px;height:16px;margin:auto}\n"] }]
1278
+ }], propDecorators: { labelEl: [{
1279
+ type: ViewChild,
1280
+ args: ['label', { static: true }]
1281
+ }], label: [{
1282
+ type: Input
1283
+ }], tag: [{
1284
+ type: Input
1285
+ }], description: [{
1286
+ type: Input
1287
+ }], invalid: [{
1288
+ type: Input
1289
+ }], disabled: [{
1290
+ type: Input
1291
+ }], required: [{
1292
+ type: Input
1293
+ }], isDisabled: [{
1294
+ type: HostBinding,
1295
+ args: ['class.disabled']
1296
+ }], isInvalid: [{
1297
+ type: HostBinding,
1298
+ args: ['class.invalid']
1299
+ }], isRequired: [{
1300
+ type: HostBinding,
1301
+ args: ['class.required']
1302
+ }] } });
1303
+
1304
+ class YuvFormsModule {
1305
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: YuvFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1306
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: YuvFormsModule, imports: [CommonModule,
1307
+ FormsModule,
1308
+ TranslateModule$1,
1309
+ ReactiveFormsModule,
1310
+ YvcFocusWithin,
1311
+ YvcAutocompleteModule,
1312
+ YvcDatepickerModule,
1313
+ FormsModule,
1314
+ YvcCheckboxModule,
1315
+ YvcIconModule,
1316
+ YvcChipsModule,
1317
+ YvcDropdownModule] }); }
1318
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: YuvFormsModule, imports: [CommonModule,
1319
+ FormsModule,
1320
+ TranslateModule$1,
1321
+ ReactiveFormsModule,
1322
+ YvcAutocompleteModule,
1323
+ YvcDatepickerModule,
1324
+ FormsModule,
1325
+ YvcCheckboxModule,
1326
+ YvcIconModule,
1327
+ YvcChipsModule,
1328
+ YvcDropdownModule] }); }
1329
+ }
1330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: YuvFormsModule, decorators: [{
1331
+ type: NgModule,
1332
+ args: [{
1333
+ imports: [
1334
+ CommonModule,
1335
+ FormsModule,
1336
+ TranslateModule$1,
1337
+ ReactiveFormsModule,
1338
+ YvcFocusWithin,
1339
+ YvcAutocompleteModule,
1340
+ YvcDatepickerModule,
1341
+ FormsModule,
1342
+ YvcCheckboxModule,
1343
+ YvcIconModule,
1344
+ YvcChipsModule,
1345
+ YvcDropdownModule,
1346
+ ]
1347
+ }]
1348
+ }] });
1349
+
1350
+ /**
1351
+ * Generated bundle index. Do not edit.
1352
+ */
1353
+
1354
+ export { CatalogComponent, DatetimeComponent, DatetimeRangeComponent, FormInputComponent, NumberComponent, NumberRangeComponent, OrganizationComponent, StringComponent, YuvFormsModule };
1355
+ //# sourceMappingURL=yuuvis-client-framework-forms.mjs.map