keevo-components 1.5.191 → 1.5.192
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.
- package/esm2020/keevo-components.mjs +5 -0
- package/esm2020/lib/api/base-components/base-component-button.mjs +36 -0
- package/esm2020/lib/api/base-components/base-component-chart.mjs +92 -0
- package/esm2020/lib/api/base-components/base-component-crud-form.mjs +270 -0
- package/esm2020/lib/api/base-components/base-component-crud-list.mjs +68 -0
- package/esm2020/lib/api/base-components/base-component-crud.mjs +65 -0
- package/esm2020/lib/api/base-components/base-component-dropdown-new.mjs +211 -0
- package/esm2020/lib/api/base-components/base-component-dropdown.mjs +161 -0
- package/esm2020/lib/api/base-components/base-component-input.mjs +94 -0
- package/esm2020/lib/api/base-components/base-component-multi-select.mjs +128 -0
- package/esm2020/lib/api/base-components/base-component.mjs +49 -0
- package/esm2020/lib/api/components/chart/chart.config.mjs +2 -0
- package/esm2020/lib/api/components/chart/chart.model.mjs +2 -0
- package/esm2020/lib/api/components/chart/orchart.config.mjs +2 -0
- package/esm2020/lib/api/components/chart/orchart.item.mjs +2 -0
- package/esm2020/lib/api/components/dropdown/filtro.combo.mjs +2 -0
- package/esm2020/lib/api/components/error/error.component.mjs +26 -0
- package/esm2020/lib/api/components/error/kverror.module.mjs +35 -0
- package/esm2020/lib/api/components/table/action-item.mjs +2 -0
- package/esm2020/lib/api/components/table/kv-menuitem.mjs +3 -0
- package/esm2020/lib/api/components/table/table.config.column.mjs +2 -0
- package/esm2020/lib/api/components/table/table.config.mjs +2 -0
- package/esm2020/lib/api/components/table/table.paginate.mjs +9 -0
- package/esm2020/lib/api/helpers/component-providers.mjs +16 -0
- package/esm2020/lib/api/helpers/keevo-validators.mjs +64 -0
- package/esm2020/lib/api/helpers/translate-primeng.mjs +23 -0
- package/esm2020/lib/api/models/menu/menu.model.mjs +2 -0
- package/esm2020/lib/api/models/menu/menucompleto.model.mjs +2 -0
- package/esm2020/lib/api/models/menu/sistemamenu.model.mjs +2 -0
- package/esm2020/lib/api/modules/primeng.module.mjs +247 -0
- package/esm2020/lib/api/services/base.api.service.mjs +74 -0
- package/esm2020/lib/api/services/component.service.mjs +27 -0
- package/esm2020/lib/api/services/form.service.mjs +84 -0
- package/esm2020/lib/api/services/imagens.service.mjs +22 -0
- package/esm2020/lib/api/services/notification.service.mjs +67 -0
- package/esm2020/lib/api/services/object.service.mjs +26 -0
- package/esm2020/lib/buttons/button-personalize/button-personalize.component.mjs +17 -0
- package/esm2020/lib/buttons/button-popup/button-popup.component.mjs +31 -0
- package/esm2020/lib/buttons/button-secondary/button-secondary.component.mjs +17 -0
- package/esm2020/lib/buttons/button-success/button-success.component.mjs +17 -0
- package/esm2020/lib/buttons/kvbutton.module.mjs +39 -0
- package/esm2020/lib/chart/chart.component.mjs +145 -0
- package/esm2020/lib/chart/kvchart.module.mjs +32 -0
- package/esm2020/lib/directives/template.directive.mjs +24 -0
- package/esm2020/lib/inputs/check/check.component.mjs +26 -0
- package/esm2020/lib/inputs/dropdown/dropdown.component.mjs +37 -0
- package/esm2020/lib/inputs/editor/editor.component.mjs +70 -0
- package/esm2020/lib/inputs/input-calendar/input-calendar.component.mjs +89 -0
- package/esm2020/lib/inputs/input-mask/input-mask.component.mjs +23 -0
- package/esm2020/lib/inputs/input-number/input-number.component.mjs +59 -0
- package/esm2020/lib/inputs/input-password/input-password.component.mjs +33 -0
- package/esm2020/lib/inputs/input-text/input-text.component.mjs +21 -0
- package/esm2020/lib/inputs/input-text-checkbox/input-text-checkbox.component.mjs +38 -0
- package/esm2020/lib/inputs/input-textarea/input-textarea.component.mjs +43 -0
- package/esm2020/lib/inputs/input-time/input-time.component.mjs +24 -0
- package/esm2020/lib/inputs/kvinputs.module.mjs +108 -0
- package/esm2020/lib/inputs/multi-select/multi-select.component.mjs +38 -0
- package/esm2020/lib/inputs/radio-group/radio-group.component.mjs +53 -0
- package/esm2020/lib/inputs/switch/switch.component.mjs +32 -0
- package/esm2020/lib/keevo-components.module.mjs +105 -0
- package/esm2020/lib/label/label.component.mjs +15 -0
- package/esm2020/lib/label/label.module.mjs +24 -0
- package/esm2020/lib/loader/kvloader.module.mjs +28 -0
- package/esm2020/lib/loader/loader.component.mjs +17 -0
- package/esm2020/lib/loader/loader.service.mjs +29 -0
- package/esm2020/lib/login/kvlogin.module.mjs +47 -0
- package/esm2020/lib/login/login.component.mjs +52 -0
- package/esm2020/lib/menu/kvmenu.module.mjs +43 -0
- package/esm2020/lib/menu/menu.component.mjs +237 -0
- package/esm2020/lib/orgchart/orgchart.component.mjs +100 -0
- package/esm2020/lib/orgchart/orgchart.module.mjs +24 -0
- package/esm2020/lib/page-form/kv-page-form.module.mjs +38 -0
- package/esm2020/lib/page-form/page-form.component.mjs +144 -0
- package/esm2020/lib/picklist/kvpicklist.module.mjs +32 -0
- package/esm2020/lib/picklist/picklist.component.mjs +48 -0
- package/esm2020/lib/pipes/codigofile.pipe.mjs +19 -0
- package/esm2020/lib/pipes/cpfcnpj.pipe.mjs +25 -0
- package/esm2020/lib/pipes/pipes.module.mjs +34 -0
- package/esm2020/lib/pipes/telefone.pipe.mjs +45 -0
- package/esm2020/lib/table/kvtable.module.mjs +32 -0
- package/esm2020/lib/table/table.component.mjs +499 -0
- package/esm2020/lib/tree-table/kv-treetable.component.mjs +371 -0
- package/esm2020/lib/tree-table/kv-treetable.module.mjs +32 -0
- package/esm2020/lib/tree-view/kvtree-view.module.mjs +28 -0
- package/esm2020/lib/tree-view/tree-view.component.mjs +29 -0
- package/esm2020/lib/workspace/kvworkspace.module.mjs +47 -0
- package/esm2020/lib/workspace/workspace.component.mjs +77 -0
- package/esm2020/public-api.mjs +138 -0
- package/fesm2015/keevo-components.mjs +4705 -0
- package/fesm2015/keevo-components.mjs.map +1 -0
- package/fesm2020/keevo-components.mjs +4696 -0
- package/fesm2020/keevo-components.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/api/base-components/base-component-button.d.ts +14 -0
- package/lib/api/base-components/base-component-chart.d.ts +40 -0
- package/lib/api/base-components/base-component-crud-form.d.ts +137 -0
- package/lib/api/base-components/base-component-crud-list.d.ts +63 -0
- package/lib/api/base-components/base-component-crud.d.ts +36 -0
- package/lib/api/base-components/base-component-dropdown-new.d.ts +14 -0
- package/lib/api/base-components/base-component-dropdown.d.ts +42 -0
- package/lib/api/base-components/base-component-input.d.ts +31 -0
- package/lib/api/base-components/base-component-multi-select.d.ts +35 -0
- package/lib/api/base-components/base-component.d.ts +21 -0
- package/lib/api/components/chart/chart.config.d.ts +11 -0
- package/lib/api/components/chart/chart.model.d.ts +9 -0
- package/lib/api/components/chart/orchart.config.d.ts +35 -0
- package/lib/api/components/chart/orchart.item.d.ts +26 -0
- package/lib/api/components/dropdown/filtro.combo.d.ts +4 -0
- package/lib/api/components/error/error.component.d.ts +12 -0
- package/lib/api/components/error/kverror.module.d.ts +10 -0
- package/lib/api/components/table/action-item.d.ts +5 -0
- package/lib/api/components/table/kv-menuitem.d.ts +9 -0
- package/lib/api/components/table/table.config.column.d.ts +21 -0
- package/lib/api/components/table/table.config.d.ts +17 -0
- package/lib/api/components/table/table.paginate.d.ts +6 -0
- package/lib/api/helpers/component-providers.d.ts +2 -0
- package/lib/api/helpers/keevo-validators.d.ts +10 -0
- package/lib/api/helpers/translate-primeng.d.ts +4 -0
- package/lib/api/models/menu/menu.model.d.ts +10 -0
- package/{src/lib/api/models/menu/menucompleto.model.ts → lib/api/models/menu/menucompleto.model.d.ts} +3 -4
- package/lib/api/models/menu/sistemamenu.model.d.ts +8 -0
- package/lib/api/modules/primeng.module.d.ts +60 -0
- package/lib/api/services/base.api.service.d.ts +25 -0
- package/lib/api/services/component.service.d.ts +11 -0
- package/lib/api/services/form.service.d.ts +27 -0
- package/lib/api/services/imagens.service.d.ts +8 -0
- package/lib/api/services/notification.service.d.ts +25 -0
- package/lib/api/services/object.service.d.ts +8 -0
- package/lib/buttons/button-personalize/button-personalize.component.d.ts +7 -0
- package/lib/buttons/button-popup/button-popup.component.d.ts +13 -0
- package/lib/buttons/button-secondary/button-secondary.component.d.ts +7 -0
- package/lib/buttons/button-success/button-success.component.d.ts +7 -0
- package/lib/buttons/kvbutton.module.d.ts +11 -0
- package/lib/chart/chart.component.d.ts +56 -0
- package/lib/chart/kvchart.module.d.ts +10 -0
- package/lib/directives/template.directive.d.ts +11 -0
- package/lib/inputs/check/check.component.d.ts +11 -0
- package/lib/inputs/dropdown/dropdown.component.d.ts +14 -0
- package/lib/inputs/editor/editor.component.d.ts +39 -0
- package/lib/inputs/input-calendar/input-calendar.component.d.ts +27 -0
- package/lib/inputs/input-mask/input-mask.component.d.ts +10 -0
- package/lib/inputs/input-number/input-number.component.d.ts +19 -0
- package/lib/inputs/input-password/input-password.component.d.ts +13 -0
- package/lib/inputs/input-text/input-text.component.d.ts +9 -0
- package/lib/inputs/input-text-checkbox/input-text-checkbox.component.d.ts +15 -0
- package/lib/inputs/input-textarea/input-textarea.component.d.ts +16 -0
- package/lib/inputs/input-time/input-time.component.d.ts +10 -0
- package/lib/inputs/kvinputs.module.d.ts +25 -0
- package/lib/inputs/multi-select/multi-select.component.d.ts +12 -0
- package/lib/inputs/radio-group/radio-group.component.d.ts +18 -0
- package/lib/inputs/switch/switch.component.d.ts +13 -0
- package/lib/keevo-components.module.d.ts +19 -0
- package/lib/label/label.component.d.ts +7 -0
- package/lib/label/label.module.d.ts +8 -0
- package/lib/loader/kvloader.module.d.ts +9 -0
- package/lib/loader/loader.component.d.ts +8 -0
- package/lib/loader/loader.service.d.ts +10 -0
- package/lib/login/kvlogin.module.d.ts +13 -0
- package/lib/login/login.component.d.ts +30 -0
- package/lib/menu/kvmenu.module.d.ts +12 -0
- package/lib/menu/menu.component.d.ts +74 -0
- package/lib/orgchart/orgchart.component.d.ts +27 -0
- package/lib/orgchart/orgchart.module.d.ts +9 -0
- package/lib/page-form/kv-page-form.module.d.ts +11 -0
- package/lib/page-form/page-form.component.d.ts +69 -0
- package/lib/picklist/kvpicklist.module.d.ts +10 -0
- package/lib/picklist/picklist.component.d.ts +20 -0
- package/lib/pipes/codigofile.pipe.d.ts +7 -0
- package/lib/pipes/cpfcnpj.pipe.d.ts +7 -0
- package/lib/pipes/pipes.module.d.ts +10 -0
- package/lib/pipes/telefone.pipe.d.ts +7 -0
- package/lib/table/kvtable.module.d.ts +10 -0
- package/lib/table/table.component.d.ts +104 -0
- package/lib/tree-table/kv-treetable.component.d.ts +84 -0
- package/lib/tree-table/kv-treetable.module.d.ts +11 -0
- package/lib/tree-view/kvtree-view.module.d.ts +9 -0
- package/lib/tree-view/tree-view.component.d.ts +14 -0
- package/lib/workspace/kvworkspace.module.d.ts +13 -0
- package/lib/workspace/workspace.component.d.ts +28 -0
- package/package.json +22 -3
- package/{src/public-api.ts → public-api.d.ts} +14 -36
- package/ng-package.json +0 -7
- package/src/assets/.gitkeep +0 -0
- package/src/assets/images/LogoEvo.png +0 -0
- package/src/assets/images/LogoPequenaEvo.png +0 -0
- package/src/assets/images/background.png +0 -0
- package/src/assets/images/keepass-logo.png +0 -0
- package/src/assets/images/keepass-logo.svg +0 -74
- package/src/assets/images/keevo-logo.png +0 -0
- package/src/assets/images/logokeevo_2.png +0 -0
- package/src/index.ts +0 -1
- package/src/lib/api/base-components/base-component-button.ts +0 -27
- package/src/lib/api/base-components/base-component-chart.ts +0 -105
- package/src/lib/api/base-components/base-component-crud-form.ts +0 -328
- package/src/lib/api/base-components/base-component-crud-list.ts +0 -111
- package/src/lib/api/base-components/base-component-crud.ts +0 -70
- package/src/lib/api/base-components/base-component-dropdown-new.ts +0 -112
- package/src/lib/api/base-components/base-component-dropdown.ts +0 -164
- package/src/lib/api/base-components/base-component-input.ts +0 -107
- package/src/lib/api/base-components/base-component-multi-select.ts +0 -136
- package/src/lib/api/base-components/base-component.ts +0 -46
- package/src/lib/api/components/chart/chart.config.ts +0 -12
- package/src/lib/api/components/chart/chart.model.ts +0 -9
- package/src/lib/api/components/chart/orchart.config.ts +0 -41
- package/src/lib/api/components/chart/orchart.item.ts +0 -33
- package/src/lib/api/components/dropdown/filtro.combo.ts +0 -4
- package/src/lib/api/components/error/error.component.html +0 -3
- package/src/lib/api/components/error/error.component.scss +0 -5
- package/src/lib/api/components/error/error.component.ts +0 -22
- package/src/lib/api/components/error/kverror.module.ts +0 -23
- package/src/lib/api/components/table/action-item.ts +0 -5
- package/src/lib/api/components/table/kv-menuitem.ts +0 -10
- package/src/lib/api/components/table/table.config.column.ts +0 -21
- package/src/lib/api/components/table/table.config.ts +0 -20
- package/src/lib/api/components/table/table.paginate.ts +0 -6
- package/src/lib/api/helpers/component-providers.ts +0 -16
- package/src/lib/api/helpers/keevo-validators.ts +0 -77
- package/src/lib/api/helpers/translate-primeng.ts +0 -25
- package/src/lib/api/models/menu/menu.model.ts +0 -10
- package/src/lib/api/models/menu/sistemamenu.model.ts +0 -8
- package/src/lib/api/modules/primeng.module.ts +0 -125
- package/src/lib/api/services/base.api.service.ts +0 -115
- package/src/lib/api/services/component.service.ts +0 -22
- package/src/lib/api/services/form.service.ts +0 -105
- package/src/lib/api/services/imagens.service.ts +0 -20
- package/src/lib/api/services/notification.service.ts +0 -82
- package/src/lib/api/services/object.service.ts +0 -20
- package/src/lib/buttons/button-personalize/button-personalize.component.html +0 -11
- package/src/lib/buttons/button-personalize/button-personalize.component.scss +0 -3
- package/src/lib/buttons/button-personalize/button-personalize.component.ts +0 -13
- package/src/lib/buttons/button-popup/button-popup.component.html +0 -12
- package/src/lib/buttons/button-popup/button-popup.component.scss +0 -13
- package/src/lib/buttons/button-popup/button-popup.component.ts +0 -30
- package/src/lib/buttons/button-secondary/button-secondary.component.html +0 -12
- package/src/lib/buttons/button-secondary/button-secondary.component.scss +0 -14
- package/src/lib/buttons/button-secondary/button-secondary.component.ts +0 -13
- package/src/lib/buttons/button-success/button-success.component.html +0 -11
- package/src/lib/buttons/button-success/button-success.component.scss +0 -13
- package/src/lib/buttons/button-success/button-success.component.ts +0 -13
- package/src/lib/buttons/kvbutton.module.ts +0 -25
- package/src/lib/chart/chart.component.html +0 -38
- package/src/lib/chart/chart.component.scss +0 -0
- package/src/lib/chart/chart.component.spec.ts +0 -28
- package/src/lib/chart/chart.component.ts +0 -141
- package/src/lib/chart/kvchart.module.ts +0 -20
- package/src/lib/directives/template.directive.ts +0 -15
- package/src/lib/inputs/check/check.component.html +0 -11
- package/src/lib/inputs/check/check.component.scss +0 -13
- package/src/lib/inputs/check/check.component.ts +0 -24
- package/src/lib/inputs/dropdown/dropdown.component.html +0 -91
- package/src/lib/inputs/dropdown/dropdown.component.scss +0 -0
- package/src/lib/inputs/dropdown/dropdown.component.ts +0 -28
- package/src/lib/inputs/editor/editor.component.html +0 -90
- package/src/lib/inputs/editor/editor.component.scss +0 -4
- package/src/lib/inputs/editor/editor.component.ts +0 -80
- package/src/lib/inputs/input-calendar/input-calendar.component.html +0 -30
- package/src/lib/inputs/input-calendar/input-calendar.component.scss +0 -0
- package/src/lib/inputs/input-calendar/input-calendar.component.ts +0 -81
- package/src/lib/inputs/input-mask/input-mask.component.html +0 -20
- package/src/lib/inputs/input-mask/input-mask.component.scss +0 -0
- package/src/lib/inputs/input-mask/input-mask.component.ts +0 -20
- package/src/lib/inputs/input-number/input-number.component.html +0 -22
- package/src/lib/inputs/input-number/input-number.component.scss +0 -0
- package/src/lib/inputs/input-number/input-number.component.ts +0 -52
- package/src/lib/inputs/input-password/input-password.component.html +0 -23
- package/src/lib/inputs/input-password/input-password.component.scss +0 -0
- package/src/lib/inputs/input-password/input-password.component.ts +0 -23
- package/src/lib/inputs/input-text/input-text.component.html +0 -20
- package/src/lib/inputs/input-text/input-text.component.scss +0 -18
- package/src/lib/inputs/input-text/input-text.component.ts +0 -17
- package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.html +0 -32
- package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.scss +0 -0
- package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.spec.ts +0 -23
- package/src/lib/inputs/input-text-checkbox/input-text-checkbox.component.ts +0 -36
- package/src/lib/inputs/input-textarea/input-textarea.component.html +0 -22
- package/src/lib/inputs/input-textarea/input-textarea.component.scss +0 -0
- package/src/lib/inputs/input-textarea/input-textarea.component.ts +0 -33
- package/src/lib/inputs/input-time/input-time.component.html +0 -23
- package/src/lib/inputs/input-time/input-time.component.scss +0 -0
- package/src/lib/inputs/input-time/input-time.component.ts +0 -20
- package/src/lib/inputs/kvinputs.module.ts +0 -64
- package/src/lib/inputs/multi-select/multi-select.component.html +0 -28
- package/src/lib/inputs/multi-select/multi-select.component.scss +0 -8
- package/src/lib/inputs/multi-select/multi-select.component.ts +0 -31
- package/src/lib/inputs/radio-group/radio-group.component.html +0 -19
- package/src/lib/inputs/radio-group/radio-group.component.scss +0 -15
- package/src/lib/inputs/radio-group/radio-group.component.ts +0 -50
- package/src/lib/inputs/switch/switch.component.html +0 -12
- package/src/lib/inputs/switch/switch.component.scss +0 -3
- package/src/lib/inputs/switch/switch.component.ts +0 -30
- package/src/lib/keevo-components.module.ts +0 -50
- package/src/lib/label/label.component.html +0 -6
- package/src/lib/label/label.component.scss +0 -9
- package/src/lib/label/label.component.spec.ts +0 -23
- package/src/lib/label/label.component.ts +0 -13
- package/src/lib/label/label.module.ts +0 -18
- package/src/lib/loader/kvloader.module.ts +0 -17
- package/src/lib/loader/loader.component.html +0 -1
- package/src/lib/loader/loader.component.ts +0 -14
- package/src/lib/loader/loader.service.ts +0 -26
- package/src/lib/login/kvlogin.module.ts +0 -28
- package/src/lib/login/login.component.html +0 -108
- package/src/lib/login/login.component.scss +0 -48
- package/src/lib/login/login.component.spec.ts +0 -23
- package/src/lib/login/login.component.ts +0 -65
- package/src/lib/menu/kvmenu.module.ts +0 -27
- package/src/lib/menu/menu.component.html +0 -342
- package/src/lib/menu/menu.component.scss +0 -210
- package/src/lib/menu/menu.component.spec.ts +0 -23
- package/src/lib/menu/menu.component.ts +0 -246
- package/src/lib/orgchart/orgchart.component.html +0 -58
- package/src/lib/orgchart/orgchart.component.scss +0 -21
- package/src/lib/orgchart/orgchart.component.ts +0 -118
- package/src/lib/orgchart/orgchart.module.ts +0 -14
- package/src/lib/page-form/kv-page-form.module.ts +0 -22
- package/src/lib/page-form/page-form.component.html +0 -57
- package/src/lib/page-form/page-form.component.scss +0 -72
- package/src/lib/page-form/page-form.component.spec.ts +0 -28
- package/src/lib/page-form/page-form.component.ts +0 -121
- package/src/lib/picklist/kvpicklist.module.ts +0 -20
- package/src/lib/picklist/picklist.component.html +0 -17
- package/src/lib/picklist/picklist.component.scss +0 -0
- package/src/lib/picklist/picklist.component.spec.ts +0 -26
- package/src/lib/picklist/picklist.component.ts +0 -27
- package/src/lib/pipes/codigofile.pipe.ts +0 -15
- package/src/lib/pipes/cpfcnpj.pipe.ts +0 -21
- package/src/lib/pipes/pipes.module.ts +0 -22
- package/src/lib/pipes/telefone.pipe.ts +0 -38
- package/src/lib/styles-components.scss +0 -11
- package/src/lib/table/kvtable.module.ts +0 -22
- package/src/lib/table/table.component.html +0 -473
- package/src/lib/table/table.component.scss +0 -240
- package/src/lib/table/table.component.spec.ts +0 -28
- package/src/lib/table/table.component.ts +0 -546
- package/src/lib/tree-table/kv-treetable.component.html +0 -649
- package/src/lib/tree-table/kv-treetable.component.scss +0 -315
- package/src/lib/tree-table/kv-treetable.component.ts +0 -390
- package/src/lib/tree-table/kv-treetable.module.ts +0 -18
- package/src/lib/tree-view/kvtree-view.module.ts +0 -19
- package/src/lib/tree-view/tree-view.component.html +0 -9
- package/src/lib/tree-view/tree-view.component.scss +0 -0
- package/src/lib/tree-view/tree-view.component.spec.ts +0 -23
- package/src/lib/tree-view/tree-view.component.ts +0 -29
- package/src/lib/workspace/kvworkspace.module.ts +0 -29
- package/src/lib/workspace/workspace.component.html +0 -108
- package/src/lib/workspace/workspace.component.scss +0 -83
- package/src/lib/workspace/workspace.component.ts +0 -75
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { BaseComponentCrudForm } from '../api/base-components/base-component-crud-form';
|
|
3
|
+
import { KeevoValidators } from '../../public-api';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "primeng/dynamicdialog";
|
|
6
|
+
import * as i2 from "../api/services/notification.service";
|
|
7
|
+
import * as i3 from "@angular/router";
|
|
8
|
+
import * as i4 from "@angular/forms";
|
|
9
|
+
import * as i5 from "../inputs/input-password/input-password.component";
|
|
10
|
+
import * as i6 from "../inputs/input-text/input-text.component";
|
|
11
|
+
/**
|
|
12
|
+
* Componente de login personalizado.
|
|
13
|
+
* Este componente permite que os usuários façam login no sistema utilizando o estilo padrão dos sistemas Keevo.
|
|
14
|
+
*/
|
|
15
|
+
export class LoginComponent extends BaseComponentCrudForm {
|
|
16
|
+
constructor(dialogService, notificationService, activatedRoute, dynamicDialogRef, dynamicDialogConfig, router, formBuilder) {
|
|
17
|
+
super(dialogService, notificationService, activatedRoute, dynamicDialogRef, dynamicDialogConfig, router);
|
|
18
|
+
this.formBuilder = formBuilder;
|
|
19
|
+
/** Evento emitido quando o usuário faz login. */
|
|
20
|
+
this.onLogin = new EventEmitter();
|
|
21
|
+
}
|
|
22
|
+
configureForm() {
|
|
23
|
+
this.formGroup = this.formBuilder.group({
|
|
24
|
+
usuario: ['', KeevoValidators.required('Campo obrigatório')],
|
|
25
|
+
senha: ['', KeevoValidators.required('Campo obrigatório')]
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
loadForm(id) {
|
|
29
|
+
}
|
|
30
|
+
save() {
|
|
31
|
+
if (this.validateForm()) {
|
|
32
|
+
this.onLogin.emit(this.formGroup.value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
LoginComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: LoginComponent, deps: [{ token: i1.DialogService }, { token: i2.NotificationService }, { token: i3.ActivatedRoute }, { token: i1.DynamicDialogRef }, { token: i1.DynamicDialogConfig }, { token: i3.Router }, { token: i4.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
37
|
+
LoginComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: LoginComponent, selector: "kv-login", inputs: { Background: "Background", SystemLogo: "SystemLogo", SystemColorPrimary: "SystemColorPrimary", SystemColorSecondary: "SystemColorSecondary" }, outputs: { onLogin: "onLogin" }, usesInheritance: true, ngImport: i0, template: "<div\n id=\"kvLogin-container\"\n class=\"flex justify-content-center align-items-center flex-column h-screen \"\n [style.background-image]=\"'url(' + Background + ')'\"\n>\n\n <!-- CARD PRINCIPAL -->\n <div\n [formGroup]=\" formGroup\"\n class=\"flex flex-column align-items-center justify-content-between bg-white border-round-xl \"\n [style.width.rem]=\"19\"\n [style.height.px]=\"435\"\n (keydown.enter)=\"save()\"\n >\n\n <!-- LOGO DO SISTEMA -->\n <div class=\"flex flex-row align-items-center justify-content-center p-3 mt-2\">\n <img\n alt=\"Logo do Sistema\"\n [style.height.rem]=\"4\"\n [src]=\"SystemLogo\"\n />\n </div>\n\n <!-- INFORMA\u00C7\u00D5ES CENTRAIS -->\n <div class=\" grid formgrid p-fluid gap-2 p-3\">\n\n <div\n class=\" w-full \"\n class=\"mb-2\"\n >\n <img\n [style.height.rem]=\"2.5\"\n class=\"ml-2\"\n alt=\"keepass\"\n src=\"https://work-assets.keevo.com.br/img/keepass-logo.png\"\n />\n </div>\n\n <kv-input-text\n componentId=\"usuario\"\n label=\"CPF ou Email\"\n formControlName=\"usuario\"\n class=\"field col-12\"\n >\n </kv-input-text>\n\n <kv-input-password\n componentId=\"senha\"\n label=\"Senha\"\n [toggleMask]=\"true\"\n formControlName=\"senha\"\n [required]=\"true\"\n class=\"field col-12\"\n >\n </kv-input-password>\n\n <div\n class=\"flex w-full justify-content-end mb-2\"\n id=\"kvLogin-esqueceu-senha\"\n >\n <a\n href=\"https://keepass.seg.br/redefinirsenha\"\n target=\"_blank\"\n style=\"font-size: 0.8rem;\"\n [style.color]=\"SystemColorPrimary\"\n >\n Esqueceu a senha?\n </a>\n </div>\n\n </div>\n\n <button\n id=\"kvLogin-login-button\"\n [style.background-color]=\"SystemColorPrimary\"\n [style.color]=\"'white'\"\n class=\"w-full \"\n (click)=\"save()\"\n [style.height.px]=\"50\"\n ><strong>Login</strong></button>\n </div>\n\n <div id=\"kvLogin-cadastro\">\n <p\n [style.color]=\"SystemColorSecondary\"\n style=\"font-size: 1rem;\"\n >\n N\u00E3o possui um Evopass?\n <a\n href=\"https://keepass.seg.br/cadastrar\"\n target=\"_blank\"\n [style.color]=\"SystemColorSecondary\"\n style=\"font-size: 1rem;\"\n >\n Cadastre-se\n </a>\n </p>\n </div>\n\n <div class=\"logo-keevo\">\n <img\n src=\"https://work-assets.keevo.com.br/img/keevo-logo.png\"\n [style.height.rem]=\"4\"\n />\n </div>\n\n</div>", styles: ["#kvLogin-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol \"!important;background:no-repeat center;background-size:cover}#kvLogin-esqueceu-senha{position:relative;bottom:.5rem;padding-right:10px}#kvLogin-esqueceu-senha a,#kvLogin-cadastro a{text-decoration:none;font-weight:500;cursor:pointer;gap:3px;transition:text-shadow .2s ease-in-out}#kvLogin-esqueceu-senha a:hover,#kvLogin-cadastro a:hover{text-shadow:0 0 2px rgba(158,158,158,.692)}#kvLogin-login-button{width:100%;height:3rem!important;border-radius:0 0 10px 10px;border:none;cursor:pointer;font-size:14px;transition:all ease-in .2s;-webkit-transition:all ease-in .2s;-moz-transition:all ease-in .2s;-ms-transition:all ease-in .2s;-o-transition:all ease-in .2s}#kvLogin-login-button:hover{opacity:.9}.logo-keevo{position:relative;top:50px}\n"], dependencies: [{ 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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "component", type: i5.InputPasswordComponent, selector: "kv-input-password", inputs: ["feedback", "mediumRegex", "strongRegex", "toggleMask"] }, { kind: "component", type: i6.InputTextComponent, selector: "kv-input-text" }] });
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: LoginComponent, decorators: [{
|
|
39
|
+
type: Component,
|
|
40
|
+
args: [{ selector: 'kv-login', template: "<div\n id=\"kvLogin-container\"\n class=\"flex justify-content-center align-items-center flex-column h-screen \"\n [style.background-image]=\"'url(' + Background + ')'\"\n>\n\n <!-- CARD PRINCIPAL -->\n <div\n [formGroup]=\" formGroup\"\n class=\"flex flex-column align-items-center justify-content-between bg-white border-round-xl \"\n [style.width.rem]=\"19\"\n [style.height.px]=\"435\"\n (keydown.enter)=\"save()\"\n >\n\n <!-- LOGO DO SISTEMA -->\n <div class=\"flex flex-row align-items-center justify-content-center p-3 mt-2\">\n <img\n alt=\"Logo do Sistema\"\n [style.height.rem]=\"4\"\n [src]=\"SystemLogo\"\n />\n </div>\n\n <!-- INFORMA\u00C7\u00D5ES CENTRAIS -->\n <div class=\" grid formgrid p-fluid gap-2 p-3\">\n\n <div\n class=\" w-full \"\n class=\"mb-2\"\n >\n <img\n [style.height.rem]=\"2.5\"\n class=\"ml-2\"\n alt=\"keepass\"\n src=\"https://work-assets.keevo.com.br/img/keepass-logo.png\"\n />\n </div>\n\n <kv-input-text\n componentId=\"usuario\"\n label=\"CPF ou Email\"\n formControlName=\"usuario\"\n class=\"field col-12\"\n >\n </kv-input-text>\n\n <kv-input-password\n componentId=\"senha\"\n label=\"Senha\"\n [toggleMask]=\"true\"\n formControlName=\"senha\"\n [required]=\"true\"\n class=\"field col-12\"\n >\n </kv-input-password>\n\n <div\n class=\"flex w-full justify-content-end mb-2\"\n id=\"kvLogin-esqueceu-senha\"\n >\n <a\n href=\"https://keepass.seg.br/redefinirsenha\"\n target=\"_blank\"\n style=\"font-size: 0.8rem;\"\n [style.color]=\"SystemColorPrimary\"\n >\n Esqueceu a senha?\n </a>\n </div>\n\n </div>\n\n <button\n id=\"kvLogin-login-button\"\n [style.background-color]=\"SystemColorPrimary\"\n [style.color]=\"'white'\"\n class=\"w-full \"\n (click)=\"save()\"\n [style.height.px]=\"50\"\n ><strong>Login</strong></button>\n </div>\n\n <div id=\"kvLogin-cadastro\">\n <p\n [style.color]=\"SystemColorSecondary\"\n style=\"font-size: 1rem;\"\n >\n N\u00E3o possui um Evopass?\n <a\n href=\"https://keepass.seg.br/cadastrar\"\n target=\"_blank\"\n [style.color]=\"SystemColorSecondary\"\n style=\"font-size: 1rem;\"\n >\n Cadastre-se\n </a>\n </p>\n </div>\n\n <div class=\"logo-keevo\">\n <img\n src=\"https://work-assets.keevo.com.br/img/keevo-logo.png\"\n [style.height.rem]=\"4\"\n />\n </div>\n\n</div>", styles: ["#kvLogin-container{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol \"!important;background:no-repeat center;background-size:cover}#kvLogin-esqueceu-senha{position:relative;bottom:.5rem;padding-right:10px}#kvLogin-esqueceu-senha a,#kvLogin-cadastro a{text-decoration:none;font-weight:500;cursor:pointer;gap:3px;transition:text-shadow .2s ease-in-out}#kvLogin-esqueceu-senha a:hover,#kvLogin-cadastro a:hover{text-shadow:0 0 2px rgba(158,158,158,.692)}#kvLogin-login-button{width:100%;height:3rem!important;border-radius:0 0 10px 10px;border:none;cursor:pointer;font-size:14px;transition:all ease-in .2s;-webkit-transition:all ease-in .2s;-moz-transition:all ease-in .2s;-ms-transition:all ease-in .2s;-o-transition:all ease-in .2s}#kvLogin-login-button:hover{opacity:.9}.logo-keevo{position:relative;top:50px}\n"] }]
|
|
41
|
+
}], ctorParameters: function () { return [{ type: i1.DialogService }, { type: i2.NotificationService }, { type: i3.ActivatedRoute }, { type: i1.DynamicDialogRef }, { type: i1.DynamicDialogConfig }, { type: i3.Router }, { type: i4.FormBuilder }]; }, propDecorators: { Background: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], SystemLogo: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], SystemColorPrimary: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], SystemColorSecondary: [{
|
|
48
|
+
type: Input
|
|
49
|
+
}], onLogin: [{
|
|
50
|
+
type: Output
|
|
51
|
+
}] } });
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2xvZ2luL2xvZ2luLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9sb2dpbi9sb2dpbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBSXhGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7QUFFbkQ7OztHQUdHO0FBTUgsTUFBTSxPQUFPLGNBQWUsU0FBUSxxQkFBcUI7SUFhdkQsWUFDRSxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLG1CQUF3QyxFQUN4QyxNQUFjLEVBQ04sV0FBd0I7UUFDaEMsS0FBSyxDQUNILGFBQWEsRUFDYixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsTUFBTSxDQUNQLENBQUE7UUFSTyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVZsQyxpREFBaUQ7UUFDdkMsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO0lBa0IvRCxDQUFDO0lBRVEsYUFBYTtRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDNUQsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUMzRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVEsUUFBUSxDQUFDLEVBQU87SUFFekIsQ0FBQztJQUVRLElBQUk7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQzs7MkdBOUNVLGNBQWM7K0ZBQWQsY0FBYyxnUUNqQjNCLHl1R0EyR007MkZEMUZPLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsVUFBVTttUkFPWCxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFSSxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnRDcnVkRm9ybSB9IGZyb20gJy4uL2FwaS9iYXNlLWNvbXBvbmVudHMvYmFzZS1jb21wb25lbnQtY3J1ZC1mb3JtJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWcsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEtlZXZvVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuXG4vKipcbiAqIENvbXBvbmVudGUgZGUgbG9naW4gcGVyc29uYWxpemFkby5cbiAqIEVzdGUgY29tcG9uZW50ZSBwZXJtaXRlIHF1ZSBvcyB1c3XDoXJpb3MgZmHDp2FtIGxvZ2luIG5vIHNpc3RlbWEgdXRpbGl6YW5kbyBvIGVzdGlsbyBwYWRyw6NvIGRvcyBzaXN0ZW1hcyBLZWV2by5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3YtbG9naW4nLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9sb2dpbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExvZ2luQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudENydWRGb3JtIHtcblxuICAvKiogVVJMIGRhIGltYWdlbSBkZSBmdW5kbyBkbyBjb21wb25lbnRlLiAqL1xuICBASW5wdXQoKSBCYWNrZ3JvdW5kITogYW55O1xuICAvKiogVVJMIGRvIGxvZ28gZG8gc2lzdGVtYS4gKi9cbiAgQElucHV0KCkgU3lzdGVtTG9nbyE6IGFueTtcbiAgLyoqIENvciBwcmltw6FyaWEgZG8gc2lzdGVtYS4gKi9cbiAgQElucHV0KCkgU3lzdGVtQ29sb3JQcmltYXJ5ITogc3RyaW5nO1xuICAvKiogQ29yIHNlY3VuZMOhcmlhIGRvIHNpc3RlbWEuICovXG4gIEBJbnB1dCgpIFN5c3RlbUNvbG9yU2Vjb25kYXJ5ITogc3RyaW5nO1xuICAvKiogRXZlbnRvIGVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gZmF6IGxvZ2luLiAqL1xuICBAT3V0cHV0KCkgb25Mb2dpbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWYsXG4gICAgZHluYW1pY0RpYWxvZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgICByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge1xuICAgIHN1cGVyKFxuICAgICAgZGlhbG9nU2VydmljZSxcbiAgICAgIG5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgICBhY3RpdmF0ZWRSb3V0ZSxcbiAgICAgIGR5bmFtaWNEaWFsb2dSZWYsXG4gICAgICBkeW5hbWljRGlhbG9nQ29uZmlnLFxuICAgICAgcm91dGVyXG4gICAgKVxuICB9XG5cbiAgb3ZlcnJpZGUgY29uZmlndXJlRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgdXN1YXJpbzogWycnLCBLZWV2b1ZhbGlkYXRvcnMucmVxdWlyZWQoJ0NhbXBvIG9icmlnYXTDs3JpbycpXSxcbiAgICAgIHNlbmhhOiBbJycsIEtlZXZvVmFsaWRhdG9ycy5yZXF1aXJlZCgnQ2FtcG8gb2JyaWdhdMOzcmlvJyldXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBsb2FkRm9ybShpZDogYW55KTogdm9pZCB7XG5cbiAgfVxuXG4gIG92ZXJyaWRlIHNhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmFsaWRhdGVGb3JtKCkpIHtcbiAgICAgIHRoaXMub25Mb2dpbi5lbWl0KHRoaXMuZm9ybUdyb3VwLnZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgICBpZD1cImt2TG9naW4tY29udGFpbmVyXCJcbiAgICBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW4gaC1zY3JlZW4gXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCIndXJsKCcgKyBCYWNrZ3JvdW5kICsgJyknXCJcbj5cblxuICAgIDwhLS0gQ0FSRCBQUklOQ0lQQUwgLS0+XG4gICAgPGRpdlxuICAgICAgICBbZm9ybUdyb3VwXT1cIiBmb3JtR3JvdXBcIlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGJnLXdoaXRlIGJvcmRlci1yb3VuZC14bCBcIlxuICAgICAgICBbc3R5bGUud2lkdGgucmVtXT1cIjE5XCJcbiAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCI0MzVcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlKClcIlxuICAgID5cblxuICAgICAgICA8IS0tIExPR08gRE8gU0lTVEVNQSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcC0zIG10LTJcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICBhbHQ9XCJMb2dvIGRvIFNpc3RlbWFcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucmVtXT1cIjRcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiU3lzdGVtTG9nb1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIElORk9STUHDh8OVRVMgQ0VOVFJBSVMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCIgZ3JpZCBmb3JtZ3JpZCBwLWZsdWlkIGdhcC0yIHAtM1wiPlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCIgdy1mdWxsIFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucmVtXT1cIjIuNVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMlwiXG4gICAgICAgICAgICAgICAgICAgIGFsdD1cImtlZXBhc3NcIlxuICAgICAgICAgICAgICAgICAgICBzcmM9XCJodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9pbWcva2VlcGFzcy1sb2dvLnBuZ1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8a3YtaW5wdXQtdGV4dFxuICAgICAgICAgICAgICAgIGNvbXBvbmVudElkPVwidXN1YXJpb1wiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJDUEYgb3UgRW1haWxcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInVzdWFyaW9cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmllbGQgY29sLTEyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwva3YtaW5wdXQtdGV4dD5cblxuICAgICAgICAgICAgPGt2LWlucHV0LXBhc3N3b3JkXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SWQ9XCJzZW5oYVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJTZW5oYVwiXG4gICAgICAgICAgICAgICAgW3RvZ2dsZU1hc2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VuaGFcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZpZWxkIGNvbC0xMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2t2LWlucHV0LXBhc3N3b3JkPlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IHctZnVsbCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwia3ZMb2dpbi1lc3F1ZWNldS1zZW5oYVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8va2VlcGFzcy5zZWcuYnIvcmVkZWZpbmlyc2VuaGFcIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJTeXN0ZW1Db2xvclByaW1hcnlcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgRXNxdWVjZXUgYSBzZW5oYT9cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBpZD1cImt2TG9naW4tbG9naW4tYnV0dG9uXCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIlN5c3RlbUNvbG9yUHJpbWFyeVwiXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiJ3doaXRlJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbCBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cIjUwXCJcbiAgICAgICAgPjxzdHJvbmc+TG9naW48L3N0cm9uZz48L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgaWQ9XCJrdkxvZ2luLWNhZGFzdHJvXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiU3lzdGVtQ29sb3JTZWNvbmRhcnlcIlxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDFyZW07XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgTsOjbyBwb3NzdWkgdW0gRXZvcGFzcz9cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8va2VlcGFzcy5zZWcuYnIvY2FkYXN0cmFyXCJcbiAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJTeXN0ZW1Db2xvclNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDFyZW07XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDYWRhc3RyZS1zZVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwibG9nby1rZWV2b1wiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgICBzcmM9XCJodHRwczovL3dvcmstYXNzZXRzLmtlZXZvLmNvbS5ici9pbWcva2Vldm8tbG9nby5wbmdcIlxuICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5yZW1dPVwiNFwiXG4gICAgICAgIC8+XG4gICAgPC9kaXY+XG5cbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { MenuComponent } from './menu.component';
|
|
4
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { PrimeNgModule } from '../api/modules/primeng.module';
|
|
6
|
+
import { KvInputsModule } from '../inputs/kvinputs.module';
|
|
7
|
+
import { KvButtonsModule } from '../buttons/kvbutton.module';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class KvMenuModule {
|
|
10
|
+
}
|
|
11
|
+
KvMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: KvMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12
|
+
KvMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: KvMenuModule, declarations: [MenuComponent], imports: [CommonModule,
|
|
13
|
+
PrimeNgModule,
|
|
14
|
+
FormsModule,
|
|
15
|
+
ReactiveFormsModule,
|
|
16
|
+
KvInputsModule,
|
|
17
|
+
KvButtonsModule], exports: [MenuComponent] });
|
|
18
|
+
KvMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: KvMenuModule, imports: [CommonModule,
|
|
19
|
+
PrimeNgModule,
|
|
20
|
+
FormsModule,
|
|
21
|
+
ReactiveFormsModule,
|
|
22
|
+
KvInputsModule,
|
|
23
|
+
KvButtonsModule] });
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: KvMenuModule, decorators: [{
|
|
25
|
+
type: NgModule,
|
|
26
|
+
args: [{
|
|
27
|
+
declarations: [
|
|
28
|
+
MenuComponent
|
|
29
|
+
],
|
|
30
|
+
imports: [
|
|
31
|
+
CommonModule,
|
|
32
|
+
PrimeNgModule,
|
|
33
|
+
FormsModule,
|
|
34
|
+
ReactiveFormsModule,
|
|
35
|
+
KvInputsModule,
|
|
36
|
+
KvButtonsModule
|
|
37
|
+
],
|
|
38
|
+
exports: [
|
|
39
|
+
MenuComponent
|
|
40
|
+
]
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZtZW51Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L2t2bWVudS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFvQjdELE1BQU0sT0FBTyxZQUFZOzt5R0FBWixZQUFZOzBHQUFaLFlBQVksaUJBZHJCLGFBQWEsYUFHYixZQUFZO1FBQ1osYUFBYTtRQUNiLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLGVBQWUsYUFHZixhQUFhOzBHQUdKLFlBQVksWUFYckIsWUFBWTtRQUNaLGFBQWE7UUFDYixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLGNBQWM7UUFDZCxlQUFlOzJGQU1OLFlBQVk7a0JBaEJ4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixhQUFhO3FCQUNkO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsZUFBZTtxQkFDaEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGFBQWE7cUJBQ2Q7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICcuL21lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUHJpbWVOZ01vZHVsZSB9IGZyb20gJy4uL2FwaS9tb2R1bGVzL3ByaW1lbmcubW9kdWxlJztcbmltcG9ydCB7IEt2SW5wdXRzTW9kdWxlIH0gZnJvbSAnLi4vaW5wdXRzL2t2aW5wdXRzLm1vZHVsZSc7XG5pbXBvcnQgeyBLdkJ1dHRvbnNNb2R1bGUgfSBmcm9tICcuLi9idXR0b25zL2t2YnV0dG9uLm1vZHVsZSc7XG5cblxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBNZW51Q29tcG9uZW50XG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUHJpbWVOZ01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEt2SW5wdXRzTW9kdWxlLFxuICAgIEt2QnV0dG9uc01vZHVsZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgTWVudUNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEt2TWVudU1vZHVsZSB7IH1cbiJdfQ==
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { NavigationEnd } from '@angular/router';
|
|
2
|
+
import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/router";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "primeng/api";
|
|
7
|
+
import * as i4 from "primeng/button";
|
|
8
|
+
import * as i5 from "primeng/card";
|
|
9
|
+
import * as i6 from "primeng/tooltip";
|
|
10
|
+
import * as i7 from "primeng/dialog";
|
|
11
|
+
import * as i8 from "primeng/divider";
|
|
12
|
+
import * as i9 from "primeng/dropdown";
|
|
13
|
+
import * as i10 from "primeng/overlaypanel";
|
|
14
|
+
import * as i11 from "primeng/ripple";
|
|
15
|
+
import * as i12 from "primeng/sidebar";
|
|
16
|
+
import * as i13 from "primeng/styleclass";
|
|
17
|
+
import * as i14 from "primeng/breadcrumb";
|
|
18
|
+
import * as i15 from "@angular/forms";
|
|
19
|
+
import * as i16 from "../buttons/button-success/button-success.component";
|
|
20
|
+
export class MenuComponent {
|
|
21
|
+
onWindowResize() {
|
|
22
|
+
this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
|
|
23
|
+
this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
|
|
24
|
+
this.cdr.detectChanges();
|
|
25
|
+
}
|
|
26
|
+
constructor(cdr, router, route) {
|
|
27
|
+
this.cdr = cdr;
|
|
28
|
+
this.router = router;
|
|
29
|
+
this.route = route;
|
|
30
|
+
this.menuCompleto = [];
|
|
31
|
+
this.licencas = [];
|
|
32
|
+
this.breadCrumbs = false;
|
|
33
|
+
this.licencaChange = new EventEmitter();
|
|
34
|
+
this.gerenciarKeePassEvent = new EventEmitter();
|
|
35
|
+
this.sairEvent = new EventEmitter();
|
|
36
|
+
this.expandMenuEmit = new EventEmitter();
|
|
37
|
+
this.trocarLicencaEmit = new EventEmitter();
|
|
38
|
+
this.licencasOptions = [];
|
|
39
|
+
this.menusFiltrados = [];
|
|
40
|
+
this.menus = [];
|
|
41
|
+
this.breadCrumbItems = [];
|
|
42
|
+
this.expandMenu = true;
|
|
43
|
+
this.visibleDialogLicenca = false;
|
|
44
|
+
}
|
|
45
|
+
ngOnInit() {
|
|
46
|
+
this.configurarLicencas();
|
|
47
|
+
this.router.events.subscribe((event) => {
|
|
48
|
+
if (event instanceof NavigationEnd) {
|
|
49
|
+
// console.log('Evento de navegação:', event);
|
|
50
|
+
this.breadCrumbItems = this.getBreadcrumbs(event.url);
|
|
51
|
+
// console.log("breadCrumbItems ->", this.breadCrumbItems);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
|
|
55
|
+
this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
|
|
56
|
+
}
|
|
57
|
+
configurarLicencas() {
|
|
58
|
+
setTimeout(() => this.setLicenca(), 1500);
|
|
59
|
+
this.licencas.forEach((x, i) => {
|
|
60
|
+
this.licencasOptions.push({
|
|
61
|
+
id: i,
|
|
62
|
+
descricao: x.nome,
|
|
63
|
+
cpfcnpj: x.cpfcnpj
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
var licenca = this.licencasOptions.find((x) => x.cpfcnpj == this.licencaSelecionada.cpfcnpj);
|
|
67
|
+
if (licenca != undefined)
|
|
68
|
+
this.licencaSelected = licenca;
|
|
69
|
+
}
|
|
70
|
+
getBreadcrumbs(url = '', breadcrumbs = []) {
|
|
71
|
+
if (!url || url === '/') {
|
|
72
|
+
return breadcrumbs.length > 0 ? breadcrumbs : [{ label: 'Home', routerLink: '/' }];
|
|
73
|
+
}
|
|
74
|
+
const segments = url.split('/').filter(segment => segment !== '');
|
|
75
|
+
let currentUrl = '';
|
|
76
|
+
for (const segment of segments) {
|
|
77
|
+
currentUrl += `/${segment}`;
|
|
78
|
+
breadcrumbs.push({ label: segment, routerLink: currentUrl });
|
|
79
|
+
}
|
|
80
|
+
if (breadcrumbs.length > 0) {
|
|
81
|
+
breadcrumbs.forEach(item => {
|
|
82
|
+
let labelSegments = item.label.split('-');
|
|
83
|
+
labelSegments = labelSegments.map((segment, index) => {
|
|
84
|
+
return index === 0 ? segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase() : segment;
|
|
85
|
+
});
|
|
86
|
+
item.label = labelSegments.join(' ');
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return breadcrumbs;
|
|
90
|
+
}
|
|
91
|
+
closeCallback(e) {
|
|
92
|
+
this.sidebarRef.close(e);
|
|
93
|
+
}
|
|
94
|
+
MascaraNomeLicenca(nomeLicenca) {
|
|
95
|
+
if (nomeLicenca) {
|
|
96
|
+
if (nomeLicenca.length > 24)
|
|
97
|
+
return nomeLicenca.substring(0, 24) + '...';
|
|
98
|
+
else
|
|
99
|
+
return nomeLicenca;
|
|
100
|
+
}
|
|
101
|
+
else
|
|
102
|
+
return '';
|
|
103
|
+
}
|
|
104
|
+
MascaraCnpj(cpfcnpj) {
|
|
105
|
+
const cpfcnpjLimpo = cpfcnpj.replace(/\D/g, '');
|
|
106
|
+
return cpfcnpjLimpo.replace(/^(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/, '$1.$2.$3/$4-$5');
|
|
107
|
+
}
|
|
108
|
+
definirMenusPorSistema(idsistema) {
|
|
109
|
+
this.menus =
|
|
110
|
+
this.menuCompleto.find((x) => x.sistema.idsistema == idsistema)?.menus ||
|
|
111
|
+
[];
|
|
112
|
+
// console.log(this.menus, 'menus')
|
|
113
|
+
// console.log(this.menuCompleto, 'menuCompleto')
|
|
114
|
+
// console.log(this.menus[0].menupai, 'menupai')
|
|
115
|
+
if (this.menus[0].menupai) {
|
|
116
|
+
var filhos = this.retornarMenuFilhos(this.menus[0].idsistema, this.menus[0].idmenu);
|
|
117
|
+
if (filhos != undefined)
|
|
118
|
+
this.callRoute(filhos[0].link, true);
|
|
119
|
+
}
|
|
120
|
+
else
|
|
121
|
+
this.callRoute(this.menus[0].link, true);
|
|
122
|
+
this.sistemasPanel.hide();
|
|
123
|
+
}
|
|
124
|
+
retornarMenuFilhos(idsistema, idmenu) {
|
|
125
|
+
return this.menuCompleto
|
|
126
|
+
.find((x) => x.sistema.idsistema == idsistema)
|
|
127
|
+
?.menus.filter((x) => x.idmenupai == idmenu);
|
|
128
|
+
}
|
|
129
|
+
callRoute(e, expand) {
|
|
130
|
+
if (!expand)
|
|
131
|
+
!this.expandMenu ? this.expandMenu = !this.expandMenu : '';
|
|
132
|
+
this.router.navigateByUrl(e);
|
|
133
|
+
}
|
|
134
|
+
toggleMenu() {
|
|
135
|
+
this.expandMenu = !this.expandMenu;
|
|
136
|
+
this.expandMenuEvent();
|
|
137
|
+
}
|
|
138
|
+
trocarLicenca() {
|
|
139
|
+
this.trocarLicencaEmit.emit();
|
|
140
|
+
}
|
|
141
|
+
setLicenca() {
|
|
142
|
+
var licenca = this.licencas.find((licenca) => licenca.idmaster == this.licencaSelected.id);
|
|
143
|
+
if (licenca)
|
|
144
|
+
this.licencaSelecionada = licenca;
|
|
145
|
+
this.visibleDialogLicenca = false;
|
|
146
|
+
this.licencaChange.emit(this.licencaSelecionada);
|
|
147
|
+
this.definirMenusPorSistema(this.menuCompleto[0]?.sistema.idsistema);
|
|
148
|
+
}
|
|
149
|
+
gerenciarKeePass(event) {
|
|
150
|
+
this.sistemasPanel.hide();
|
|
151
|
+
this.gerenciarKeePassEvent.emit(event);
|
|
152
|
+
}
|
|
153
|
+
sair(event) {
|
|
154
|
+
this.sistemasPanel.hide();
|
|
155
|
+
this.sairEvent.emit(event);
|
|
156
|
+
}
|
|
157
|
+
expandMenuEvent() {
|
|
158
|
+
this.expandMenuEmit.emit(this.expandMenu);
|
|
159
|
+
}
|
|
160
|
+
ajustarHeigthCard() {
|
|
161
|
+
if (this.widthCard > 400) {
|
|
162
|
+
if (this.breadCrumbs)
|
|
163
|
+
return 105;
|
|
164
|
+
else
|
|
165
|
+
return 85;
|
|
166
|
+
}
|
|
167
|
+
else
|
|
168
|
+
return 83;
|
|
169
|
+
}
|
|
170
|
+
verificarPaginaSelecionada(link) {
|
|
171
|
+
return this.router.url.includes(link);
|
|
172
|
+
}
|
|
173
|
+
// retornarTituloBreadCrumbs(label: any): string {
|
|
174
|
+
// if (label)
|
|
175
|
+
// return this.breadCrumbItems[this.breadCrumbItems.length - 1]?.label
|
|
176
|
+
// else return '';
|
|
177
|
+
// }
|
|
178
|
+
retornarTituloBreadCrumbs(str) {
|
|
179
|
+
if (str.includes('-')) {
|
|
180
|
+
str = str.replace('-', ' ');
|
|
181
|
+
}
|
|
182
|
+
var primeiraLetra = str.charAt(0).toUpperCase() + str.slice(1);
|
|
183
|
+
str.slice(1);
|
|
184
|
+
return primeiraLetra;
|
|
185
|
+
}
|
|
186
|
+
onMouseEnter(index) {
|
|
187
|
+
this.mouseOverIndex = index;
|
|
188
|
+
}
|
|
189
|
+
onMouseFilhoEnter(index) {
|
|
190
|
+
this.mouseOverFilhoIndex = index;
|
|
191
|
+
}
|
|
192
|
+
onMouseLeave() {
|
|
193
|
+
this.mouseOverIndex = null;
|
|
194
|
+
this.mouseOverFilhoIndex = null;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
|
|
198
|
+
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: MenuComponent, selector: "kv-menu", inputs: { menuCompleto: "menuCompleto", licencas: "licencas", licencaSelecionada: "licencaSelecionada", logoImage: "logoImage", nomeUsuario: "nomeUsuario", breadCrumbs: "breadCrumbs" }, outputs: { licencaChange: "licencaChange", gerenciarKeePassEvent: "gerenciarKeePassEvent", sairEvent: "sairEvent", expandMenuEmit: "expandMenuEmit", trocarLicencaEmit: "trocarLicencaEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "sidebarRef", first: true, predicate: ["sidebarRef"], descendants: true }, { propertyName: "sistemasPanel", first: true, predicate: ["sistemasPanel"], descendants: true }, { propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\"\n >\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column {{expandMenu ? 'mx-1' : 'mx-1'}}\">\n <div class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\"\n >\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\"\n />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\"\n >\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"trocarLicenca()\"\n >\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.nome\"\n [tooltipPosition]=\"'right'\"\n >\n {{MascaraNomeLicenca(this.licencaSelecionada.nome)}}\n </span>\n <span class=\"text-sm mt-1\">{{MascaraCnpj(this.licencaSelecionada.cpfcnpj)}}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"trocarLicenca()\"\n [pTooltip]=\"'Alterar workspace'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\"\n >\n <!-- menus -->\n <li *ngFor=\"let menu of menus; let i = index\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n >\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </a>\n <!-- menu com filho -->\n <div *ngIf=\"menu.menupai\">\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\"\n >\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\n *ngIf=\"expandMenu\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n ></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\"\n >\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu); let iFilho = index\n \">\n <a\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\"\n >\n <i\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\n *ngIf=\"filho.icone && filho.icone !== ''\"\n ></i>\n <span\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\"\n >{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n</div>\n</div>\n</ng-template>\n</p-sidebar>\n\n\n<div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\"\n>\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div *ngIf=\"breadCrumbs\">\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length -\n 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\n ></p-breadcrumb>\n </div>\n\n <div *ngIf=\"!breadCrumbs\"></div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n apps\n </i>\n </button>\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"meusDadosPanel.toggle($event)\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n person\n </i>\n </button>\n </div>\n </div>\n\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\"\n >\n <div class=\"card-container w-full\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n</div>\n\n\n</div>\n\n<p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\"\n >\n <button\n *ngFor=\"let menu of menuCompleto\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\n [pTooltip]=\"menu.sistema.descricaosistema\"\n [tooltipPosition]=\"'left'\"\n >\n <!-- <img\n alt=\"logo\"\n style=\"width: 2rem; height: 2rem;\"\n /> -->\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\n\n </button>\n\n\n <!-- <p-button styleClass=\"p-button-outlined\">\n <img alt=\"logo\" src=\"https://primefaces.org/cdn/primeng/images/primeng-icon.svg\" style=\"width: 1.5rem\" />\n <span class=\"ml-2 font-bold\">PrimeNG</span>\n </p-button> -->\n\n </div>\n </ng-template>\n</p-overlayPanel>\n\n<p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ? nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n [disabled]=\"true\"\n ></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n ></p-button>\n </ng-template>\n\n</p-overlayPanel>\n\n<p-dialog\n [(visible)]=\"visibleDialogLicenca\"\n [modal]=\"true\"\n [draggable]=\"false\"\n header=\"Trocar Licen\u00E7a\"\n [style]=\"{width: '50vh' }\"\n>\n <div class=\"flex flex-column align-items-end\">\n\n <div class=\"w-full\">\n <p-dropdown\n styleClass=\"w-full\"\n [options]=\"licencasOptions\"\n [(ngModel)]=\"licencaSelected\"\n optionLabel=\"descricao\"\n ></p-dropdown>\n </div>\n\n <kv-button-success\n [label]=\"'Salvar'\"\n class=\"mt-2\"\n (onClick)=\"setLicenca()\"\n ></kv-button-success>\n\n </div>\n\n</p-dialog>\n\n<!-- <p-confirmDialog\n [style]=\"{width: '40vw'}\"\n [baseZIndex]=\"10000\"\n rejectButtonStyleClass=\"p-button-text\"\n>\n</p-confirmDialog>\n\n<p-toast></p-toast> -->", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#ffffff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .p-breadcrumb ul li:last-child .p-menuitem-text{color:#0c3e66!important;font-weight:700;font-size:.8rem!important}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#0c3e66!important;font-weight:500;font-size:.8rem!important}span,.breadcrumb-title{font-size:14px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i5.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i7.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["styleClass", "style", "layout", "type", "align"] }, { kind: "component", type: i9.Dropdown, selector: "p-dropdown", inputs: ["scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "selectId", "dataKey", "filterBy", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "overlayDirection", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "options", "filterValue"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i10.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i11.Ripple, selector: "[pRipple]" }, { kind: "component", type: i12.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i13.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "component", type: i14.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i16.ButtonSuccessComponent, selector: "kv-button-success" }] });
|
|
199
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: MenuComponent, decorators: [{
|
|
200
|
+
type: Component,
|
|
201
|
+
args: [{ selector: 'kv-menu', template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\"\n >\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column {{expandMenu ? 'mx-1' : 'mx-1'}}\">\n <div class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\"\n >\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\"\n />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\"\n >\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"trocarLicenca()\"\n >\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.nome\"\n [tooltipPosition]=\"'right'\"\n >\n {{MascaraNomeLicenca(this.licencaSelecionada.nome)}}\n </span>\n <span class=\"text-sm mt-1\">{{MascaraCnpj(this.licencaSelecionada.cpfcnpj)}}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"trocarLicenca()\"\n [pTooltip]=\"'Alterar workspace'\"\n [tooltipPosition]=\"'right'\"\n >\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\"\n >\n <!-- menus -->\n <li *ngFor=\"let menu of menus; let i = index\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.menupai && menu.idmenupai == 0\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n >\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </a>\n <!-- menu com filho -->\n <div *ngIf=\"menu.menupai\">\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\"\n >\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"menu.icone && menu.icone !== ''\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n >\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\"\n >{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\n *ngIf=\"expandMenu\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n ></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\"\n >\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idsistema, menu.idmenu); let iFilho = index\n \">\n <a\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\"\n >\n <i\n class=\"pi pi-chart-line mr-2 ml-1 adjust-icon-menu\"\n *ngIf=\"filho.icone && filho.icone !== ''\"\n ></i>\n <span\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\"\n >{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n</div>\n</div>\n</ng-template>\n</p-sidebar>\n\n\n<div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\"\n>\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div *ngIf=\"breadCrumbs\">\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length -\n 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"\n ></p-breadcrumb>\n </div>\n\n <div *ngIf=\"!breadCrumbs\"></div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n apps\n </i>\n </button>\n <button\n pButton\n class=\"p-button-rounded p-button-text h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu padding-style\"\n (click)=\"meusDadosPanel.toggle($event)\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n >\n <i class=\"material-symbols-outlined\">\n person\n </i>\n </button>\n </div>\n </div>\n\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\"\n >\n <div class=\"card-container w-full\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n</div>\n\n\n</div>\n\n<p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\"\n >\n <button\n *ngFor=\"let menu of menuCompleto\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(menu.sistema.idsistema)\"\n [pTooltip]=\"menu.sistema.descricaosistema\"\n [tooltipPosition]=\"'left'\"\n >\n <!-- <img\n alt=\"logo\"\n style=\"width: 2rem; height: 2rem;\"\n /> -->\n {{ menu.sistema.nomesistema.charAt(0).toUpperCase() }}\n\n </button>\n\n\n <!-- <p-button styleClass=\"p-button-outlined\">\n <img alt=\"logo\" src=\"https://primefaces.org/cdn/primeng/images/primeng-icon.svg\" style=\"width: 1.5rem\" />\n <span class=\"ml-2 font-bold\">PrimeNG</span>\n </p-button> -->\n\n </div>\n </ng-template>\n</p-overlayPanel>\n\n<p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\"\n>\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ? nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n [disabled]=\"true\"\n ></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full p-button-text text-blue-900\"\n ></p-button>\n </ng-template>\n\n</p-overlayPanel>\n\n<p-dialog\n [(visible)]=\"visibleDialogLicenca\"\n [modal]=\"true\"\n [draggable]=\"false\"\n header=\"Trocar Licen\u00E7a\"\n [style]=\"{width: '50vh' }\"\n>\n <div class=\"flex flex-column align-items-end\">\n\n <div class=\"w-full\">\n <p-dropdown\n styleClass=\"w-full\"\n [options]=\"licencasOptions\"\n [(ngModel)]=\"licencaSelected\"\n optionLabel=\"descricao\"\n ></p-dropdown>\n </div>\n\n <kv-button-success\n [label]=\"'Salvar'\"\n class=\"mt-2\"\n (onClick)=\"setLicenca()\"\n ></kv-button-success>\n\n </div>\n\n</p-dialog>\n\n<!-- <p-confirmDialog\n [style]=\"{width: '40vw'}\"\n [baseZIndex]=\"10000\"\n rejectButtonStyleClass=\"p-button-text\"\n>\n</p-confirmDialog>\n\n<p-toast></p-toast> -->", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#ffffff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .p-breadcrumb ul li:last-child .p-menuitem-text{color:#0c3e66!important;font-weight:700;font-size:.8rem!important}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#0c3e66!important;font-weight:500;font-size:.8rem!important}span,.breadcrumb-title{font-size:14px!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb ul li .p-menuitem-link .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"] }]
|
|
202
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { menuCompleto: [{
|
|
203
|
+
type: Input
|
|
204
|
+
}], licencas: [{
|
|
205
|
+
type: Input
|
|
206
|
+
}], licencaSelecionada: [{
|
|
207
|
+
type: Input
|
|
208
|
+
}], logoImage: [{
|
|
209
|
+
type: Input
|
|
210
|
+
}], nomeUsuario: [{
|
|
211
|
+
type: Input
|
|
212
|
+
}], breadCrumbs: [{
|
|
213
|
+
type: Input
|
|
214
|
+
}], licencaChange: [{
|
|
215
|
+
type: Output
|
|
216
|
+
}], gerenciarKeePassEvent: [{
|
|
217
|
+
type: Output
|
|
218
|
+
}], sairEvent: [{
|
|
219
|
+
type: Output
|
|
220
|
+
}], expandMenuEmit: [{
|
|
221
|
+
type: Output
|
|
222
|
+
}], trocarLicencaEmit: [{
|
|
223
|
+
type: Output
|
|
224
|
+
}], sidebarRef: [{
|
|
225
|
+
type: ViewChild,
|
|
226
|
+
args: ['sidebarRef']
|
|
227
|
+
}], sistemasPanel: [{
|
|
228
|
+
type: ViewChild,
|
|
229
|
+
args: ['sistemasPanel']
|
|
230
|
+
}], meusDadosPanel: [{
|
|
231
|
+
type: ViewChild,
|
|
232
|
+
args: ['meusDadosPanel']
|
|
233
|
+
}], onWindowResize: [{
|
|
234
|
+
type: HostListener,
|
|
235
|
+
args: ['window:resize', ['$event']]
|
|
236
|
+
}] } });
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFjM0gsTUFBTSxPQUFPLGFBQWE7SUFxQ3hCLGNBQWM7UUFDWixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBb0IsR0FBc0IsRUFBWSxNQUFjLEVBQVUsS0FBcUI7UUFBL0UsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBWSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUF6QzFGLGlCQUFZLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxhQUFRLEdBQXVCLEVBQUUsQ0FBQTtRQUlqQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU1Qixr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QUFDLENBQUM7UUFFL0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUViLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDOzswR0FyT1UsYUFBYTs4RkFBYixhQUFhLDB4QkNmMUIsZ2pZQXFWdUI7MkZEdFVWLGFBQWE7a0JBTHpCLFNBQVM7K0JBQ0UsU0FBUzswSkFNVixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRWtCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ0csY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBb0IzQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJ3ByaW1lbmcvc2lkZWJhcic7XG5pbXBvcnQgeyBPdmVybGF5UGFuZWwgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XG5cbmltcG9ydCB7IE1hc3RlckNvbWJvTW9kZWwgfSBmcm9tICdrZWV2by1hcGktc2VydmljZXMta2Vldm9jZW50ZXInO1xuaW1wb3J0IHsgbWVudUNvbXBsZXRvTW9kZWwgfSBmcm9tICcuLi9hcGkvbW9kZWxzL21lbnUvbWVudWNvbXBsZXRvLm1vZGVsJztcbmltcG9ydCB7IG1lbnVNb2RlbCB9IGZyb20gJy4uL2FwaS9tb2RlbHMvbWVudS9tZW51Lm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna3YtbWVudScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBtZW51Q29tcGxldG86IG1lbnVDb21wbGV0b01vZGVsW10gPSBbXTtcbiAgQElucHV0KCkgbGljZW5jYXM6IE1hc3RlckNvbWJvTW9kZWxbXSA9IFtdXG4gIEBJbnB1dCgpIGxpY2VuY2FTZWxlY2lvbmFkYSE6IE1hc3RlckNvbWJvTW9kZWw7XG4gIEBJbnB1dCgpIGxvZ29JbWFnZSE6IGFueTtcbiAgQElucHV0KCkgbm9tZVVzdWFyaW8hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJyZWFkQ3J1bWJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGxpY2VuY2FDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZ2VyZW5jaWFyS2VlUGFzc0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNhaXJFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBleHBhbmRNZW51RW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgdHJvY2FyTGljZW5jYUVtaXQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdzaWRlYmFyUmVmJykgc2lkZWJhclJlZiE6IFNpZGViYXI7XG4gIEBWaWV3Q2hpbGQoJ3Npc3RlbWFzUGFuZWwnKSBzaXN0ZW1hc1BhbmVsITogT3ZlcmxheVBhbmVsO1xuICBAVmlld0NoaWxkKCdtZXVzRGFkb3NQYW5lbCcpIG1ldXNEYWRvc1BhbmVsITogT3ZlcmxheVBhbmVsO1xuXG4gIGxpY2VuY2FzT3B0aW9uczogeyBpZDogbnVtYmVyLCBkZXNjcmljYW86IHN0cmluZywgY3BmY25wajogc3RyaW5nIH1bXSA9IFtdXG4gIGxpY2VuY2FTZWxlY3RlZCE6IHsgaWQ6IG51bWJlciwgZGVzY3JpY2FvOiBzdHJpbmcsIGNwZmNucGo6IHN0cmluZyB9O1xuXG4gIG1lbnVzRmlsdHJhZG9zOiBtZW51Q29tcGxldG9Nb2RlbFtdID0gW107XG4gIG1lbnVzOiBtZW51TW9kZWxbXSA9IFtdO1xuXG4gIGJyZWFkQ3J1bWJJdGVtczogeyBsYWJlbDogc3RyaW5nLCByb3V0ZXJMaW5rOiBzdHJpbmcgfVtdID0gW107XG5cbiAgaGVpZ3RoQ2FyZCE6IG51bWJlcjtcbiAgd2lkdGhDYXJkITogbnVtYmVyO1xuICBleHBhbmRNZW51OiBib29sZWFuID0gdHJ1ZTtcblxuICB2aXNpYmxlRGlhbG9nTGljZW5jYTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIG1vdXNlT3ZlckluZGV4OiBhbnk7XG4gIG1vdXNlT3ZlckZpbGhvSW5kZXg6IGFueTtcblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25XaW5kb3dSZXNpemUoKSB7XG4gICAgdGhpcy5oZWlndGhDYXJkID0gTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLWNvbnRlbnQnKT8ub2Zmc2V0SGVpZ2h0KTtcbiAgICB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51ID8gMzMzIDogOTMpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWd1cmFyTGljZW5jYXMoKTtcblxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdFdmVudG8gZGUgbmF2ZWdhw6fDo286JywgZXZlbnQpO1xuICAgICAgICB0aGlzLmJyZWFkQ3J1bWJJdGVtcyA9IHRoaXMuZ2V0QnJlYWRjcnVtYnMoZXZlbnQudXJsKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJicmVhZENydW1iSXRlbXMgLT5cIiwgdGhpcy5icmVhZENydW1iSXRlbXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5oZWlndGhDYXJkID0gTnVtYmVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLWNvbnRlbnQnKT8ub2Zmc2V0SGVpZ2h0KTtcbiAgICB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51ID8gMzMzIDogOTMpO1xuICB9XG5cbiAgY29uZmlndXJhckxpY2VuY2FzKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRMaWNlbmNhKCksIDE1MDApXG5cbiAgICB0aGlzLmxpY2VuY2FzLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgIHRoaXMubGljZW5jYXNPcHRpb25zLnB1c2goe1xuICAgICAgICBpZDogaSxcbiAgICAgICAgZGVzY3JpY2FvOiB4Lm5vbWUsXG4gICAgICAgIGNwZmNucGo6IHguY3BmY25walxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgdmFyIGxpY2VuY2EgPSB0aGlzLmxpY2VuY2FzT3B0aW9ucy5maW5kKCh4KSA9PiB4LmNwZmNucGogPT0gdGhpcy5saWNlbmNhU2VsZWNpb25hZGEuY3BmY25waik7XG5cbiAgICBpZiAobGljZW5jYSAhPSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmxpY2VuY2FTZWxlY3RlZCA9IGxpY2VuY2E7XG4gIH1cblxuICBwcml2YXRlIGdldEJyZWFkY3J1bWJzKHVybDogc3RyaW5nID0gJycsIGJyZWFkY3J1bWJzOiB7IGxhYmVsOiBzdHJpbmcsIHJvdXRlckxpbms6IHN0cmluZyB9W10gPSBbXSk6IHsgbGFiZWw6IHN0cmluZywgcm91dGVyTGluazogc3RyaW5nIH1bXSB7XG5cbiAgICBpZiAoIXVybCB8fCB1cmwgPT09ICcvJykge1xuICAgICAgcmV0dXJuIGJyZWFkY3J1bWJzLmxlbmd0aCA+IDAgPyBicmVhZGNydW1icyA6IFt7IGxhYmVsOiAnSG9tZScsIHJvdXRlckxpbms6ICcvJyB9XTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50cyA9IHVybC5zcGxpdCgnLycpLmZpbHRlcihzZWdtZW50ID0+IHNlZ21lbnQgIT09ICcnKTtcblxuICAgIGxldCBjdXJyZW50VXJsID0gJyc7XG4gICAgZm9yIChjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKSB7XG4gICAgICBjdXJyZW50VXJsICs9IGAvJHtzZWdtZW50fWA7XG4gICAgICBicmVhZGNydW1icy5wdXNoKHsgbGFiZWw6IHNlZ21lbnQsIHJvdXRlckxpbms6IGN1cnJlbnRVcmwgfSk7XG4gICAgfVxuXG4gICAgaWYgKGJyZWFkY3J1bWJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGJyZWFkY3J1bWJzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGxldCBsYWJlbFNlZ21lbnRzID0gaXRlbS5sYWJlbC5zcGxpdCgnLScpO1xuICAgICAgICBsYWJlbFNlZ21lbnRzID0gbGFiZWxTZWdtZW50cy5tYXAoKHNlZ21lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwID8gc2VnbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHNlZ21lbnQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSA6IHNlZ21lbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpdGVtLmxhYmVsID0gbGFiZWxTZWdtZW50cy5qb2luKCcgJyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzO1xuICB9XG5cbiAgY2xvc2VDYWxsYmFjayhlOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2lkZWJhclJlZi5jbG9zZShlKTtcbiAgfVxuXG4gIE1hc2NhcmFOb21lTGljZW5jYShub21lTGljZW5jYTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAobm9tZUxpY2VuY2EpIHtcbiAgICAgIGlmIChub21lTGljZW5jYS5sZW5ndGggPiAyNClcbiAgICAgICAgcmV0dXJuIG5vbWVMaWNlbmNhLnN1YnN0cmluZygwLCAyNCkgKyAnLi4uJztcbiAgICAgIGVsc2UgcmV0dXJuIG5vbWVMaWNlbmNhO1xuICAgIH0gZWxzZSByZXR1cm4gJyc7XG4gIH1cblxuICBNYXNjYXJhQ25waihjcGZjbnBqOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNwZmNucGpMaW1wbyA9IGNwZmNucGoucmVwbGFjZSgvXFxEL2csICcnKTtcblxuICAgIHJldHVybiBjcGZjbnBqTGltcG8ucmVwbGFjZShcbiAgICAgIC9eKFxcZHsyfSkoXFxkezN9KShcXGR7M30pKFxcZHs0fSkoXFxkezJ9KSQvLFxuICAgICAgJyQxLiQyLiQzLyQ0LSQ1J1xuICAgICk7XG4gIH1cblxuICBkZWZpbmlyTWVudXNQb3JTaXN0ZW1hKGlkc2lzdGVtYTogbnVtYmVyKSB7XG4gICAgdGhpcy5tZW51cyA9XG4gICAgICB0aGlzLm1lbnVDb21wbGV0by5maW5kKCh4KSA9PiB4LnNpc3RlbWEuaWRzaXN0ZW1hID09IGlkc2lzdGVtYSk/Lm1lbnVzIHx8XG4gICAgICBbXTtcblxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMubWVudXMsICdtZW51cycpXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5tZW51Q29tcGxldG8sICdtZW51Q29tcGxldG8nKVxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMubWVudXNbMF0ubWVudXBhaSwgJ21lbnVwYWknKVxuXG4gICAgaWYgKHRoaXMubWVudXNbMF0ubWVudXBhaSkge1xuICAgICAgdmFyIGZpbGhvcyA9IHRoaXMucmV0b3JuYXJNZW51RmlsaG9zKHRoaXMubWVudXNbMF0uaWRzaXN0ZW1hLCB0aGlzLm1lbnVzWzBdLmlkbWVudSk7XG4gICAgICBpZiAoZmlsaG9zICE9IHVuZGVmaW5lZClcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpXG4gICAgfSBlbHNlIHRoaXMuY2FsbFJvdXRlKHRoaXMubWVudXNbMF0ubGluaywgdHJ1ZSlcblxuICAgIHRoaXMuc2lzdGVtYXNQYW5lbC5oaWRlKCk7XG4gIH1cblxuICByZXRvcm5hck1lbnVGaWxob3MoaWRzaXN0ZW1hOiBudW1iZXIsIGlkbWVudTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMubWVudUNvbXBsZXRvXG4gICAgICAuZmluZCgoeCkgPT4geC5zaXN0ZW1hLmlkc2lzdGVtYSA9PSBpZHNpc3RlbWEpXG4gICAgICA/Lm1lbnVzLmZpbHRlcigoeCkgPT4geC5pZG1lbnVwYWkgPT0gaWRtZW51KTtcbiAgfVxuXG4gIGNhbGxSb3V0ZShlOiBhbnksIGV4cGFuZD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIWV4cGFuZClcbiAgICAgICF0aGlzLmV4cGFuZE1lbnUgPyB0aGlzLmV4cGFuZE1lbnUgPSAhdGhpcy5leHBhbmRNZW51IDogJydcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGUpXG4gIH1cblxuICB0b2dnbGVNZW51KCkge1xuICAgIHRoaXMuZXhwYW5kTWVudSA9ICF0aGlzLmV4cGFuZE1lbnU7XG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKVxuICB9XG5cbiAgdHJvY2FyTGljZW5jYSgpIHtcbiAgICB0aGlzLnRyb2NhckxpY2VuY2FFbWl0LmVtaXQoKTtcbiAgfVxuXG4gIHNldExpY2VuY2EoKSB7XG4gICAgdmFyIGxpY2VuY2EgPSB0aGlzLmxpY2VuY2FzLmZpbmQoKGxpY2VuY2EpID0+IGxpY2VuY2EuaWRtYXN0ZXIgPT0gdGhpcy5saWNlbmNhU2VsZWN0ZWQuaWQpO1xuICAgIGlmIChsaWNlbmNhKSB0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYSA9IGxpY2VuY2E7XG5cbiAgICB0aGlzLnZpc2libGVEaWFsb2dMaWNlbmNhID0gZmFsc2VcblxuICAgIHRoaXMubGljZW5jYUNoYW5nZS5lbWl0KHRoaXMubGljZW5jYVNlbGVjaW9uYWRhKTtcblxuICAgIHRoaXMuZGVmaW5pck1lbnVzUG9yU2lzdGVtYSh0aGlzLm1lbnVDb21wbGV0b1swXT8uc2lzdGVtYS5pZHNpc3RlbWEpXG4gIH1cblxuICBnZXJlbmNpYXJLZWVQYXNzKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNpc3RlbWFzUGFuZWwuaGlkZSgpO1xuICAgIHRoaXMuZ2VyZW5jaWFyS2VlUGFzc0V2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBzYWlyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNpc3RlbWFzUGFuZWwuaGlkZSgpO1xuICAgIHRoaXMuc2FpckV2ZW50LmVtaXQoZXZlbnQpXG4gIH1cblxuICBleHBhbmRNZW51RXZlbnQoKSB7XG4gICAgdGhpcy5leHBhbmRNZW51RW1pdC5lbWl0KHRoaXMuZXhwYW5kTWVudSk7XG4gIH1cblxuICBhanVzdGFySGVpZ3RoQ2FyZCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLndpZHRoQ2FyZCA+IDQwMCkge1xuICAgICAgaWYgKHRoaXMuYnJlYWRDcnVtYnMpIHJldHVybiAxMDVcbiAgICAgIGVsc2UgcmV0dXJuIDg1XG4gICAgfSBlbHNlIHJldHVybiA4M1xuICB9XG5cbiAgdmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEobGluazogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhsaW5rKTtcbiAgfVxuXG4gIC8vIHJldG9ybmFyVGl0dWxvQnJlYWRDcnVtYnMobGFiZWw6IGFueSk6IHN0cmluZyB7XG4gIC8vICAgaWYgKGxhYmVsKVxuICAvLyAgICAgcmV0dXJuIHRoaXMuYnJlYWRDcnVtYkl0ZW1zW3RoaXMuYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCAtIDFdPy5sYWJlbFxuICAvLyAgIGVsc2UgcmV0dXJuICcnO1xuICAvLyB9XG5cbiAgcmV0b3JuYXJUaXR1bG9CcmVhZENydW1icyhzdHI6IHN0cmluZykge1xuXG4gICAgaWYgKHN0ci5pbmNsdWRlcygnLScpKSB7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLScsICcgJyk7XG4gICAgfVxuXG4gICAgdmFyIHByaW1laXJhTGV0cmEgPSBzdHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG5cbiAgICBzdHIuc2xpY2UoMSk7XG5cbiAgICByZXR1cm4gcHJpbWVpcmFMZXRyYTtcbiAgfVxuXG4gIG9uTW91c2VFbnRlcihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb3VzZU92ZXJJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgb25Nb3VzZUZpbGhvRW50ZXIoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMubW91c2VPdmVyRmlsaG9JbmRleCA9IGluZGV4O1xuICB9XG5cbiAgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMubW91c2VPdmVySW5kZXggPSBudWxsO1xuICAgIHRoaXMubW91c2VPdmVyRmlsaG9JbmRleCA9IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG92ZXJmbG93LXktaGlkZGVuIHctIGZ1bGwtY29udGFpbmVyXCI+XG5cbiAgPGRpdiBbc3R5bGVdPVwie21pbldpZHRoOiBleHBhbmRNZW51ID8gJzMwMHB4JyA6ICc2MHB4J31cIj48L2Rpdj5cblxuICA8cC1zaWRlYmFyXG4gICAgI3NpZGViYXJSZWZcbiAgICBbdmlzaWJsZV09XCJ0cnVlXCJcbiAgICBbc2hvd0Nsb3NlSWNvbl09XCJmYWxzZVwiXG4gICAgW21vZGFsXT1cImZhbHNlXCJcbiAgICBbc3R5bGVdPVwie3dpZHRoOiBleHBhbmRNZW51ID8gJzMwMHB4JyA6ICc2MHB4J31cIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRsZXNzXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiB7e2V4cGFuZE1lbnUgPyAnbXgtMScgOiAnbXgtMSd9fVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXNocmluay0wIG14LTJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHt7ZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcid9fSBweS0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXG4gICAgICAgICAgICAgIGFsdD1cIkNhcmRcIlxuICAgICAgICAgICAgICBbc3JjXT1cImxvZ29JbWFnZVwiXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTUwXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwYWRkaW5nLXN0eWxlIGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJleHBhbmRNZW51ID8gJ09jdXRhciBNZW51JyA6ICdFeHBhbmRpciBNZW51J1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICAgIG1lbnVcbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHt7ZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcid9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidHJvY2FyTGljZW5jYSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCBtci0yXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwidGhpcy5saWNlbmNhU2VsZWNpb25hZGEubm9tZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7TWFzY2FyYU5vbWVMaWNlbmNhKHRoaXMubGljZW5jYVNlbGVjaW9uYWRhLm5vbWUpfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gbXQtMVwiPnt7TWFzY2FyYUNucGoodGhpcy5saWNlbmNhU2VsZWNpb25hZGEuY3BmY25wail9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcGFkZGluZy1zdHlsZSBoLTJyZW0gdy0ycmVtIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIGljb24tbWVudVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0cm9jYXJMaWNlbmNhKClcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FsdGVyYXIgd29ya3NwYWNlJ1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICAgIHN5bmNfYWx0XG4gICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAtZGl2aWRlciB0eXBlPVwic29saWRcIj48L3AtZGl2aWRlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ub25lIG0tMCAgY2FyZC1jb250YWluZXIge3tleHBhbmRNZW51ID8gJ214LTEnIDogJyd9fVwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiKGhlaWd0aENhcmQgLSAyMjApICsgJ3B4J1wiXG4gICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvO1wiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIG1lbnVzIC0tPlxuICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbWVudSBvZiBtZW51czsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPCEtLSBtZW51IHF1ZSBuw6NvIHRlbSBmaWxobyAtLT5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcihpKVwiXG4gICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUobWVudS5saW5rKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIW1lbnUubWVudXBhaSAmJiBtZW51LmlkbWVudXBhaSA9PSAwXCJcbiAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiIWV4cGFuZE1lbnUgPyBtZW51LmRlc2NyaWNhb21lbnUgOiAnJ1wiXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwie3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspID8gJ2JnLWdyZWVuLTYwMCcgOiAnJ319IG1lbnUtb3B0aW9uIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIG5vLXVuZGVybGluZSB7eyFleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1jZW50ZXInIDogJyd9fSBjdXJzb3ItcG9pbnRlciBib3JkZXItcm91bmQgdGV4dC03MDAgaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1kdXJhdGlvbi0xNTAgdHJhbnNpdGlvbi1jb2xvcnMgcC1yaXBwbGVcIlxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tbWVudSB7e2V4cGFuZE1lbnUgPyAnbWwtMSBtci0yJyA6ICcnfX0gIGljb24taG92ZXItY29sb3Ige3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lmljb25lICYmIG1lbnUuaWNvbmUgIT09ICcnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IG1lbnUuaWNvbmUgfX1cbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgZm9udC1tZWRpdW0ge3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwhLS0gbWVudSBjb20gZmlsaG8gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibWVudS5tZW51cGFpXCI+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKGkpXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiXG4gICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgIHBTdHlsZUNsYXNzPVwiQG5leHRcIlxuICAgICAgICAgICAgICAgIGVudGVyQ2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgIGVudGVyQWN0aXZlQ2xhc3M9XCJzbGlkZWRvd25cIlxuICAgICAgICAgICAgICAgIGxlYXZlVG9DbGFzcz1cImhpZGRlblwiXG4gICAgICAgICAgICAgICAgbGVhdmVBY3RpdmVDbGFzcz1cInNsaWRldXBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIge3shZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJyA6ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2Vlbid9fSBjdXJzb3ItcG9pbnRlciBib3JkZXItcm91bmQgdGV4dC03MDAgaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgdHJhbnNpdGlvbi1kdXJhdGlvbi0xNTAgdHJhbnNpdGlvbi1jb2xvcnMgcC1yaXBwbGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIiFleHBhbmRNZW51ID8gbWVudS5kZXNjcmljYW9tZW51IDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIhZXhwYW5kTWVudSA/IGV4cGFuZE1lbnUgPSAhZXhwYW5kTWVudSA6ICcnXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuXG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1tZW51IHt7ZXhwYW5kTWVudSA/ICdtbC0xIG1yLTInIDogJyd9fSBpY29uLWhvdmVyLWNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lmljb25lICYmIG1lbnUuaWNvbmUgIT09ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IG1lbnUuaWNvbmUgfX1cbiAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgZm9udC1tZWRpdW1cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxuICAgICAgICAgICAgICAgICAgPnt7IG1lbnUuZGVzY3JpY2FvbWVudSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwaSBwaS1jaGV2cm9uLWRvd24gdGV4dC1ibHVlLTkwMCBtci0xIGljb24taG92ZXItY29sb3JcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaG92ZXItY29sb3InOiBtb3VzZU92ZXJJbmRleCA9PT0gaX1cIlxuICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICA8IS0tIGZpbGhvcyAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ub25lIHB5LTAgcGwtMyBwci0wIG0tMCBoaWRkZW4gb3ZlcmZsb3cteS1oaWRkZW4gdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi00MDAgdHJhbnNpdGlvbi1lYXNlLWluLW91dFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgIGxldCBmaWxobyBvZiByZXRvcm5hck1lbnVGaWxob3MobWVudS5pZHNpc3RlbWEsIG1lbnUuaWRtZW51KTsgIGxldCBpRmlsaG8gPSBpbmRleFxuICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRmlsaG9FbnRlcihmaWxoby5pZG1lbnUpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hvdmVyLWNvbG9yJzogbW91c2VPdmVyRmlsaG9JbmRleCA9PT0gZmlsaG8uaWRtZW51fVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjYWxsUm91dGUoZmlsaG8ubGluaylcIlxuICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgIGNsYXNzPVwie3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShmaWxoby5saW5rKSA/ICdiZy1ncmVlbi02MDAnIDogJyd9fSBtZW51LW9wdGlvbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBuby11bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZSBwLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGkgcGktY2hhcnQtbGluZSBtci0yIG1sLTEgYWRqdXN0LWljb24tbWVudVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWxoby5pY29uZSAmJiBmaWxoby5pY29uZSAhPT0gJydcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgbWwtNCB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGZpbGhvLmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgPnt7IGZpbGhvLmRlc2NyaWNhb21lbnUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbjwvZGl2PlxuPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPC9wLXNpZGViYXI+XG5cblxuPGRpdlxuICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW5cIlxuICBpZD1cInBhZ2UtY29udGVudFwiXG4+XG5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG0tM1wiPlxuICAgIDxkaXYgKm5nSWY9XCJicmVhZENydW1ic1wiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXhsIGZvbnQtc2VtaWJvbGQgdGV4dC1ibHVlLTkwMCBicmVhZGNydW1iLXRpdGxlXCI+e3ticmVhZENydW1iSXRlbXNbYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCAtXG4gICAgICAgIDFdPy5sYWJlbH19PC9wPlxuICAgICAgPHAtYnJlYWRjcnVtYlxuICAgICAgICAqbmdJZj1cIndpZHRoQ2FyZCA+IDQwMFwiXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9uZSBwLTAgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgaC0ycmVtICFpbXBvcnRhbnQ7XCJcbiAgICAgICAgW21vZGVsXT1cImJyZWFkQ3J1bWJJdGVtc1wiXG4gICAgICAgIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiAnI2Q0ZDNkMyd9XCJcbiAgICAgICAgKG9uSXRlbUNsaWNrKT1cImNhbGxSb3V0ZSgkZXZlbnQuaXRlbS5yb3V0ZXJMaW5rLCB0cnVlKVwiXG4gICAgICA+PC9wLWJyZWFkY3J1bWI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIWJyZWFkQ3J1bWJzXCI+PC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidy1hdXRvIGZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHBCdXR0b25cbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgaC0ycmVtIHctMnJlbSBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSBpY29uLW1lbnUgcGFkZGluZy1zdHlsZVwiXG4gICAgICAgIChjbGljayk9XCJzaXN0ZW1hc1BhbmVsLnRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgW3BUb29sdGlwXT1cIidTaXN0ZW1hcydcIlxuICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgIGFwcHNcbiAgICAgICAgPC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHBCdXR0b25cbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgaC0ycmVtIHctMnJlbSBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSBpY29uLW1lbnUgcGFkZGluZy1zdHlsZVwiXG4gICAgICAgIChjbGljayk9XCJtZXVzRGFkb3NQYW5lbC50b2dnbGUoJGV2ZW50KVwiXG4gICAgICAgIFtwVG9vbHRpcF09XCInTWVudSBkbyBVc3XDoXJpbydcIlxuICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiXG4gICAgICA+XG4gICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgIHBlcnNvblxuICAgICAgICA8L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuICA8cC1jYXJkXG4gICAgY2xhc3M9XCJjYXJkLWNvbnRhaW5lclwiXG4gICAgc3R5bGVDbGFzcz1cIm0tMyBib3JkZXItbm9yb3VuZCBvdmVyZmxvdy15LWF1dG8gY2FyZC1jb250YWluZXJcIlxuICAgIFtzdHlsZV09XCJ7aGVpZ2h0OiBoZWlndGhDYXJkIC0gYWp1c3RhckhlaWd0aENhcmQoKSArICdweCd9XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWNvbnRhaW5lciB3LWZ1bGxcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgPC9wLWNhcmQ+XG5cbjwvZGl2PlxuXG5cbjwvZGl2PlxuXG48cC1vdmVybGF5UGFuZWxcbiAgI3Npc3RlbWFzUGFuZWxcbiAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMzUwbXMgZWFzZS1vdXQnXCJcbiAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCInMjUwbXMgZWFzZS1pbidcIlxuPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250YWluZXJcIj5cblxuICAgIDxwIGNsYXNzPVwidGl0bGUtc3R5bGUgbXQtM1wiPlNpc3RlbWFzPC9wPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtNSBtYi0zXCJcbiAgICAgIHN0eWxlPVwid2lkdGg6IDI1MHB4OyBoZWlnaHQ6IDEwMCU7XCJcbiAgICA+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVDb21wbGV0b1wiXG4gICAgICAgIHBCdXR0b25cbiAgICAgICAgcFJpcHBsZVxuICAgICAgICBjbGFzcz1cImJ0bi1zaXN0ZW1hLTIgYnRuLXNpc3RlbWEgaG92ZXItYnRuLWNvci1wYWRyYW8gcmVtb3ZlLWZvY3VzIGgtNHJlbSB3LTRyZW1cIlxuICAgICAgICAoY2xpY2spPVwiZGVmaW5pck1lbnVzUG9yU2lzdGVtYShtZW51LnNpc3RlbWEuaWRzaXN0ZW1hKVwiXG4gICAgICAgIFtwVG9vbHRpcF09XCJtZW51LnNpc3RlbWEuZGVzY3JpY2Fvc2lzdGVtYVwiXG4gICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSA8aW1nXG4gICAgICAgICAgYWx0PVwibG9nb1wiXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMnJlbTsgaGVpZ2h0OiAycmVtO1wiXG4gICAgICAgIC8+IC0tPlxuICAgICAgICB7eyBtZW51LnNpc3RlbWEubm9tZXNpc3RlbWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgfX1cblxuICAgICAgPC9idXR0b24+XG5cblxuICAgICAgPCEtLSA8cC1idXR0b24gc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCI+XG4gICAgICAgIDxpbWcgYWx0PVwibG9nb1wiIHNyYz1cImh0dHBzOi8vcHJpbWVmYWNlcy5vcmcvY2RuL3ByaW1lbmcvaW1hZ2VzL3ByaW1lbmctaWNvbi5zdmdcIiBzdHlsZT1cIndpZHRoOiAxLjVyZW1cIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTIgZm9udC1ib2xkXCI+UHJpbWVORzwvc3Bhbj5cbiAgICA8L3AtYnV0dG9uPiAtLT5cblxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9wLW92ZXJsYXlQYW5lbD5cblxuPHAtb3ZlcmxheVBhbmVsXG4gICNtZXVzRGFkb3NQYW5lbFxuICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cIiczNTBtcyBlYXNlLW91dCdcIlxuICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicyNTBtcyBlYXNlLWluJ1wiXG4+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxuXG4gICAgPHAgY2xhc3M9XCJ0aXRsZS1zdHlsZSBtdC0zXCI+T2zDoSwge3tub21lVXN1YXJpbyA/IG5vbWVVc3VhcmlvLnNwbGl0KCcgJylbMF0gOiAnVXN1w6FyaW8nfX0gITwvcD5cbiAgICA8ZGl2IGNsYXNzPVwibXQtNSBtYi0zXCI+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxwLWJ1dHRvblxuICAgICAgaWNvbj1cInBpIHBpLWxvY2tcIlxuICAgICAgbGFiZWw9XCJHZXLDqm5jaWFyIEtlZXZvUGFzc1wiXG4gICAgICAob25DbGljayk9XCJnZXJlbmNpYXJLZWVQYXNzKCRldmVudClcIlxuICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub3JvdW5kIHctZnVsbCBwLWJ1dHRvbi10ZXh0IHRleHQtYmx1ZS05MDBcIlxuICAgICAgW2Rpc2FibGVkXT1cInRydWVcIlxuICAgID48L3AtYnV0dG9uPlxuICAgIDxwLWJ1dHRvblxuICAgICAgaWNvbj1cInBpIHBpLXNpZ24tb3V0XCJcbiAgICAgIGxhYmVsPVwiU2FpclwiXG4gICAgICAob25DbGljayk9XCJzYWlyKCRldmVudClcIlxuICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub3JvdW5kIHctZnVsbCBwLWJ1dHRvbi10ZXh0IHRleHQtYmx1ZS05MDBcIlxuICAgID48L3AtYnV0dG9uPlxuICA8L25nLXRlbXBsYXRlPlxuXG48L3Atb3ZlcmxheVBhbmVsPlxuXG48cC1kaWFsb2dcbiAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlRGlhbG9nTGljZW5jYVwiXG4gIFttb2RhbF09XCJ0cnVlXCJcbiAgW2RyYWdnYWJsZV09XCJmYWxzZVwiXG4gIGhlYWRlcj1cIlRyb2NhciBMaWNlbsOnYVwiXG4gIFtzdHlsZV09XCJ7d2lkdGg6ICc1MHZoJyB9XCJcbj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtZW5kXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICA8cC1kcm9wZG93blxuICAgICAgICBzdHlsZUNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgW29wdGlvbnNdPVwibGljZW5jYXNPcHRpb25zXCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJsaWNlbmNhU2VsZWN0ZWRcIlxuICAgICAgICBvcHRpb25MYWJlbD1cImRlc2NyaWNhb1wiXG4gICAgICA+PC9wLWRyb3Bkb3duPlxuICAgIDwvZGl2PlxuXG4gICAgPGt2LWJ1dHRvbi1zdWNjZXNzXG4gICAgICBbbGFiZWxdPVwiJ1NhbHZhcidcIlxuICAgICAgY2xhc3M9XCJtdC0yXCJcbiAgICAgIChvbkNsaWNrKT1cInNldExpY2VuY2EoKVwiXG4gICAgPjwva3YtYnV0dG9uLXN1Y2Nlc3M+XG5cbiAgPC9kaXY+XG5cbjwvcC1kaWFsb2c+XG5cbjwhLS0gPHAtY29uZmlybURpYWxvZ1xuICBbc3R5bGVdPVwie3dpZHRoOiAnNDB2dyd9XCJcbiAgW2Jhc2VaSW5kZXhdPVwiMTAwMDBcIlxuICByZWplY3RCdXR0b25TdHlsZUNsYXNzPVwicC1idXR0b24tdGV4dFwiXG4+XG48L3AtY29uZmlybURpYWxvZz5cblxuPHAtdG9hc3Q+PC9wLXRvYXN0PiAtLT4iXX0=
|