@alfresco/aca-content 4.3.0-6421644511 → 4.3.0-6482535133

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.
@@ -21,7 +21,7 @@
21
21
  * You should have received a copy of the GNU Lesser General Public License
22
22
  * from Hyland Software. If not, see <http://www.gnu.org/licenses/>.
23
23
  */
24
- export const comparatorHiddenForConditionFieldType = ['special', 'mimeType'];
24
+ export const comparatorHiddenForConditionFieldType = ['special', 'mimeType', 'auto-complete'];
25
25
  export const ruleConditionFields = [
26
26
  {
27
27
  name: 'cm:name',
@@ -46,7 +46,7 @@ export const ruleConditionFields = [
46
46
  {
47
47
  name: 'category',
48
48
  label: 'ACA_FOLDER_RULES.RULE_DETAILS.FIELDS.HAS_CATEGORY',
49
- type: 'special'
49
+ type: 'auto-complete'
50
50
  },
51
51
  {
52
52
  name: 'tag',
@@ -59,4 +59,4 @@ export const ruleConditionFields = [
59
59
  type: 'special'
60
60
  }
61
61
  ];
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1jb25kaXRpb24tZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvZm9sZGVyLXJ1bGVzL3NyYy9ydWxlLWRldGFpbHMvY29uZGl0aW9ucy9ydWxlLWNvbmRpdGlvbi1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFVSCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUV2RixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBeUI7SUFDdkQ7UUFDRSxJQUFJLEVBQUUsU0FBUztRQUNmLEtBQUssRUFBRSwyQ0FBMkM7UUFDbEQsSUFBSSxFQUFFLFFBQVE7S0FDZjtJQUNEO1FBQ0UsSUFBSSxFQUFFLE1BQU07UUFDWixLQUFLLEVBQUUsMkNBQTJDO1FBQ2xELElBQUksRUFBRSxRQUFRO0tBQ2Y7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSwrQ0FBK0M7UUFDdEQsSUFBSSxFQUFFLFVBQVU7S0FDakI7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSwrQ0FBK0M7UUFDdEQsSUFBSSxFQUFFLFNBQVM7S0FDaEI7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLEtBQUssRUFBRSxtREFBbUQ7UUFDMUQsSUFBSSxFQUFFLFNBQVM7S0FDaEI7SUFDRDtRQUNFLElBQUksRUFBRSxLQUFLO1FBQ1gsS0FBSyxFQUFFLDhDQUE4QztRQUNyRCxJQUFJLEVBQUUsU0FBUztLQUNoQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLFFBQVE7UUFDZCxLQUFLLEVBQUUsaURBQWlEO1FBQ3hELElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvblxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24uXG4gKiBJZiB0aGUgc29mdHdhcmUgd2FzIHB1cmNoYXNlZCB1bmRlciBhIHBhaWQgQWxmcmVzY28gbGljZW5zZSwgdGhlIHRlcm1zIG9mXG4gKiB0aGUgcGFpZCBsaWNlbnNlIGFncmVlbWVudCB3aWxsIHByZXZhaWwuIE90aGVyd2lzZSwgdGhlIHNvZnR3YXJlIGlzXG4gKiBwcm92aWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIG9wZW4gc291cmNlIGxpY2Vuc2UgdGVybXM6XG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGVcbiAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogZnJvbSBIeWxhbmQgU29mdHdhcmUuIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5leHBvcnQgdHlwZSBSdWxlQ29uZGl0aW9uRmllbGRUeXBlID0gJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICd0eXBlJyB8ICdzcGVjaWFsJyB8ICdtaW1lVHlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUnVsZUNvbmRpdGlvbkZpZWxkIHtcbiAgbmFtZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiBSdWxlQ29uZGl0aW9uRmllbGRUeXBlO1xufVxuXG5leHBvcnQgY29uc3QgY29tcGFyYXRvckhpZGRlbkZvckNvbmRpdGlvbkZpZWxkVHlwZTogc3RyaW5nW10gPSBbJ3NwZWNpYWwnLCAnbWltZVR5cGUnXTtcblxuZXhwb3J0IGNvbnN0IHJ1bGVDb25kaXRpb25GaWVsZHM6IFJ1bGVDb25kaXRpb25GaWVsZFtdID0gW1xuICB7XG4gICAgbmFtZTogJ2NtOm5hbWUnLFxuICAgIGxhYmVsOiAnQUNBX0ZPTERFUl9SVUxFUy5SVUxFX0RFVEFJTFMuRklFTERTLk5BTUUnLFxuICAgIHR5cGU6ICdzdHJpbmcnXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuU0laRScsXG4gICAgdHlwZTogJ251bWJlcidcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtaW1ldHlwZScsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuTUlNRVRZUEUnLFxuICAgIHR5cGU6ICdtaW1lVHlwZSdcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdlbmNvZGluZycsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuRU5DT0RJTkcnLFxuICAgIHR5cGU6ICdzcGVjaWFsJ1xuICB9LFxuICB7XG4gICAgbmFtZTogJ2NhdGVnb3J5JyxcbiAgICBsYWJlbDogJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkZJRUxEUy5IQVNfQ0FURUdPUlknLFxuICAgIHR5cGU6ICdzcGVjaWFsJ1xuICB9LFxuICB7XG4gICAgbmFtZTogJ3RhZycsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuSEFTX1RBRycsXG4gICAgdHlwZTogJ3NwZWNpYWwnXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYXNwZWN0JyxcbiAgICBsYWJlbDogJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkZJRUxEUy5IQVNfQVNQRUNUJyxcbiAgICB0eXBlOiAnc3BlY2lhbCdcbiAgfVxuXTtcbiJdfQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1jb25kaXRpb24tZmllbGRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWNhLWNvbnRlbnQvZm9sZGVyLXJ1bGVzL3NyYy9ydWxlLWRldGFpbHMvY29uZGl0aW9ucy9ydWxlLWNvbmRpdGlvbi1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFVSCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBYSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFFeEcsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQXlCO0lBQ3ZEO1FBQ0UsSUFBSSxFQUFFLFNBQVM7UUFDZixLQUFLLEVBQUUsMkNBQTJDO1FBQ2xELElBQUksRUFBRSxRQUFRO0tBQ2Y7SUFDRDtRQUNFLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLDJDQUEyQztRQUNsRCxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixLQUFLLEVBQUUsK0NBQStDO1FBQ3RELElBQUksRUFBRSxVQUFVO0tBQ2pCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixLQUFLLEVBQUUsK0NBQStDO1FBQ3RELElBQUksRUFBRSxTQUFTO0tBQ2hCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsVUFBVTtRQUNoQixLQUFLLEVBQUUsbURBQW1EO1FBQzFELElBQUksRUFBRSxlQUFlO0tBQ3RCO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsS0FBSztRQUNYLEtBQUssRUFBRSw4Q0FBOEM7UUFDckQsSUFBSSxFQUFFLFNBQVM7S0FDaEI7SUFDRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsS0FBSyxFQUFFLGlEQUFpRDtRQUN4RCxJQUFJLEVBQUUsU0FBUztLQUNoQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjMgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuZXhwb3J0IHR5cGUgUnVsZUNvbmRpdGlvbkZpZWxkVHlwZSA9ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZScgfCAndHlwZScgfCAnc3BlY2lhbCcgfCAnbWltZVR5cGUnIHwgJ2F1dG8tY29tcGxldGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bGVDb25kaXRpb25GaWVsZCB7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogUnVsZUNvbmRpdGlvbkZpZWxkVHlwZTtcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXBhcmF0b3JIaWRkZW5Gb3JDb25kaXRpb25GaWVsZFR5cGU6IHN0cmluZ1tdID0gWydzcGVjaWFsJywgJ21pbWVUeXBlJywgJ2F1dG8tY29tcGxldGUnXTtcblxuZXhwb3J0IGNvbnN0IHJ1bGVDb25kaXRpb25GaWVsZHM6IFJ1bGVDb25kaXRpb25GaWVsZFtdID0gW1xuICB7XG4gICAgbmFtZTogJ2NtOm5hbWUnLFxuICAgIGxhYmVsOiAnQUNBX0ZPTERFUl9SVUxFUy5SVUxFX0RFVEFJTFMuRklFTERTLk5BTUUnLFxuICAgIHR5cGU6ICdzdHJpbmcnXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuU0laRScsXG4gICAgdHlwZTogJ251bWJlcidcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdtaW1ldHlwZScsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuTUlNRVRZUEUnLFxuICAgIHR5cGU6ICdtaW1lVHlwZSdcbiAgfSxcbiAge1xuICAgIG5hbWU6ICdlbmNvZGluZycsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuRU5DT0RJTkcnLFxuICAgIHR5cGU6ICdzcGVjaWFsJ1xuICB9LFxuICB7XG4gICAgbmFtZTogJ2NhdGVnb3J5JyxcbiAgICBsYWJlbDogJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkZJRUxEUy5IQVNfQ0FURUdPUlknLFxuICAgIHR5cGU6ICdhdXRvLWNvbXBsZXRlJ1xuICB9LFxuICB7XG4gICAgbmFtZTogJ3RhZycsXG4gICAgbGFiZWw6ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5GSUVMRFMuSEFTX1RBRycsXG4gICAgdHlwZTogJ3NwZWNpYWwnXG4gIH0sXG4gIHtcbiAgICBuYW1lOiAnYXNwZWN0JyxcbiAgICBsYWJlbDogJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLkZJRUxEUy5IQVNfQVNQRUNUJyxcbiAgICB0eXBlOiAnc3BlY2lhbCdcbiAgfVxuXTtcbiJdfQ==
@@ -26,23 +26,34 @@ import { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '
26
26
  import { comparatorHiddenForConditionFieldType, ruleConditionFields } from './rule-condition-fields';
27
27
  import { ruleConditionComparators } from './rule-condition-comparators';
28
28
  import { AppConfigService } from '@alfresco/adf-core';
29
- import { CommonModule } from '@angular/common';
29
+ import { AsyncPipe, CommonModule } from '@angular/common';
30
30
  import { TranslateModule } from '@ngx-translate/core';
31
31
  import { MatFormFieldModule } from '@angular/material/form-field';
32
32
  import { MatSelectModule } from '@angular/material/select';
33
33
  import { MatInputModule } from '@angular/material/input';
34
+ import { CategoryService } from '@alfresco/adf-content-services';
35
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
36
+ import { debounceTime, distinctUntilChanged, first, takeUntil } from 'rxjs/operators';
37
+ import { Subject } from 'rxjs';
38
+ import { MatOptionModule } from '@angular/material/core';
39
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
34
40
  import * as i0 from "@angular/core";
35
41
  import * as i1 from "@alfresco/adf-core";
36
- import * as i2 from "@angular/common";
37
- import * as i3 from "@ngx-translate/core";
38
- import * as i4 from "@angular/forms";
39
- import * as i5 from "@angular/material/form-field";
40
- import * as i6 from "@angular/material/select";
41
- import * as i7 from "@angular/material/core";
42
- import * as i8 from "@angular/material/input";
42
+ import * as i2 from "@alfresco/adf-content-services";
43
+ import * as i3 from "@angular/common";
44
+ import * as i4 from "@ngx-translate/core";
45
+ import * as i5 from "@angular/forms";
46
+ import * as i6 from "@angular/material/form-field";
47
+ import * as i7 from "@angular/material/select";
48
+ import * as i8 from "@angular/material/core";
49
+ import * as i9 from "@angular/material/input";
50
+ import * as i10 from "@angular/material/autocomplete";
51
+ import * as i11 from "@angular/material/progress-spinner";
52
+ const AUTOCOMPLETE_OPTIONS_DEBOUNCE_TIME = 500;
43
53
  export class RuleSimpleConditionUiComponent {
44
- constructor(config) {
54
+ constructor(config, categoryService) {
45
55
  this.config = config;
56
+ this.categoryService = categoryService;
46
57
  this.fields = ruleConditionFields;
47
58
  this.form = new FormGroup({
48
59
  field: new FormControl('cm:name'),
@@ -50,13 +61,12 @@ export class RuleSimpleConditionUiComponent {
50
61
  parameter: new FormControl()
51
62
  });
52
63
  this.mimeTypes = [];
64
+ this.autoCompleteOptions = [];
65
+ this.onDestroy$ = new Subject();
53
66
  this._readOnly = false;
54
- this.formSubscription = this.form.valueChanges.subscribe((value) => {
55
- this.onChange(value);
56
- this.onTouch();
57
- });
58
67
  this.onChange = () => undefined;
59
68
  this.onTouch = () => undefined;
69
+ this.autoCompleteDisplayFunction = (optionValue) => optionValue && this.autoCompleteOptions ? this.autoCompleteOptions.find((option) => option.value === optionValue)?.displayLabel : optionValue;
60
70
  this.mimeTypes = this.config.get('mimeTypes');
61
71
  }
62
72
  get readOnly() {
@@ -94,6 +104,18 @@ export class RuleSimpleConditionUiComponent {
94
104
  }
95
105
  writeValue(value) {
96
106
  this.form.setValue(value);
107
+ if (value?.field === 'category') {
108
+ this.showLoadingSpinner = true;
109
+ this.categoryService
110
+ .getCategory(value.parameter, { include: ['path'] })
111
+ .pipe(first())
112
+ .subscribe((category) => {
113
+ this.showLoadingSpinner = false;
114
+ const option = this.buildAutocompleteOptionFromCategory(category.entry.id, category.entry.path, category.entry.name);
115
+ this.autoCompleteOptions.push(option);
116
+ this.parameterControl.setValue(option.value);
117
+ });
118
+ }
97
119
  }
98
120
  registerOnChange(fn) {
99
121
  this.onChange = fn;
@@ -123,27 +145,92 @@ export class RuleSimpleConditionUiComponent {
123
145
  }
124
146
  }
125
147
  ngOnDestroy() {
126
- this.formSubscription.unsubscribe();
148
+ this.onDestroy$.next();
149
+ this.onDestroy$.complete();
150
+ }
151
+ ngOnInit() {
152
+ this.form.valueChanges.pipe(takeUntil(this.onDestroy$)).subscribe((value) => {
153
+ this.onChange(value);
154
+ this.onTouch();
155
+ });
156
+ this.form
157
+ .get('field')
158
+ .valueChanges.pipe(distinctUntilChanged(), takeUntil(this.onDestroy$))
159
+ .subscribe((field) => {
160
+ if (field === 'category') {
161
+ this.autoCompleteOptionsSubscription = this.form
162
+ .get('parameter')
163
+ .valueChanges.pipe(distinctUntilChanged(), debounceTime(AUTOCOMPLETE_OPTIONS_DEBOUNCE_TIME), takeUntil(this.onDestroy$))
164
+ .subscribe((categoryName) => {
165
+ this.getCategories(categoryName);
166
+ });
167
+ this.parameterControl.setValue('');
168
+ }
169
+ else {
170
+ this.autoCompleteOptionsSubscription?.unsubscribe();
171
+ }
172
+ });
173
+ }
174
+ getCategories(categoryName) {
175
+ this.showLoadingSpinner = true;
176
+ this.categoryService
177
+ .searchCategories(categoryName)
178
+ .pipe(first())
179
+ .subscribe((existingCategoriesResult) => {
180
+ this.showLoadingSpinner = false;
181
+ const options = existingCategoriesResult?.list?.entries?.map((rowEntry) => this.buildAutocompleteOptionFromCategory(rowEntry.entry.id, rowEntry.entry.path.name, rowEntry.entry.name));
182
+ if (options.length > 0) {
183
+ this.autoCompleteOptions = this.sortAutoCompleteOptions(options);
184
+ }
185
+ });
186
+ }
187
+ sortAutoCompleteOptions(autoCompleteOptions) {
188
+ return autoCompleteOptions.sort((option1, option2) => option1.displayLabel.localeCompare(option2.displayLabel));
189
+ }
190
+ autoSelectValidOption() {
191
+ const currentValue = this.parameterControl.value;
192
+ const isValidValueSelected = !!this.autoCompleteOptions?.find((option) => option.value === currentValue);
193
+ if (!isValidValueSelected) {
194
+ this.parameterControl.setValue(this.autoCompleteOptions?.[0].value);
195
+ }
196
+ }
197
+ buildAutocompleteOptionFromCategory(categoryId, categoryPath, categoryName) {
198
+ const path = categoryPath.split('/').splice(3).join('/');
199
+ return {
200
+ value: categoryId,
201
+ displayLabel: path ? `${path}/${categoryName}` : categoryName
202
+ };
127
203
  }
128
204
  }
129
- RuleSimpleConditionUiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RuleSimpleConditionUiComponent, deps: [{ token: i1.AppConfigService }], target: i0.ɵɵFactoryTarget.Component });
205
+ RuleSimpleConditionUiComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RuleSimpleConditionUiComponent, deps: [{ token: i1.AppConfigService }, { token: i2.CategoryService }], target: i0.ɵɵFactoryTarget.Component });
130
206
  RuleSimpleConditionUiComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: RuleSimpleConditionUiComponent, isStandalone: true, selector: "aca-rule-simple-condition", inputs: { readOnly: "readOnly" }, host: { classAttribute: "aca-rule-simple-condition" }, providers: [
131
207
  {
132
208
  provide: NG_VALUE_ACCESSOR,
133
209
  multi: true,
134
210
  useExisting: forwardRef(() => RuleSimpleConditionUiComponent)
135
211
  }
136
- ], ngImport: i0, template: "<form class=\"aca-rule-simple-condition__form\" [formGroup]=\"form\">\n <mat-form-field class=\"aca-rule-simple-condition__form__field-input\">\n <mat-select formControlName=\"field\" data-automation-id=\"field-select\"\n (selectionChange)=\"onChangeField()\">\n <mat-option *ngIf=\"!isSelectedFieldKnown\" [value]=\"selectedField.name\" data-automation-id=\"unknown-field-option\">\n {{ selectedField.label }}\n </mat-option>\n <mat-option *ngFor=\"let field of fields\" [value]=\"field.name\">\n {{ field.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__comparator-input\" [class]=\"{ hidden: isComparatorHidden }\" data-automation-id=\"comparator-form-field\">\n <mat-select formControlName=\"comparator\" data-automation-id=\"comparator-select\">\n <mat-option\n *ngFor=\"let comparator of selectedFieldComparators\"\n [value]=\"comparator.name\">\n {{ comparator.labels[this.selectedField?.type || 'equals'] | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__parameter-input\">\n <mat-select formControlName=\"parameter\" data-automation-id=\"simple-condition-value-select\" *ngIf=\"selectedField?.type === 'mimeType'; else valueInput\">\n <mat-option *ngFor=\"let mimeType of mimeTypes\"\n [value]=\"mimeType.value\">\n {{ mimeType.label }}\n </mat-option>\n </mat-select>\n <ng-template #valueInput>\n <input matInput placeholder=\"{{ 'ACA_FOLDER_RULES.RULE_DETAILS.PLACEHOLDER.VALUE' | translate }}\" type=\"text\" formControlName=\"parameter\" data-automation-id=\"value-input\">\n </ng-template>\n </mat-form-field>\n</form>\n", styles: [".aca-rule-simple-condition__form{display:flex;flex-direction:row;gap:8px}.aca-rule-simple-condition__form mat-form-field{flex:2;font-size:inherit}.aca-rule-simple-condition__form__comparator-input.hidden{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }], encapsulation: i0.ViewEncapsulation.None });
212
+ ], ngImport: i0, template: "<form class=\"aca-rule-simple-condition__form\" [formGroup]=\"form\">\n <mat-form-field class=\"aca-rule-simple-condition__form__field-input\">\n <mat-select formControlName=\"field\" data-automation-id=\"field-select\"\n (selectionChange)=\"onChangeField()\">\n <mat-option *ngIf=\"!isSelectedFieldKnown\" [value]=\"selectedField.name\" data-automation-id=\"unknown-field-option\">\n {{ selectedField.label }}\n </mat-option>\n <mat-option *ngFor=\"let field of fields\" [value]=\"field.name\">\n {{ field.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__comparator-input\" [class]=\"{ hidden: isComparatorHidden }\" data-automation-id=\"comparator-form-field\">\n <mat-select formControlName=\"comparator\" data-automation-id=\"comparator-select\">\n <mat-option\n *ngFor=\"let comparator of selectedFieldComparators\"\n [value]=\"comparator.name\">\n {{ comparator.labels[this.selectedField?.type || 'equals'] | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__parameter-input\" [ngSwitch]=\"selectedField.type\">\n <mat-select formControlName=\"parameter\" data-automation-id=\"simple-condition-value-select\" *ngSwitchCase=\"'mimeType'\">\n <mat-option *ngFor=\"let mimeType of mimeTypes\"\n [value]=\"mimeType.value\">\n {{ mimeType.label }}\n </mat-option>\n </mat-select>\n <ng-template [ngSwitchCase]=\"'auto-complete'\">\n <input\n matInput\n [matAutocomplete]=\"auto\"\n formControlName=\"parameter\"\n (focusout)=\"autoSelectValidOption()\"\n data-automation-id=\"auto-complete-input-field\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n data-automation-id=\"folder-rule-auto-complete\"\n [autoActiveFirstOption]=\"true\"\n [autoSelectActiveOption]=\"true\"\n [displayWith]=\"autoCompleteDisplayFunction\">\n <mat-option disabled *ngIf=\"showLoadingSpinner; else optionList\">\n <span class=\"aca-rule-simple-condition__auto-complete-loading-spinner\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n data-automation-id=\"auto-complete-loading-spinner\"\n [diameter]=\"25\"\n ></mat-progress-spinner>\n </span>\n </mat-option>\n <ng-template #optionList>\n <ng-container *ngIf=\"autoCompleteOptions?.length > 0; else noOptionsTemplate\">\n <mat-option\n *ngFor=\"let option of autoCompleteOptions\"\n [value]=\"option.value\">\n {{ option.displayLabel }}\n </mat-option>\n </ng-container>\n <ng-template #noOptionsTemplate>\n <mat-option disabled>\n {{ 'ACA_FOLDER_RULES.AUTOCOMPLETE.NO_OPTIONS_FOUND' | translate }}\n </mat-option>\n </ng-template>\n </ng-template>\n </mat-autocomplete>\n </ng-template>\n <ng-template ngSwitchDefault>\n <input matInput placeholder=\"{{ 'ACA_FOLDER_RULES.RULE_DETAILS.PLACEHOLDER.VALUE' | translate }}\" type=\"text\" formControlName=\"parameter\" data-automation-id=\"value-input\">\n </ng-template>\n </mat-form-field>\n</form>\n", styles: [".aca-rule-simple-condition__form{display:flex;flex-direction:row;gap:8px}.aca-rule-simple-condition__form mat-form-field{flex:2;font-size:inherit}.aca-rule-simple-condition__form__comparator-input.hidden{display:none}.aca-rule-simple-condition__auto-complete-loading-spinner{display:flex;flex-direction:row;justify-content:center;align-items:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i10.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i10.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], encapsulation: i0.ViewEncapsulation.None });
137
213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: RuleSimpleConditionUiComponent, decorators: [{
138
214
  type: Component,
139
- args: [{ standalone: true, imports: [CommonModule, TranslateModule, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatInputModule], selector: 'aca-rule-simple-condition', encapsulation: ViewEncapsulation.None, host: { class: 'aca-rule-simple-condition' }, providers: [
215
+ args: [{ standalone: true, imports: [
216
+ CommonModule,
217
+ TranslateModule,
218
+ ReactiveFormsModule,
219
+ MatFormFieldModule,
220
+ MatSelectModule,
221
+ MatInputModule,
222
+ MatAutocompleteModule,
223
+ AsyncPipe,
224
+ MatOptionModule,
225
+ MatProgressSpinnerModule
226
+ ], selector: 'aca-rule-simple-condition', encapsulation: ViewEncapsulation.None, host: { class: 'aca-rule-simple-condition' }, providers: [
140
227
  {
141
228
  provide: NG_VALUE_ACCESSOR,
142
229
  multi: true,
143
230
  useExisting: forwardRef(() => RuleSimpleConditionUiComponent)
144
231
  }
145
- ], template: "<form class=\"aca-rule-simple-condition__form\" [formGroup]=\"form\">\n <mat-form-field class=\"aca-rule-simple-condition__form__field-input\">\n <mat-select formControlName=\"field\" data-automation-id=\"field-select\"\n (selectionChange)=\"onChangeField()\">\n <mat-option *ngIf=\"!isSelectedFieldKnown\" [value]=\"selectedField.name\" data-automation-id=\"unknown-field-option\">\n {{ selectedField.label }}\n </mat-option>\n <mat-option *ngFor=\"let field of fields\" [value]=\"field.name\">\n {{ field.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__comparator-input\" [class]=\"{ hidden: isComparatorHidden }\" data-automation-id=\"comparator-form-field\">\n <mat-select formControlName=\"comparator\" data-automation-id=\"comparator-select\">\n <mat-option\n *ngFor=\"let comparator of selectedFieldComparators\"\n [value]=\"comparator.name\">\n {{ comparator.labels[this.selectedField?.type || 'equals'] | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__parameter-input\">\n <mat-select formControlName=\"parameter\" data-automation-id=\"simple-condition-value-select\" *ngIf=\"selectedField?.type === 'mimeType'; else valueInput\">\n <mat-option *ngFor=\"let mimeType of mimeTypes\"\n [value]=\"mimeType.value\">\n {{ mimeType.label }}\n </mat-option>\n </mat-select>\n <ng-template #valueInput>\n <input matInput placeholder=\"{{ 'ACA_FOLDER_RULES.RULE_DETAILS.PLACEHOLDER.VALUE' | translate }}\" type=\"text\" formControlName=\"parameter\" data-automation-id=\"value-input\">\n </ng-template>\n </mat-form-field>\n</form>\n", styles: [".aca-rule-simple-condition__form{display:flex;flex-direction:row;gap:8px}.aca-rule-simple-condition__form mat-form-field{flex:2;font-size:inherit}.aca-rule-simple-condition__form__comparator-input.hidden{display:none}\n"] }]
146
- }], ctorParameters: function () { return [{ type: i1.AppConfigService }]; }, propDecorators: { readOnly: [{
232
+ ], template: "<form class=\"aca-rule-simple-condition__form\" [formGroup]=\"form\">\n <mat-form-field class=\"aca-rule-simple-condition__form__field-input\">\n <mat-select formControlName=\"field\" data-automation-id=\"field-select\"\n (selectionChange)=\"onChangeField()\">\n <mat-option *ngIf=\"!isSelectedFieldKnown\" [value]=\"selectedField.name\" data-automation-id=\"unknown-field-option\">\n {{ selectedField.label }}\n </mat-option>\n <mat-option *ngFor=\"let field of fields\" [value]=\"field.name\">\n {{ field.label | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__comparator-input\" [class]=\"{ hidden: isComparatorHidden }\" data-automation-id=\"comparator-form-field\">\n <mat-select formControlName=\"comparator\" data-automation-id=\"comparator-select\">\n <mat-option\n *ngFor=\"let comparator of selectedFieldComparators\"\n [value]=\"comparator.name\">\n {{ comparator.labels[this.selectedField?.type || 'equals'] | translate }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field class=\"aca-rule-simple-condition__form__parameter-input\" [ngSwitch]=\"selectedField.type\">\n <mat-select formControlName=\"parameter\" data-automation-id=\"simple-condition-value-select\" *ngSwitchCase=\"'mimeType'\">\n <mat-option *ngFor=\"let mimeType of mimeTypes\"\n [value]=\"mimeType.value\">\n {{ mimeType.label }}\n </mat-option>\n </mat-select>\n <ng-template [ngSwitchCase]=\"'auto-complete'\">\n <input\n matInput\n [matAutocomplete]=\"auto\"\n formControlName=\"parameter\"\n (focusout)=\"autoSelectValidOption()\"\n data-automation-id=\"auto-complete-input-field\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n data-automation-id=\"folder-rule-auto-complete\"\n [autoActiveFirstOption]=\"true\"\n [autoSelectActiveOption]=\"true\"\n [displayWith]=\"autoCompleteDisplayFunction\">\n <mat-option disabled *ngIf=\"showLoadingSpinner; else optionList\">\n <span class=\"aca-rule-simple-condition__auto-complete-loading-spinner\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n data-automation-id=\"auto-complete-loading-spinner\"\n [diameter]=\"25\"\n ></mat-progress-spinner>\n </span>\n </mat-option>\n <ng-template #optionList>\n <ng-container *ngIf=\"autoCompleteOptions?.length > 0; else noOptionsTemplate\">\n <mat-option\n *ngFor=\"let option of autoCompleteOptions\"\n [value]=\"option.value\">\n {{ option.displayLabel }}\n </mat-option>\n </ng-container>\n <ng-template #noOptionsTemplate>\n <mat-option disabled>\n {{ 'ACA_FOLDER_RULES.AUTOCOMPLETE.NO_OPTIONS_FOUND' | translate }}\n </mat-option>\n </ng-template>\n </ng-template>\n </mat-autocomplete>\n </ng-template>\n <ng-template ngSwitchDefault>\n <input matInput placeholder=\"{{ 'ACA_FOLDER_RULES.RULE_DETAILS.PLACEHOLDER.VALUE' | translate }}\" type=\"text\" formControlName=\"parameter\" data-automation-id=\"value-input\">\n </ng-template>\n </mat-form-field>\n</form>\n", styles: [".aca-rule-simple-condition__form{display:flex;flex-direction:row;gap:8px}.aca-rule-simple-condition__form mat-form-field{flex:2;font-size:inherit}.aca-rule-simple-condition__form__comparator-input.hidden{display:none}.aca-rule-simple-condition__auto-complete-loading-spinner{display:flex;flex-direction:row;justify-content:center;align-items:center}\n"] }]
233
+ }], ctorParameters: function () { return [{ type: i1.AppConfigService }, { type: i2.CategoryService }]; }, propDecorators: { readOnly: [{
147
234
  type: Input
148
235
  }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1zaW1wbGUtY29uZGl0aW9uLnVpLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcy9zcmMvcnVsZS1kZXRhaWxzL2NvbmRpdGlvbnMvcnVsZS1zaW1wbGUtY29uZGl0aW9uLnVpLWNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcy9zcmMvcnVsZS1kZXRhaWxzL2NvbmRpdGlvbnMvcnVsZS1zaW1wbGUtY29uZGl0aW9uLnVpLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFhLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBeUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZJLE9BQU8sRUFBRSxxQ0FBcUMsRUFBc0IsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6SCxPQUFPLEVBQTJCLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5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QyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDOzsySEFqR1UsOEJBQThCOytHQUE5Qiw4QkFBOEIsaUtBUjlCO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLEtBQUssRUFBRSxJQUFJO1lBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztTQUM5RDtLQUNGLDBCQ25ESCxxeURBbUNBLG9SRElZLFlBQVksK1BBQUUsZUFBZSwyRkFBRSxtQkFBbUIsNDhCQUFFLGtCQUFrQixzTkFBRSxlQUFlLHlRQUFFLGNBQWM7MkZBY3RHLDhCQUE4QjtrQkFoQjFDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxDQUFDLFlBQ3hHLDJCQUEyQixpQkFHdEIsaUJBQWlCLENBQUMsSUFBSSxRQUMvQixFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRSxhQUNqQzt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwrQkFBK0IsQ0FBQzt5QkFDOUQ7cUJBQ0Y7dUdBZUcsUUFBUTtzQkFEWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDIzIEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbi5cbiAqIElmIHRoZSBzb2Z0d2FyZSB3YXMgcHVyY2hhc2VkIHVuZGVyIGEgcGFpZCBBbGZyZXNjbyBsaWNlbnNlLCB0aGUgdGVybXMgb2ZcbiAqIHRoZSBwYWlkIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgcHJldmFpbC4gT3RoZXJ3aXNlLCB0aGUgc29mdHdhcmUgaXNcbiAqIHByb3ZpZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtczpcbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhlIEFsZnJlc2NvIEV4YW1wbGUgQ29udGVudCBBcHBsaWNhdGlvbiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZVxuICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBmcm9tIEh5bGFuZCBTb2Z0d2FyZS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUnVsZVNpbXBsZUNvbmRpdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL3J1bGUtc2ltcGxlLWNvbmRpdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBjb21wYXJhdG9ySGlkZGVuRm9yQ29uZGl0aW9uRmllbGRUeXBlLCBSdWxlQ29uZGl0aW9uRmllbGQsIHJ1bGVDb25kaXRpb25GaWVsZHMgfSBmcm9tICcuL3J1bGUtY29uZGl0aW9uLWZpZWxkcyc7XG5pbXBvcnQgeyBSdWxlQ29uZGl0aW9uQ29tcGFyYXRvciwgcnVsZUNvbmRpdGlvbkNvbXBhcmF0b3JzIH0gZnJvbSAnLi9ydWxlLWNvbmRpdGlvbi1jb21wYXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IE1pbWVUeXBlIH0gZnJvbSAnLi9ydWxlLW1pbWUtdHlwZXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBNYXRJbnB1dE1vZHVsZV0sXG4gIHNlbGVjdG9yOiAnYWNhLXJ1bGUtc2ltcGxlLWNvbmRpdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9ydWxlLXNpbXBsZS1jb25kaXRpb24udWktY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ydWxlLXNpbXBsZS1jb25kaXRpb24udWktY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDogeyBjbGFzczogJ2FjYS1ydWxlLXNpbXBsZS1jb25kaXRpb24nIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSdWxlU2ltcGxlQ29uZGl0aW9uVWlDb21wb25lbnQpXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFJ1bGVTaW1wbGVDb25kaXRpb25VaUNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkRlc3Ryb3kge1xuICByZWFkb25seSBmaWVsZHMgPSBydWxlQ29uZGl0aW9uRmllbGRzO1xuXG4gIGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBmaWVsZDogbmV3IEZvcm1Db250cm9sKCdjbTpuYW1lJyksXG4gICAgY29tcGFyYXRvcjogbmV3IEZvcm1Db250cm9sKCdlcXVhbHMnKSxcbiAgICBwYXJhbWV0ZXI6IG5ldyBGb3JtQ29udHJvbCgpXG4gIH0pO1xuXG4gIG1pbWVUeXBlczogTWltZVR5cGVbXSA9IFtdO1xuXG4gIHByaXZhdGUgX3JlYWRPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCByZWFkT25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHk7XG4gIH1cbiAgc2V0IHJlYWRPbmx5KGlzUmVhZE9ubHk6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldERpc2FibGVkU3RhdGUoaXNSZWFkT25seSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogQXBwQ29uZmlnU2VydmljZSkge1xuICAgIHRoaXMubWltZVR5cGVzID0gdGhpcy5jb25maWcuZ2V0PEFycmF5PE1pbWVUeXBlPj4oJ21pbWVUeXBlcycpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB0aGlzLm9uVG91Y2goKTtcbiAgfSk7XG5cbiAgZ2V0IGlzU2VsZWN0ZWRGaWVsZEtub3duKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRmllbGROYW1lID0gdGhpcy5mb3JtLmdldCgnZmllbGQnKS52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5maWVsZHMuZmluZEluZGV4KChmaWVsZDogUnVsZUNvbmRpdGlvbkZpZWxkKSA9PiBzZWxlY3RlZEZpZWxkTmFtZSA9PT0gZmllbGQubmFtZSkgPiAtMTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRGaWVsZCgpOiBSdWxlQ29uZGl0aW9uRmllbGQge1xuICAgIGNvbnN0IHNlbGVjdGVkRmllbGROYW1lID0gdGhpcy5mb3JtLmdldCgnZmllbGQnKS52YWx1ZTtcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZEZpZWxkS25vd24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHNlbGVjdGVkRmllbGROYW1lLFxuICAgICAgICBsYWJlbDogc2VsZWN0ZWRGaWVsZE5hbWUsXG4gICAgICAgIHR5cGU6ICdzcGVjaWFsJ1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSBzZWxlY3RlZEZpZWxkTmFtZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRGaWVsZENvbXBhcmF0b3JzKCk6IFJ1bGVDb25kaXRpb25Db21wYXJhdG9yW10ge1xuICAgIHJldHVybiBydWxlQ29uZGl0aW9uQ29tcGFyYXRvcnMuZmlsdGVyKChjb21wYXJhdG9yKSA9PiBPYmplY3Qua2V5cyhjb21wYXJhdG9yLmxhYmVscykuaW5jbHVkZXModGhpcy5zZWxlY3RlZEZpZWxkLnR5cGUpKTtcbiAgfVxuICBnZXQgaXNDb21wYXJhdG9ySGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb21wYXJhdG9ySGlkZGVuRm9yQ29uZGl0aW9uRmllbGRUeXBlLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRGaWVsZD8udHlwZSk7XG4gIH1cbiAgZ2V0IGNvbXBhcmF0b3JDb250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ2NvbXBhcmF0b3InKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHBhcmFtZXRlckNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KCdwYXJhbWV0ZXInKTtcbiAgfVxuXG4gIG9uQ2hhbmdlOiAoY29uZGl0aW9uOiBSdWxlU2ltcGxlQ29uZGl0aW9uKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuICBvblRvdWNoOiAoKSA9PiB2b2lkID0gKCkgPT4gdW5kZWZpbmVkO1xuXG4gIHdyaXRlVmFsdWUodmFsdWU6IFJ1bGVTaW1wbGVDb25kaXRpb24pIHtcbiAgICB0aGlzLmZvcm0uc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5fcmVhZE9ubHkgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybS5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZUZpZWxkKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpZWxkQ29tcGFyYXRvcnMuZmluZCgoY29tcGFyYXRvcikgPT4gY29tcGFyYXRvci5uYW1lID09PSB0aGlzLmNvbXBhcmF0b3JDb250cm9sLnZhbHVlKSkge1xuICAgICAgdGhpcy5jb21wYXJhdG9yQ29udHJvbC5zZXRWYWx1ZSgnZXF1YWxzJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5wYXJhbWV0ZXJDb250cm9sLnZhbHVlICYmIHRoaXMuc2VsZWN0ZWRGaWVsZD8udHlwZSA9PT0gJ21pbWVUeXBlJykge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJDb250cm9sLnNldFZhbHVlKHRoaXMubWltZVR5cGVzWzBdPy52YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhcmFtZXRlckNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMucGFyYW1ldGVyQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5mb3JtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxmb3JtIGNsYXNzPVwiYWNhLXJ1bGUtc2ltcGxlLWNvbmRpdGlvbl9fZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhY2EtcnVsZS1zaW1wbGUtY29uZGl0aW9uX19mb3JtX19maWVsZC1pbnB1dFwiPlxuICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpZWxkXCIgZGF0YS1hdXRvbWF0aW9uLWlkPVwiZmllbGQtc2VsZWN0XCJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgpXCI+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIiFpc1NlbGVjdGVkRmllbGRLbm93blwiIFt2YWx1ZV09XCJzZWxlY3RlZEZpZWxkLm5hbWVcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJ1bmtub3duLWZpZWxkLW9wdGlvblwiPlxuICAgICAgICB7eyBzZWxlY3RlZEZpZWxkLmxhYmVsIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZmllbGRzXCIgW3ZhbHVlXT1cImZpZWxkLm5hbWVcIj5cbiAgICAgICAge3sgZmllbGQubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8L21hdC1zZWxlY3Q+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiYWNhLXJ1bGUtc2ltcGxlLWNvbmRpdGlvbl9fZm9ybV9fY29tcGFyYXRvci1pbnB1dFwiIFtjbGFzc109XCJ7IGhpZGRlbjogaXNDb21wYXJhdG9ySGlkZGVuIH1cIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb21wYXJhdG9yLWZvcm0tZmllbGRcIj5cbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjb21wYXJhdG9yXCIgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29tcGFyYXRvci1zZWxlY3RcIj5cbiAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb21wYXJhdG9yIG9mIHNlbGVjdGVkRmllbGRDb21wYXJhdG9yc1wiXG4gICAgICAgIFt2YWx1ZV09XCJjb21wYXJhdG9yLm5hbWVcIj5cbiAgICAgICAge3sgY29tcGFyYXRvci5sYWJlbHNbdGhpcy5zZWxlY3RlZEZpZWxkPy50eXBlIHx8ICdlcXVhbHMnXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhY2EtcnVsZS1zaW1wbGUtY29uZGl0aW9uX19mb3JtX19wYXJhbWV0ZXItaW5wdXRcIj5cbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJwYXJhbWV0ZXJcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJzaW1wbGUtY29uZGl0aW9uLXZhbHVlLXNlbGVjdFwiICpuZ0lmPVwic2VsZWN0ZWRGaWVsZD8udHlwZSA9PT0gJ21pbWVUeXBlJzsgZWxzZSB2YWx1ZUlucHV0XCI+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWltZVR5cGUgb2YgbWltZVR5cGVzXCJcbiAgICAgICAgW3ZhbHVlXT1cIm1pbWVUeXBlLnZhbHVlXCI+XG4gICAgICAgIHt7IG1pbWVUeXBlLmxhYmVsIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWVJbnB1dD5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cInt7ICdBQ0FfRk9MREVSX1JVTEVTLlJVTEVfREVUQUlMUy5QTEFDRUhPTERFUi5WQUxVRScgfCB0cmFuc2xhdGUgfX1cIiB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInBhcmFtZXRlclwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInZhbHVlLWlucHV0XCI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZm9ybT5cbiJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1zaW1wbGUtY29uZGl0aW9uLnVpLWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcy9zcmMvcnVsZS1kZXRhaWxzL2NvbmRpdGlvbnMvcnVsZS1zaW1wbGUtY29uZGl0aW9uLnVpLWNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjYS1jb250ZW50L2ZvbGRlci1ydWxlcy9zcmMvcnVsZS1kZXRhaWxzL2NvbmRpdGlvbnMvcnVsZS1zaW1wbGUtY29uZGl0aW9uLnVpLWNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQXlDLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2SSxPQUFPLEVBQUUscUNBQXFDLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekgsT0FBTyxFQUEyQix3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFF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LGVBQWUseVFBQ2YsY0FBYywwV0FDZCxxQkFBcUIsc1VBRXJCLGVBQWUsOEJBQ2Ysd0JBQXdCOzJGQWVmLDhCQUE4QjtrQkEzQjFDLFNBQVM7aUNBQ0ksSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsU0FBUzt3QkFDVCxlQUFlO3dCQUNmLHdCQUF3QjtxQkFDekIsWUFDUywyQkFBMkIsaUJBR3RCLGlCQUFpQixDQUFDLElBQUksUUFDL0IsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLEVBQUUsYUFDakM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsK0JBQStCLENBQUM7eUJBQzlEO3FCQUNGO3FJQXFCRyxRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjMgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb25cbiAqXG4gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uLlxuICogSWYgdGhlIHNvZnR3YXJlIHdhcyBwdXJjaGFzZWQgdW5kZXIgYSBwYWlkIEFsZnJlc2NvIGxpY2Vuc2UsIHRoZSB0ZXJtcyBvZlxuICogdGhlIHBhaWQgbGljZW5zZSBhZ3JlZW1lbnQgd2lsbCBwcmV2YWlsLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBpc1xuICogcHJvdmlkZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zOlxuICpcbiAqIFRoZSBBbGZyZXNjbyBFeGFtcGxlIENvbnRlbnQgQXBwbGljYXRpb24gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGUgQWxmcmVzY28gRXhhbXBsZSBDb250ZW50IEFwcGxpY2F0aW9uIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlXG4gKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGZyb20gSHlsYW5kIFNvZnR3YXJlLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJ1bGVTaW1wbGVDb25kaXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbC9ydWxlLXNpbXBsZS1jb25kaXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgY29tcGFyYXRvckhpZGRlbkZvckNvbmRpdGlvbkZpZWxkVHlwZSwgUnVsZUNvbmRpdGlvbkZpZWxkLCBydWxlQ29uZGl0aW9uRmllbGRzIH0gZnJvbSAnLi9ydWxlLWNvbmRpdGlvbi1maWVsZHMnO1xuaW1wb3J0IHsgUnVsZUNvbmRpdGlvbkNvbXBhcmF0b3IsIHJ1bGVDb25kaXRpb25Db21wYXJhdG9ycyB9IGZyb20gJy4vcnVsZS1jb25kaXRpb24tY29tcGFyYXRvcnMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBNaW1lVHlwZSB9IGZyb20gJy4vcnVsZS1taW1lLXR5cGVzJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBDYXRlZ29yeVNlcnZpY2UgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvbnRlbnQtc2VydmljZXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpcnN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XG5pbXBvcnQgeyBDYXRlZ29yeUVudHJ5IH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5cbmludGVyZmFjZSBBdXRvQ29tcGxldGVPcHRpb24ge1xuICBkaXNwbGF5TGFiZWw6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuY29uc3QgQVVUT0NPTVBMRVRFX09QVElPTlNfREVCT1VOQ0VfVElNRSA9IDUwMDtcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRBdXRvY29tcGxldGVNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVcbiAgXSxcbiAgc2VsZWN0b3I6ICdhY2EtcnVsZS1zaW1wbGUtY29uZGl0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3J1bGUtc2ltcGxlLWNvbmRpdGlvbi51aS1jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3J1bGUtc2ltcGxlLWNvbmRpdGlvbi51aS1jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7IGNsYXNzOiAnYWNhLXJ1bGUtc2ltcGxlLWNvbmRpdGlvbicgfSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJ1bGVTaW1wbGVDb25kaXRpb25VaUNvbXBvbmVudClcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUnVsZVNpbXBsZUNvbmRpdGlvblVpQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgZmllbGRzID0gcnVsZUNvbmRpdGlvbkZpZWxkcztcblxuICBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgZmllbGQ6IG5ldyBGb3JtQ29udHJvbCgnY206bmFtZScpLFxuICAgIGNvbXBhcmF0b3I6IG5ldyBGb3JtQ29udHJvbCgnZXF1YWxzJyksXG4gICAgcGFyYW1ldGVyOiBuZXcgRm9ybUNvbnRyb2woKVxuICB9KTtcblxuICBtaW1lVHlwZXM6IE1pbWVUeXBlW10gPSBbXTtcblxuICBhdXRvQ29tcGxldGVPcHRpb25zOiBBdXRvQ29tcGxldGVPcHRpb25bXSA9IFtdO1xuXG4gIHNob3dMb2FkaW5nU3Bpbm5lcjogYm9vbGVhbjtcblxuICBwcml2YXRlIG9uRGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIGF1dG9Db21wbGV0ZU9wdGlvbnNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfcmVhZE9ubHkgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IHJlYWRPbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seTtcbiAgfVxuICBzZXQgcmVhZE9ubHkoaXNSZWFkT25seTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZShpc1JlYWRPbmx5KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLCBwcml2YXRlIGNhdGVnb3J5U2VydmljZTogQ2F0ZWdvcnlTZXJ2aWNlKSB7XG4gICAgdGhpcy5taW1lVHlwZXMgPSB0aGlzLmNvbmZpZy5nZXQ8QXJyYXk8TWltZVR5cGU+PignbWltZVR5cGVzJyk7XG4gIH1cbiAgZ2V0IGlzU2VsZWN0ZWRGaWVsZEtub3duKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRmllbGROYW1lID0gdGhpcy5mb3JtLmdldCgnZmllbGQnKS52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5maWVsZHMuZmluZEluZGV4KChmaWVsZDogUnVsZUNvbmRpdGlvbkZpZWxkKSA9PiBzZWxlY3RlZEZpZWxkTmFtZSA9PT0gZmllbGQubmFtZSkgPiAtMTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRGaWVsZCgpOiBSdWxlQ29uZGl0aW9uRmllbGQge1xuICAgIGNvbnN0IHNlbGVjdGVkRmllbGROYW1lID0gdGhpcy5mb3JtLmdldCgnZmllbGQnKS52YWx1ZTtcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZEZpZWxkS25vd24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHNlbGVjdGVkRmllbGROYW1lLFxuICAgICAgICBsYWJlbDogc2VsZWN0ZWRGaWVsZE5hbWUsXG4gICAgICAgIHR5cGU6ICdzcGVjaWFsJ1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSBzZWxlY3RlZEZpZWxkTmFtZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRGaWVsZENvbXBhcmF0b3JzKCk6IFJ1bGVDb25kaXRpb25Db21wYXJhdG9yW10ge1xuICAgIHJldHVybiBydWxlQ29uZGl0aW9uQ29tcGFyYXRvcnMuZmlsdGVyKChjb21wYXJhdG9yKSA9PiBPYmplY3Qua2V5cyhjb21wYXJhdG9yLmxhYmVscykuaW5jbHVkZXModGhpcy5zZWxlY3RlZEZpZWxkLnR5cGUpKTtcbiAgfVxuICBnZXQgaXNDb21wYXJhdG9ySGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb21wYXJhdG9ySGlkZGVuRm9yQ29uZGl0aW9uRmllbGRUeXBlLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRGaWVsZD8udHlwZSk7XG4gIH1cblxuICBnZXQgY29tcGFyYXRvckNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldCgnY29tcGFyYXRvcicpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcGFyYW1ldGVyQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoJ3BhcmFtZXRlcicpO1xuICB9XG5cbiAgb25DaGFuZ2U6IChjb25kaXRpb246IFJ1bGVTaW1wbGVDb25kaXRpb24pID0+IHZvaWQgPSAoKSA9PiB1bmRlZmluZWQ7XG4gIG9uVG91Y2g6ICgpID0+IHZvaWQgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogUnVsZVNpbXBsZUNvbmRpdGlvbikge1xuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlPy5maWVsZCA9PT0gJ2NhdGVnb3J5Jykge1xuICAgICAgdGhpcy5zaG93TG9hZGluZ1NwaW5uZXIgPSB0cnVlO1xuICAgICAgdGhpcy5jYXRlZ29yeVNlcnZpY2VcbiAgICAgICAgLmdldENhdGVnb3J5KHZhbHVlLnBhcmFtZXRlciwgeyBpbmNsdWRlOiBbJ3BhdGgnXSB9KVxuICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAuc3Vic2NyaWJlKChjYXRlZ29yeTogQ2F0ZWdvcnlFbnRyeSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyID0gZmFsc2U7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5idWlsZEF1dG9jb21wbGV0ZU9wdGlvbkZyb21DYXRlZ29yeShjYXRlZ29yeS5lbnRyeS5pZCwgY2F0ZWdvcnkuZW50cnkucGF0aCwgY2F0ZWdvcnkuZW50cnkubmFtZSk7XG4gICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlckNvbnRyb2wuc2V0VmFsdWUob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5vblRvdWNoID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5fcmVhZE9ubHkgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybS5lbmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZUZpZWxkKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZEZpZWxkQ29tcGFyYXRvcnMuZmluZCgoY29tcGFyYXRvcikgPT4gY29tcGFyYXRvci5uYW1lID09PSB0aGlzLmNvbXBhcmF0b3JDb250cm9sLnZhbHVlKSkge1xuICAgICAgdGhpcy5jb21wYXJhdG9yQ29udHJvbC5zZXRWYWx1ZSgnZXF1YWxzJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5wYXJhbWV0ZXJDb250cm9sLnZhbHVlICYmIHRoaXMuc2VsZWN0ZWRGaWVsZD8udHlwZSA9PT0gJ21pbWVUeXBlJykge1xuICAgICAgdGhpcy5wYXJhbWV0ZXJDb250cm9sLnNldFZhbHVlKHRoaXMubWltZVR5cGVzWzBdPy52YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhcmFtZXRlckNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMucGFyYW1ldGVyQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZTogUnVsZVNpbXBsZUNvbmRpdGlvbikgPT4ge1xuICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybVxuICAgICAgLmdldCgnZmllbGQnKVxuICAgICAgLnZhbHVlQ2hhbmdlcy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoZmllbGQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoZmllbGQgPT09ICdjYXRlZ29yeScpIHtcbiAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZU9wdGlvbnNTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1cbiAgICAgICAgICAgIC5nZXQoJ3BhcmFtZXRlcicpXG4gICAgICAgICAgICAudmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKEFVVE9DT01QTEVURV9PUFRJT05TX0RFQk9VTkNFX1RJTUUpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGNhdGVnb3J5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmdldENhdGVnb3JpZXMoY2F0ZWdvcnlOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVyQ29udHJvbC5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVPcHRpb25zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2F0ZWdvcmllcyhjYXRlZ29yeU5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyID0gdHJ1ZTtcbiAgICB0aGlzLmNhdGVnb3J5U2VydmljZVxuICAgICAgLnNlYXJjaENhdGVnb3JpZXMoY2F0ZWdvcnlOYW1lKVxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV4aXN0aW5nQ2F0ZWdvcmllc1Jlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dMb2FkaW5nU3Bpbm5lciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBvcHRpb25zOiBBdXRvQ29tcGxldGVPcHRpb25bXSA9IGV4aXN0aW5nQ2F0ZWdvcmllc1Jlc3VsdD8ubGlzdD8uZW50cmllcz8ubWFwKChyb3dFbnRyeSkgPT5cbiAgICAgICAgICB0aGlzLmJ1aWxkQXV0b2NvbXBsZXRlT3B0aW9uRnJvbUNhdGVnb3J5KHJvd0VudHJ5LmVudHJ5LmlkLCByb3dFbnRyeS5lbnRyeS5wYXRoLm5hbWUsIHJvd0VudHJ5LmVudHJ5Lm5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNvcnRBdXRvQ29tcGxldGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydEF1dG9Db21wbGV0ZU9wdGlvbnMoYXV0b0NvbXBsZXRlT3B0aW9uczogQXV0b0NvbXBsZXRlT3B0aW9uW10pOiBBdXRvQ29tcGxldGVPcHRpb25bXSB7XG4gICAgcmV0dXJuIGF1dG9Db21wbGV0ZU9wdGlvbnMuc29ydCgob3B0aW9uMSwgb3B0aW9uMikgPT4gb3B0aW9uMS5kaXNwbGF5TGFiZWwubG9jYWxlQ29tcGFyZShvcHRpb24yLmRpc3BsYXlMYWJlbCkpO1xuICB9XG5cbiAgYXV0b0NvbXBsZXRlRGlzcGxheUZ1bmN0aW9uID0gKG9wdGlvblZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBvcHRpb25WYWx1ZSAmJiB0aGlzLmF1dG9Db21wbGV0ZU9wdGlvbnMgPyB0aGlzLmF1dG9Db21wbGV0ZU9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IG9wdGlvblZhbHVlKT8uZGlzcGxheUxhYmVsIDogb3B0aW9uVmFsdWU7XG5cbiAgYXV0b1NlbGVjdFZhbGlkT3B0aW9uKCkge1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMucGFyYW1ldGVyQ29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBpc1ZhbGlkVmFsdWVTZWxlY3RlZCA9ICEhdGhpcy5hdXRvQ29tcGxldGVPcHRpb25zPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gY3VycmVudFZhbHVlKTtcbiAgICBpZiAoIWlzVmFsaWRWYWx1ZVNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnBhcmFtZXRlckNvbnRyb2wuc2V0VmFsdWUodGhpcy5hdXRvQ29tcGxldGVPcHRpb25zPy5bMF0udmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkQXV0b2NvbXBsZXRlT3B0aW9uRnJvbUNhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZywgY2F0ZWdvcnlQYXRoOiBzdHJpbmcsIGNhdGVnb3J5TmFtZTogc3RyaW5nKTogQXV0b0NvbXBsZXRlT3B0aW9uIHtcbiAgICBjb25zdCBwYXRoID0gY2F0ZWdvcnlQYXRoLnNwbGl0KCcvJykuc3BsaWNlKDMpLmpvaW4oJy8nKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGNhdGVnb3J5SWQsXG4gICAgICBkaXNwbGF5TGFiZWw6IHBhdGggPyBgJHtwYXRofS8ke2NhdGVnb3J5TmFtZX1gIDogY2F0ZWdvcnlOYW1lXG4gICAgfTtcbiAgfVxufVxuIiwiPGZvcm0gY2xhc3M9XCJhY2EtcnVsZS1zaW1wbGUtY29uZGl0aW9uX19mb3JtXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFjYS1ydWxlLXNpbXBsZS1jb25kaXRpb25fX2Zvcm1fX2ZpZWxkLWlucHV0XCI+XG4gICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZmllbGRcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJmaWVsZC1zZWxlY3RcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUZpZWxkKClcIj5cbiAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWlzU2VsZWN0ZWRGaWVsZEtub3duXCIgW3ZhbHVlXT1cInNlbGVjdGVkRmllbGQubmFtZVwiIGRhdGEtYXV0b21hdGlvbi1pZD1cInVua25vd24tZmllbGQtb3B0aW9uXCI+XG4gICAgICAgIHt7IHNlbGVjdGVkRmllbGQubGFiZWwgfX1cbiAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmaWVsZHNcIiBbdmFsdWVdPVwiZmllbGQubmFtZVwiPlxuICAgICAgICB7eyBmaWVsZC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LXNlbGVjdD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJhY2EtcnVsZS1zaW1wbGUtY29uZGl0aW9uX19mb3JtX19jb21wYXJhdG9yLWlucHV0XCIgW2NsYXNzXT1cInsgaGlkZGVuOiBpc0NvbXBhcmF0b3JIaWRkZW4gfVwiIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbXBhcmF0b3ItZm9ybS1maWVsZFwiPlxuICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNvbXBhcmF0b3JcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb21wYXJhdG9yLXNlbGVjdFwiPlxuICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbXBhcmF0b3Igb2Ygc2VsZWN0ZWRGaWVsZENvbXBhcmF0b3JzXCJcbiAgICAgICAgW3ZhbHVlXT1cImNvbXBhcmF0b3IubmFtZVwiPlxuICAgICAgICB7eyBjb21wYXJhdG9yLmxhYmVsc1t0aGlzLnNlbGVjdGVkRmllbGQ/LnR5cGUgfHwgJ2VxdWFscyddIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFjYS1ydWxlLXNpbXBsZS1jb25kaXRpb25fX2Zvcm1fX3BhcmFtZXRlci1pbnB1dFwiIFtuZ1N3aXRjaF09XCJzZWxlY3RlZEZpZWxkLnR5cGVcIj5cbiAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJwYXJhbWV0ZXJcIiBkYXRhLWF1dG9tYXRpb24taWQ9XCJzaW1wbGUtY29uZGl0aW9uLXZhbHVlLXNlbGVjdFwiICpuZ1N3aXRjaENhc2U9XCInbWltZVR5cGUnXCI+XG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgbWltZVR5cGUgb2YgbWltZVR5cGVzXCJcbiAgICAgICAgW3ZhbHVlXT1cIm1pbWVUeXBlLnZhbHVlXCI+XG4gICAgICAgIHt7IG1pbWVUeXBlLmxhYmVsIH19XG4gICAgICA8L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT1cIidhdXRvLWNvbXBsZXRlJ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGFyYW1ldGVyXCJcbiAgICAgICAgICAoZm9jdXNvdXQpPVwiYXV0b1NlbGVjdFZhbGlkT3B0aW9uKClcIlxuICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImF1dG8tY29tcGxldGUtaW5wdXQtZmllbGRcIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJmb2xkZXItcnVsZS1hdXRvLWNvbXBsZXRlXCJcbiAgICAgICAgICBbYXV0b0FjdGl2ZUZpcnN0T3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFthdXRvU2VsZWN0QWN0aXZlT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJhdXRvQ29tcGxldGVEaXNwbGF5RnVuY3Rpb25cIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIGRpc2FibGVkICpuZ0lmPVwic2hvd0xvYWRpbmdTcGlubmVyOyBlbHNlIG9wdGlvbkxpc3RcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY2EtcnVsZS1zaW1wbGUtY29uZGl0aW9uX19hdXRvLWNvbXBsZXRlLWxvYWRpbmctc3Bpbm5lclwiPlxuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImF1dG8tY29tcGxldGUtbG9hZGluZy1zcGlubmVyXCJcbiAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyNVwiXG4gICAgICAgICAgICAgICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvbkxpc3Q+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV0b0NvbXBsZXRlT3B0aW9ucz8ubGVuZ3RoID4gMDsgZWxzZSBub09wdGlvbnNUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYXV0b0NvbXBsZXRlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5TGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vT3B0aW9uc1RlbXBsYXRlPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICB7eyAnQUNBX0ZPTERFUl9SVUxFUy5BVVRPQ09NUExFVEUuTk9fT1BUSU9OU19GT1VORCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3sgJ0FDQV9GT0xERVJfUlVMRVMuUlVMRV9ERVRBSUxTLlBMQUNFSE9MREVSLlZBTFVFJyB8IHRyYW5zbGF0ZSB9fVwiIHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGFyYW1ldGVyXCIgZGF0YS1hdXRvbWF0aW9uLWlkPVwidmFsdWUtaW5wdXRcIj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9mb3JtPlxuIl19