@alauda-fe/dynamic-plugin-shared 0.0.1-alpha.0
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/README.md +7 -0
- package/array-form-table/base-string-map-form.component.d.ts +22 -0
- package/array-form-table/form/component.d.ts +106 -0
- package/array-form-table/form/index.d.ts +2 -0
- package/array-form-table/index.d.ts +10 -0
- package/array-form-table/key-value-form/component.d.ts +38 -0
- package/array-form-table/key-value-table/component.d.ts +9 -0
- package/array-form-table/string-array-form/component.d.ts +41 -0
- package/assets/images/abnormal.svg +1 -0
- package/assets/images/dark/disconnected.svg +1 -0
- package/assets/images/dark/license-abnormal.svg +1 -0
- package/assets/images/dark/network-abnormal.svg +1 -0
- package/assets/images/dark/no-data.svg +1 -0
- package/assets/images/dark/no-message.svg +1 -0
- package/assets/images/dark/no-permission.svg +1 -0
- package/assets/images/dark/no_realtime_alarm.svg +1 -0
- package/assets/images/dark/not-deployed.svg +1 -0
- package/assets/images/dark/not-found.svg +1 -0
- package/assets/images/dark/not-supported.svg +1 -0
- package/assets/images/dark/system-abnormal.svg +1 -0
- package/assets/images/light/disconnected.svg +1 -0
- package/assets/images/light/license-abnormal.svg +1 -0
- package/assets/images/light/network-abnormal.svg +1 -0
- package/assets/images/light/no-data.svg +1 -0
- package/assets/images/light/no-message.svg +1 -0
- package/assets/images/light/no-permission.svg +1 -0
- package/assets/images/light/no_realtime_alarm.svg +1 -0
- package/assets/images/light/not-deployed.svg +1 -0
- package/assets/images/light/not-found.svg +1 -0
- package/assets/images/light/not-supported.svg +1 -0
- package/assets/images/light/system-abnormal.svg +1 -0
- package/assets/images/no-data.png +0 -0
- package/async-data/async-data-loader.d.ts +31 -0
- package/async-data/error-page/component.d.ts +30 -0
- package/async-data/index.d.ts +13 -0
- package/async-data/page-state/component.d.ts +21 -0
- package/async-data/types.d.ts +29 -0
- package/code-editor/code-display-dialog/component.d.ts +17 -0
- package/code-editor/code-editor-configs.d.ts +19 -0
- package/code-editor/index.d.ts +10 -0
- package/code-editor/k8s-yaml-display-dialog/component.d.ts +16 -0
- package/code-editor/resource-yaml-display/component.d.ts +21 -0
- package/components/card-section/card-section.component.d.ts +9 -0
- package/components/confirm-delete/confirm-delete.component.d.ts +57 -0
- package/components/confirm-delete/utils.d.ts +25 -0
- package/components/current-time/component.d.ts +14 -0
- package/components/custom-columns-setting/component.d.ts +16 -0
- package/components/custom-columns-setting/index.d.ts +1 -0
- package/components/date-range-picker/component.d.ts +55 -0
- package/components/date-range-picker/index.d.ts +3 -0
- package/components/date-range-picker/type.d.ts +36 -0
- package/components/date-range-picker/util.d.ts +11 -0
- package/components/disabled-container/disabled-container.component.d.ts +21 -0
- package/components/disabled-container/index.d.ts +7 -0
- package/components/field-set/column/component.d.ts +10 -0
- package/components/field-set/group/component.d.ts +6 -0
- package/components/field-set/index.d.ts +7 -0
- package/components/field-set/item/component.d.ts +13 -0
- package/components/foldable-block/component.d.ts +17 -0
- package/components/foldable-item-in-table/component.d.ts +21 -0
- package/components/help-document/component.d.ts +29 -0
- package/components/help-document/directive.d.ts +20 -0
- package/components/help-document/index.d.ts +8 -0
- package/components/help-document/service.d.ts +20 -0
- package/components/index.d.ts +31 -0
- package/components/loading-mask/loading-mask.component.d.ts +13 -0
- package/components/page-guard/component/component.d.ts +40 -0
- package/components/page-guard/component/helper-directives.d.ts +17 -0
- package/components/page-guard/component/page-guard.type.d.ts +86 -0
- package/components/page-guard/index.d.ts +12 -0
- package/components/password-input/component.d.ts +39 -0
- package/components/pod-status/component.d.ts +25 -0
- package/components/pod-status/index.d.ts +3 -0
- package/components/pod-status/status.d.ts +4 -0
- package/components/pod-status/typings.d.ts +16 -0
- package/components/relative-time/component.d.ts +15 -0
- package/components/resource-label/component.d.ts +25 -0
- package/components/resource-multi-select/component.d.ts +41 -0
- package/components/resource-multi-select/util.d.ts +10 -0
- package/components/search-panel/component.d.ts +16 -0
- package/components/search-panel/helper.directive.d.ts +5 -0
- package/components/search-panel/search-item/component.d.ts +7 -0
- package/components/select-prefix-label/directive.d.ts +17 -0
- package/components/status-icon/status-icon.component.d.ts +16 -0
- package/components/tags-label/component.d.ts +56 -0
- package/components/terminating-tag/component.d.ts +7 -0
- package/components/text-ellipsis/component.d.ts +9 -0
- package/components/text-tooltip/directive.d.ts +21 -0
- package/components/text-with-url/component.d.ts +12 -0
- package/components/upload-file/component.d.ts +32 -0
- package/components/zero-state/zero-state.component.d.ts +16 -0
- package/constants/common.d.ts +64 -0
- package/constants/index.d.ts +6 -0
- package/constants/k8s.d.ts +12 -0
- package/constants/patterns.d.ts +124 -0
- package/constants/resource-definitions.d.ts +414 -0
- package/constants/status-icons.d.ts +34 -0
- package/constants/timezones.d.ts +6 -0
- package/directives/aui-code-editor.directive.d.ts +13 -0
- package/directives/click-outside.directive.d.ts +12 -0
- package/directives/declare.directive.d.ts +8 -0
- package/directives/disabled.directive.d.ts +28 -0
- package/directives/effect-directive/coerce-number.directive.d.ts +8 -0
- package/directives/effect-directive/e2e-attribute-binding.directive.d.ts +10 -0
- package/directives/effect-directive/event.directive.d.ts +47 -0
- package/directives/effect-directive/index.d.ts +12 -0
- package/directives/effect-directive/min-max.directive.d.ts +30 -0
- package/directives/effect-directive/trim.directive.d.ts +7 -0
- package/directives/effect-directive/validators.directive.d.ts +12 -0
- package/directives/feature-gate.directive.d.ts +31 -0
- package/directives/index.d.ts +12 -0
- package/directives/last-form-item.directive.d.ts +8 -0
- package/directives/readonly-field.directive.d.ts +39 -0
- package/directives/resize.directive.d.ts +17 -0
- package/directives/scroll-border-observer.directive.d.ts +23 -0
- package/directives/scroll-to-first-invalid.directive.d.ts +24 -0
- package/directives/value-trace.directive.d.ts +27 -0
- package/esm2022/alauda-fe-dynamic-plugin-shared.mjs +5 -0
- package/esm2022/array-form-table/base-string-map-form.component.mjs +92 -0
- package/esm2022/array-form-table/form/component.mjs +266 -0
- package/esm2022/array-form-table/form/index.mjs +12 -0
- package/esm2022/array-form-table/index.mjs +11 -0
- package/esm2022/array-form-table/key-value-form/component.mjs +135 -0
- package/esm2022/array-form-table/key-value-table/component.mjs +24 -0
- package/esm2022/array-form-table/string-array-form/component.mjs +168 -0
- package/esm2022/async-data/async-data-loader.mjs +63 -0
- package/esm2022/async-data/error-page/component.mjs +54 -0
- package/esm2022/async-data/index.mjs +18 -0
- package/esm2022/async-data/page-state/component.mjs +62 -0
- package/esm2022/async-data/types.mjs +6 -0
- package/esm2022/code-editor/code-display-dialog/component.mjs +35 -0
- package/esm2022/code-editor/code-editor-configs.mjs +66 -0
- package/esm2022/code-editor/index.mjs +11 -0
- package/esm2022/code-editor/k8s-yaml-display-dialog/component.mjs +26 -0
- package/esm2022/code-editor/resource-yaml-display/component.mjs +67 -0
- package/esm2022/components/card-section/card-section.component.mjs +24 -0
- package/esm2022/components/confirm-delete/confirm-delete.component.mjs +192 -0
- package/esm2022/components/confirm-delete/utils.mjs +8 -0
- package/esm2022/components/current-time/component.mjs +39 -0
- package/esm2022/components/custom-columns-setting/component.mjs +75 -0
- package/esm2022/components/custom-columns-setting/index.mjs +2 -0
- package/esm2022/components/date-range-picker/component.mjs +215 -0
- package/esm2022/components/date-range-picker/index.mjs +4 -0
- package/esm2022/components/date-range-picker/type.mjs +2 -0
- package/esm2022/components/date-range-picker/util.mjs +57 -0
- package/esm2022/components/disabled-container/disabled-container.component.mjs +81 -0
- package/esm2022/components/disabled-container/index.mjs +8 -0
- package/esm2022/components/field-set/column/component.mjs +25 -0
- package/esm2022/components/field-set/group/component.mjs +16 -0
- package/esm2022/components/field-set/index.mjs +14 -0
- package/esm2022/components/field-set/item/component.mjs +41 -0
- package/esm2022/components/foldable-block/component.mjs +60 -0
- package/esm2022/components/foldable-item-in-table/component.mjs +56 -0
- package/esm2022/components/help-document/component.mjs +69 -0
- package/esm2022/components/help-document/directive.mjs +70 -0
- package/esm2022/components/help-document/index.mjs +9 -0
- package/esm2022/components/help-document/service.mjs +43 -0
- package/esm2022/components/index.mjs +32 -0
- package/esm2022/components/loading-mask/loading-mask.component.mjs +35 -0
- package/esm2022/components/page-guard/component/component.mjs +101 -0
- package/esm2022/components/page-guard/component/helper-directives.mjs +51 -0
- package/esm2022/components/page-guard/component/page-guard.type.mjs +82 -0
- package/esm2022/components/page-guard/index.mjs +19 -0
- package/esm2022/components/password-input/component.mjs +143 -0
- package/esm2022/components/pod-status/component.mjs +49 -0
- package/esm2022/components/pod-status/index.mjs +4 -0
- package/esm2022/components/pod-status/status.mjs +84 -0
- package/esm2022/components/pod-status/typings.mjs +19 -0
- package/esm2022/components/relative-time/component.mjs +58 -0
- package/esm2022/components/resource-label/component.mjs +100 -0
- package/esm2022/components/resource-multi-select/component.mjs +152 -0
- package/esm2022/components/resource-multi-select/util.mjs +24 -0
- package/esm2022/components/search-panel/component.mjs +51 -0
- package/esm2022/components/search-panel/helper.directive.mjs +14 -0
- package/esm2022/components/search-panel/search-item/component.mjs +15 -0
- package/esm2022/components/select-prefix-label/directive.mjs +89 -0
- package/esm2022/components/status-icon/status-icon.component.mjs +56 -0
- package/esm2022/components/tags-label/component.mjs +224 -0
- package/esm2022/components/terminating-tag/component.mjs +16 -0
- package/esm2022/components/text-ellipsis/component.mjs +28 -0
- package/esm2022/components/text-tooltip/directive.mjs +71 -0
- package/esm2022/components/text-with-url/component.mjs +40 -0
- package/esm2022/components/upload-file/component.mjs +95 -0
- package/esm2022/components/zero-state/zero-state.component.mjs +51 -0
- package/esm2022/constants/common.mjs +86 -0
- package/esm2022/constants/index.mjs +7 -0
- package/esm2022/constants/k8s.mjs +13 -0
- package/esm2022/constants/patterns.mjs +142 -0
- package/esm2022/constants/resource-definitions.mjs +424 -0
- package/esm2022/constants/status-icons.mjs +65 -0
- package/esm2022/constants/timezones.mjs +234 -0
- package/esm2022/directives/aui-code-editor.directive.mjs +30 -0
- package/esm2022/directives/click-outside.directive.mjs +49 -0
- package/esm2022/directives/declare.directive.mjs +27 -0
- package/esm2022/directives/disabled.directive.mjs +76 -0
- package/esm2022/directives/effect-directive/coerce-number.directive.mjs +54 -0
- package/esm2022/directives/effect-directive/e2e-attribute-binding.directive.mjs +57 -0
- package/esm2022/directives/effect-directive/event.directive.mjs +129 -0
- package/esm2022/directives/effect-directive/index.mjs +21 -0
- package/esm2022/directives/effect-directive/min-max.directive.mjs +107 -0
- package/esm2022/directives/effect-directive/trim.directive.mjs +40 -0
- package/esm2022/directives/effect-directive/validators.directive.mjs +43 -0
- package/esm2022/directives/feature-gate.directive.mjs +90 -0
- package/esm2022/directives/index.mjs +13 -0
- package/esm2022/directives/last-form-item.directive.mjs +18 -0
- package/esm2022/directives/readonly-field.directive.mjs +145 -0
- package/esm2022/directives/resize.directive.mjs +39 -0
- package/esm2022/directives/scroll-border-observer.directive.mjs +77 -0
- package/esm2022/directives/scroll-to-first-invalid.directive.mjs +126 -0
- package/esm2022/directives/value-trace.directive.mjs +61 -0
- package/esm2022/form/base-form-container.mjs +126 -0
- package/esm2022/form/base-nested-form-control.mjs +190 -0
- package/esm2022/form/errors-mapper/base-errors-mapper.mjs +41 -0
- package/esm2022/form/errors-mapper/default-errors-mapper.service.mjs +65 -0
- package/esm2022/form/errors-mapper/errors-mapper-component/component.mjs +53 -0
- package/esm2022/form/errors-mapper/errors-mapper.directive.mjs +109 -0
- package/esm2022/form/errors-mapper/index.mjs +10 -0
- package/esm2022/form/errors-mapper/types.mjs +2 -0
- package/esm2022/form/index.mjs +6 -0
- package/esm2022/form/utils.mjs +61 -0
- package/esm2022/form/validators/async-function-validator.directive.mjs +49 -0
- package/esm2022/form/validators/dns1123-subdomain.mjs +42 -0
- package/esm2022/form/validators/function-validator.directive.mjs +49 -0
- package/esm2022/form/validators/index.mjs +10 -0
- package/esm2022/form/validators/maxlength-minlength-validator.directive.mjs +71 -0
- package/esm2022/form/validators/not-be-validator.directive.mjs +56 -0
- package/esm2022/form/validators/one-of-validator.directive.mjs +57 -0
- package/esm2022/form/validators/resource-limit.mjs +79 -0
- package/esm2022/form/validators/strong-password/index.mjs +4 -0
- package/esm2022/form/validators/strong-password/strong-password-tooltip/component.mjs +15 -0
- package/esm2022/form/validators/strong-password/strong-password-validator.directive.mjs +171 -0
- package/esm2022/form/validators/strong-password/strong-password-validator.module.mjs +36 -0
- package/esm2022/form/validators/utils.mjs +155 -0
- package/esm2022/index.mjs +15 -0
- package/esm2022/k8s-resource-list/footer/component.mjs +156 -0
- package/esm2022/k8s-resource-list/index.mjs +18 -0
- package/esm2022/k8s-resource-list/k8s-resource-list.mjs +224 -0
- package/esm2022/k8s-resource-list/k8s-resource-paged-list.mjs +174 -0
- package/esm2022/k8s-resource-list/types.mjs +11 -0
- package/esm2022/k8s-resource-list/utils.mjs +84 -0
- package/esm2022/k8s-shared/constants.mjs +53 -0
- package/esm2022/k8s-shared/index.mjs +12 -0
- package/esm2022/k8s-shared/k8s-resource-translate-key.pipe.mjs +31 -0
- package/esm2022/k8s-shared/k8s-shared-util.service.mjs +152 -0
- package/esm2022/k8s-shared/resource-mark/component.mjs +54 -0
- package/esm2022/k8s-shared/resource-mark/util.mjs +137 -0
- package/esm2022/k8s-shared/update-description-dialog/component.mjs +66 -0
- package/esm2022/k8s-shared/update-display-name-dialog/component.mjs +59 -0
- package/esm2022/k8s-shared/update-key-value-dialog/component.mjs +76 -0
- package/esm2022/page-deactivate/deactivate.directive.mjs +50 -0
- package/esm2022/page-deactivate/deactivate.guard.mjs +41 -0
- package/esm2022/page-deactivate/deactivate.service.mjs +78 -0
- package/esm2022/page-deactivate/index.mjs +4 -0
- package/esm2022/pipes/calc.pipe.mjs +21 -0
- package/esm2022/pipes/cron-human-readable.pipe.mjs +30 -0
- package/esm2022/pipes/crontab-next.pipe.mjs +67 -0
- package/esm2022/pipes/duration.pipe.mjs +51 -0
- package/esm2022/pipes/field-not-available.pipe.mjs +25 -0
- package/esm2022/pipes/img-header.pipe.mjs +18 -0
- package/esm2022/pipes/img-theme.pipe.mjs +38 -0
- package/esm2022/pipes/index.mjs +19 -0
- package/esm2022/pipes/keyvalue.pipe.mjs +20 -0
- package/esm2022/pipes/marked.pipe.mjs +18 -0
- package/esm2022/pipes/minimum-format.pipe.mjs +25 -0
- package/esm2022/pipes/page-env.pipe.mjs +69 -0
- package/esm2022/pipes/parse-json-translate.pipe.mjs +28 -0
- package/esm2022/pipes/parse-json.pipe.mjs +22 -0
- package/esm2022/pipes/pure.pipe.mjs +26 -0
- package/esm2022/pipes/safe.pipe.mjs +49 -0
- package/esm2022/pipes/sanitize.pipe.mjs +31 -0
- package/esm2022/pipes/time.pipe.mjs +113 -0
- package/esm2022/pipes/timezone-display.pipe.mjs +21 -0
- package/esm2022/services/form-row-duplicate/form-row-duplicate.service.mjs +280 -0
- package/esm2022/services/index.mjs +4 -0
- package/esm2022/services/on-resize.service.mjs +52 -0
- package/esm2022/services/yaml-util.service.mjs +99 -0
- package/esm2022/types/common.mjs +6 -0
- package/esm2022/types/helpers.mjs +12 -0
- package/esm2022/types/index.mjs +9 -0
- package/esm2022/types/k8s/core.mjs +2 -0
- package/esm2022/types/k8s/crd.mjs +57 -0
- package/esm2022/types/k8s/index.mjs +4 -0
- package/esm2022/types/k8s/raw.mjs +77 -0
- package/esm2022/types/schema.mjs +2 -0
- package/esm2022/utils/browser.mjs +21 -0
- package/esm2022/utils/cache-store.mjs +83 -0
- package/esm2022/utils/color-helpers.mjs +6 -0
- package/esm2022/utils/common.mjs +315 -0
- package/esm2022/utils/cron-util.mjs +44 -0
- package/esm2022/utils/decorators.mjs +137 -0
- package/esm2022/utils/disabled-state.mjs +47 -0
- package/esm2022/utils/format-number.mjs +227 -0
- package/esm2022/utils/index.mjs +24 -0
- package/esm2022/utils/local-storage-constants.mjs +2 -0
- package/esm2022/utils/node.mjs +18 -0
- package/esm2022/utils/observable.mjs +32 -0
- package/esm2022/utils/operators.mjs +38 -0
- package/esm2022/utils/request-pool.mjs +37 -0
- package/esm2022/utils/resources.mjs +66 -0
- package/esm2022/utils/router.mjs +20 -0
- package/esm2022/utils/sort-fn.mjs +7 -0
- package/esm2022/utils/tree.mjs +79 -0
- package/esm2022/utils/unit.mjs +191 -0
- package/esm2022/utils/version.mjs +76 -0
- package/esm2022/utils/with-load-state.mjs +21 -0
- package/esm2022/utils/workload.mjs +183 -0
- package/esm2022/utils/workspace.mjs +59 -0
- package/esm2022/utils/yaml.mjs +54 -0
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs +11151 -0
- package/fesm2022/alauda-fe-dynamic-plugin-shared.mjs.map +1 -0
- package/form/base-form-container.d.ts +41 -0
- package/form/base-nested-form-control.d.ts +58 -0
- package/form/errors-mapper/base-errors-mapper.d.ts +13 -0
- package/form/errors-mapper/default-errors-mapper.service.d.ts +10 -0
- package/form/errors-mapper/errors-mapper-component/component.d.ts +19 -0
- package/form/errors-mapper/errors-mapper.directive.d.ts +39 -0
- package/form/errors-mapper/index.d.ts +6 -0
- package/form/errors-mapper/types.d.ts +16 -0
- package/form/index.d.ts +5 -0
- package/form/utils.d.ts +40 -0
- package/form/validators/async-function-validator.directive.d.ts +11 -0
- package/form/validators/dns1123-subdomain.d.ts +28 -0
- package/form/validators/function-validator.directive.d.ts +11 -0
- package/form/validators/index.d.ts +9 -0
- package/form/validators/maxlength-minlength-validator.directive.d.ts +20 -0
- package/form/validators/not-be-validator.directive.d.ts +12 -0
- package/form/validators/one-of-validator.directive.d.ts +12 -0
- package/form/validators/resource-limit.d.ts +17 -0
- package/form/validators/strong-password/index.d.ts +3 -0
- package/form/validators/strong-password/strong-password-tooltip/component.d.ts +6 -0
- package/form/validators/strong-password/strong-password-validator.directive.d.ts +34 -0
- package/form/validators/strong-password/strong-password-validator.module.d.ts +12 -0
- package/form/validators/utils.d.ts +67 -0
- package/index.d.ts +14 -0
- package/k8s-resource-list/footer/component.d.ts +42 -0
- package/k8s-resource-list/index.d.ts +13 -0
- package/k8s-resource-list/k8s-resource-list.d.ts +42 -0
- package/k8s-resource-list/k8s-resource-paged-list.d.ts +61 -0
- package/k8s-resource-list/types.d.ts +70 -0
- package/k8s-resource-list/utils.d.ts +19 -0
- package/k8s-shared/constants.d.ts +7 -0
- package/k8s-shared/index.d.ts +11 -0
- package/k8s-shared/k8s-resource-translate-key.pipe.d.ts +9 -0
- package/k8s-shared/k8s-shared-util.service.d.ts +48 -0
- package/k8s-shared/resource-mark/component.d.ts +16 -0
- package/k8s-shared/resource-mark/util.d.ts +2 -0
- package/k8s-shared/update-description-dialog/component.d.ts +33 -0
- package/k8s-shared/update-display-name-dialog/component.d.ts +27 -0
- package/k8s-shared/update-key-value-dialog/component.d.ts +38 -0
- package/package.json +56 -0
- package/page-deactivate/deactivate.directive.d.ts +18 -0
- package/page-deactivate/deactivate.guard.d.ts +13 -0
- package/page-deactivate/deactivate.service.d.ts +28 -0
- package/page-deactivate/index.d.ts +3 -0
- package/pipes/calc.pipe.d.ts +11 -0
- package/pipes/cron-human-readable.pipe.d.ts +9 -0
- package/pipes/crontab-next.pipe.d.ts +18 -0
- package/pipes/duration.pipe.d.ts +10 -0
- package/pipes/field-not-available.pipe.d.ts +13 -0
- package/pipes/img-header.pipe.d.ts +7 -0
- package/pipes/img-theme.pipe.d.ts +13 -0
- package/pipes/index.d.ts +18 -0
- package/pipes/keyvalue.pipe.d.ts +9 -0
- package/pipes/marked.pipe.d.ts +8 -0
- package/pipes/minimum-format.pipe.d.ts +10 -0
- package/pipes/page-env.pipe.d.ts +34 -0
- package/pipes/parse-json-translate.pipe.d.ts +8 -0
- package/pipes/parse-json.pipe.d.ts +7 -0
- package/pipes/pure.pipe.d.ts +17 -0
- package/pipes/safe.pipe.d.ts +10 -0
- package/pipes/sanitize.pipe.d.ts +10 -0
- package/pipes/time.pipe.d.ts +40 -0
- package/pipes/timezone-display.pipe.d.ts +10 -0
- package/services/form-row-duplicate/form-row-duplicate.service.d.ts +45 -0
- package/services/index.d.ts +3 -0
- package/services/on-resize.service.d.ts +20 -0
- package/services/yaml-util.service.d.ts +20 -0
- package/styles/ansi-color.scss +131 -0
- package/styles/global.scss +904 -0
- package/styles/lib.scss +1 -0
- package/styles/markdown-body.scss +107 -0
- package/styles/mixins.scss +710 -0
- package/styles/var.scss +30 -0
- package/types/common.d.ts +42 -0
- package/types/helpers.d.ts +35 -0
- package/types/index.d.ts +8 -0
- package/types/k8s/core.d.ts +100 -0
- package/types/k8s/crd.d.ts +497 -0
- package/types/k8s/index.d.ts +3 -0
- package/types/k8s/raw.d.ts +860 -0
- package/types/schema.d.ts +14 -0
- package/utils/browser.d.ts +4 -0
- package/utils/cache-store.d.ts +35 -0
- package/utils/color-helpers.d.ts +4 -0
- package/utils/common.d.ts +64 -0
- package/utils/cron-util.d.ts +8 -0
- package/utils/decorators.d.ts +14 -0
- package/utils/disabled-state.d.ts +20 -0
- package/utils/format-number.d.ts +11 -0
- package/utils/index.d.ts +23 -0
- package/utils/local-storage-constants.d.ts +1 -0
- package/utils/node.d.ts +8 -0
- package/utils/observable.d.ts +5 -0
- package/utils/operators.d.ts +22 -0
- package/utils/request-pool.d.ts +12 -0
- package/utils/resources.d.ts +19 -0
- package/utils/router.d.ts +3 -0
- package/utils/sort-fn.d.ts +2 -0
- package/utils/tree.d.ts +16 -0
- package/utils/unit.d.ts +21 -0
- package/utils/version.d.ts +39 -0
- package/utils/with-load-state.d.ts +11 -0
- package/utils/workload.d.ts +66 -0
- package/utils/workspace.d.ts +28 -0
- package/utils/yaml.d.ts +11 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { ButtonModule, IconModule, rgbColor, TooltipModule } from '@alauda/ui';
|
|
2
|
+
import { TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';
|
|
3
|
+
import { AsyncPipe, NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
4
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, Directive, EventEmitter, Injector, Input, Output, QueryList, TemplateRef, } from '@angular/core';
|
|
5
|
+
import { FormArray, FormGroup, FormGroupDirective, NgForm, } from '@angular/forms';
|
|
6
|
+
import { debounceTime, EMPTY, map, merge, startWith, Subject } from 'rxjs';
|
|
7
|
+
import { ZeroStateComponent } from '../../components';
|
|
8
|
+
import { EFFECT_DIRECTIVE_MODULE } from '../../directives';
|
|
9
|
+
import { PurePipe } from '../../pipes/pure.pipe';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@alauda/ui";
|
|
12
|
+
import * as i2 from "../../directives/effect-directive/e2e-attribute-binding.directive";
|
|
13
|
+
export const ARRAY_TABLE_FORM_ERROR_BG = rgbColor('r-6');
|
|
14
|
+
export const rowBackgroundColorFn = ({ invalid, }) => (invalid ? ARRAY_TABLE_FORM_ERROR_BG : '');
|
|
15
|
+
export const noShowRowError = () => false;
|
|
16
|
+
export class ArrayFormTableHeaderDirective {
|
|
17
|
+
constructor(templateRef) {
|
|
18
|
+
this.templateRef = templateRef;
|
|
19
|
+
}
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableHeaderDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
21
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: ArrayFormTableHeaderDirective, isStandalone: true, selector: "[aclArrayFormTableHeader]", ngImport: i0 }); }
|
|
22
|
+
}
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableHeaderDirective, decorators: [{
|
|
24
|
+
type: Directive,
|
|
25
|
+
args: [{
|
|
26
|
+
selector: '[aclArrayFormTableHeader]',
|
|
27
|
+
standalone: true,
|
|
28
|
+
}]
|
|
29
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
30
|
+
export class ArrayFormTableRowErrorDirective {
|
|
31
|
+
constructor(templateRef) {
|
|
32
|
+
this.templateRef = templateRef;
|
|
33
|
+
}
|
|
34
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowErrorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
35
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: ArrayFormTableRowErrorDirective, isStandalone: true, selector: "[aclArrayFormTableRowError]", ngImport: i0 }); }
|
|
36
|
+
}
|
|
37
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowErrorDirective, decorators: [{
|
|
38
|
+
type: Directive,
|
|
39
|
+
args: [{
|
|
40
|
+
selector: '[aclArrayFormTableRowError]',
|
|
41
|
+
standalone: true,
|
|
42
|
+
}]
|
|
43
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
44
|
+
export class ArrayFormTableRowDirective {
|
|
45
|
+
constructor(templateRef) {
|
|
46
|
+
this.templateRef = templateRef;
|
|
47
|
+
}
|
|
48
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
49
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: ArrayFormTableRowDirective, isStandalone: true, selector: "[aclArrayFormTableRow]", ngImport: i0 }); }
|
|
50
|
+
}
|
|
51
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowDirective, decorators: [{
|
|
52
|
+
type: Directive,
|
|
53
|
+
args: [{
|
|
54
|
+
selector: '[aclArrayFormTableRow]',
|
|
55
|
+
standalone: true,
|
|
56
|
+
}]
|
|
57
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
58
|
+
export class ArrayFormTableZeroStateDirective {
|
|
59
|
+
constructor(templateRef) {
|
|
60
|
+
this.templateRef = templateRef;
|
|
61
|
+
}
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableZeroStateDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
63
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: ArrayFormTableZeroStateDirective, isStandalone: true, selector: "[aclArrayFormTableZeroState]", ngImport: i0 }); }
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableZeroStateDirective, decorators: [{
|
|
66
|
+
type: Directive,
|
|
67
|
+
args: [{
|
|
68
|
+
selector: '[aclArrayFormTableZeroState]',
|
|
69
|
+
standalone: true,
|
|
70
|
+
}]
|
|
71
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
72
|
+
export class ArrayFormTableRowControlDirective {
|
|
73
|
+
constructor(templateRef) {
|
|
74
|
+
this.templateRef = templateRef;
|
|
75
|
+
}
|
|
76
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowControlDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
77
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: ArrayFormTableRowControlDirective, isStandalone: true, selector: "[aclArrayFormTableRowControl]", ngImport: i0 }); }
|
|
78
|
+
}
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowControlDirective, decorators: [{
|
|
80
|
+
type: Directive,
|
|
81
|
+
args: [{
|
|
82
|
+
selector: '[aclArrayFormTableRowControl]',
|
|
83
|
+
standalone: true,
|
|
84
|
+
}]
|
|
85
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
86
|
+
export class ArrayFormTableRowSeparatorDirective {
|
|
87
|
+
constructor(templateRef) {
|
|
88
|
+
this.templateRef = templateRef;
|
|
89
|
+
}
|
|
90
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowSeparatorDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
91
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: ArrayFormTableRowSeparatorDirective, isStandalone: true, selector: "[aclArrayFormTableRowSeparator]", ngImport: i0 }); }
|
|
92
|
+
}
|
|
93
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableRowSeparatorDirective, decorators: [{
|
|
94
|
+
type: Directive,
|
|
95
|
+
args: [{
|
|
96
|
+
selector: '[aclArrayFormTableRowSeparator]',
|
|
97
|
+
standalone: true,
|
|
98
|
+
}]
|
|
99
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
100
|
+
export class ArrayFormTableFooterDirective {
|
|
101
|
+
constructor(templateRef) {
|
|
102
|
+
this.templateRef = templateRef;
|
|
103
|
+
}
|
|
104
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableFooterDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
105
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.1.1", type: ArrayFormTableFooterDirective, isStandalone: true, selector: "[aclArrayFormTableFooter]", ngImport: i0 }); }
|
|
106
|
+
}
|
|
107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableFooterDirective, decorators: [{
|
|
108
|
+
type: Directive,
|
|
109
|
+
args: [{
|
|
110
|
+
selector: '[aclArrayFormTableFooter]',
|
|
111
|
+
standalone: true,
|
|
112
|
+
}]
|
|
113
|
+
}], ctorParameters: () => [{ type: i0.TemplateRef }] });
|
|
114
|
+
// 递归验证 control 是否有问题,group 内部可能会有嵌套的情况
|
|
115
|
+
function _isFormControlInvalid(control) {
|
|
116
|
+
if (control instanceof FormGroup || control instanceof FormArray) {
|
|
117
|
+
return ((control.dirty && !!control.errors) ||
|
|
118
|
+
Object.values(control.controls).some(_isFormControlInvalid));
|
|
119
|
+
}
|
|
120
|
+
return control.dirty && control.invalid;
|
|
121
|
+
}
|
|
122
|
+
export class ArrayFormTableComponent {
|
|
123
|
+
get formDirective() {
|
|
124
|
+
return (this.injector.get(FormGroupDirective, null) ||
|
|
125
|
+
this.injector.get(NgForm, null));
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 自定义是否展示错误内容
|
|
129
|
+
* 例如 control 是 FormGroup,只有在内部子 control 错误时才需要展示错误内容
|
|
130
|
+
*/
|
|
131
|
+
showRowError(control, formDirective) {
|
|
132
|
+
if (formDirective) {
|
|
133
|
+
return (control.invalid &&
|
|
134
|
+
(formDirective.submitted || _isFormControlInvalid(control)));
|
|
135
|
+
}
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* @deprecated use {@link showRowError} instead
|
|
140
|
+
*/
|
|
141
|
+
rowBackgroundColorFn(control, formDirective) {
|
|
142
|
+
return this.showRowError(control, formDirective)
|
|
143
|
+
? ARRAY_TABLE_FORM_ERROR_BG
|
|
144
|
+
: null;
|
|
145
|
+
}
|
|
146
|
+
constructor(injector) {
|
|
147
|
+
this.injector = injector;
|
|
148
|
+
/**
|
|
149
|
+
* 行之间的分隔区域,默认关闭
|
|
150
|
+
*/
|
|
151
|
+
this.rowSeparator = false;
|
|
152
|
+
this.resourceName = null;
|
|
153
|
+
this.add = new EventEmitter();
|
|
154
|
+
this.remove = new EventEmitter(); // Returns the index to be removed
|
|
155
|
+
this.readonly = false;
|
|
156
|
+
this.addDisabled = false;
|
|
157
|
+
this.actionColumnDivider = false;
|
|
158
|
+
this.showZeroState = true;
|
|
159
|
+
this.minRow = 0;
|
|
160
|
+
this.minRowTooltip = '';
|
|
161
|
+
this.maxRow = Infinity;
|
|
162
|
+
this.maxRowTooltip = '';
|
|
163
|
+
this.destroy$$ = new Subject();
|
|
164
|
+
this.cdr = this.injector.get(ChangeDetectorRef);
|
|
165
|
+
this.shouldShowRowError = (control) => {
|
|
166
|
+
const { statusChanges = EMPTY, status } = control;
|
|
167
|
+
return (this.formDirective
|
|
168
|
+
? merge(statusChanges, this.formDirective.ngSubmit)
|
|
169
|
+
: statusChanges).pipe(startWith(status), debounceTime(0), map(() => this.showRowError(control, this.formDirective)));
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
ngOnDestroy() {
|
|
173
|
+
this.destroy$$.next();
|
|
174
|
+
this.destroy$$.complete();
|
|
175
|
+
}
|
|
176
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
177
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: ArrayFormTableComponent, isStandalone: true, selector: "acl-array-form-table", inputs: { rowSeparator: "rowSeparator", rows: "rows", resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated", readonly: "readonly", addDisabled: "addDisabled", actionColumnDivider: "actionColumnDivider", showZeroState: "showZeroState", showRowError: "showRowError", rowBackgroundColorFn: "rowBackgroundColorFn", minRow: "minRow", minRowTooltip: "minRowTooltip", maxRow: "maxRow", maxRowTooltip: "maxRowTooltip" }, outputs: { add: "add", remove: "remove" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ArrayFormTableHeaderDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "rowErrorTemplate", first: true, predicate: ArrayFormTableRowErrorDirective, descendants: true, read: TemplateRef }, { propertyName: "rowControlTemplate", first: true, predicate: ArrayFormTableRowControlDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "footerTemplate", first: true, predicate: ArrayFormTableFooterDirective, descendants: true, read: TemplateRef, static: true }, { propertyName: "zeroStateTemplate", first: true, predicate: ArrayFormTableZeroStateDirective, descendants: true, read: TemplateRef }, { propertyName: "separatorTemplate", first: true, predicate: ArrayFormTableRowSeparatorDirective, descendants: true, read: TemplateRef }, { propertyName: "ngFormGroupDirective", first: true, predicate: FormGroupDirective, descendants: true }, { propertyName: "rowTemplates", predicate: ArrayFormTableRowDirective, read: TemplateRef }], ngImport: i0, template: "<table\n class=\"acl-array-form-table\"\n [class.acl-array-form-table__readonly-mode]=\"readonly\"\n>\n <thead *ngIf=\"headerTemplate\">\n <tr>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <th\n *ngIf=\"!readonly && minRow !== maxRow\"\n class=\"acl-array-form-table__action-col\"\n ></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let row of rows; let index = index\">\n <tr\n *ngFor=\"let rowTemplate of rowTemplates; let templateIndex = index\"\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [attr.rowtemplateindex]=\"templateIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n <td\n *ngIf=\"templateIndex === 0 && !readonly && minRow !== maxRow\"\n class=\"acl-array-form-table__action-col\"\n [class.acl-array-form-table__action-col-divider]=\"actionColumnDivider\"\n >\n <ng-container *ngIf=\"rowControlTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n rowControlTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </ng-container>\n <div\n [auiTooltip]=\"minRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length > minRow || !minRowTooltip\"\n >\n <button\n *ngIf=\"!rowControlTemplate\"\n aui-button=\"text\"\n type=\"button\"\n [disabled]=\"rows?.length <= minRow\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove.emit(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n </div>\n </td>\n </tr>\n\n <tr\n *ngIf=\"rowErrorTemplate && !readonly\"\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [hidden]=\"!(row | pure: shouldShowRowError | async)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowErrorTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </tr>\n <ng-container\n *ngIf=\"\n (rowSeparator || separatorTemplate) &&\n rows?.length > 1 &&\n index !== rows?.length - 1\n \"\n >\n <tr class=\"acl-array-form-table__separator\">\n <td colspan=\"100\">\n @if (separatorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"separatorTemplate\"\n ></ng-container>\n } @else {\n <div class=\"tw-h-[8px]\"></div>\n }\n </td>\n </tr>\n </ng-container>\n </ng-container>\n\n <tr *ngIf=\"(!rows || rows.length === 0) && showZeroState\">\n <td\n colspan=\"100\"\n style=\"padding: unset\"\n >\n <acl-zero-state\n *ngIf=\"!zeroStateTemplate\"\n [zeroState]=\"true\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [minHeight]=\"48\"\n ></acl-zero-state>\n\n <ng-container *ngIf=\"zeroStateTemplate\">\n <ng-container *ngTemplateOutlet=\"zeroStateTemplate\"></ng-container>\n </ng-container>\n </td>\n </tr>\n\n <tr\n *ngIf=\"!readonly && minRow !== maxRow\"\n class=\"acl-array-form-table--row-action\"\n >\n <td colspan=\"100\">\n <div class=\"acl-array-form-table__bottom-control-buttons\">\n <ng-container *ngIf=\"footerTemplate\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"!footerTemplate\"\n class=\"tw-flex tw-w-full\"\n [auiTooltip]=\"maxRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length < maxRow || !maxRowTooltip\"\n >\n <button\n aui-button=\"primary\"\n type=\"button\"\n [plain]=\"true\"\n size=\"mini\"\n (click)=\"add.emit()\"\n [disabled]=\"rows?.length >= maxRow || addDisabled\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n {{ 'add' | translate }}\n </button>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.TooltipDirective, selector: "[auiTooltip]", inputs: ["auiTooltip", "auiTooltipContext", "auiTooltipClass", "auiTooltipType", "auiTooltipPosition", "auiTooltipTrigger", "auiTooltipDisabled", "auiTooltipHideOnClick", "auiTooltipAnimType"], outputs: ["auiTooltipVisibleChange"], exportAs: ["auiTooltip"] }, { kind: "component", type: ZeroStateComponent, selector: "acl-zero-state", inputs: ["resourceName", "resourceNameTranslated", "customPlaceholder", "zeroState", "fetching", "context", "minHeight"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i1.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: i2.E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
|
|
178
|
+
}
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: ArrayFormTableComponent, decorators: [{
|
|
180
|
+
type: Component,
|
|
181
|
+
args: [{ selector: 'acl-array-form-table', changeDetection: ChangeDetectionStrategy.Default, imports: [
|
|
182
|
+
NgTemplateOutlet,
|
|
183
|
+
TooltipModule,
|
|
184
|
+
ZeroStateComponent,
|
|
185
|
+
ButtonModule,
|
|
186
|
+
IconModule,
|
|
187
|
+
NgIf,
|
|
188
|
+
NgForOf,
|
|
189
|
+
PurePipe,
|
|
190
|
+
AsyncPipe,
|
|
191
|
+
TranslatePipe,
|
|
192
|
+
EFFECT_DIRECTIVE_MODULE,
|
|
193
|
+
], standalone: true, template: "<table\n class=\"acl-array-form-table\"\n [class.acl-array-form-table__readonly-mode]=\"readonly\"\n>\n <thead *ngIf=\"headerTemplate\">\n <tr>\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n <th\n *ngIf=\"!readonly && minRow !== maxRow\"\n class=\"acl-array-form-table__action-col\"\n ></th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let row of rows; let index = index\">\n <tr\n *ngFor=\"let rowTemplate of rowTemplates; let templateIndex = index\"\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [attr.rowtemplateindex]=\"templateIndex\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n <td\n *ngIf=\"templateIndex === 0 && !readonly && minRow !== maxRow\"\n class=\"acl-array-form-table__action-col\"\n [class.acl-array-form-table__action-col-divider]=\"actionColumnDivider\"\n >\n <ng-container *ngIf=\"rowControlTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n rowControlTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </ng-container>\n <div\n [auiTooltip]=\"minRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length > minRow || !minRowTooltip\"\n >\n <button\n *ngIf=\"!rowControlTemplate\"\n aui-button=\"text\"\n type=\"button\"\n [disabled]=\"rows?.length <= minRow\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove.emit(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n </div>\n </td>\n </tr>\n\n <tr\n *ngIf=\"rowErrorTemplate && !readonly\"\n [class.acl-array-form-table__row-error]=\"\n row | pure: shouldShowRowError | async\n \"\n [hidden]=\"!(row | pure: shouldShowRowError | async)\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n rowErrorTemplate;\n context: { $implicit: row, index: index }\n \"\n ></ng-container>\n </tr>\n <ng-container\n *ngIf=\"\n (rowSeparator || separatorTemplate) &&\n rows?.length > 1 &&\n index !== rows?.length - 1\n \"\n >\n <tr class=\"acl-array-form-table__separator\">\n <td colspan=\"100\">\n @if (separatorTemplate) {\n <ng-container\n *ngTemplateOutlet=\"separatorTemplate\"\n ></ng-container>\n } @else {\n <div class=\"tw-h-[8px]\"></div>\n }\n </td>\n </tr>\n </ng-container>\n </ng-container>\n\n <tr *ngIf=\"(!rows || rows.length === 0) && showZeroState\">\n <td\n colspan=\"100\"\n style=\"padding: unset\"\n >\n <acl-zero-state\n *ngIf=\"!zeroStateTemplate\"\n [zeroState]=\"true\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [minHeight]=\"48\"\n ></acl-zero-state>\n\n <ng-container *ngIf=\"zeroStateTemplate\">\n <ng-container *ngTemplateOutlet=\"zeroStateTemplate\"></ng-container>\n </ng-container>\n </td>\n </tr>\n\n <tr\n *ngIf=\"!readonly && minRow !== maxRow\"\n class=\"acl-array-form-table--row-action\"\n >\n <td colspan=\"100\">\n <div class=\"acl-array-form-table__bottom-control-buttons\">\n <ng-container *ngIf=\"footerTemplate\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n </ng-container>\n <div\n *ngIf=\"!footerTemplate\"\n class=\"tw-flex tw-w-full\"\n [auiTooltip]=\"maxRowTooltip\"\n [auiTooltipDisabled]=\"rows?.length < maxRow || !maxRowTooltip\"\n >\n <button\n aui-button=\"primary\"\n type=\"button\"\n [plain]=\"true\"\n size=\"mini\"\n (click)=\"add.emit()\"\n [disabled]=\"rows?.length >= maxRow || addDisabled\"\n >\n <aui-icon icon=\"plus_circle\"></aui-icon>\n {{ 'add' | translate }}\n </button>\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n</table>\n" }]
|
|
194
|
+
}], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { headerTemplate: [{
|
|
195
|
+
type: ContentChild,
|
|
196
|
+
args: [ArrayFormTableHeaderDirective, {
|
|
197
|
+
read: TemplateRef,
|
|
198
|
+
static: true,
|
|
199
|
+
}]
|
|
200
|
+
}], rowTemplates: [{
|
|
201
|
+
type: ContentChildren,
|
|
202
|
+
args: [ArrayFormTableRowDirective, { read: TemplateRef }]
|
|
203
|
+
}], rowErrorTemplate: [{
|
|
204
|
+
type: ContentChild,
|
|
205
|
+
args: [ArrayFormTableRowErrorDirective, { read: TemplateRef }]
|
|
206
|
+
}], rowControlTemplate: [{
|
|
207
|
+
type: ContentChild,
|
|
208
|
+
args: [ArrayFormTableRowControlDirective, {
|
|
209
|
+
read: TemplateRef,
|
|
210
|
+
static: true,
|
|
211
|
+
}]
|
|
212
|
+
}], footerTemplate: [{
|
|
213
|
+
type: ContentChild,
|
|
214
|
+
args: [ArrayFormTableFooterDirective, {
|
|
215
|
+
read: TemplateRef,
|
|
216
|
+
static: true,
|
|
217
|
+
}]
|
|
218
|
+
}], zeroStateTemplate: [{
|
|
219
|
+
type: ContentChild,
|
|
220
|
+
args: [ArrayFormTableZeroStateDirective, {
|
|
221
|
+
read: TemplateRef,
|
|
222
|
+
static: false,
|
|
223
|
+
}]
|
|
224
|
+
}], separatorTemplate: [{
|
|
225
|
+
type: ContentChild,
|
|
226
|
+
args: [ArrayFormTableRowSeparatorDirective, {
|
|
227
|
+
read: TemplateRef,
|
|
228
|
+
static: false,
|
|
229
|
+
}]
|
|
230
|
+
}], rowSeparator: [{
|
|
231
|
+
type: Input
|
|
232
|
+
}], ngFormGroupDirective: [{
|
|
233
|
+
type: ContentChild,
|
|
234
|
+
args: [FormGroupDirective, { static: false }]
|
|
235
|
+
}], rows: [{
|
|
236
|
+
type: Input
|
|
237
|
+
}], resourceName: [{
|
|
238
|
+
type: Input
|
|
239
|
+
}], resourceNameTranslated: [{
|
|
240
|
+
type: Input
|
|
241
|
+
}], add: [{
|
|
242
|
+
type: Output
|
|
243
|
+
}], remove: [{
|
|
244
|
+
type: Output
|
|
245
|
+
}], readonly: [{
|
|
246
|
+
type: Input
|
|
247
|
+
}], addDisabled: [{
|
|
248
|
+
type: Input
|
|
249
|
+
}], actionColumnDivider: [{
|
|
250
|
+
type: Input
|
|
251
|
+
}], showZeroState: [{
|
|
252
|
+
type: Input
|
|
253
|
+
}], showRowError: [{
|
|
254
|
+
type: Input
|
|
255
|
+
}], rowBackgroundColorFn: [{
|
|
256
|
+
type: Input
|
|
257
|
+
}], minRow: [{
|
|
258
|
+
type: Input
|
|
259
|
+
}], minRowTooltip: [{
|
|
260
|
+
type: Input
|
|
261
|
+
}], maxRow: [{
|
|
262
|
+
type: Input
|
|
263
|
+
}], maxRowTooltip: [{
|
|
264
|
+
type: Input
|
|
265
|
+
}] } });
|
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9keW5hbWljLXBsdWdpbi1zaGFyZWQvc3JjL2FycmF5LWZvcm0tdGFibGUvZm9ybS9jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvYXJyYXktZm9ybS10YWJsZS9mb3JtL3RlbXBsYXRlLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDN0UsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxTQUFTLEVBQ1QsU0FBUyxFQUNULGtCQUFrQixFQUNsQixNQUFNLEdBQ1AsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixD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Z0MsRUFBRTt3QkFDOUMsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2dCQVVELGlCQUFpQjtzQkFKaEIsWUFBWTt1QkFBQyxtQ0FBbUMsRUFBRTt3QkFDakQsSUFBSSxFQUFFLFdBQVc7d0JBQ2pCLE1BQU0sRUFBRSxLQUFLO3FCQUNkO2dCQU9ELFlBQVk7c0JBRFgsS0FBSztnQkFJTixvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUtuRCxJQUFJO3NCQURILEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFJTixHQUFHO3NCQURGLE1BQU07Z0JBSVAsTUFBTTtzQkFETCxNQUFNO2dCQUlQLFFBQVE7c0JBRFAsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQUlOLGFBQWE7c0JBRFosS0FBSztnQkFlTixZQUFZO3NCQURYLEtBQUs7Z0JBbUJOLG9CQUFvQjtzQkFEbkIsS0FBSztnQkFXTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLE1BQU07c0JBREwsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdXR0b25Nb2R1bGUsIEljb25Nb2R1bGUsIHJnYkNvbG9yLCBUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGFsYXVkYS1mZS9keW5hbWljLXBsdWdpbi1zZGsnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0Zvck9mLCBOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQXJyYXksXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxuICBOZ0Zvcm0sXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgRU1QVFksIG1hcCwgbWVyZ2UsIHN0YXJ0V2l0aCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBaZXJvU3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJztcbmltcG9ydCB7IEVGRkVDVF9ESVJFQ1RJVkVfTU9EVUxFIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBQdXJlUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3B1cmUucGlwZSc7XG5cbmV4cG9ydCBjb25zdCBBUlJBWV9UQUJMRV9GT1JNX0VSUk9SX0JHID0gcmdiQ29sb3IoJ3ItNicpO1xuXG5leHBvcnQgY29uc3Qgcm93QmFja2dyb3VuZENvbG9yRm4gPSA8VCBleHRlbmRzIEFic3RyYWN0Q29udHJvbD4oe1xuICBpbnZhbGlkLFxufTogVCk6IHN0cmluZyA9PiAoaW52YWxpZCA/IEFSUkFZX1RBQkxFX0ZPUk1fRVJST1JfQkcgOiAnJyk7XG5cbmV4cG9ydCBjb25zdCBub1Nob3dSb3dFcnJvciA9ICgpID0+IGZhbHNlO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsQXJyYXlGb3JtVGFibGVIZWFkZXJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlGb3JtVGFibGVIZWFkZXJEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thY2xBcnJheUZvcm1UYWJsZVJvd0Vycm9yXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5Rm9ybVRhYmxlUm93RXJyb3JEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1thY2xBcnJheUZvcm1UYWJsZVJvd10nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBBcnJheUZvcm1UYWJsZVJvd0RpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FjbEFycmF5Rm9ybVRhYmxlWmVyb1N0YXRlXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5Rm9ybVRhYmxlWmVyb1N0YXRlRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsQXJyYXlGb3JtVGFibGVSb3dDb250cm9sXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5Rm9ybVRhYmxlUm93Q29udHJvbERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pikge31cbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FjbEFycmF5Rm9ybVRhYmxlUm93U2VwYXJhdG9yXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5Rm9ybVRhYmxlUm93U2VwYXJhdG9yRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYWNsQXJyYXlGb3JtVGFibGVGb290ZXJdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlGb3JtVGFibGVGb290ZXJEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbi8vIOmAkuW9kumqjOivgSBjb250cm9sIOaYr+WQpuaciemXrumimO+8jGdyb3VwIOWGhemDqOWPr+iDveS8muacieW1jOWll+eahOaDheWGtVxuZnVuY3Rpb24gX2lzRm9ybUNvbnRyb2xJbnZhbGlkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkge1xuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIChjb250cm9sLmRpcnR5ICYmICEhY29udHJvbC5lcnJvcnMpIHx8XG4gICAgICBPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpLnNvbWUoX2lzRm9ybUNvbnRyb2xJbnZhbGlkKVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGNvbnRyb2wuZGlydHkgJiYgY29udHJvbC5pbnZhbGlkO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhY2wtYXJyYXktZm9ybS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5odG1sJyxcbiAgLy8gU2luY2Ugcm93cyBtYXliZSB1cGRhdGVkIHdpdGhvdXQgY2hhbmdpbmcgcmVmZXJlbmNlLCB3ZSB1c2UgRGVmYXVsdCBoZXJlOlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L3ByZWZlci1vbi1wdXNoLWNvbXBvbmVudC1jaGFuZ2UtZGV0ZWN0aW9uXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcbiAgaW1wb3J0czogW1xuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBaZXJvU3RhdGVDb21wb25lbnQsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgTmdJZixcbiAgICBOZ0Zvck9mLFxuICAgIFB1cmVQaXBlLFxuICAgIEFzeW5jUGlwZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIEVGRkVDVF9ESVJFQ1RJVkVfTU9EVUxFLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBBcnJheUZvcm1UYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBDb250ZW50Q2hpbGQoQXJyYXlGb3JtVGFibGVIZWFkZXJEaXJlY3RpdmUsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vIOeUqOaIt+WPr+S7peaPkOS+m+WkmuihjOaooeadvywg5L2G5Y+q5pyJ56ys5LiA6KGM5pyJ5o6n5Yi25oyJ6ZSuLlxuICBAQ29udGVudENoaWxkcmVuKEFycmF5Rm9ybVRhYmxlUm93RGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHJvd1RlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gIEBDb250ZW50Q2hpbGQoQXJyYXlGb3JtVGFibGVSb3dFcnJvckRpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICByb3dFcnJvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiDooajljZXpu5jorqTmj5DkvpvliKDpmaTmjInplK47IOWBh+WmgueUqOaIt+aPkOS+m+aooeadvywg5bCG5L2/55So55So5oi355qE5qih5p2/XG4gICAqL1xuICBAQ29udGVudENoaWxkKEFycmF5Rm9ybVRhYmxlUm93Q29udHJvbERpcmVjdGl2ZSwge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcm93Q29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiDooajljZXpu5jorqTmj5Dkvpvmt7vliqDmjInplK47IOWBh+WmgueUqOaIt+aPkOS+m+aooeadvywg5bCG5L2/55So55So5oi355qE5qih5p2/XG4gICAqL1xuICBAQ29udGVudENoaWxkKEFycmF5Rm9ybVRhYmxlRm9vdGVyRGlyZWN0aXZlLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICog6KGo5Y2V6buY6K6k5Li656m65pWw5o2u5o+Q5L6b5pegeHh455qE5qih5p2/OyDlgYflpoLnlKjmiLfmj5DkvpvmqKHmnb8sIOWwhuS9v+eUqOeUqOaIt+eahOaooeadv1xuICAgKi9cbiAgQENvbnRlbnRDaGlsZChBcnJheUZvcm1UYWJsZVplcm9TdGF0ZURpcmVjdGl2ZSwge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogZmFsc2UsXG4gIH0pXG4gIHplcm9TdGF0ZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKlxuICAgKiDooYzkuYvpl7TnmoTliIbpmpTljLrln5/oh6rlrprkuYnmqKHmnb9cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoQXJyYXlGb3JtVGFibGVSb3dTZXBhcmF0b3JEaXJlY3RpdmUsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IGZhbHNlLFxuICB9KVxuICBzZXBhcmF0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKipcbiAgICog6KGM5LmL6Ze055qE5YiG6ZqU5Yy65Z+f77yM6buY6K6k5YWz6ZetXG4gICAqL1xuICBASW5wdXQoKVxuICByb3dTZXBhcmF0b3IgPSBmYWxzZTtcblxuICBAQ29udGVudENoaWxkKEZvcm1Hcm91cERpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIG5nRm9ybUdyb3VwRGlyZWN0aXZlOiBGb3JtR3JvdXBEaXJlY3RpdmU7XG5cbiAgLy8gRGF0YSBjb250ZXh0IGZvciByb3dzLlxuICBASW5wdXQoKVxuICByb3dzOiBhbnlbXTtcblxuICBASW5wdXQoKVxuICByZXNvdXJjZU5hbWUgPSBudWxsIGFzIHN0cmluZztcblxuICBASW5wdXQoKVxuICByZXNvdXJjZU5hbWVUcmFuc2xhdGVkOiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIGFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBAT3V0cHV0KClcbiAgcmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7IC8vIFJldHVybnMgdGhlIGluZGV4IHRvIGJlIHJlbW92ZWRcblxuICBASW5wdXQoKVxuICByZWFkb25seTogYm9vbGVhbiB8ICcnID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYWRkRGlzYWJsZWQ6IGJvb2xlYW4gfCAnJyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGFjdGlvbkNvbHVtbkRpdmlkZXI6IGJvb2xlYW4gfCAnJyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3daZXJvU3RhdGUgPSB0cnVlO1xuXG4gIGdldCBmb3JtRGlyZWN0aXZlKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmluamVjdG9yLmdldChGb3JtR3JvdXBEaXJlY3RpdmUsIG51bGwpIHx8XG4gICAgICB0aGlzLmluamVjdG9yLmdldChOZ0Zvcm0sIG51bGwpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDoh6rlrprkuYnmmK/lkKblsZXnpLrplJnor6/lhoXlrrlcbiAgICog5L6L5aaCIGNvbnRyb2wg5pivIEZvcm1Hcm91cO+8jOWPquacieWcqOWGhemDqOWtkCBjb250cm9sIOmUmeivr+aXtuaJjemcgOimgeWxleekuumUmeivr+WGheWuuVxuICAgKi9cbiAgQElucHV0KClcbiAgc2hvd1Jvd0Vycm9yPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2w+KFxuICAgIGNvbnRyb2w6IFQsXG4gICAgZm9ybURpcmVjdGl2ZT86IE5nRm9ybSB8IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKGZvcm1EaXJlY3RpdmUpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvbnRyb2wuaW52YWxpZCAmJlxuICAgICAgICAoZm9ybURpcmVjdGl2ZS5zdWJtaXR0ZWQgfHwgX2lzRm9ybUNvbnRyb2xJbnZhbGlkKGNvbnRyb2wpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHtAbGluayBzaG93Um93RXJyb3J9IGluc3RlYWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHJvd0JhY2tncm91bmRDb2xvckZuPFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2w+KFxuICAgIGNvbnRyb2w6IFQsXG4gICAgZm9ybURpcmVjdGl2ZT86IE5nRm9ybSB8IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zaG93Um93RXJyb3IoY29udHJvbCwgZm9ybURpcmVjdGl2ZSlcbiAgICAgID8gQVJSQVlfVEFCTEVfRk9STV9FUlJPUl9CR1xuICAgICAgOiBudWxsO1xuICB9XG5cbiAgQElucHV0KClcbiAgbWluUm93ID0gMDtcblxuICBASW5wdXQoKVxuICBtaW5Sb3dUb29sdGlwID0gJyc7XG5cbiAgQElucHV0KClcbiAgbWF4Um93ID0gSW5maW5pdHk7XG5cbiAgQElucHV0KClcbiAgbWF4Um93VG9vbHRpcCA9ICcnO1xuXG4gIGRlc3Ryb3kkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY2RyID0gdGhpcy5pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBzaG91bGRTaG93Um93RXJyb3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0dXNDaGFuZ2VzID0gRU1QVFksIHN0YXR1cyB9ID0gY29udHJvbDtcblxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZvcm1EaXJlY3RpdmVcbiAgICAgICAgPyBtZXJnZShzdGF0dXNDaGFuZ2VzLCB0aGlzLmZvcm1EaXJlY3RpdmUubmdTdWJtaXQpXG4gICAgICAgIDogc3RhdHVzQ2hhbmdlc1xuICAgICkucGlwZShcbiAgICAgIHN0YXJ0V2l0aChzdGF0dXMpLFxuICAgICAgZGVib3VuY2VUaW1lKDApLFxuICAgICAgbWFwKCgpID0+IHRoaXMuc2hvd1Jvd0Vycm9yKGNvbnRyb2wsIHRoaXMuZm9ybURpcmVjdGl2ZSkpLFxuICAgICk7XG4gIH07XG59XG4iLCI8dGFibGVcbiAgY2xhc3M9XCJhY2wtYXJyYXktZm9ybS10YWJsZVwiXG4gIFtjbGFzcy5hY2wtYXJyYXktZm9ybS10YWJsZV9fcmVhZG9ubHktbW9kZV09XCJyZWFkb25seVwiXG4+XG4gIDx0aGVhZCAqbmdJZj1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgPHRyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8dGhcbiAgICAgICAgKm5nSWY9XCIhcmVhZG9ubHkgJiYgbWluUm93ICE9PSBtYXhSb3dcIlxuICAgICAgICBjbGFzcz1cImFjbC1hcnJheS1mb3JtLXRhYmxlX19hY3Rpb24tY29sXCJcbiAgICAgID48L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93czsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICAgIDx0clxuICAgICAgICAqbmdGb3I9XCJsZXQgcm93VGVtcGxhdGUgb2Ygcm93VGVtcGxhdGVzOyBsZXQgdGVtcGxhdGVJbmRleCA9IGluZGV4XCJcbiAgICAgICAgW2NsYXNzLmFjbC1hcnJheS1mb3JtLXRhYmxlX19yb3ctZXJyb3JdPVwiXG4gICAgICAgICAgcm93IHwgcHVyZTogc2hvdWxkU2hvd1Jvd0Vycm9yIHwgYXN5bmNcbiAgICAgICAgXCJcbiAgICAgICAgW2F0dHIucm93dGVtcGxhdGVpbmRleF09XCJ0ZW1wbGF0ZUluZGV4XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICByb3dUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3csIGluZGV4OiBpbmRleCB9XG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cInRlbXBsYXRlSW5kZXggPT09IDAgJiYgIXJlYWRvbmx5ICYmIG1pblJvdyAhPT0gbWF4Um93XCJcbiAgICAgICAgICBjbGFzcz1cImFjbC1hcnJheS1mb3JtLXRhYmxlX19hY3Rpb24tY29sXCJcbiAgICAgICAgICBbY2xhc3MuYWNsLWFycmF5LWZvcm0tdGFibGVfX2FjdGlvbi1jb2wtZGl2aWRlcl09XCJhY3Rpb25Db2x1bW5EaXZpZGVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dDb250cm9sVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICByb3dDb250cm9sVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdywgaW5kZXg6IGluZGV4IH1cbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBbYXVpVG9vbHRpcF09XCJtaW5Sb3dUb29sdGlwXCJcbiAgICAgICAgICAgIFthdWlUb29sdGlwRGlzYWJsZWRdPVwicm93cz8ubGVuZ3RoID4gbWluUm93IHx8ICFtaW5Sb3dUb29sdGlwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIXJvd0NvbnRyb2xUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIGF1aS1idXR0b249XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyb3dzPy5sZW5ndGggPD0gbWluUm93XCJcbiAgICAgICAgICAgICAgW3NxdWFyZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlLmVtaXQoaW5kZXgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF1aS1pY29uIGljb249XCJtaW51c19jaXJjbGVcIj48L2F1aS1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuXG4gICAgICA8dHJcbiAgICAgICAgKm5nSWY9XCJyb3dFcnJvclRlbXBsYXRlICYmICFyZWFkb25seVwiXG4gICAgICAgIFtjbGFzcy5hY2wtYXJyYXktZm9ybS10YWJsZV9fcm93LWVycm9yXT1cIlxuICAgICAgICAgIHJvdyB8IHB1cmU6IHNob3VsZFNob3dSb3dFcnJvciB8IGFzeW5jXG4gICAgICAgIFwiXG4gICAgICAgIFtoaWRkZW5dPVwiIShyb3cgfCBwdXJlOiBzaG91bGRTaG93Um93RXJyb3IgfCBhc3luYylcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIHJvd0Vycm9yVGVtcGxhdGU7XG4gICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93LCBpbmRleDogaW5kZXggfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdHI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgKHJvd1NlcGFyYXRvciB8fCBzZXBhcmF0b3JUZW1wbGF0ZSkgJiZcbiAgICAgICAgICByb3dzPy5sZW5ndGggPiAxICYmXG4gICAgICAgICAgaW5kZXggIT09IHJvd3M/Lmxlbmd0aCAtIDFcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPHRyIGNsYXNzPVwiYWNsLWFycmF5LWZvcm0tdGFibGVfX3NlcGFyYXRvclwiPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiMTAwXCI+XG4gICAgICAgICAgICBAaWYgKHNlcGFyYXRvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlcGFyYXRvclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1oLVs4cHhdXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyICpuZ0lmPVwiKCFyb3dzIHx8IHJvd3MubGVuZ3RoID09PSAwKSAmJiBzaG93WmVyb1N0YXRlXCI+XG4gICAgICA8dGRcbiAgICAgICAgY29sc3Bhbj1cIjEwMFwiXG4gICAgICAgIHN0eWxlPVwicGFkZGluZzogdW5zZXRcIlxuICAgICAgPlxuICAgICAgICA8YWNsLXplcm8tc3RhdGVcbiAgICAgICAgICAqbmdJZj1cIiF6ZXJvU3RhdGVUZW1wbGF0ZVwiXG4gICAgICAgICAgW3plcm9TdGF0ZV09XCJ0cnVlXCJcbiAgICAgICAgICBbcmVzb3VyY2VOYW1lXT1cInJlc291cmNlTmFtZVwiXG4gICAgICAgICAgW3Jlc291cmNlTmFtZVRyYW5zbGF0ZWRdPVwicmVzb3VyY2VOYW1lVHJhbnNsYXRlZFwiXG4gICAgICAgICAgW21pbkhlaWdodF09XCI0OFwiXG4gICAgICAgID48L2FjbC16ZXJvLXN0YXRlPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ6ZXJvU3RhdGVUZW1wbGF0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ6ZXJvU3RhdGVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cblxuICAgIDx0clxuICAgICAgKm5nSWY9XCIhcmVhZG9ubHkgJiYgbWluUm93ICE9PSBtYXhSb3dcIlxuICAgICAgY2xhc3M9XCJhY2wtYXJyYXktZm9ybS10YWJsZS0tcm93LWFjdGlvblwiXG4gICAgPlxuICAgICAgPHRkIGNvbHNwYW49XCIxMDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjbC1hcnJheS1mb3JtLXRhYmxlX19ib3R0b20tY29udHJvbC1idXR0b25zXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvb3RlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIiFmb290ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInR3LWZsZXggdHctdy1mdWxsXCJcbiAgICAgICAgICAgIFthdWlUb29sdGlwXT1cIm1heFJvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgW2F1aVRvb2x0aXBEaXNhYmxlZF09XCJyb3dzPy5sZW5ndGggPCBtYXhSb3cgfHwgIW1heFJvd1Rvb2x0aXBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgYXVpLWJ1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgICAgICAgICBzaXplPVwibWluaVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGQuZW1pdCgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJvd3M/Lmxlbmd0aCA+PSBtYXhSb3cgfHwgYWRkRGlzYWJsZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXVpLWljb24gaWNvbj1cInBsdXNfY2lyY2xlXCI+PC9hdWktaWNvbj5cbiAgICAgICAgICAgICAge3sgJ2FkZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC90Ym9keT5cbjwvdGFibGU+XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ArrayFormTableComponent, ArrayFormTableFooterDirective, ArrayFormTableHeaderDirective, ArrayFormTableRowControlDirective, ArrayFormTableRowDirective, ArrayFormTableRowErrorDirective, ArrayFormTableZeroStateDirective, ArrayFormTableRowSeparatorDirective, } from './component';
|
|
2
|
+
export const ARRAY_FORM_TABLE_MODULE = [
|
|
3
|
+
ArrayFormTableComponent,
|
|
4
|
+
ArrayFormTableFooterDirective,
|
|
5
|
+
ArrayFormTableHeaderDirective,
|
|
6
|
+
ArrayFormTableRowControlDirective,
|
|
7
|
+
ArrayFormTableRowDirective,
|
|
8
|
+
ArrayFormTableRowErrorDirective,
|
|
9
|
+
ArrayFormTableZeroStateDirective,
|
|
10
|
+
ArrayFormTableRowSeparatorDirective,
|
|
11
|
+
];
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvYXJyYXktZm9ybS10YWJsZS9mb3JtL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsNkJBQTZCLEVBQzdCLDZCQUE2QixFQUM3QixpQ0FBaUMsRUFDakMsMEJBQTBCLEVBQzFCLCtCQUErQixFQUMvQixnQ0FBZ0MsRUFDaEMsbUNBQW1DLEdBQ3BDLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHO0lBQ3JDLHVCQUF1QjtJQUN2Qiw2QkFBNkI7SUFDN0IsNkJBQTZCO0lBQzdCLGlDQUFpQztJQUNqQywwQkFBMEI7SUFDMUIsK0JBQStCO0lBQy9CLGdDQUFnQztJQUNoQyxtQ0FBbUM7Q0FDcEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFycmF5Rm9ybVRhYmxlQ29tcG9uZW50LFxuICBBcnJheUZvcm1UYWJsZUZvb3RlckRpcmVjdGl2ZSxcbiAgQXJyYXlGb3JtVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gIEFycmF5Rm9ybVRhYmxlUm93Q29udHJvbERpcmVjdGl2ZSxcbiAgQXJyYXlGb3JtVGFibGVSb3dEaXJlY3RpdmUsXG4gIEFycmF5Rm9ybVRhYmxlUm93RXJyb3JEaXJlY3RpdmUsXG4gIEFycmF5Rm9ybVRhYmxlWmVyb1N0YXRlRGlyZWN0aXZlLFxuICBBcnJheUZvcm1UYWJsZVJvd1NlcGFyYXRvckRpcmVjdGl2ZSxcbn0gZnJvbSAnLi9jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgQVJSQVlfRk9STV9UQUJMRV9NT0RVTEUgPSBbXG4gIEFycmF5Rm9ybVRhYmxlQ29tcG9uZW50LFxuICBBcnJheUZvcm1UYWJsZUZvb3RlckRpcmVjdGl2ZSxcbiAgQXJyYXlGb3JtVGFibGVIZWFkZXJEaXJlY3RpdmUsXG4gIEFycmF5Rm9ybVRhYmxlUm93Q29udHJvbERpcmVjdGl2ZSxcbiAgQXJyYXlGb3JtVGFibGVSb3dEaXJlY3RpdmUsXG4gIEFycmF5Rm9ybVRhYmxlUm93RXJyb3JEaXJlY3RpdmUsXG4gIEFycmF5Rm9ybVRhYmxlWmVyb1N0YXRlRGlyZWN0aXZlLFxuICBBcnJheUZvcm1UYWJsZVJvd1NlcGFyYXRvckRpcmVjdGl2ZSxcbl07XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* @module array-form-table
|
|
4
|
+
* @preferred
|
|
5
|
+
*/
|
|
6
|
+
export * from './form/component';
|
|
7
|
+
export * from './key-value-form/component';
|
|
8
|
+
export * from './key-value-table/component';
|
|
9
|
+
export * from './string-array-form/component';
|
|
10
|
+
export * from './base-string-map-form.component';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2R5bmFtaWMtcGx1Z2luLXNoYXJlZC9zcmMvYXJyYXktZm9ybS10YWJsZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGtDQUFrQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgYXJyYXktZm9ybS10YWJsZVxuICogQHByZWZlcnJlZFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vZm9ybS9jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktdmFsdWUtZm9ybS9jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9rZXktdmFsdWUtdGFibGUvY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nLWFycmF5LWZvcm0vY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZS1zdHJpbmctbWFwLWZvcm0uY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { ButtonModule, FormModule, IconModule, InputModule } from '@alauda/ui';
|
|
3
|
+
import { TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';
|
|
4
|
+
import { NgIf, NgTemplateOutlet } from '@angular/common';
|
|
5
|
+
import { ChangeDetectionStrategy, Component, Input, TemplateRef, } from '@angular/core';
|
|
6
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
7
|
+
import { sortBy } from 'lodash-es';
|
|
8
|
+
import { EFFECT_DIRECTIVE_MODULE } from '../../directives';
|
|
9
|
+
import { ERRORS_MAPPER_MODULE } from '../../form/errors-mapper';
|
|
10
|
+
import { ValidateRowDuplicateService } from '../../services/form-row-duplicate/form-row-duplicate.service';
|
|
11
|
+
import { ValueHook } from '../../utils';
|
|
12
|
+
import { BaseStringMapFormComponent } from '../base-string-map-form.component';
|
|
13
|
+
import { ARRAY_FORM_TABLE_MODULE } from '../form';
|
|
14
|
+
import { ArrayFormTableComponent } from '../form/component';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
import * as i1 from "../form/component";
|
|
17
|
+
import * as i2 from "@angular/forms";
|
|
18
|
+
import * as i3 from "@alauda/ui";
|
|
19
|
+
import * as i4 from "../../form/errors-mapper/errors-mapper-component/component";
|
|
20
|
+
import * as i5 from "../../directives/effect-directive/e2e-attribute-binding.directive";
|
|
21
|
+
export class KeyValueFormTableComponent extends BaseStringMapFormComponent {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
this.validator = {
|
|
25
|
+
key: [],
|
|
26
|
+
value: [],
|
|
27
|
+
};
|
|
28
|
+
this.errorMapper = {
|
|
29
|
+
key: {},
|
|
30
|
+
value: {},
|
|
31
|
+
};
|
|
32
|
+
this.maxRow = Infinity;
|
|
33
|
+
this.minRow = 0;
|
|
34
|
+
this.readonlyKeys = [];
|
|
35
|
+
}
|
|
36
|
+
isReadonly(key) {
|
|
37
|
+
return this.readonlyKeys.some(toCheckKey => {
|
|
38
|
+
if (!toCheckKey) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (typeof toCheckKey === 'string') {
|
|
42
|
+
return toCheckKey === key;
|
|
43
|
+
}
|
|
44
|
+
return toCheckKey.test(key);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
getDataValueByIndex(index) {
|
|
48
|
+
return this.form.at(index).at(1).value;
|
|
49
|
+
}
|
|
50
|
+
adaptResourceModel(resource) {
|
|
51
|
+
let newFormModel = Object.entries(resource || {});
|
|
52
|
+
// 排序,先按字母排序,再把 readonly 的放前面
|
|
53
|
+
newFormModel = sortBy(newFormModel, (arr) => arr[0]);
|
|
54
|
+
newFormModel.sort((arr1, arr2) => {
|
|
55
|
+
const flag1 = this.isReadonly(arr1[0]);
|
|
56
|
+
const flag2 = this.isReadonly(arr2[0]);
|
|
57
|
+
if ((flag1 && flag2) || (!flag1 && !flag2)) {
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
return flag1 ? -1 : 1;
|
|
61
|
+
});
|
|
62
|
+
if (newFormModel.length === 0) {
|
|
63
|
+
newFormModel = this.getDefaultFormModel();
|
|
64
|
+
}
|
|
65
|
+
return newFormModel;
|
|
66
|
+
}
|
|
67
|
+
getKeyValidators() {
|
|
68
|
+
return this.validator?.key;
|
|
69
|
+
}
|
|
70
|
+
getValueValidators() {
|
|
71
|
+
return this.validator?.value;
|
|
72
|
+
}
|
|
73
|
+
isLabelReadonly(index) {
|
|
74
|
+
const formArray = this.form.controls[index];
|
|
75
|
+
return formArray.valid && this.isReadonly(formArray.controls[0].value);
|
|
76
|
+
}
|
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: KeyValueFormTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
78
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: KeyValueFormTableComponent, isStandalone: true, selector: "acl-key-value-form-table", inputs: { resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated", multiLineValue: "multiLineValue", validator: "validator", errorMapper: "errorMapper", placeholder: "placeholder", readonly: "readonly", textKey: "textKey", maxRow: "maxRow", minRow: "minRow", readonlyKeys: "readonlyKeys", zeroStateTemplate: "zeroStateTemplate" }, providers: [ValidateRowDuplicateService], usesInheritance: true, ngImport: i0, template: "<acl-array-form-table\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n (add)=\"add(form.length)\"\n (remove)=\"remove($event)\"\n [rows]=\"form.controls\"\n [formGroup]=\"$any(form)\"\n [readonly]=\"readonly\"\n [maxRow]=\"maxRow\"\n [minRow]=\"minRow\"\n>\n <ng-container *aclArrayFormTableHeader>\n <th style=\"width: 33%\">{{ 'key' | translate }}</th>\n <th style=\"width: 66%\">{{ 'value' | translate }}</th>\n </ng-container>\n\n <!-- Input row -->\n <ng-container\n *aclArrayFormTableRow=\"let control; let index = index\"\n [formGroupName]=\"index\"\n >\n <td>\n <input\n [hidden]=\"textKey\"\n (blur)=\"onBlur()\"\n aui-input\n [readonly]=\"readonly || isLabelReadonly(index)\"\n formControlName=\"0\"\n [placeholder]=\"placeholder?.key || ('key' | translate)\"\n />\n <ng-container *ngIf=\"textKey\">\n {{ control.get('0').value }}\n </ng-container>\n </td>\n\n <td>\n <input\n *ngIf=\"!multiLineValue\"\n (blur)=\"onBlur()\"\n aui-input\n [readonly]=\"readonly || isLabelReadonly(index)\"\n formControlName=\"1\"\n [placeholder]=\"placeholder?.value || ('value' | translate)\"\n />\n <div\n *ngIf=\"multiLineValue\"\n class=\"textarea-wrapper\"\n [attr.data-value]=\"getDataValueByIndex(index)\"\n >\n <textarea\n (blur)=\"onBlur()\"\n [readonly]=\"readonly || isLabelReadonly(index)\"\n aui-input\n formControlName=\"1\"\n rows=\"1\"\n [placeholder]=\"placeholder?.value || ('value' | translate)\"\n ></textarea>\n </div>\n </td>\n </ng-container>\n\n <!-- Input error row -->\n <ng-container *aclArrayFormTableRowError=\"let control\">\n <td\n *ngIf=\"control.invalid\"\n colspan=\"3\"\n class=\"acl-table-form-error-hint\"\n >\n <ng-container *ngIf=\"control.errors?.keyIsMissing\">\n {{ 'k8s_resource_label_key_required' | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"control.errors?.duplicateError\">\n {{ 'k8s_resource_label_key_duplicated' | translate }}\n </ng-container>\n\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"control.errors?.key\"\n [errorsMapper]=\"errorMapper?.key\"\n ></acl-errors-mapper>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"control.errors?.value\"\n [errorsMapper]=\"errorMapper?.value\"\n ></acl-errors-mapper>\n </td>\n </ng-container>\n\n <ng-container *aclArrayFormTableRowControl=\"let item; let index = index\">\n <button\n [hidden]=\"readonly || isLabelReadonly(index)\"\n aui-button=\"text\"\n type=\"button\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"zeroStateTemplate\">\n <ng-container *aclArrayFormTableZeroState>\n <ng-template [ngTemplateOutlet]=\"zeroStateTemplate\"></ng-template>\n </ng-container>\n </ng-container>\n</acl-array-form-table>\n", styles: [":host{flex:1}:host .textarea-wrapper{display:grid;align-items:stretch}:host .textarea-wrapper:after,:host .textarea-wrapper textarea{grid-area:1/1;width:auto;padding:3px 5px;font:inherit;resize:none;max-height:252px}:host .textarea-wrapper:after{content:attr(data-value) \" \";visibility:hidden;white-space:pre-wrap}:host .textarea-wrapper textarea{overflow:auto;height:auto!important}:host .textarea-wrapper:focus-within textarea:focus{outline:none}td.acl-table-form-error-hint{padding-top:0;color:rgb(var(--aui-color-red));font-size:12px}\n"], dependencies: [{ kind: "component", type: i1.ArrayFormTableComponent, selector: "acl-array-form-table", inputs: ["rowSeparator", "rows", "resourceName", "resourceNameTranslated", "readonly", "addDisabled", "actionColumnDivider", "showZeroState", "showRowError", "rowBackgroundColorFn", "minRow", "minRowTooltip", "maxRow", "maxRowTooltip"], outputs: ["add", "remove"] }, { kind: "directive", type: i1.ArrayFormTableHeaderDirective, selector: "[aclArrayFormTableHeader]" }, { kind: "directive", type: i1.ArrayFormTableRowControlDirective, selector: "[aclArrayFormTableRowControl]" }, { kind: "directive", type: i1.ArrayFormTableRowDirective, selector: "[aclArrayFormTableRow]" }, { kind: "directive", type: i1.ArrayFormTableRowErrorDirective, selector: "[aclArrayFormTableRowError]" }, { kind: "directive", type: i1.ArrayFormTableZeroStateDirective, selector: "[aclArrayFormTableZeroState]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.InputComponent, selector: "input[aui-input],textarea[aui-input]", inputs: ["size", "disabled"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: i4.ErrorsMapperComponent, selector: "acl-errors-mapper", inputs: ["errors", "errorsMapper", "errorsMapperFn", "controlName", "ignoreUnknownError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i3.ButtonComponent, selector: "button[aui-button]", inputs: ["aui-button", "size", "plain", "loading", "round", "square"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: i3.IconComponent, selector: "aui-icon", inputs: ["icon", "light", "dark", "link", "margin", "size", "color", "background", "backgroundColor"] }, { kind: "ngmodule", type: FormModule }, { kind: "directive", type: i3.FormItemErrorDirective, selector: "[auiFormItemError]" }, { kind: "directive", type: i5.E2eAttributeBindingDirective, selector: "[click],[routerLink],a[href],[auiTooltip],[auiDropdown]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
79
|
+
}
|
|
80
|
+
__decorate([
|
|
81
|
+
ValueHook(null, null, function () {
|
|
82
|
+
this.form?.controls.forEach((formArray) => {
|
|
83
|
+
const [key, value] = formArray.controls;
|
|
84
|
+
key.setValidators(this.getKeyValidators());
|
|
85
|
+
value.setValidators(this.getValueValidators());
|
|
86
|
+
});
|
|
87
|
+
}),
|
|
88
|
+
__metadata("design:type", Object)
|
|
89
|
+
], KeyValueFormTableComponent.prototype, "validator", void 0);
|
|
90
|
+
__decorate([
|
|
91
|
+
ValueHook(Boolean),
|
|
92
|
+
__metadata("design:type", Array)
|
|
93
|
+
], KeyValueFormTableComponent.prototype, "readonlyKeys", void 0);
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: KeyValueFormTableComponent, decorators: [{
|
|
95
|
+
type: Component,
|
|
96
|
+
args: [{ selector: 'acl-key-value-form-table', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
97
|
+
ARRAY_FORM_TABLE_MODULE,
|
|
98
|
+
ReactiveFormsModule,
|
|
99
|
+
ArrayFormTableComponent,
|
|
100
|
+
InputModule,
|
|
101
|
+
NgIf,
|
|
102
|
+
NgTemplateOutlet,
|
|
103
|
+
TranslatePipe,
|
|
104
|
+
ERRORS_MAPPER_MODULE,
|
|
105
|
+
ButtonModule,
|
|
106
|
+
IconModule,
|
|
107
|
+
FormModule,
|
|
108
|
+
EFFECT_DIRECTIVE_MODULE,
|
|
109
|
+
], standalone: true, providers: [ValidateRowDuplicateService], template: "<acl-array-form-table\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n (add)=\"add(form.length)\"\n (remove)=\"remove($event)\"\n [rows]=\"form.controls\"\n [formGroup]=\"$any(form)\"\n [readonly]=\"readonly\"\n [maxRow]=\"maxRow\"\n [minRow]=\"minRow\"\n>\n <ng-container *aclArrayFormTableHeader>\n <th style=\"width: 33%\">{{ 'key' | translate }}</th>\n <th style=\"width: 66%\">{{ 'value' | translate }}</th>\n </ng-container>\n\n <!-- Input row -->\n <ng-container\n *aclArrayFormTableRow=\"let control; let index = index\"\n [formGroupName]=\"index\"\n >\n <td>\n <input\n [hidden]=\"textKey\"\n (blur)=\"onBlur()\"\n aui-input\n [readonly]=\"readonly || isLabelReadonly(index)\"\n formControlName=\"0\"\n [placeholder]=\"placeholder?.key || ('key' | translate)\"\n />\n <ng-container *ngIf=\"textKey\">\n {{ control.get('0').value }}\n </ng-container>\n </td>\n\n <td>\n <input\n *ngIf=\"!multiLineValue\"\n (blur)=\"onBlur()\"\n aui-input\n [readonly]=\"readonly || isLabelReadonly(index)\"\n formControlName=\"1\"\n [placeholder]=\"placeholder?.value || ('value' | translate)\"\n />\n <div\n *ngIf=\"multiLineValue\"\n class=\"textarea-wrapper\"\n [attr.data-value]=\"getDataValueByIndex(index)\"\n >\n <textarea\n (blur)=\"onBlur()\"\n [readonly]=\"readonly || isLabelReadonly(index)\"\n aui-input\n formControlName=\"1\"\n rows=\"1\"\n [placeholder]=\"placeholder?.value || ('value' | translate)\"\n ></textarea>\n </div>\n </td>\n </ng-container>\n\n <!-- Input error row -->\n <ng-container *aclArrayFormTableRowError=\"let control\">\n <td\n *ngIf=\"control.invalid\"\n colspan=\"3\"\n class=\"acl-table-form-error-hint\"\n >\n <ng-container *ngIf=\"control.errors?.keyIsMissing\">\n {{ 'k8s_resource_label_key_required' | translate }}\n </ng-container>\n\n <ng-container *ngIf=\"control.errors?.duplicateError\">\n {{ 'k8s_resource_label_key_duplicated' | translate }}\n </ng-container>\n\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"control.errors?.key\"\n [errorsMapper]=\"errorMapper?.key\"\n ></acl-errors-mapper>\n <acl-errors-mapper\n auiFormItemError\n [errors]=\"control.errors?.value\"\n [errorsMapper]=\"errorMapper?.value\"\n ></acl-errors-mapper>\n </td>\n </ng-container>\n\n <ng-container *aclArrayFormTableRowControl=\"let item; let index = index\">\n <button\n [hidden]=\"readonly || isLabelReadonly(index)\"\n aui-button=\"text\"\n type=\"button\"\n [square]=\"true\"\n [plain]=\"true\"\n (click)=\"remove(index)\"\n >\n <aui-icon icon=\"minus_circle\"></aui-icon>\n </button>\n </ng-container>\n\n <ng-container *ngIf=\"zeroStateTemplate\">\n <ng-container *aclArrayFormTableZeroState>\n <ng-template [ngTemplateOutlet]=\"zeroStateTemplate\"></ng-template>\n </ng-container>\n </ng-container>\n</acl-array-form-table>\n", styles: [":host{flex:1}:host .textarea-wrapper{display:grid;align-items:stretch}:host .textarea-wrapper:after,:host .textarea-wrapper textarea{grid-area:1/1;width:auto;padding:3px 5px;font:inherit;resize:none;max-height:252px}:host .textarea-wrapper:after{content:attr(data-value) \" \";visibility:hidden;white-space:pre-wrap}:host .textarea-wrapper textarea{overflow:auto;height:auto!important}:host .textarea-wrapper:focus-within textarea:focus{outline:none}td.acl-table-form-error-hint{padding-top:0;color:rgb(var(--aui-color-red));font-size:12px}\n"] }]
|
|
110
|
+
}], propDecorators: { resourceName: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], resourceNameTranslated: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], multiLineValue: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], validator: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], errorMapper: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], placeholder: [{
|
|
121
|
+
type: Input
|
|
122
|
+
}], readonly: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], textKey: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], maxRow: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], minRow: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}], readonlyKeys: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], zeroStateTemplate: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}] } });
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9keW5hbWljLXBsdWdpbi1zaGFyZWQvc3JjL2FycmF5LWZvcm0tdGFibGUva2V5LXZhbHVlLWZvcm0vY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9keW5hbWljLXBsdWdpbi1zaGFyZWQvc3JjL2FycmF5LWZvcm0tdGFibGUva2V5LXZhbHVlLWZvcm0vdGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFFTCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFhLG1CQUFtQixFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVuQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUUzRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUs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Z0JBT04sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixNQUFNO3NCQURMLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixpQkFBaUI7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdXR0b25Nb2R1bGUsIEZvcm1Nb2R1bGUsIEljb25Nb2R1bGUsIElucHV0TW9kdWxlIH0gZnJvbSAnQGFsYXVkYS91aSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGFsYXVkYS1mZS9keW5hbWljLXBsdWdpbi1zZGsnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgc29ydEJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcblxuaW1wb3J0IHsgRUZGRUNUX0RJUkVDVElWRV9NT0RVTEUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEVSUk9SU19NQVBQRVJfTU9EVUxFIH0gZnJvbSAnLi4vLi4vZm9ybS9lcnJvcnMtbWFwcGVyJztcbmltcG9ydCB7IFZhbGlkYXRlUm93RHVwbGljYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tcm93LWR1cGxpY2F0ZS9mb3JtLXJvdy1kdXBsaWNhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBWYWx1ZUhvb2sgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBCYXNlU3RyaW5nTWFwRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2Utc3RyaW5nLW1hcC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBUlJBWV9GT1JNX1RBQkxFX01PRFVMRSB9IGZyb20gJy4uL2Zvcm0nO1xuaW1wb3J0IHsgQXJyYXlGb3JtVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtL2NvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FjbC1rZXktdmFsdWUtZm9ybS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWydzdHlsZXMuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIEFSUkFZX0ZPUk1fVEFCTEVfTU9EVUxFLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQXJyYXlGb3JtVGFibGVDb21wb25lbnQsXG4gICAgSW5wdXRNb2R1bGUsXG4gICAgTmdJZixcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgRVJST1JTX01BUFBFUl9NT0RVTEUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIEljb25Nb2R1bGUsXG4gICAgRm9ybU1vZHVsZSxcbiAgICBFRkZFQ1RfRElSRUNUSVZFX01PRFVMRSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbVmFsaWRhdGVSb3dEdXBsaWNhdGVTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgS2V5VmFsdWVGb3JtVGFibGVDb21wb25lbnRcbiAgZXh0ZW5kcyBCYXNlU3RyaW5nTWFwRm9ybUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBASW5wdXQoKVxuICByZXNvdXJjZU5hbWU6IHN0cmluZztcblxuICBASW5wdXQoKVxuICByZXNvdXJjZU5hbWVUcmFuc2xhdGVkOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgbXVsdGlMaW5lVmFsdWU6IGJvb2xlYW47XG5cbiAgQFZhbHVlSG9vayhudWxsLCBudWxsLCBmdW5jdGlvbiAodGhpczogS2V5VmFsdWVGb3JtVGFibGVDb21wb25lbnQpIHtcbiAgICB0aGlzLmZvcm0/LmNvbnRyb2xzLmZvckVhY2goKGZvcm1BcnJheTogRm9ybUFycmF5KSA9PiB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBmb3JtQXJyYXkuY29udHJvbHM7XG4gICAgICBrZXkuc2V0VmFsaWRhdG9ycyh0aGlzLmdldEtleVZhbGlkYXRvcnMoKSk7XG4gICAgICB2YWx1ZS5zZXRWYWxpZGF0b3JzKHRoaXMuZ2V0VmFsdWVWYWxpZGF0b3JzKCkpO1xuICAgIH0pO1xuICB9KVxuICBASW5wdXQoKVxuICB2YWxpZGF0b3I6IHtcbiAgICBrZXk/OiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW107XG4gICAgdmFsdWU/OiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW107XG4gIH0gPSB7XG4gICAga2V5OiBbXSxcbiAgICB2YWx1ZTogW10sXG4gIH07XG5cbiAgQElucHV0KClcbiAgZXJyb3JNYXBwZXI6IHtcbiAgICBrZXk/OiBTdHJpbmdNYXA7XG4gICAgdmFsdWU/OiBTdHJpbmdNYXA7XG4gIH0gPSB7XG4gICAga2V5OiB7fSxcbiAgICB2YWx1ZToge30sXG4gIH07XG5cbiAgQElucHV0KClcbiAgcGxhY2Vob2xkZXI6IHtcbiAgICBrZXk/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gIH07XG5cbiAgQElucHV0KClcbiAgcmVhZG9ubHk6IGJvb2xlYW47XG5cbiAgQElucHV0KClcbiAgdGV4dEtleTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBtYXhSb3cgPSBJbmZpbml0eTtcblxuICBASW5wdXQoKVxuICBtaW5Sb3cgPSAwO1xuXG4gIEBWYWx1ZUhvb2s8S2V5VmFsdWVGb3JtVGFibGVDb21wb25lbnQsICdyZWFkb25seUtleXMnPihCb29sZWFuKVxuICBASW5wdXQoKVxuICByZWFkb25seUtleXM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD4gPSBbXTtcblxuICBASW5wdXQoKVxuICB6ZXJvU3RhdGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBpc1JlYWRvbmx5KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZG9ubHlLZXlzLnNvbWUodG9DaGVja0tleSA9PiB7XG4gICAgICBpZiAoIXRvQ2hlY2tLZXkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0b0NoZWNrS2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdG9DaGVja0tleSA9PT0ga2V5O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9DaGVja0tleS50ZXN0KGtleSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhVmFsdWVCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybS5hdChpbmRleCkgYXMgRm9ybUFycmF5KS5hdCgxKS52YWx1ZTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFkYXB0UmVzb3VyY2VNb2RlbChyZXNvdXJjZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIGxldCBuZXdGb3JtTW9kZWwgPSBPYmplY3QuZW50cmllcyhyZXNvdXJjZSB8fCB7fSk7XG4gICAgLy8g5o6S5bqP77yM5YWI5oyJ5a2X5q+N5o6S5bqP77yM5YaN5oqKIHJlYWRvbmx5IOeahOaUvuWJjemdolxuICAgIG5ld0Zvcm1Nb2RlbCA9IHNvcnRCeShuZXdGb3JtTW9kZWwsIChhcnI6IFtzdHJpbmcsIHN0cmluZ10pID0+IGFyclswXSk7XG4gICAgbmV3Rm9ybU1vZGVsLnNvcnQoKGFycjE6IFtzdHJpbmcsIHN0cmluZ10sIGFycjI6IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgIGNvbnN0IGZsYWcxID0gdGhpcy5pc1JlYWRvbmx5KGFycjFbMF0pO1xuICAgICAgY29uc3QgZmxhZzIgPSB0aGlzLmlzUmVhZG9ubHkoYXJyMlswXSk7XG4gICAgICBpZiAoKGZsYWcxICYmIGZsYWcyKSB8fCAoIWZsYWcxICYmICFmbGFnMikpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmxhZzEgPyAtMSA6IDE7XG4gICAgfSk7XG4gICAgaWYgKG5ld0Zvcm1Nb2RlbC5sZW5ndGggPT09IDApIHtcbiAgICAgIG5ld0Zvcm1Nb2RlbCA9IHRoaXMuZ2V0RGVmYXVsdEZvcm1Nb2RlbCgpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdGb3JtTW9kZWw7XG4gIH1cblxuICBvdmVycmlkZSBnZXRLZXlWYWxpZGF0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcj8ua2V5O1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0VmFsdWVWYWxpZGF0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRvcj8udmFsdWU7XG4gIH1cblxuICBpc0xhYmVsUmVhZG9ubHkoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZm9ybS5jb250cm9sc1tpbmRleF0gYXMgRm9ybUFycmF5O1xuICAgIHJldHVybiBmb3JtQXJyYXkudmFsaWQgJiYgdGhpcy5pc1JlYWRvbmx5KGZvcm1BcnJheS5jb250cm9sc1swXS52YWx1ZSk7XG4gIH1cbn1cbiIsIjxhY2wtYXJyYXktZm9ybS10YWJsZVxuICBbcmVzb3VyY2VOYW1lXT1cInJlc291cmNlTmFtZVwiXG4gIFtyZXNvdXJjZU5hbWVUcmFuc2xhdGVkXT1cInJlc291cmNlTmFtZVRyYW5zbGF0ZWRcIlxuICAoYWRkKT1cImFkZChmb3JtLmxlbmd0aClcIlxuICAocmVtb3ZlKT1cInJlbW92ZSgkZXZlbnQpXCJcbiAgW3Jvd3NdPVwiZm9ybS5jb250cm9sc1wiXG4gIFtmb3JtR3JvdXBdPVwiJGFueShmb3JtKVwiXG4gIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gIFttYXhSb3ddPVwibWF4Um93XCJcbiAgW21pblJvd109XCJtaW5Sb3dcIlxuPlxuICA8bmctY29udGFpbmVyICphY2xBcnJheUZvcm1UYWJsZUhlYWRlcj5cbiAgICA8dGggc3R5bGU9XCJ3aWR0aDogMzMlXCI+e3sgJ2tleScgfCB0cmFuc2xhdGUgfX08L3RoPlxuICAgIDx0aCBzdHlsZT1cIndpZHRoOiA2NiVcIj57eyAndmFsdWUnIHwgdHJhbnNsYXRlIH19PC90aD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBJbnB1dCByb3cgLS0+XG4gIDxuZy1jb250YWluZXJcbiAgICAqYWNsQXJyYXlGb3JtVGFibGVSb3c9XCJsZXQgY29udHJvbDsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgIFtmb3JtR3JvdXBOYW1lXT1cImluZGV4XCJcbiAgPlxuICAgIDx0ZD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBbaGlkZGVuXT1cInRleHRLZXlcIlxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgIGF1aS1pbnB1dFxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkgfHwgaXNMYWJlbFJlYWRvbmx5KGluZGV4KVwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cIjBcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXI/LmtleSB8fCAoJ2tleScgfCB0cmFuc2xhdGUpXCJcbiAgICAgIC8+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGV4dEtleVwiPlxuICAgICAgICB7eyBjb250cm9sLmdldCgnMCcpLnZhbHVlIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuXG4gICAgPHRkPlxuICAgICAgPGlucHV0XG4gICAgICAgICpuZ0lmPVwiIW11bHRpTGluZVZhbHVlXCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICBhdWktaW5wdXRcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5IHx8IGlzTGFiZWxSZWFkb25seShpbmRleClcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCIxXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyPy52YWx1ZSB8fCAoJ3ZhbHVlJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgLz5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJtdWx0aUxpbmVWYWx1ZVwiXG4gICAgICAgIGNsYXNzPVwidGV4dGFyZWEtd3JhcHBlclwiXG4gICAgICAgIFthdHRyLmRhdGEtdmFsdWVdPVwiZ2V0RGF0YVZhbHVlQnlJbmRleChpbmRleClcIlxuICAgICAgPlxuICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5IHx8IGlzTGFiZWxSZWFkb25seShpbmRleClcIlxuICAgICAgICAgIGF1aS1pbnB1dFxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIjFcIlxuICAgICAgICAgIHJvd3M9XCIxXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXI/LnZhbHVlIHx8ICgndmFsdWUnIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgID48L3RleHRhcmVhPlxuICAgICAgPC9kaXY+XG4gICAgPC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPCEtLSBJbnB1dCBlcnJvciByb3cgLS0+XG4gIDxuZy1jb250YWluZXIgKmFjbEFycmF5Rm9ybVRhYmxlUm93RXJyb3I9XCJsZXQgY29udHJvbFwiPlxuICAgIDx0ZFxuICAgICAgKm5nSWY9XCJjb250cm9sLmludmFsaWRcIlxuICAgICAgY29sc3Bhbj1cIjNcIlxuICAgICAgY2xhc3M9XCJhY2wtdGFibGUtZm9ybS1lcnJvci1oaW50XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC5lcnJvcnM/LmtleUlzTWlzc2luZ1wiPlxuICAgICAgICB7eyAnazhzX3Jlc291cmNlX2xhYmVsX2tleV9yZXF1aXJlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udHJvbC5lcnJvcnM/LmR1cGxpY2F0ZUVycm9yXCI+XG4gICAgICAgIHt7ICdrOHNfcmVzb3VyY2VfbGFiZWxfa2V5X2R1cGxpY2F0ZWQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGFjbC1lcnJvcnMtbWFwcGVyXG4gICAgICAgIGF1aUZvcm1JdGVtRXJyb3JcbiAgICAgICAgW2Vycm9yc109XCJjb250cm9sLmVycm9ycz8ua2V5XCJcbiAgICAgICAgW2Vycm9yc01hcHBlcl09XCJlcnJvck1hcHBlcj8ua2V5XCJcbiAgICAgID48L2FjbC1lcnJvcnMtbWFwcGVyPlxuICAgICAgPGFjbC1lcnJvcnMtbWFwcGVyXG4gICAgICAgIGF1aUZvcm1JdGVtRXJyb3JcbiAgICAgICAgW2Vycm9yc109XCJjb250cm9sLmVycm9ycz8udmFsdWVcIlxuICAgICAgICBbZXJyb3JzTWFwcGVyXT1cImVycm9yTWFwcGVyPy52YWx1ZVwiXG4gICAgICA+PC9hY2wtZXJyb3JzLW1hcHBlcj5cbiAgICA8L3RkPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICphY2xBcnJheUZvcm1UYWJsZVJvd0NvbnRyb2w9XCJsZXQgaXRlbTsgbGV0IGluZGV4ID0gaW5kZXhcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbaGlkZGVuXT1cInJlYWRvbmx5IHx8IGlzTGFiZWxSZWFkb25seShpbmRleClcIlxuICAgICAgYXVpLWJ1dHRvbj1cInRleHRcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbc3F1YXJlXT1cInRydWVcIlxuICAgICAgW3BsYWluXT1cInRydWVcIlxuICAgICAgKGNsaWNrKT1cInJlbW92ZShpbmRleClcIlxuICAgID5cbiAgICAgIDxhdWktaWNvbiBpY29uPVwibWludXNfY2lyY2xlXCI+PC9hdWktaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInplcm9TdGF0ZVRlbXBsYXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqYWNsQXJyYXlGb3JtVGFibGVaZXJvU3RhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiemVyb1N0YXRlVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvYWNsLWFycmF5LWZvcm0tdGFibGU+XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TranslatePipe } from '@alauda-fe/dynamic-plugin-sdk';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
3
|
+
import { PurePipe } from '../../pipes/pure.pipe';
|
|
4
|
+
import { ARRAY_FORM_TABLE_MODULE } from '../form';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../form/component";
|
|
7
|
+
export class KeyValueTableComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.entries = (value) => value != null && Object.entries(value);
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: KeyValueTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: KeyValueTableComponent, isStandalone: true, selector: "acl-key-value-table", inputs: { value: "value", resourceName: "resourceName", resourceNameTranslated: "resourceNameTranslated" }, ngImport: i0, template: "<acl-array-form-table\n [rows]=\"value | pure: entries\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [readonly]=\"true\"\n>\n <ng-container *aclArrayFormTableHeader>\n <th>{{ 'key' | translate }}</th>\n <th>{{ 'value' | translate }}</th>\n </ng-container>\n <ng-container *aclArrayFormTableRow=\"let item\">\n <td>{{ item[0] }}</td>\n <td>{{ item[1] }}</td>\n </ng-container>\n</acl-array-form-table>\n", styles: [":host{width:100%}\n"], dependencies: [{ kind: "component", type: i1.ArrayFormTableComponent, selector: "acl-array-form-table", inputs: ["rowSeparator", "rows", "resourceName", "resourceNameTranslated", "readonly", "addDisabled", "actionColumnDivider", "showZeroState", "showRowError", "rowBackgroundColorFn", "minRow", "minRowTooltip", "maxRow", "maxRowTooltip"], outputs: ["add", "remove"] }, { kind: "directive", type: i1.ArrayFormTableHeaderDirective, selector: "[aclArrayFormTableHeader]" }, { kind: "directive", type: i1.ArrayFormTableRowDirective, selector: "[aclArrayFormTableRow]" }, { kind: "pipe", type: PurePipe, name: "pure" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: KeyValueTableComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ selector: 'acl-key-value-table', standalone: true, imports: [ARRAY_FORM_TABLE_MODULE, PurePipe, TranslatePipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<acl-array-form-table\n [rows]=\"value | pure: entries\"\n [resourceName]=\"resourceName\"\n [resourceNameTranslated]=\"resourceNameTranslated\"\n [readonly]=\"true\"\n>\n <ng-container *aclArrayFormTableHeader>\n <th>{{ 'key' | translate }}</th>\n <th>{{ 'value' | translate }}</th>\n </ng-container>\n <ng-container *aclArrayFormTableRow=\"let item\">\n <td>{{ item[0] }}</td>\n <td>{{ item[1] }}</td>\n </ng-container>\n</acl-array-form-table>\n", styles: [":host{width:100%}\n"] }]
|
|
17
|
+
}], propDecorators: { value: [{
|
|
18
|
+
type: Input
|
|
19
|
+
}], resourceName: [{
|
|
20
|
+
type: Input
|
|
21
|
+
}], resourceNameTranslated: [{
|
|
22
|
+
type: Input
|
|
23
|
+
}] } });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9keW5hbWljLXBsdWdpbi1zaGFyZWQvc3JjL2FycmF5LWZvcm0tdGFibGUva2V5LXZhbHVlLXRhYmxlL2NvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZHluYW1pYy1wbHVnaW4tc2hhcmVkL3NyYy9hcnJheS1mb3JtLXRhYmxlL2tleS12YWx1ZS10YWJsZS90ZW1wbGF0ZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7QUFnQmxELE1BQU0sT0FBTyxzQkFBc0I7SUFkbkM7UUF3QkUsWUFBTyxHQUFHLENBQUMsS0FBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDaEU7OEdBWFksc0JBQXNCO2tHQUF0QixzQkFBc0IsMkxDcEJuQyxzZEFlQSxrbkJERXFDLFFBQVEsd0NBQUUsYUFBYTs7MkZBRy9DLHNCQUFzQjtrQkFkbEMsU0FBUzsrQkFDRSxxQkFBcUIsY0FTbkIsSUFBSSxXQUNQLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLGFBQWEsQ0FBQyxtQkFDMUMsdUJBQXVCLENBQUMsTUFBTTs4QkFJL0MsS0FBSztzQkFESixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixzQkFBc0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQGFsYXVkYS1mZS9keW5hbWljLXBsdWdpbi1zZGsnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUHVyZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9wdXJlLnBpcGUnO1xuaW1wb3J0IHsgQVJSQVlfRk9STV9UQUJMRV9NT0RVTEUgfSBmcm9tICcuLi9mb3JtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYWNsLWtleS12YWx1ZS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAndGVtcGxhdGUuaHRtbCcsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FSUkFZX0ZPUk1fVEFCTEVfTU9EVUxFLCBQdXJlUGlwZSwgVHJhbnNsYXRlUGlwZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBLZXlWYWx1ZVRhYmxlQ29tcG9uZW50PFQ+IHtcbiAgQElucHV0KClcbiAgdmFsdWU6IFQ7XG5cbiAgQElucHV0KClcbiAgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcmVzb3VyY2VOYW1lVHJhbnNsYXRlZDogc3RyaW5nO1xuXG4gIGVudHJpZXMgPSAodmFsdWU6IFQpID0+IHZhbHVlICE9IG51bGwgJiYgT2JqZWN0LmVudHJpZXModmFsdWUpO1xufVxuIiwiPGFjbC1hcnJheS1mb3JtLXRhYmxlXG4gIFtyb3dzXT1cInZhbHVlIHwgcHVyZTogZW50cmllc1wiXG4gIFtyZXNvdXJjZU5hbWVdPVwicmVzb3VyY2VOYW1lXCJcbiAgW3Jlc291cmNlTmFtZVRyYW5zbGF0ZWRdPVwicmVzb3VyY2VOYW1lVHJhbnNsYXRlZFwiXG4gIFtyZWFkb25seV09XCJ0cnVlXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqYWNsQXJyYXlGb3JtVGFibGVIZWFkZXI+XG4gICAgPHRoPnt7ICdrZXknIHwgdHJhbnNsYXRlIH19PC90aD5cbiAgICA8dGg+e3sgJ3ZhbHVlJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICphY2xBcnJheUZvcm1UYWJsZVJvdz1cImxldCBpdGVtXCI+XG4gICAgPHRkPnt7IGl0ZW1bMF0gfX08L3RkPlxuICAgIDx0ZD57eyBpdGVtWzFdIH19PC90ZD5cbiAgPC9uZy1jb250YWluZXI+XG48L2FjbC1hcnJheS1mb3JtLXRhYmxlPlxuIl19
|