@ecodev/natural 41.3.0 → 42.2.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/ecodev-natural.d.ts +1 -9
- package/esm2020/ecodev-natural.mjs +5 -0
- package/esm2020/lib/classes/abstract-controller.mjs +30 -0
- package/esm2020/lib/classes/abstract-detail.mjs +152 -0
- package/esm2020/lib/classes/abstract-editable-list.mjs +96 -0
- package/esm2020/lib/classes/abstract-list.mjs +406 -0
- package/esm2020/lib/classes/abstract-navigable-list.mjs +126 -0
- package/{esm2015/lib/classes/apollo-utils.js → esm2020/lib/classes/apollo-utils.mjs} +0 -0
- package/esm2020/lib/classes/data-source.mjs +76 -0
- package/{esm2015/lib/classes/query-variable-manager-utils.js → esm2020/lib/classes/query-variable-manager-utils.mjs} +0 -0
- package/esm2020/lib/classes/query-variable-manager.mjs +172 -0
- package/{esm2015/lib/classes/rxjs.js → esm2020/lib/classes/rxjs.mjs} +0 -0
- package/{esm2015/lib/classes/tld.js → esm2020/lib/classes/tld.mjs} +0 -0
- package/{esm2015/lib/classes/utility.js → esm2020/lib/classes/utility.mjs} +0 -0
- package/esm2020/lib/classes/validators.mjs +179 -0
- package/esm2020/lib/directives/http-prefix.directive.mjs +50 -0
- package/esm2020/lib/modules/alert/alert.module.mjs +20 -0
- package/esm2020/lib/modules/alert/alert.service.mjs +55 -0
- package/esm2020/lib/modules/alert/confirm.component.mjs +20 -0
- package/{esm2015/lib/modules/alert/public-api.js → esm2020/lib/modules/alert/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/avatar.module.mjs +19 -0
- package/esm2020/lib/modules/avatar/component/avatar.component.mjs +190 -0
- package/{esm2015/lib/modules/avatar/public-api.js → esm2020/lib/modules/avatar/public-api.mjs} +0 -0
- package/esm2020/lib/modules/avatar/service/avatar.service.mjs +66 -0
- package/esm2020/lib/modules/avatar/sources/gravatar.mjs +29 -0
- package/{esm2015/lib/modules/avatar/sources/image.js → esm2020/lib/modules/avatar/sources/image.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/initials.js → esm2020/lib/modules/avatar/sources/initials.mjs} +0 -0
- package/{esm2015/lib/modules/avatar/sources/source.js → esm2020/lib/modules/avatar/sources/source.mjs} +1 -1
- package/esm2020/lib/modules/columns-picker/columns-picker-column.directive.mjs +43 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.component.mjs +84 -0
- package/esm2020/lib/modules/columns-picker/columns-picker.module.mjs +47 -0
- package/{esm2015/lib/modules/columns-picker/public-api.js → esm2020/lib/modules/columns-picker/public-api.mjs} +0 -0
- package/esm2020/lib/modules/common/common-module.mjs +50 -0
- package/esm2020/lib/modules/common/directives/linkable-tab.directive.mjs +79 -0
- package/esm2020/lib/modules/common/directives/src-density.directive.mjs +62 -0
- package/esm2020/lib/modules/common/pipes/capitalize.pipe.mjs +18 -0
- package/esm2020/lib/modules/common/pipes/ellipsis.pipe.mjs +14 -0
- package/esm2020/lib/modules/common/pipes/enum.pipe.mjs +25 -0
- package/esm2020/lib/modules/common/pipes/swiss-date.pipe.mjs +20 -0
- package/esm2020/lib/modules/common/public-api.mjs +13 -0
- package/esm2020/lib/modules/common/services/memory-storage.mjs +112 -0
- package/esm2020/lib/modules/common/services/seo.service.mjs +114 -0
- package/esm2020/lib/modules/detail-header/detail-header.component.mjs +76 -0
- package/esm2020/lib/modules/detail-header/detail-header.module.mjs +21 -0
- package/{esm2015/lib/modules/detail-header/public-api.js → esm2020/lib/modules/detail-header/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.component.mjs +69 -0
- package/esm2020/lib/modules/dialog-trigger/dialog-trigger.module.mjs +19 -0
- package/{esm2015/lib/modules/dialog-trigger/public-api.js → esm2020/lib/modules/dialog-trigger/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +98 -0
- package/esm2020/lib/modules/dropdown-components/natural-dropdown-components.module.mjs +92 -0
- package/{esm2015/lib/modules/dropdown-components/public-api.js → esm2020/lib/modules/dropdown-components/public-api.mjs} +0 -0
- package/esm2020/lib/modules/dropdown-components/type-date/type-date.component.mjs +133 -0
- package/esm2020/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +137 -0
- package/esm2020/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +69 -0
- package/esm2020/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +38 -0
- package/esm2020/lib/modules/dropdown-components/type-number/type-number.component.mjs +104 -0
- package/esm2020/lib/modules/dropdown-components/type-select/type-select.component.mjs +169 -0
- package/esm2020/lib/modules/dropdown-components/type-text/type-text.component.mjs +57 -0
- package/{esm2015/lib/modules/dropdown-components/types.js → esm2020/lib/modules/dropdown-components/types.mjs} +0 -0
- package/{esm2015/lib/modules/dropdown-components/utils.js → esm2020/lib/modules/dropdown-components/utils.mjs} +0 -0
- package/esm2020/lib/modules/file/abstract-file.mjs +231 -0
- package/esm2020/lib/modules/file/component/file.component.mjs +143 -0
- package/esm2020/lib/modules/file/file-drop.directive.mjs +110 -0
- package/esm2020/lib/modules/file/file-select.directive.mjs +28 -0
- package/esm2020/lib/modules/file/file.module.mjs +24 -0
- package/esm2020/lib/modules/file/file.service.mjs +48 -0
- package/{esm2015/lib/modules/file/public-api.js → esm2020/lib/modules/file/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/file/types.js → esm2020/lib/modules/file/types.mjs} +0 -0
- package/{esm2015/lib/modules/file/utils.js → esm2020/lib/modules/file/utils.mjs} +3 -4
- package/esm2020/lib/modules/fixed-button/fixed-button.component.mjs +27 -0
- package/esm2020/lib/modules/fixed-button/fixed-button.module.mjs +21 -0
- package/{esm2015/lib/modules/fixed-button/public-api.js → esm2020/lib/modules/fixed-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +36 -0
- package/esm2020/lib/modules/fixed-button-detail/fixed-button-detail.module.mjs +20 -0
- package/{esm2015/lib/modules/fixed-button-detail/public-api.js → esm2020/lib/modules/fixed-button-detail/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/flat-node.js → esm2020/lib/modules/hierarchic-selector/classes/flat-node.mjs} +1 -1
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.js → esm2020/lib/modules/hierarchic-selector/classes/hierarchic-filters-configuration.mjs} +0 -0
- package/{esm2015/lib/modules/hierarchic-selector/classes/model-node.js → esm2020/lib/modules/hierarchic-selector/classes/model-node.mjs} +1 -1
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +364 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +258 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +31 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +23 -0
- package/esm2020/lib/modules/hierarchic-selector/hierarchic-selector.module.mjs +81 -0
- package/{esm2015/lib/modules/hierarchic-selector/public-api.js → esm2020/lib/modules/hierarchic-selector/public-api.mjs} +0 -0
- package/esm2020/lib/modules/icon/icon.component.mjs +92 -0
- package/esm2020/lib/modules/icon/icon.module.mjs +30 -0
- package/{esm2015/lib/modules/icon/public-api.js → esm2020/lib/modules/icon/public-api.mjs} +0 -0
- package/esm2020/lib/modules/matomo/matomo-module.module.mjs +12 -0
- package/esm2020/lib/modules/matomo/matomo.service.mjs +105 -0
- package/{esm2015/lib/modules/matomo/public-api.js → esm2020/lib/modules/matomo/public-api.mjs} +0 -0
- package/esm2020/lib/modules/panels/abstract-panel.mjs +56 -0
- package/{esm2015/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.js → esm2020/lib/modules/panels/fallback-if-no-opened-panels.urlmatcher.mjs} +0 -0
- package/esm2020/lib/modules/panels/panels.component.mjs +26 -0
- package/esm2020/lib/modules/panels/panels.module.mjs +33 -0
- package/esm2020/lib/modules/panels/panels.service.mjs +325 -0
- package/{esm2015/lib/modules/panels/panels.urlmatcher.js → esm2020/lib/modules/panels/panels.urlmatcher.mjs} +0 -0
- package/{esm2015/lib/modules/panels/public-api.js → esm2020/lib/modules/panels/public-api.mjs} +0 -0
- package/{esm2015/lib/modules/panels/types.js → esm2020/lib/modules/panels/types.mjs} +0 -0
- package/{esm2015/lib/modules/relations/public-api.js → esm2020/lib/modules/relations/public-api.mjs} +0 -0
- package/esm2020/lib/modules/relations/relations.component.mjs +198 -0
- package/esm2020/lib/modules/relations/relations.module.mjs +58 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.js → esm2020/lib/modules/search/classes/graphql-doctrine.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/graphql-doctrine.types.js → esm2020/lib/modules/search/classes/graphql-doctrine.types.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/transformers.js → esm2020/lib/modules/search/classes/transformers.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/url.js → esm2020/lib/modules/search/classes/url.mjs} +0 -0
- package/{esm2015/lib/modules/search/classes/utils.js → esm2020/lib/modules/search/classes/utils.mjs} +0 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-container-animations.js → esm2020/lib/modules/search/dropdown-container/dropdown-container-animations.mjs} +0 -0
- package/esm2020/lib/modules/search/dropdown-container/dropdown-container.component.mjs +88 -0
- package/{esm2015/lib/modules/search/dropdown-container/dropdown-ref.js → esm2020/lib/modules/search/dropdown-container/dropdown-ref.mjs} +1 -1
- package/esm2020/lib/modules/search/dropdown-container/dropdown.service.mjs +93 -0
- package/esm2020/lib/modules/search/facet-selector/facet-selector.component.mjs +50 -0
- package/esm2020/lib/modules/search/group/group.component.mjs +45 -0
- package/esm2020/lib/modules/search/input/input.component.mjs +328 -0
- package/{esm2015/lib/modules/search/public-api.js → esm2020/lib/modules/search/public-api.mjs} +0 -0
- package/esm2020/lib/modules/search/search/search.component.mjs +78 -0
- package/esm2020/lib/modules/search/search.module.mjs +84 -0
- package/{esm2015/lib/modules/search/types/dropdown-component.js → esm2020/lib/modules/search/types/dropdown-component.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs} +0 -0
- package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs} +0 -0
- package/esm2020/lib/modules/select/abstract-select.component.mjs +186 -0
- package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs} +0 -0
- package/esm2020/lib/modules/select/select/select.component.mjs +207 -0
- package/esm2020/lib/modules/select/select-enum/select-enum.component.mjs +47 -0
- package/esm2020/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +127 -0
- package/esm2020/lib/modules/select/select.module.mjs +68 -0
- package/{esm2015/lib/modules/sidenav/public-api.js → esm2020/lib/modules/sidenav/public-api.mjs} +0 -0
- package/esm2020/lib/modules/sidenav/sidenav/sidenav.component.mjs +15 -0
- package/esm2020/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +87 -0
- package/esm2020/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +12 -0
- package/esm2020/lib/modules/sidenav/sidenav-stack.service.mjs +52 -0
- package/esm2020/lib/modules/sidenav/sidenav.module.mjs +25 -0
- package/esm2020/lib/modules/sidenav/sidenav.service.mjs +195 -0
- package/{esm2015/lib/modules/stamp/public-api.js → esm2020/lib/modules/stamp/public-api.mjs} +0 -0
- package/esm2020/lib/modules/stamp/stamp-module.module.mjs +18 -0
- package/esm2020/lib/modules/stamp/stamp.component.mjs +14 -0
- package/{esm2015/lib/modules/table-button/public-api.js → esm2020/lib/modules/table-button/public-api.mjs} +0 -0
- package/esm2020/lib/modules/table-button/table-button.component.mjs +48 -0
- package/esm2020/lib/modules/table-button/table-button.module.mjs +21 -0
- package/esm2020/lib/services/abstract-model.service.mjs +509 -0
- package/esm2020/lib/services/enum.service.mjs +67 -0
- package/esm2020/lib/services/link-mutation.service.mjs +153 -0
- package/esm2020/lib/services/persistence.service.mjs +113 -0
- package/esm2020/lib/services/swiss-parsing-date-adapter.service.mjs +55 -0
- package/{esm2015/lib/types/types.js → esm2020/lib/types/types.mjs} +0 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/{ecodev-natural.js → ecodev-natural.mjs} +2808 -2392
- package/fesm2015/ecodev-natural.mjs.map +1 -0
- package/fesm2020/ecodev-natural.mjs +10495 -0
- package/fesm2020/ecodev-natural.mjs.map +1 -0
- package/lib/classes/abstract-controller.d.ts +3 -0
- package/lib/classes/abstract-detail.d.ts +3 -0
- package/lib/classes/abstract-editable-list.d.ts +3 -0
- package/lib/classes/abstract-list.d.ts +3 -0
- package/lib/classes/abstract-navigable-list.d.ts +3 -0
- package/lib/classes/query-variable-manager.d.ts +19 -8
- package/lib/directives/http-prefix.directive.d.ts +3 -0
- package/lib/modules/alert/alert.module.d.ts +9 -0
- package/lib/modules/alert/alert.service.d.ts +3 -0
- package/lib/modules/alert/confirm.component.d.ts +3 -0
- package/lib/modules/avatar/avatar.module.d.ts +6 -0
- package/lib/modules/avatar/component/avatar.component.d.ts +4 -0
- package/lib/modules/avatar/service/avatar.service.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker-column.directive.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.component.d.ts +3 -0
- package/lib/modules/columns-picker/columns-picker.module.d.ts +13 -0
- package/lib/modules/common/common-module.d.ts +15 -0
- package/lib/modules/common/directives/linkable-tab.directive.d.ts +3 -0
- package/lib/modules/common/directives/src-density.directive.d.ts +3 -0
- package/lib/modules/common/pipes/capitalize.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/ellipsis.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/enum.pipe.d.ts +3 -0
- package/lib/modules/common/pipes/swiss-date.pipe.d.ts +3 -0
- package/lib/modules/common/public-api.d.ts +0 -1
- package/lib/modules/common/services/memory-storage.d.ts +3 -0
- package/lib/modules/common/services/seo.service.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.component.d.ts +3 -0
- package/lib/modules/detail-header/detail-header.module.d.ts +9 -0
- package/lib/modules/dialog-trigger/dialog-trigger.component.d.ts +3 -0
- package/lib/modules/dialog-trigger/dialog-trigger.module.d.ts +7 -0
- package/lib/modules/dropdown-components/abstract-association-select-component.directive.d.ts +3 -0
- package/lib/modules/dropdown-components/natural-dropdown-components.module.d.ts +22 -0
- package/lib/modules/dropdown-components/type-date/type-date.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-date-range/type-date-range.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-number/type-number.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-select/type-select.component.d.ts +3 -0
- package/lib/modules/dropdown-components/type-text/type-text.component.d.ts +3 -0
- package/lib/modules/file/abstract-file.d.ts +3 -0
- package/lib/modules/file/component/file.component.d.ts +3 -0
- package/lib/modules/file/file-drop.directive.d.ts +3 -0
- package/lib/modules/file/file-select.directive.d.ts +3 -0
- package/lib/modules/file/file.module.d.ts +11 -0
- package/lib/modules/file/file.service.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.component.d.ts +3 -0
- package/lib/modules/fixed-button/fixed-button.module.d.ts +9 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.component.d.ts +3 -0
- package/lib/modules/fixed-button-detail/fixed-button-detail.module.d.ts +8 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.d.ts +3 -0
- package/lib/modules/hierarchic-selector/hierarchic-selector.module.d.ts +21 -0
- package/lib/modules/icon/icon.component.d.ts +3 -0
- package/lib/modules/icon/icon.module.d.ts +7 -0
- package/lib/modules/matomo/matomo-module.module.d.ts +4 -0
- package/lib/modules/matomo/matomo.service.d.ts +3 -0
- package/lib/modules/panels/abstract-panel.d.ts +3 -0
- package/lib/modules/panels/panels.component.d.ts +3 -0
- package/lib/modules/panels/panels.module.d.ts +8 -0
- package/lib/modules/panels/panels.service.d.ts +3 -0
- package/lib/modules/relations/relations.component.d.ts +3 -0
- package/lib/modules/relations/relations.module.d.ts +15 -0
- package/lib/modules/search/dropdown-container/dropdown-container.component.d.ts +3 -0
- package/lib/modules/search/dropdown-container/dropdown-ref.d.ts +1 -1
- package/lib/modules/search/dropdown-container/dropdown.service.d.ts +3 -0
- package/lib/modules/search/facet-selector/facet-selector.component.d.ts +3 -0
- package/lib/modules/search/group/group.component.d.ts +3 -0
- package/lib/modules/search/input/input.component.d.ts +3 -0
- package/lib/modules/search/search/search.component.d.ts +3 -0
- package/lib/modules/search/search.module.d.ts +19 -0
- package/lib/modules/select/abstract-select.component.d.ts +4 -1
- package/lib/modules/select/select/select.component.d.ts +3 -0
- package/lib/modules/select/select-enum/select-enum.component.d.ts +9 -2
- package/lib/modules/select/select-hierarchic/select-hierarchic.component.d.ts +3 -0
- package/lib/modules/select/select.module.d.ts +19 -0
- package/lib/modules/sidenav/sidenav/sidenav.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-container/sidenav-container.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-content/sidenav-content.component.d.ts +3 -0
- package/lib/modules/sidenav/sidenav-stack.service.d.ts +4 -1
- package/lib/modules/sidenav/sidenav.module.d.ts +11 -0
- package/lib/modules/sidenav/sidenav.service.d.ts +3 -0
- package/lib/modules/stamp/stamp-module.module.d.ts +6 -0
- package/lib/modules/stamp/stamp.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.component.d.ts +3 -0
- package/lib/modules/table-button/table-button.module.d.ts +9 -0
- package/lib/services/enum.service.d.ts +3 -0
- package/lib/services/link-mutation.service.d.ts +3 -0
- package/lib/services/persistence.service.d.ts +3 -0
- package/lib/services/swiss-parsing-date-adapter.service.d.ts +4 -1
- package/package.json +25 -12
- package/src/lib/modules/alert/_alert.theme.scss +1 -1
- package/src/lib/modules/file/component/_file.theme.scss +1 -1
- package/src/lib/modules/icon/_icon.theme.scss +1 -1
- package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +1 -1
- package/src/lib/modules/table-button/_table-button.theme.scss +1 -1
- package/src/lib/styles/_table.scss +1 -1
- package/theming/_natural.theme.scss +1 -1
- package/bundles/ecodev-natural.umd.js +0 -11318
- package/bundles/ecodev-natural.umd.js.map +0 -1
- package/ecodev-natural.metadata.json +0 -1
- package/esm2015/ecodev-natural.js +0 -14
- package/esm2015/lib/classes/abstract-controller.js +0 -29
- package/esm2015/lib/classes/abstract-detail.js +0 -157
- package/esm2015/lib/classes/abstract-editable-list.js +0 -97
- package/esm2015/lib/classes/abstract-list.js +0 -409
- package/esm2015/lib/classes/abstract-navigable-list.js +0 -126
- package/esm2015/lib/classes/data-source.js +0 -76
- package/esm2015/lib/classes/query-variable-manager.js +0 -161
- package/esm2015/lib/classes/validators.js +0 -176
- package/esm2015/lib/directives/http-prefix.directive.js +0 -46
- package/esm2015/lib/modules/alert/alert.module.js +0 -15
- package/esm2015/lib/modules/alert/alert.service.js +0 -59
- package/esm2015/lib/modules/alert/confirm.component.js +0 -17
- package/esm2015/lib/modules/avatar/avatar.module.js +0 -14
- package/esm2015/lib/modules/avatar/component/avatar.component.js +0 -158
- package/esm2015/lib/modules/avatar/service/avatar.service.js +0 -65
- package/esm2015/lib/modules/avatar/sources/gravatar.js +0 -29
- package/esm2015/lib/modules/columns-picker/columns-picker-column.directive.js +0 -41
- package/esm2015/lib/modules/columns-picker/columns-picker.component.js +0 -82
- package/esm2015/lib/modules/columns-picker/columns-picker.module.js +0 -28
- package/esm2015/lib/modules/common/common-module.js +0 -35
- package/esm2015/lib/modules/common/directives/linkable-tab.directive.js +0 -82
- package/esm2015/lib/modules/common/directives/reactive-asterisk.directive.js +0 -31
- package/esm2015/lib/modules/common/directives/src-density.directive.js +0 -63
- package/esm2015/lib/modules/common/pipes/capitalize.pipe.js +0 -14
- package/esm2015/lib/modules/common/pipes/ellipsis.pipe.js +0 -10
- package/esm2015/lib/modules/common/pipes/enum.pipe.js +0 -24
- package/esm2015/lib/modules/common/pipes/swiss-date.pipe.js +0 -16
- package/esm2015/lib/modules/common/public-api.js +0 -14
- package/esm2015/lib/modules/common/services/memory-storage.js +0 -110
- package/esm2015/lib/modules/common/services/seo.service.js +0 -120
- package/esm2015/lib/modules/detail-header/detail-header.component.js +0 -63
- package/esm2015/lib/modules/detail-header/detail-header.module.js +0 -16
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.component.js +0 -68
- package/esm2015/lib/modules/dialog-trigger/dialog-trigger.module.js +0 -14
- package/esm2015/lib/modules/dropdown-components/abstract-association-select-component.directive.js +0 -96
- package/esm2015/lib/modules/dropdown-components/natural-dropdown-components.module.js +0 -51
- package/esm2015/lib/modules/dropdown-components/type-date/type-date.component.js +0 -123
- package/esm2015/lib/modules/dropdown-components/type-date-range/type-date-range.component.js +0 -128
- package/esm2015/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.js +0 -63
- package/esm2015/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.js +0 -31
- package/esm2015/lib/modules/dropdown-components/type-number/type-number.component.js +0 -99
- package/esm2015/lib/modules/dropdown-components/type-select/type-select.component.js +0 -161
- package/esm2015/lib/modules/dropdown-components/type-text/type-text.component.js +0 -53
- package/esm2015/lib/modules/file/abstract-file.js +0 -223
- package/esm2015/lib/modules/file/component/file.component.js +0 -133
- package/esm2015/lib/modules/file/file-drop.directive.js +0 -99
- package/esm2015/lib/modules/file/file-select.directive.js +0 -25
- package/esm2015/lib/modules/file/file.module.js +0 -19
- package/esm2015/lib/modules/file/file.service.js +0 -47
- package/esm2015/lib/modules/fixed-button/fixed-button.component.js +0 -23
- package/esm2015/lib/modules/fixed-button/fixed-button.module.js +0 -16
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.component.js +0 -31
- package/esm2015/lib/modules/fixed-button-detail/fixed-button-detail.module.js +0 -15
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.js +0 -351
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.js +0 -258
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.js +0 -28
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.js +0 -23
- package/esm2015/lib/modules/hierarchic-selector/hierarchic-selector.module.js +0 -46
- package/esm2015/lib/modules/icon/icon.component.js +0 -78
- package/esm2015/lib/modules/icon/icon.module.js +0 -25
- package/esm2015/lib/modules/matomo/matomo-module.module.js +0 -7
- package/esm2015/lib/modules/matomo/matomo.service.js +0 -106
- package/esm2015/lib/modules/panels/abstract-panel.js +0 -50
- package/esm2015/lib/modules/panels/panels.component.js +0 -26
- package/esm2015/lib/modules/panels/panels.module.js +0 -28
- package/esm2015/lib/modules/panels/panels.service.js +0 -331
- package/esm2015/lib/modules/relations/relations.component.js +0 -181
- package/esm2015/lib/modules/relations/relations.module.js +0 -33
- package/esm2015/lib/modules/search/dropdown-container/dropdown-container.component.js +0 -87
- package/esm2015/lib/modules/search/dropdown-container/dropdown.service.js +0 -95
- package/esm2015/lib/modules/search/facet-selector/facet-selector.component.js +0 -47
- package/esm2015/lib/modules/search/group/group.component.js +0 -39
- package/esm2015/lib/modules/search/input/input.component.js +0 -316
- package/esm2015/lib/modules/search/search/search.component.js +0 -71
- package/esm2015/lib/modules/search/search.module.js +0 -52
- package/esm2015/lib/modules/select/abstract-select.component.js +0 -176
- package/esm2015/lib/modules/select/select/select.component.js +0 -190
- package/esm2015/lib/modules/select/select-enum/select-enum.component.js +0 -34
- package/esm2015/lib/modules/select/select-hierarchic/select-hierarchic.component.js +0 -120
- package/esm2015/lib/modules/select/select.module.js +0 -39
- package/esm2015/lib/modules/sidenav/sidenav/sidenav.component.js +0 -12
- package/esm2015/lib/modules/sidenav/sidenav-container/sidenav-container.component.js +0 -79
- package/esm2015/lib/modules/sidenav/sidenav-content/sidenav-content.component.js +0 -13
- package/esm2015/lib/modules/sidenav/sidenav-stack.service.js +0 -50
- package/esm2015/lib/modules/sidenav/sidenav.module.js +0 -20
- package/esm2015/lib/modules/sidenav/sidenav.service.js +0 -199
- package/esm2015/lib/modules/stamp/stamp-module.module.js +0 -13
- package/esm2015/lib/modules/stamp/stamp.component.js +0 -13
- package/esm2015/lib/modules/table-button/table-button.component.js +0 -38
- package/esm2015/lib/modules/table-button/table-button.module.js +0 -16
- package/esm2015/lib/services/abstract-model.service.js +0 -509
- package/esm2015/lib/services/enum.service.js +0 -68
- package/esm2015/lib/services/link-mutation.service.js +0 -155
- package/esm2015/lib/services/persistence.service.js +0 -114
- package/esm2015/lib/services/swiss-parsing-date-adapter.service.js +0 -55
- package/fesm2015/ecodev-natural.js.map +0 -1
- package/lib/modules/common/directives/reactive-asterisk.directive.d.ts +0 -10
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
2
|
+
import { PortalModule } from '@angular/cdk/portal';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { NgModule } from '@angular/core';
|
|
5
|
+
import { ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
7
|
+
import { MatRippleModule } from '@angular/material/core';
|
|
8
|
+
import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
|
|
9
|
+
import { MatInputModule } from '@angular/material/input';
|
|
10
|
+
import { MatListModule } from '@angular/material/list';
|
|
11
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
12
|
+
import { NaturalIconModule } from '../icon/icon.module';
|
|
13
|
+
import { NaturalDropdownContainerComponent } from './dropdown-container/dropdown-container.component';
|
|
14
|
+
import { FacetSelectorComponent } from './facet-selector/facet-selector.component';
|
|
15
|
+
import { NaturalGroupComponent } from './group/group.component';
|
|
16
|
+
import { NaturalInputComponent } from './input/input.component';
|
|
17
|
+
import { NaturalSearchComponent } from './search/search.component';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
export class NaturalSearchModule {
|
|
20
|
+
}
|
|
21
|
+
NaturalSearchModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
22
|
+
NaturalSearchModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalSearchModule, declarations: [NaturalSearchComponent,
|
|
23
|
+
NaturalGroupComponent,
|
|
24
|
+
NaturalInputComponent,
|
|
25
|
+
NaturalDropdownContainerComponent,
|
|
26
|
+
FacetSelectorComponent], imports: [CommonModule,
|
|
27
|
+
ReactiveFormsModule,
|
|
28
|
+
MatInputModule,
|
|
29
|
+
MatButtonModule,
|
|
30
|
+
MatMenuModule,
|
|
31
|
+
MatRippleModule,
|
|
32
|
+
PortalModule,
|
|
33
|
+
OverlayModule,
|
|
34
|
+
MatListModule,
|
|
35
|
+
NaturalIconModule], exports: [NaturalSearchComponent] });
|
|
36
|
+
NaturalSearchModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalSearchModule, providers: [
|
|
37
|
+
{
|
|
38
|
+
provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,
|
|
39
|
+
useValue: { appearance: 'fill' },
|
|
40
|
+
},
|
|
41
|
+
], imports: [[
|
|
42
|
+
CommonModule,
|
|
43
|
+
ReactiveFormsModule,
|
|
44
|
+
MatInputModule,
|
|
45
|
+
MatButtonModule,
|
|
46
|
+
MatMenuModule,
|
|
47
|
+
MatRippleModule,
|
|
48
|
+
PortalModule,
|
|
49
|
+
OverlayModule,
|
|
50
|
+
MatListModule,
|
|
51
|
+
NaturalIconModule,
|
|
52
|
+
]] });
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalSearchModule, decorators: [{
|
|
54
|
+
type: NgModule,
|
|
55
|
+
args: [{
|
|
56
|
+
declarations: [
|
|
57
|
+
NaturalSearchComponent,
|
|
58
|
+
NaturalGroupComponent,
|
|
59
|
+
NaturalInputComponent,
|
|
60
|
+
NaturalDropdownContainerComponent,
|
|
61
|
+
FacetSelectorComponent,
|
|
62
|
+
],
|
|
63
|
+
exports: [NaturalSearchComponent],
|
|
64
|
+
imports: [
|
|
65
|
+
CommonModule,
|
|
66
|
+
ReactiveFormsModule,
|
|
67
|
+
MatInputModule,
|
|
68
|
+
MatButtonModule,
|
|
69
|
+
MatMenuModule,
|
|
70
|
+
MatRippleModule,
|
|
71
|
+
PortalModule,
|
|
72
|
+
OverlayModule,
|
|
73
|
+
MatListModule,
|
|
74
|
+
NaturalIconModule,
|
|
75
|
+
],
|
|
76
|
+
providers: [
|
|
77
|
+
{
|
|
78
|
+
provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,
|
|
79
|
+
useValue: { appearance: 'fill' },
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
}]
|
|
83
|
+
}] });
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlYXJjaC9zZWFyY2gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsaUNBQWlDLEVBQUMsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7QUE4QmpFLE1BQU0sT0FBTyxtQkFBbUI7O2dIQUFuQixtQkFBbUI7aUhBQW5CLG1CQUFtQixpQkExQnhCLHNCQUFzQjtRQUN0QixxQkFBcUI7UUFDckIscUJBQXFCO1FBQ3JCLGlDQUFpQztRQUNqQyxzQkFBc0IsYUFJdEIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixjQUFjO1FBQ2QsZUFBZTtRQUNmLGFBQWE7UUFDYixlQUFlO1FBQ2YsWUFBWTtRQUNaLGFBQWE7UUFDYixhQUFhO1FBQ2IsaUJBQWlCLGFBWFgsc0JBQXNCO2lIQW9CdkIsbUJBQW1CLGFBUGpCO1FBQ1A7WUFDSSxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLFFBQVEsRUFBRSxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7U0FDakM7S0FDSixZQWpCUTtZQUNMLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsY0FBYztZQUNkLGVBQWU7WUFDZixhQUFhO1lBQ2IsZUFBZTtZQUNmLFlBQVk7WUFDWixhQUFhO1lBQ2IsYUFBYTtZQUNiLGlCQUFpQjtTQUNwQjsyRkFRUSxtQkFBbUI7a0JBNUIvQixRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRTt3QkFDVixzQkFBc0I7d0JBQ3RCLHFCQUFxQjt3QkFDckIscUJBQXFCO3dCQUNyQixpQ0FBaUM7d0JBQ2pDLHNCQUFzQjtxQkFDekI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixpQkFBaUI7cUJBQ3BCO29CQUNELFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsOEJBQThCOzRCQUN2QyxRQUFRLEVBQUUsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDO3lCQUNqQztxQkFDSjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T3ZlcmxheU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtQb3J0YWxNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRCdXR0b25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQge01hdFJpcHBsZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge01BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OU30gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQge01hdExpc3RNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHtNYXRNZW51TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7TmF0dXJhbEljb25Nb2R1bGV9IGZyb20gJy4uL2ljb24vaWNvbi5tb2R1bGUnO1xuaW1wb3J0IHtOYXR1cmFsRHJvcGRvd25Db250YWluZXJDb21wb25lbnR9IGZyb20gJy4vZHJvcGRvd24tY29udGFpbmVyL2Ryb3Bkb3duLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtGYWNldFNlbGVjdG9yQ29tcG9uZW50fSBmcm9tICcuL2ZhY2V0LXNlbGVjdG9yL2ZhY2V0LXNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge05hdHVyYWxHcm91cENvbXBvbmVudH0gZnJvbSAnLi9ncm91cC9ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHtOYXR1cmFsSW5wdXRDb21wb25lbnR9IGZyb20gJy4vaW5wdXQvaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaENvbXBvbmVudH0gZnJvbSAnLi9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIE5hdHVyYWxTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIE5hdHVyYWxHcm91cENvbXBvbmVudCxcbiAgICAgICAgTmF0dXJhbElucHV0Q29tcG9uZW50LFxuICAgICAgICBOYXR1cmFsRHJvcGRvd25Db250YWluZXJDb21wb25lbnQsXG4gICAgICAgIEZhY2V0U2VsZWN0b3JDb21wb25lbnQsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbTmF0dXJhbFNlYXJjaENvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgICAgIE1hdFJpcHBsZU1vZHVsZSxcbiAgICAgICAgUG9ydGFsTW9kdWxlLFxuICAgICAgICBPdmVybGF5TW9kdWxlLFxuICAgICAgICBNYXRMaXN0TW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbk1vZHVsZSxcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMsXG4gICAgICAgICAgICB1c2VWYWx1ZToge2FwcGVhcmFuY2U6ICdmaWxsJ30sXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFNlYXJjaE1vZHVsZSB7fVxuIl19
|
|
File without changes
|
package/{esm2015/lib/modules/search/types/facet.js → esm2020/lib/modules/search/types/facet.mjs}
RENAMED
|
File without changes
|
package/{esm2015/lib/modules/search/types/values.js → esm2020/lib/modules/search/types/values.mjs}
RENAMED
|
File without changes
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
2
|
+
import { Directive, EventEmitter, Input, Optional, Output, Self } from '@angular/core';
|
|
3
|
+
import { FormControl, FormControlDirective, FormControlName, Validators, } from '@angular/forms';
|
|
4
|
+
import { ErrorStateMatcher } from '@angular/material/core';
|
|
5
|
+
import { NaturalAbstractController } from '../../classes/abstract-controller';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
/**
|
|
9
|
+
* This will completely ignore internal formControl and instead use the one from the component
|
|
10
|
+
* which comes from outside of this component. This basically allows us to **not** depend on
|
|
11
|
+
* touched status propagation between outside and inside world, and thus get rid of our legacy
|
|
12
|
+
* custom FormControl class ("NaturalFormControl").
|
|
13
|
+
*/
|
|
14
|
+
class ExternalFormControlMatcher extends ErrorStateMatcher {
|
|
15
|
+
constructor(component) {
|
|
16
|
+
super();
|
|
17
|
+
this.component = component;
|
|
18
|
+
}
|
|
19
|
+
isErrorState(control, form) {
|
|
20
|
+
const externalCtrl = this.component.ngControl?.control || this.component.internalCtrl;
|
|
21
|
+
if (externalCtrl) {
|
|
22
|
+
return !!(externalCtrl.errors && (externalCtrl.touched || externalCtrl.dirty));
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class AbstractSelect extends NaturalAbstractController {
|
|
28
|
+
constructor(ngControl) {
|
|
29
|
+
super();
|
|
30
|
+
this.ngControl = ngControl;
|
|
31
|
+
this.floatPlaceholder = 'auto';
|
|
32
|
+
/**
|
|
33
|
+
* Whether to show the search icon
|
|
34
|
+
*/
|
|
35
|
+
this.showIcon = true;
|
|
36
|
+
/**
|
|
37
|
+
* Icon name
|
|
38
|
+
*/
|
|
39
|
+
this.icon = 'search';
|
|
40
|
+
/**
|
|
41
|
+
* Emit the selected value whenever it changes
|
|
42
|
+
*/
|
|
43
|
+
this.selectionChange = new EventEmitter();
|
|
44
|
+
/**
|
|
45
|
+
* Emits when internal input is blurred
|
|
46
|
+
*/
|
|
47
|
+
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
48
|
+
this.blur = new EventEmitter();
|
|
49
|
+
/**
|
|
50
|
+
* Contains internal representation for current selection.
|
|
51
|
+
*
|
|
52
|
+
* It is **not** necessarily `V | null`.
|
|
53
|
+
*
|
|
54
|
+
* - NaturalSelectComponent: `string | V | null`. We allow `string`
|
|
55
|
+
* only when `optionRequired` is false, so most of the time it is `V | null`.
|
|
56
|
+
* - NaturalSelectHierarchicComponent: `string | null`.
|
|
57
|
+
* - NaturalSelectEnumComponent: `V | null`.
|
|
58
|
+
*/
|
|
59
|
+
this.internalCtrl = new FormControl();
|
|
60
|
+
if (this.ngControl) {
|
|
61
|
+
this.ngControl.valueAccessor = this;
|
|
62
|
+
}
|
|
63
|
+
this.matcher = new ExternalFormControlMatcher(this);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* If the field is required
|
|
67
|
+
*/
|
|
68
|
+
set required(value) {
|
|
69
|
+
this._required = coerceBooleanProperty(value);
|
|
70
|
+
this.applyRequired();
|
|
71
|
+
}
|
|
72
|
+
get required() {
|
|
73
|
+
return !!this._required;
|
|
74
|
+
}
|
|
75
|
+
ngDoCheck() {
|
|
76
|
+
if (this.ngControl) {
|
|
77
|
+
this.applyRequired();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
writeValue(value) {
|
|
81
|
+
this.internalCtrl.setValue(value);
|
|
82
|
+
}
|
|
83
|
+
ngOnInit() {
|
|
84
|
+
const isReactive = this.ngControl instanceof FormControlDirective || this.ngControl instanceof FormControlName;
|
|
85
|
+
if (isReactive && typeof this._required !== 'undefined') {
|
|
86
|
+
console.warn('<natural-select-*> should not be used as ReactiveForm and with the [required] attribute');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Whether the value can be changed
|
|
91
|
+
*/
|
|
92
|
+
set disabled(disabled) {
|
|
93
|
+
disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();
|
|
94
|
+
}
|
|
95
|
+
registerOnChange(fn) {
|
|
96
|
+
this.onChange = fn;
|
|
97
|
+
}
|
|
98
|
+
registerOnTouched(fn) {
|
|
99
|
+
this.onTouched = fn;
|
|
100
|
+
}
|
|
101
|
+
clear(emitEvent = true) {
|
|
102
|
+
// Empty input
|
|
103
|
+
this.internalCtrl.setValue(null, { emitEvent: emitEvent });
|
|
104
|
+
// propagateValue change
|
|
105
|
+
if (emitEvent) {
|
|
106
|
+
this.propagateValue(null);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
propagateValue(value) {
|
|
110
|
+
// before selectionChange to allow formControl to update before change is effectively emitted
|
|
111
|
+
if (this.onChange) {
|
|
112
|
+
this.onChange(value);
|
|
113
|
+
}
|
|
114
|
+
this.selectionChange.emit(value);
|
|
115
|
+
}
|
|
116
|
+
setDisabledState(isDisabled) {
|
|
117
|
+
this.disabled = isDisabled;
|
|
118
|
+
}
|
|
119
|
+
showClearButton() {
|
|
120
|
+
return this.internalCtrl?.enabled && this.clearLabel && this.internalCtrl.value;
|
|
121
|
+
}
|
|
122
|
+
touch() {
|
|
123
|
+
if (this.onTouched) {
|
|
124
|
+
this.onTouched();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
hasRequiredError() {
|
|
128
|
+
const control = this.ngControl?.control ? this.ngControl?.control : this.internalCtrl;
|
|
129
|
+
return control.hasError('required');
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Apply Validators.required on the internal form, based on ngControl or [required] attribute, giving priority to attribute.
|
|
133
|
+
*/
|
|
134
|
+
applyRequired() {
|
|
135
|
+
// Required status on parent validator
|
|
136
|
+
const outerRequiredStatus = this?.ngControl?.control?.validator?.({})?.required;
|
|
137
|
+
// Wanted required status, giving priority to template
|
|
138
|
+
const newRequiredStatus = typeof this._required !== 'undefined' ? this._required : outerRequiredStatus;
|
|
139
|
+
// Actual internal validation status
|
|
140
|
+
const currentRequiredStatus = this.internalCtrl?.validator?.({})?.required;
|
|
141
|
+
// If wanted status is similar to actual status, stop everything
|
|
142
|
+
if (currentRequiredStatus === newRequiredStatus) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Apply only if changed
|
|
146
|
+
if (newRequiredStatus) {
|
|
147
|
+
this.internalCtrl.setValidators(Validators.required);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
this.internalCtrl.clearValidators();
|
|
151
|
+
}
|
|
152
|
+
this.internalCtrl.updateValueAndValidity();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
AbstractSelect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: AbstractSelect, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
156
|
+
AbstractSelect.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.0", type: AbstractSelect, inputs: { placeholder: "placeholder", floatPlaceholder: "floatPlaceholder", required: "required", navigateTo: "navigateTo", clearLabel: "clearLabel", showIcon: "showIcon", icon: "icon", displayWith: "displayWith", disabled: "disabled" }, outputs: { selectionChange: "selectionChange", blur: "blur" }, usesInheritance: true, ngImport: i0 });
|
|
157
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: AbstractSelect, decorators: [{
|
|
158
|
+
type: Directive
|
|
159
|
+
}], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
|
|
160
|
+
type: Optional
|
|
161
|
+
}, {
|
|
162
|
+
type: Self
|
|
163
|
+
}] }]; }, propDecorators: { placeholder: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], floatPlaceholder: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], required: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], navigateTo: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], clearLabel: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], showIcon: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], icon: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], displayWith: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], selectionChange: [{
|
|
180
|
+
type: Output
|
|
181
|
+
}], blur: [{
|
|
182
|
+
type: Output
|
|
183
|
+
}], disabled: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}] } });
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9hYnN0cmFjdC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxTQUFTLEVBQVcsWUFBWSxFQUFFLEtBQUssRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUdILFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsZUFBZSxFQUlmLFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBRXpELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDOzs7QUFFNUU7Ozs7O0dBS0c7QUFDSCxNQUFNLDBCQUE4QixTQUFRLGlCQUFpQjtJQUN6RCxZQUFvQyxTQUE0QjtRQUM1RCxLQUFLLEVBQUUsQ0FBQztRQUR3QixjQUFTLEdBQVQsU0FBUyxDQUFtQjtJQUVoRSxDQUFDO0lBRU0sWUFBWSxDQUFDLE9BQTJCLEVBQUUsSUFBd0M7UUFDckYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQ3RGLElBQUksWUFBWSxFQUFFO1lBQ2QsT0FBTyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNsRjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FD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WSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDL0MsQ0FBQzs7MkdBbE1pQixjQUFjOytGQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEbkMsU0FBUzs7MEJBcUZjLFFBQVE7OzBCQUFJLElBQUk7NENBaEZwQixXQUFXO3NCQUExQixLQUFLO2dCQUNVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFNSyxRQUFRO3NCQURsQixLQUFLO2dCQWVVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxRQUFRO3NCQUF2QixLQUFLO2dCQUtVLElBQUk7c0JBQW5CLEtBQUs7Z0JBS1UsV0FBVztzQkFBMUIsS0FBSztnQkFLb0IsZUFBZTtzQkFBeEMsTUFBTTtnQkFNbUIsSUFBSTtzQkFBN0IsTUFBTTtnQkEyREksUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtEaXJlY3RpdmUsIERvQ2hlY2ssIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBTZWxmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQWJzdHJhY3RDb250cm9sLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Db250cm9sRGlyZWN0aXZlLFxuICAgIEZvcm1Db250cm9sTmFtZSxcbiAgICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgTmdDb250cm9sLFxuICAgIE5nRm9ybSxcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0Vycm9yU3RhdGVNYXRjaGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7RmxvYXRMYWJlbFR5cGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtOYXR1cmFsQWJzdHJhY3RDb250cm9sbGVyfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Fic3RyYWN0LWNvbnRyb2xsZXInO1xuXG4vKipcbiAqIFRoaXMgd2lsbCBjb21wbGV0ZWx5IGlnbm9yZSBpbnRlcm5hbCBmb3JtQ29udHJvbCBhbmQgaW5zdGVhZCB1c2UgdGhlIG9uZSBmcm9tIHRoZSBjb21wb25lbnRcbiAqIHdoaWNoIGNvbWVzIGZyb20gb3V0c2lkZSBvZiB0aGlzIGNvbXBvbmVudC4gVGhpcyBiYXNpY2FsbHkgYWxsb3dzIHVzIHRvICoqbm90KiogZGVwZW5kIG9uXG4gKiB0b3VjaGVkIHN0YXR1cyBwcm9wYWdhdGlvbiBiZXR3ZWVuIG91dHNpZGUgYW5kIGluc2lkZSB3b3JsZCwgYW5kIHRodXMgZ2V0IHJpZCBvZiBvdXIgbGVnYWN5XG4gKiBjdXN0b20gRm9ybUNvbnRyb2wgY2xhc3MgKFwiTmF0dXJhbEZvcm1Db250cm9sXCIpLlxuICovXG5jbGFzcyBFeHRlcm5hbEZvcm1Db250cm9sTWF0Y2hlcjxUPiBleHRlbmRzIEVycm9yU3RhdGVNYXRjaGVyIHtcbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb21wb25lbnQ6IEFic3RyYWN0U2VsZWN0PFQ+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRXJyb3JTdGF0ZShjb250cm9sOiBGb3JtQ29udHJvbCB8IG51bGwsIGZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybSB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZXh0ZXJuYWxDdHJsID0gdGhpcy5jb21wb25lbnQubmdDb250cm9sPy5jb250cm9sIHx8IHRoaXMuY29tcG9uZW50LmludGVybmFsQ3RybDtcbiAgICAgICAgaWYgKGV4dGVybmFsQ3RybCkge1xuICAgICAgICAgICAgcmV0dXJuICEhKGV4dGVybmFsQ3RybC5lcnJvcnMgJiYgKGV4dGVybmFsQ3RybC50b3VjaGVkIHx8IGV4dGVybmFsQ3RybC5kaXJ0eSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTZWxlY3Q8Vj5cbiAgICBleHRlbmRzIE5hdHVyYWxBYnN0cmFjdENvbnRyb2xsZXJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVja1xue1xuICAgIEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgZmxvYXRQbGFjZWhvbGRlcjogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG5cbiAgICAvKipcbiAgICAgKiBJZiB0aGUgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVxdWlyZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgICAgICB0aGlzLmFwcGx5UmVxdWlyZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXF1aXJlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIEFkZCBhIHN1ZmZpeCBidXR0b24gdGhhdCBpcyBhIGxpbmsgdG8gZ2l2ZW4gZGVzdGluYXRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2aWdhdGVUbz86IGFueVtdIHwgc3RyaW5nIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIElmIHByb3ZpZGVkIGNhdXNlIGEgbmV3IGNsZWFyIGJ1dHRvbiB0byBhcHBlYXJcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgY2xlYXJMYWJlbD86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoIGljb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2hvd0ljb24gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogSWNvbiBuYW1lXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGljb24gPSAnc2VhcmNoJztcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgcmVuZGVyaW5nIG9mIHRoZSBzZWxlY3RlZCBpdGVtIGFzIHRleHQgaW4gaW5wdXRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVdpdGg/OiAoaXRlbTogViB8IG51bGwpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEVtaXQgdGhlIHNlbGVjdGVkIHZhbHVlIHdoZW5ldmVyIGl0IGNoYW5nZXNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8ViB8IG51bGw+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIGludGVybmFsIGlucHV0IGlzIGJsdXJyZWRcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb250YWlucyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBmb3IgY3VycmVudCBzZWxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBJdCBpcyAqKm5vdCoqIG5lY2Vzc2FyaWx5IGBWIHwgbnVsbGAuXG4gICAgICpcbiAgICAgKiAtIE5hdHVyYWxTZWxlY3RDb21wb25lbnQ6IGBzdHJpbmcgfCBWIHwgbnVsbGAuIFdlIGFsbG93IGBzdHJpbmdgXG4gICAgICogICBvbmx5IHdoZW4gYG9wdGlvblJlcXVpcmVkYCBpcyBmYWxzZSwgc28gbW9zdCBvZiB0aGUgdGltZSBpdCBpcyBgViB8IG51bGxgLlxuICAgICAqIC0gTmF0dXJhbFNlbGVjdEhpZXJhcmNoaWNDb21wb25lbnQ6IGBzdHJpbmcgfCBudWxsYC5cbiAgICAgKiAtIE5hdHVyYWxTZWxlY3RFbnVtQ29tcG9uZW50OiBgViB8IG51bGxgLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBpbnRlcm5hbEN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgICAvKipcbiAgICAgKiBJbnRlcmZhY2Ugd2l0aCBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAgICAqIE5vdGlmaWVzIHBhcmVudCBtb2RlbCAvIGZvcm0gY29udHJvbGxlclxuICAgICAqL1xuICAgIHB1YmxpYyBvbkNoYW5nZT86IChpdGVtOiBWIHwgbnVsbCkgPT4gdm9pZDtcblxuICAgIC8qKlxuICAgICAqIEludGVyZmFjZSB3aXRoIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gICAgICogTm90aWZpZXMgcGFyZW50IG1vZGVsIC8gZm9ybSBjb250cm9sbGVyXG4gICAgICovXG4gICAgcHVibGljIG9uVG91Y2hlZD86ICgpID0+IHZvaWQ7XG5cbiAgICBwdWJsaWMgbWF0Y2hlcjogRXh0ZXJuYWxGb3JtQ29udHJvbE1hdGNoZXI8Vj47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgcmVhZG9ubHkgbmdDb250cm9sOiBOZ0NvbnRyb2wgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWF0Y2hlciA9IG5ldyBFeHRlcm5hbEZvcm1Db250cm9sTWF0Y2hlcih0aGlzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlSZXF1aXJlZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IFYgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzUmVhY3RpdmUgPSB0aGlzLm5nQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sRGlyZWN0aXZlIHx8IHRoaXMubmdDb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2xOYW1lO1xuICAgICAgICBpZiAoaXNSZWFjdGl2ZSAmJiB0eXBlb2YgdGhpcy5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJzxuYXR1cmFsLXNlbGVjdC0qPiBzaG91bGQgbm90IGJlIHVzZWQgYXMgUmVhY3RpdmVGb3JtIGFuZCB3aXRoIHRoZSBbcmVxdWlyZWRdIGF0dHJpYnV0ZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdmFsdWUgY2FuIGJlIGNoYW5nZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgZGlzYWJsZWQgPyB0aGlzLmludGVybmFsQ3RybC5kaXNhYmxlKCkgOiB0aGlzLmludGVybmFsQ3RybC5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKGl0ZW06IFYgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0RGlzcGxheUZuKCk6IChpdGVtOiBWIHwgbnVsbCkgPT4gc3RyaW5nO1xuXG4gICAgcHVibGljIGNsZWFyKGVtaXRFdmVudCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgLy8gRW1wdHkgaW5wdXRcbiAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwuc2V0VmFsdWUobnVsbCwge2VtaXRFdmVudDogZW1pdEV2ZW50fSk7XG5cbiAgICAgICAgLy8gcHJvcGFnYXRlVmFsdWUgY2hhbmdlXG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWUobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcHJvcGFnYXRlVmFsdWUodmFsdWU6IFYgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIC8vIGJlZm9yZSBzZWxlY3Rpb25DaGFuZ2UgdG8gYWxsb3cgZm9ybUNvbnRyb2wgdG8gdXBkYXRlIGJlZm9yZSBjaGFuZ2UgaXMgZWZmZWN0aXZlbHkgZW1pdHRlZFxuICAgICAgICBpZiAodGhpcy5vbkNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQ3RybD8uZW5hYmxlZCAmJiB0aGlzLmNsZWFyTGFiZWwgJiYgdGhpcy5pbnRlcm5hbEN0cmwudmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHRvdWNoKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5vblRvdWNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzUmVxdWlyZWRFcnJvcigpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMubmdDb250cm9sPy5jb250cm9sID8gdGhpcy5uZ0NvbnRyb2w/LmNvbnRyb2wgOiB0aGlzLmludGVybmFsQ3RybDtcblxuICAgICAgICByZXR1cm4gY29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBseSBWYWxpZGF0b3JzLnJlcXVpcmVkIG9uIHRoZSBpbnRlcm5hbCBmb3JtLCBiYXNlZCBvbiBuZ0NvbnRyb2wgb3IgW3JlcXVpcmVkXSBhdHRyaWJ1dGUsIGdpdmluZyBwcmlvcml0eSB0byBhdHRyaWJ1dGUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseVJlcXVpcmVkKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXF1aXJlZCBzdGF0dXMgb24gcGFyZW50IHZhbGlkYXRvclxuICAgICAgICBjb25zdCBvdXRlclJlcXVpcmVkU3RhdHVzID0gdGhpcz8ubmdDb250cm9sPy5jb250cm9sPy52YWxpZGF0b3I/Lih7fSBhcyBBYnN0cmFjdENvbnRyb2wpPy5yZXF1aXJlZDtcblxuICAgICAgICAvLyBXYW50ZWQgcmVxdWlyZWQgc3RhdHVzLCBnaXZpbmcgcHJpb3JpdHkgdG8gdGVtcGxhdGVcbiAgICAgICAgY29uc3QgbmV3UmVxdWlyZWRTdGF0dXMgPSB0eXBlb2YgdGhpcy5fcmVxdWlyZWQgIT09ICd1bmRlZmluZWQnID8gdGhpcy5fcmVxdWlyZWQgOiBvdXRlclJlcXVpcmVkU3RhdHVzO1xuXG4gICAgICAgIC8vIEFjdHVhbCBpbnRlcm5hbCB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgICBjb25zdCBjdXJyZW50UmVxdWlyZWRTdGF0dXMgPSB0aGlzLmludGVybmFsQ3RybD8udmFsaWRhdG9yPy4oe30gYXMgQWJzdHJhY3RDb250cm9sKT8ucmVxdWlyZWQ7XG5cbiAgICAgICAgLy8gSWYgd2FudGVkIHN0YXR1cyBpcyBzaW1pbGFyIHRvIGFjdHVhbCBzdGF0dXMsIHN0b3AgZXZlcnl0aGluZ1xuICAgICAgICBpZiAoY3VycmVudFJlcXVpcmVkU3RhdHVzID09PSBuZXdSZXF1aXJlZFN0YXR1cykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXBwbHkgb25seSBpZiBjaGFuZ2VkXG4gICAgICAgIGlmIChuZXdSZXF1aXJlZFN0YXR1cykge1xuICAgICAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnRlcm5hbEN0cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbn1cbiJdfQ==
|
package/{esm2015/lib/modules/select/public-api.js → esm2020/lib/modules/select/public-api.mjs}
RENAMED
|
File without changes
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { Component, ContentChild, Input, TemplateRef, ViewChild } from '@angular/core';
|
|
2
|
+
import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
|
|
3
|
+
import { merge } from 'lodash-es';
|
|
4
|
+
import { debounceTime, distinctUntilChanged, finalize, map, takeUntil } from 'rxjs/operators';
|
|
5
|
+
import { NaturalQueryVariablesManager } from '../../../classes/query-variable-manager';
|
|
6
|
+
import { AbstractSelect } from '../abstract-select.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/material/autocomplete";
|
|
9
|
+
import * as i2 from "@angular/material/core";
|
|
10
|
+
import * as i3 from "@angular/material/form-field";
|
|
11
|
+
import * as i4 from "../../icon/icon.component";
|
|
12
|
+
import * as i5 from "@angular/material/progress-spinner";
|
|
13
|
+
import * as i6 from "@angular/material/button";
|
|
14
|
+
import * as i7 from "@angular/common";
|
|
15
|
+
import * as i8 from "@angular/material/input";
|
|
16
|
+
import * as i9 from "@angular/forms";
|
|
17
|
+
import * as i10 from "@angular/material/tooltip";
|
|
18
|
+
import * as i11 from "@angular/router";
|
|
19
|
+
/**
|
|
20
|
+
* Default usage:
|
|
21
|
+
* <natural-select [service]="amazingServiceInstance" [(model)]="amazingModel" (modelChange)=amazingChangeFn($event)></natural-select>
|
|
22
|
+
*
|
|
23
|
+
* Custom template usage :
|
|
24
|
+
* <natural-select [service]="svc" [(ngModel)]="model">
|
|
25
|
+
* <ng-template let-item="item">
|
|
26
|
+
* <span>{{ item.xxx }}</span>
|
|
27
|
+
* </ng-template>
|
|
28
|
+
* </natural-select>
|
|
29
|
+
*
|
|
30
|
+
* [(ngModel)] and (ngModelChange) are optional
|
|
31
|
+
*
|
|
32
|
+
* Placeholder :
|
|
33
|
+
* <natural-select placeholder="amazing placeholder">
|
|
34
|
+
*
|
|
35
|
+
* Never float placeholder :
|
|
36
|
+
* <natural-select placeholder="amazing placeholder" floatPlaceholder="never">
|
|
37
|
+
*
|
|
38
|
+
* Search with like %xxx% on specified attribute name instead of custom filter on whole object
|
|
39
|
+
* <natural-select [searchField]="string">
|
|
40
|
+
*
|
|
41
|
+
* Allows to input free string without selecting an option from autocomplete suggestions
|
|
42
|
+
* <natural-select [optionRequired]="false">
|
|
43
|
+
*/
|
|
44
|
+
export class NaturalSelectComponent extends AbstractSelect {
|
|
45
|
+
constructor() {
|
|
46
|
+
super(...arguments);
|
|
47
|
+
/**
|
|
48
|
+
* If false, allows to input free string without selecting an option from autocomplete suggestions
|
|
49
|
+
*/
|
|
50
|
+
this.optionRequired = true;
|
|
51
|
+
/**
|
|
52
|
+
* The filter attribute to bind when searching for a term
|
|
53
|
+
*/
|
|
54
|
+
this.searchField = 'custom';
|
|
55
|
+
/**
|
|
56
|
+
* Items returned by server to show in listing
|
|
57
|
+
*/
|
|
58
|
+
this.items = null;
|
|
59
|
+
/**
|
|
60
|
+
* Whether a we are searching something
|
|
61
|
+
*/
|
|
62
|
+
this.loading = false;
|
|
63
|
+
/**
|
|
64
|
+
* Number of items not shown in result list
|
|
65
|
+
* Shows a message after list if positive
|
|
66
|
+
*/
|
|
67
|
+
this.moreNbItems = 0;
|
|
68
|
+
/**
|
|
69
|
+
* Default page size
|
|
70
|
+
*/
|
|
71
|
+
this.pageSize = 10;
|
|
72
|
+
/**
|
|
73
|
+
* Init search options
|
|
74
|
+
*/
|
|
75
|
+
this.variablesManager = new NaturalQueryVariablesManager();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Additional filter for query
|
|
79
|
+
*/
|
|
80
|
+
set filter(filter) {
|
|
81
|
+
this.variablesManager.set('additional-filter', { filter: filter });
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Whether the value can be changed
|
|
85
|
+
*/
|
|
86
|
+
set disabled(disabled) {
|
|
87
|
+
disabled ? this.internalCtrl.disable() : this.internalCtrl.enable();
|
|
88
|
+
}
|
|
89
|
+
ngAfterViewInit() {
|
|
90
|
+
this.internalCtrl.valueChanges
|
|
91
|
+
.pipe(takeUntil(this.ngUnsubscribe), distinctUntilChanged(), debounceTime(300))
|
|
92
|
+
.subscribe(val => this.search(val));
|
|
93
|
+
}
|
|
94
|
+
onInternalFormChange() {
|
|
95
|
+
// If we allow free string typing, then we propagate it as it is being typed
|
|
96
|
+
if (!this.optionRequired) {
|
|
97
|
+
this.propagateValue(this.internalCtrl.value);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
ngOnInit() {
|
|
101
|
+
super.ngOnInit();
|
|
102
|
+
this.initService();
|
|
103
|
+
}
|
|
104
|
+
initService() {
|
|
105
|
+
// Assert given service has a watchAll function
|
|
106
|
+
if (typeof this.service.watchAll !== 'function') {
|
|
107
|
+
throw new TypeError('Provided service does not contain watchAll function');
|
|
108
|
+
}
|
|
109
|
+
const defaultPagination = {
|
|
110
|
+
pagination: {
|
|
111
|
+
pageIndex: 0,
|
|
112
|
+
pageSize: this.pageSize,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
const variables = merge(defaultPagination, this.getSearchFilter(null));
|
|
116
|
+
this.variablesManager.set('variables', variables);
|
|
117
|
+
}
|
|
118
|
+
startSearch() {
|
|
119
|
+
// Start search only once
|
|
120
|
+
if (this.items) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
// Init query, and when query results arrive, finish loading, and count items
|
|
124
|
+
this.items = this.service.watchAll(this.variablesManager).pipe(takeUntil(this.ngUnsubscribe), finalize(() => (this.loading = false)), map(data => {
|
|
125
|
+
this.loading = false;
|
|
126
|
+
const nbTotal = data.length;
|
|
127
|
+
const nbListed = Math.min(data.length, this.pageSize);
|
|
128
|
+
this.moreNbItems = nbTotal - nbListed;
|
|
129
|
+
return data.items;
|
|
130
|
+
}));
|
|
131
|
+
this.loading = true;
|
|
132
|
+
this.items.subscribe();
|
|
133
|
+
}
|
|
134
|
+
propagateValue(value) {
|
|
135
|
+
this.loading = false;
|
|
136
|
+
// If we cleared value via button, but we allow free string typing, then force to empty string
|
|
137
|
+
if (!this.optionRequired && value === null) {
|
|
138
|
+
value = '';
|
|
139
|
+
}
|
|
140
|
+
super.propagateValue(value);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Very important to return something, above all if [select]='displayedValue' attribute value is used
|
|
144
|
+
*/
|
|
145
|
+
getDisplayFn() {
|
|
146
|
+
if (this.displayWith) {
|
|
147
|
+
return this.displayWith;
|
|
148
|
+
}
|
|
149
|
+
return (item) => {
|
|
150
|
+
if (!item) {
|
|
151
|
+
return '';
|
|
152
|
+
}
|
|
153
|
+
if (typeof item === 'string') {
|
|
154
|
+
return item;
|
|
155
|
+
}
|
|
156
|
+
return item.fullName || item.name || item.iban || item[this.searchField] || item.id;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
clear(emitEvent = true) {
|
|
160
|
+
this.search(null);
|
|
161
|
+
super.clear(emitEvent);
|
|
162
|
+
}
|
|
163
|
+
search(term) {
|
|
164
|
+
if (typeof term === 'string' || term === null) {
|
|
165
|
+
if (term) {
|
|
166
|
+
this.loading = !!this.items;
|
|
167
|
+
}
|
|
168
|
+
this.variablesManager.merge('variables', this.getSearchFilter(term));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
showClearButton() {
|
|
172
|
+
return this.internalCtrl?.enabled && this.clearLabel && this.internalCtrl.value;
|
|
173
|
+
}
|
|
174
|
+
getSearchFilter(term) {
|
|
175
|
+
let field = {};
|
|
176
|
+
if (this.searchField === 'custom') {
|
|
177
|
+
field = { custom: term ? { search: { value: term } } : null };
|
|
178
|
+
}
|
|
179
|
+
else if (term) {
|
|
180
|
+
field[this.searchField] = { like: { value: '%' + term + '%' } };
|
|
181
|
+
}
|
|
182
|
+
return { filter: { groups: [{ conditions: [field] }] } };
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
NaturalSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalSelectComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
186
|
+
NaturalSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: NaturalSelectComponent, selector: "natural-select", inputs: { service: "service", optionRequired: "optionRequired", searchField: "searchField", filter: "filter", disabled: "disabled" }, queries: [{ propertyName: "itemTemplate", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "autoTrigger", first: true, predicate: MatAutocompleteTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event?.option?.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n <mat-option *ngFor=\"let item of items | async\" [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n ></ng-template>\n </mat-option>\n <div *ngIf=\"moreNbItems > 0\" class=\"mat-caption\" i18n style=\"padding: 5px 10px\"\n >{{ moreNbItems }} \u00E9l\u00E9ment(s) suppl\u00E9mentaire(s)</div\n >\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field [floatLabel]=\"floatPlaceholder\">\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"touch(); blur.emit()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"clear()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n <!-- Meta data -->\n <natural-icon *ngIf=\"!loading && showIcon\" [name]=\"icon\" matPrefix></natural-icon>\n <mat-progress-spinner\n *ngIf=\"loading\"\n [diameter]=\"21\"\n [strokeWidth]=\"5\"\n matPrefix\n mode=\"indeterminate\"\n ></mat-progress-spinner>\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matSuffix>\n <button\n (click)=\"clear(); $event.stopPropagation()\"\n *ngIf=\"internalCtrl.value && internalCtrl.enabled && !clearLabel\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"D\u00E9s\u00E9lectionner\"\n >\n <natural-icon name=\"close\"></natural-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.value && navigateTo\"\n [routerLink]=\"navigateTo\"\n mat-button\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <natural-icon name=\"open_in_browser\"></natural-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error>\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n<div *ngIf=\"showClearButton()\" class=\"external-buttons\">\n <button (click)=\"clear()\" *ngIf=\"showClearButton()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .suffix-buttons,:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}\n"], components: [{ type: i1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i4.NaturalIconComponent, selector: "natural-icon", inputs: ["label", "labelColor", "labelPosition", "name", "size"] }, { type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatLabel, selector: "mat-label" }, { type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i3.MatPrefix, selector: "[matPrefix]" }, { type: i3.MatSuffix, selector: "[matSuffix]" }, { type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i11.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { type: i3.MatError, selector: "mat-error", inputs: ["id"] }], pipes: { "async": i7.AsyncPipe } });
|
|
187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: NaturalSelectComponent, decorators: [{
|
|
188
|
+
type: Component,
|
|
189
|
+
args: [{ selector: 'natural-select', template: "<!-- Autocomplete menu -->\n<mat-autocomplete\n #ac=\"matAutocomplete\"\n (optionSelected)=\"propagateValue($event?.option?.value)\"\n [displayWith]=\"getDisplayFn()\"\n panelWidth=\"auto !important\"\n>\n <mat-option *ngFor=\"let item of items | async\" [value]=\"item\">\n <ng-template\n [ngTemplateOutletContext]=\"{item: item}\"\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultACItem\"\n ></ng-template>\n </mat-option>\n <div *ngIf=\"moreNbItems > 0\" class=\"mat-caption\" i18n style=\"padding: 5px 10px\"\n >{{ moreNbItems }} \u00E9l\u00E9ment(s) suppl\u00E9mentaire(s)</div\n >\n</mat-autocomplete>\n\n<ng-template #defaultACItem let-item=\"item\">\n <span>{{ getDisplayFn()(item) }}</span>\n</ng-template>\n\n<!-- Input for autocomplete -->\n<mat-form-field [floatLabel]=\"floatPlaceholder\">\n <mat-label>{{ placeholder }}</mat-label>\n\n <input\n (blur)=\"touch(); blur.emit()\"\n (change)=\"onInternalFormChange()\"\n (click)=\"autoTrigger.openPanel()\"\n (focus)=\"startSearch()\"\n (keydown.esc)=\"clear()\"\n [formControl]=\"internalCtrl\"\n [matAutocomplete]=\"ac\"\n aria-label=\"Recherche et s\u00E9lection\"\n i18n-aria-label\n matInput\n [errorStateMatcher]=\"matcher\"\n />\n\n <!-- Meta data -->\n <natural-icon *ngIf=\"!loading && showIcon\" [name]=\"icon\" matPrefix></natural-icon>\n <mat-progress-spinner\n *ngIf=\"loading\"\n [diameter]=\"21\"\n [strokeWidth]=\"5\"\n matPrefix\n mode=\"indeterminate\"\n ></mat-progress-spinner>\n\n <!-- Clear button -->\n <div class=\"suffix-buttons\" matSuffix>\n <button\n (click)=\"clear(); $event.stopPropagation()\"\n *ngIf=\"internalCtrl.value && internalCtrl.enabled && !clearLabel\"\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"D\u00E9s\u00E9lectionner\"\n >\n <natural-icon name=\"close\"></natural-icon>\n </button>\n <button\n *ngIf=\"internalCtrl.value && navigateTo\"\n [routerLink]=\"navigateTo\"\n mat-button\n mat-icon-button\n i18n-matTooltip\n matTooltip=\"Naviguer vers\"\n >\n <natural-icon name=\"open_in_browser\"></natural-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"hasRequiredError()\" i18n>Ce champ est requis</mat-error>\n</mat-form-field>\n\n<!-- Additional (un)select/(un)link buttons for more visual cohesion with natural-relations --><!-- [clearLabel] and/or [selectLabel] has to be given as attribute input -->\n<div *ngIf=\"showClearButton()\" class=\"external-buttons\">\n <button (click)=\"clear()\" *ngIf=\"showClearButton()\" color=\"warn\" mat-button>{{ clearLabel }}</button>\n</div>\n", styles: [":host{display:flex;flex-direction:column}:host>*:not(:last-child){margin-bottom:20px}:host>mat-autocomplete{margin-bottom:0!important}:host .suffix-buttons,:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons{display:flex;flex-direction:row}:host .external-buttons>*:not(:last-child){margin-right:10px}\n"] }]
|
|
190
|
+
}], propDecorators: { autoTrigger: [{
|
|
191
|
+
type: ViewChild,
|
|
192
|
+
args: [MatAutocompleteTrigger]
|
|
193
|
+
}], itemTemplate: [{
|
|
194
|
+
type: ContentChild,
|
|
195
|
+
args: [TemplateRef]
|
|
196
|
+
}], service: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}], optionRequired: [{
|
|
199
|
+
type: Input
|
|
200
|
+
}], searchField: [{
|
|
201
|
+
type: Input
|
|
202
|
+
}], filter: [{
|
|
203
|
+
type: Input
|
|
204
|
+
}], disabled: [{
|
|
205
|
+
type: Input
|
|
206
|
+
}] } });
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL3NlbGVjdC9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFdkgsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVoQyxPQUFPLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFDLDRCQUE0QixFQUFpQixNQUFNLHlDQUF5QyxDQUFDO0FBR3JHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQUU1RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBTUgsTUFBTSxPQUFPLHNCQWNULFNBQVEsY0FBaUQ7SUFuQjdEOztRQThCSTs7V0FFRztRQUNhLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXRDOztXQUVHO1FBQ2EsZ0JBQVcsR0FBc0IsUUFBUSxDQUFDO1FBVTFEOztXQUVHO1FBQ0ksVUFBSyxHQUE2QixJQUFJLENBQUM7UUFFOUM7O1dBRUc7UUFDSSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXZCOzs7V0FHRztRQUNJLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXZC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WTt1QkFBQyxXQUFXO2dCQUtULE9BQU87c0JBQXRCLEtBQUs7Z0JBS1UsY0FBYztzQkFBN0IsS0FBSztnQkFLVSxXQUFXO3NCQUExQixLQUFLO2dCQU1LLE1BQU07c0JBRGhCLEtBQUs7Z0JBa0NjLFFBQVE7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3Nvcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVUcmlnZ2VyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHttZXJnZX0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbmFsaXplLCBtYXAsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQYWdpbmF0ZWREYXRhfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2RhdGEtc291cmNlJztcbmltcG9ydCB7TmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlciwgUXVlcnlWYXJpYWJsZXN9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvcXVlcnktdmFyaWFibGUtbWFuYWdlcic7XG5pbXBvcnQge05hdHVyYWxBYnN0cmFjdE1vZGVsU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWJzdHJhY3QtbW9kZWwuc2VydmljZSc7XG5pbXBvcnQge0V4dHJhY3RUYWxsT25lLCBFeHRyYWN0VmFsbCwgTGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtBYnN0cmFjdFNlbGVjdH0gZnJvbSAnLi4vYWJzdHJhY3Qtc2VsZWN0LmNvbXBvbmVudCc7XG5cbi8qKlxuICogRGVmYXVsdCB1c2FnZTpcbiAqIDxuYXR1cmFsLXNlbGVjdCBbc2VydmljZV09XCJhbWF6aW5nU2VydmljZUluc3RhbmNlXCIgWyhtb2RlbCldPVwiYW1hemluZ01vZGVsXCIgKG1vZGVsQ2hhbmdlKT1hbWF6aW5nQ2hhbmdlRm4oJGV2ZW50KT48L25hdHVyYWwtc2VsZWN0PlxuICpcbiAqIEN1c3RvbSB0ZW1wbGF0ZSB1c2FnZSA6XG4gKiA8bmF0dXJhbC1zZWxlY3QgW3NlcnZpY2VdPVwic3ZjXCIgWyhuZ01vZGVsKV09XCJtb2RlbFwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAqICAgICAgICAgPHNwYW4+e3sgaXRlbS54eHggfX08L3NwYW4+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvbmF0dXJhbC1zZWxlY3Q+XG4gKlxuICogWyhuZ01vZGVsKV0gYW5kIChuZ01vZGVsQ2hhbmdlKSBhcmUgb3B0aW9uYWxcbiAqXG4gKiBQbGFjZWhvbGRlciA6XG4gKiA8bmF0dXJhbC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJhbWF6aW5nIHBsYWNlaG9sZGVyXCI+XG4gKlxuICogTmV2ZXIgZmxvYXQgcGxhY2Vob2xkZXIgOlxuICogPG5hdHVyYWwtc2VsZWN0IHBsYWNlaG9sZGVyPVwiYW1hemluZyBwbGFjZWhvbGRlclwiIGZsb2F0UGxhY2Vob2xkZXI9XCJuZXZlclwiPlxuICpcbiAqIFNlYXJjaCB3aXRoIGxpa2UgJXh4eCUgb24gc3BlY2lmaWVkIGF0dHJpYnV0ZSBuYW1lIGluc3RlYWQgb2YgY3VzdG9tIGZpbHRlciBvbiB3aG9sZSBvYmplY3RcbiAqIDxuYXR1cmFsLXNlbGVjdCBbc2VhcmNoRmllbGRdPVwic3RyaW5nXCI+XG4gKlxuICogQWxsb3dzIHRvIGlucHV0IGZyZWUgc3RyaW5nIHdpdGhvdXQgc2VsZWN0aW5nIGFuIG9wdGlvbiBmcm9tIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICogPG5hdHVyYWwtc2VsZWN0IFtvcHRpb25SZXF1aXJlZF09XCJmYWxzZVwiPlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtc2VsZWN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbFNlbGVjdENvbXBvbmVudDxcbiAgICAgICAgVFNlcnZpY2UgZXh0ZW5kcyBOYXR1cmFsQWJzdHJhY3RNb2RlbFNlcnZpY2U8XG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBQYWdpbmF0ZWREYXRhPExpdGVyYWw+LFxuICAgICAgICAgICAgUXVlcnlWYXJpYWJsZXMsXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnksXG4gICAgICAgICAgICBhbnlcbiAgICAgICAgPixcbiAgICA+XG4gICAgZXh0ZW5kcyBBYnN0cmFjdFNlbGVjdDxzdHJpbmcgfCBFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXRcbntcbiAgICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpIHB1YmxpYyBhdXRvVHJpZ2dlciE6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgcHVibGljIGl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBTZXJ2aWNlIHdpdGggd2F0Y2hBbGwgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHF1ZXJ5VmFyaWFibGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZXJ2aWNlITogVFNlcnZpY2U7XG5cbiAgICAvKipcbiAgICAgKiBJZiBmYWxzZSwgYWxsb3dzIHRvIGlucHV0IGZyZWUgc3RyaW5nIHdpdGhvdXQgc2VsZWN0aW5nIGFuIG9wdGlvbiBmcm9tIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25SZXF1aXJlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmlsdGVyIGF0dHJpYnV0ZSB0byBiaW5kIHdoZW4gc2VhcmNoaW5nIGZvciBhIHRlcm1cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRmllbGQ6ICdjdXN0b20nIHwgc3RyaW5nID0gJ2N1c3RvbSc7XG5cbiAgICAvKipcbiAgICAgKiBBZGRpdGlvbmFsIGZpbHRlciBmb3IgcXVlcnlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZmlsdGVyKGZpbHRlcjogRXh0cmFjdFZhbGw8VFNlcnZpY2U+WydmaWx0ZXInXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLnNldCgnYWRkaXRpb25hbC1maWx0ZXInLCB7ZmlsdGVyOiBmaWx0ZXJ9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdGVtcyByZXR1cm5lZCBieSBzZXJ2ZXIgdG8gc2hvdyBpbiBsaXN0aW5nXG4gICAgICovXG4gICAgcHVibGljIGl0ZW1zOiBudWxsIHwgT2JzZXJ2YWJsZTxhbnlbXT4gPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBhIHdlIGFyZSBzZWFyY2hpbmcgc29tZXRoaW5nXG4gICAgICovXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBpdGVtcyBub3Qgc2hvd24gaW4gcmVzdWx0IGxpc3RcbiAgICAgKiBTaG93cyBhIG1lc3NhZ2UgYWZ0ZXIgbGlzdCBpZiBwb3NpdGl2ZVxuICAgICAqL1xuICAgIHB1YmxpYyBtb3JlTmJJdGVtcyA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IHBhZ2Ugc2l6ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcGFnZVNpemUgPSAxMDtcblxuICAgIC8qKlxuICAgICAqIEluaXQgc2VhcmNoIG9wdGlvbnNcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhcmlhYmxlc01hbmFnZXIgPSBuZXcgTmF0dXJhbFF1ZXJ5VmFyaWFibGVzTWFuYWdlcjxRdWVyeVZhcmlhYmxlcz4oKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHZhbHVlIGNhbiBiZSBjaGFuZ2VkXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgICAgICBkaXNhYmxlZCA/IHRoaXMuaW50ZXJuYWxDdHJsLmRpc2FibGUoKSA6IHRoaXMuaW50ZXJuYWxDdHJsLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdHJsLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2YWwgPT4gdGhpcy5zZWFyY2godmFsKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW50ZXJuYWxGb3JtQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiB3ZSBhbGxvdyBmcmVlIHN0cmluZyB0eXBpbmcsIHRoZW4gd2UgcHJvcGFnYXRlIGl0IGFzIGl0IGlzIGJlaW5nIHR5cGVkXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25SZXF1aXJlZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVWYWx1ZSh0aGlzLmludGVybmFsQ3RybC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaW5pdFNlcnZpY2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICAvLyBBc3NlcnQgZ2l2ZW4gc2VydmljZSBoYXMgYSB3YXRjaEFsbCBmdW5jdGlvblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2VydmljZS53YXRjaEFsbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgc2VydmljZSBkb2VzIG5vdCBjb250YWluIHdhdGNoQWxsIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWZhdWx0UGFnaW5hdGlvbiA9IHtcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IG1lcmdlKGRlZmF1bHRQYWdpbmF0aW9uLCB0aGlzLmdldFNlYXJjaEZpbHRlcihudWxsKSk7XG4gICAgICAgIHRoaXMudmFyaWFibGVzTWFuYWdlci5zZXQoJ3ZhcmlhYmxlcycsIHZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0U2VhcmNoKCk6IHZvaWQge1xuICAgICAgICAvLyBTdGFydCBzZWFyY2ggb25seSBvbmNlXG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbml0IHF1ZXJ5LCBhbmQgd2hlbiBxdWVyeSByZXN1bHRzIGFycml2ZSwgZmluaXNoIGxvYWRpbmcsIGFuZCBjb3VudCBpdGVtc1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZXJ2aWNlLndhdGNoQWxsKHRoaXMudmFyaWFibGVzTWFuYWdlcikucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSksXG4gICAgICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgbmJUb3RhbCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5iTGlzdGVkID0gTWF0aC5taW4oZGF0YS5sZW5ndGgsIHRoaXMucGFnZVNpemUpO1xuICAgICAgICAgICAgICAgIHRoaXMubW9yZU5iSXRlbXMgPSBuYlRvdGFsIC0gbmJMaXN0ZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5pdGVtcztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuaXRlbXMuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHByb3BhZ2F0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBFeHRyYWN0VGFsbE9uZTxUU2VydmljZT4gfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgIC8vIElmIHdlIGNsZWFyZWQgdmFsdWUgdmlhIGJ1dHRvbiwgYnV0IHdlIGFsbG93IGZyZWUgc3RyaW5nIHR5cGluZywgdGhlbiBmb3JjZSB0byBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvblJlcXVpcmVkICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIucHJvcGFnYXRlVmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZlcnkgaW1wb3J0YW50IHRvIHJldHVybiBzb21ldGhpbmcsIGFib3ZlIGFsbCBpZiBbc2VsZWN0XT0nZGlzcGxheWVkVmFsdWUnIGF0dHJpYnV0ZSB2YWx1ZSBpcyB1c2VkXG4gICAgICovXG4gICAgcHVibGljIGdldERpc3BsYXlGbigpOiAoaXRlbTogc3RyaW5nIHwgRXh0cmFjdFRhbGxPbmU8VFNlcnZpY2U+IHwgbnVsbCkgPT4gc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlXaXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5mdWxsTmFtZSB8fCBpdGVtLm5hbWUgfHwgaXRlbS5pYmFuIHx8IGl0ZW1bdGhpcy5zZWFyY2hGaWVsZF0gfHwgaXRlbS5pZDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlYXJjaChudWxsKTtcbiAgICAgICAgc3VwZXIuY2xlYXIoZW1pdEV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHRlcm06IHN0cmluZyB8IEV4dHJhY3RUYWxsT25lPFRTZXJ2aWNlPiB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0ZXJtID09PSAnc3RyaW5nJyB8fCB0ZXJtID09PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodGVybSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9ICEhdGhpcy5pdGVtcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXNNYW5hZ2VyLm1lcmdlKCd2YXJpYWJsZXMnLCB0aGlzLmdldFNlYXJjaEZpbHRlcih0ZXJtIGFzIHN0cmluZyB8IG51bGwpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVybmFsQ3RybD8uZW5hYmxlZCAmJiB0aGlzLmNsZWFyTGFiZWwgJiYgdGhpcy5pbnRlcm5hbEN0cmwudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWFyY2hGaWx0ZXIodGVybTogc3RyaW5nIHwgbnVsbCk6IFF1ZXJ5VmFyaWFibGVzIHtcbiAgICAgICAgbGV0IGZpZWxkOiBMaXRlcmFsID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoRmllbGQgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICBmaWVsZCA9IHtjdXN0b206IHRlcm0gPyB7c2VhcmNoOiB7dmFsdWU6IHRlcm19fSA6IG51bGx9O1xuICAgICAgICB9IGVsc2UgaWYgKHRlcm0pIHtcbiAgICAgICAgICAgIGZpZWxkW3RoaXMuc2VhcmNoRmllbGRdID0ge2xpa2U6IHt2YWx1ZTogJyUnICsgdGVybSArICclJ319O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtmaWx0ZXI6IHtncm91cHM6IFt7Y29uZGl0aW9uczogW2ZpZWxkXX1dfX07XG4gICAgfVxufVxuIiwiPCEtLSBBdXRvY29tcGxldGUgbWVudSAtLT5cbjxtYXQtYXV0b2NvbXBsZXRlXG4gICAgI2FjPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwicHJvcGFnYXRlVmFsdWUoJGV2ZW50Py5vcHRpb24/LnZhbHVlKVwiXG4gICAgW2Rpc3BsYXlXaXRoXT1cImdldERpc3BsYXlGbigpXCJcbiAgICBwYW5lbFdpZHRoPVwiYXV0byAhaW1wb3J0YW50XCJcbj5cbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtcyB8IGFzeW5jXCIgW3ZhbHVlXT1cIml0ZW1cIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW19XCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSA/IGl0ZW1UZW1wbGF0ZSA6IGRlZmF1bHRBQ0l0ZW1cIlxuICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L21hdC1vcHRpb24+XG4gICAgPGRpdiAqbmdJZj1cIm1vcmVOYkl0ZW1zID4gMFwiIGNsYXNzPVwibWF0LWNhcHRpb25cIiBpMThuIHN0eWxlPVwicGFkZGluZzogNXB4IDEwcHhcIlxuICAgICAgICA+e3sgbW9yZU5iSXRlbXMgfX0gw6lsw6ltZW50KHMpIHN1cHBsw6ltZW50YWlyZShzKTwvZGl2XG4gICAgPlxuPC9tYXQtYXV0b2NvbXBsZXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRBQ0l0ZW0gbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPHNwYW4+e3sgZ2V0RGlzcGxheUZuKCkoaXRlbSkgfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIElucHV0IGZvciBhdXRvY29tcGxldGUgLS0+XG48bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiZmxvYXRQbGFjZWhvbGRlclwiPlxuICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cblxuICAgIDxpbnB1dFxuICAgICAgICAoYmx1cik9XCJ0b3VjaCgpOyBibHVyLmVtaXQoKVwiXG4gICAgICAgIChjaGFuZ2UpPVwib25JbnRlcm5hbEZvcm1DaGFuZ2UoKVwiXG4gICAgICAgIChjbGljayk9XCJhdXRvVHJpZ2dlci5vcGVuUGFuZWwoKVwiXG4gICAgICAgIChmb2N1cyk9XCJzdGFydFNlYXJjaCgpXCJcbiAgICAgICAgKGtleWRvd24uZXNjKT1cImNsZWFyKClcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiaW50ZXJuYWxDdHJsXCJcbiAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhY1wiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJSZWNoZXJjaGUgZXQgc8OpbGVjdGlvblwiXG4gICAgICAgIGkxOG4tYXJpYS1sYWJlbFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBbZXJyb3JTdGF0ZU1hdGNoZXJdPVwibWF0Y2hlclwiXG4gICAgLz5cblxuICAgIDwhLS0gTWV0YSBkYXRhIC0tPlxuICAgIDxuYXR1cmFsLWljb24gKm5nSWY9XCIhbG9hZGluZyAmJiBzaG93SWNvblwiIFtuYW1lXT1cImljb25cIiBtYXRQcmVmaXg+PC9uYXR1cmFsLWljb24+XG4gICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICAgIFtkaWFtZXRlcl09XCIyMVwiXG4gICAgICAgIFtzdHJva2VXaWR0aF09XCI1XCJcbiAgICAgICAgbWF0UHJlZml4XG4gICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgICA+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cblxuICAgIDwhLS0gQ2xlYXIgYnV0dG9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzdWZmaXgtYnV0dG9uc1wiIG1hdFN1ZmZpeD5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAqbmdJZj1cImludGVybmFsQ3RybC52YWx1ZSAmJiBpbnRlcm5hbEN0cmwuZW5hYmxlZCAmJiAhY2xlYXJMYWJlbFwiXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGkxOG4tbWF0VG9vbHRpcFxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkTDqXPDqWxlY3Rpb25uZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmF0dXJhbC1pY29uIG5hbWU9XCJjbG9zZVwiPjwvbmF0dXJhbC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJpbnRlcm5hbEN0cmwudmFsdWUgJiYgbmF2aWdhdGVUb1wiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJuYXZpZ2F0ZVRvXCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiTmF2aWd1ZXIgdmVyc1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuYXR1cmFsLWljb24gbmFtZT1cIm9wZW5faW5fYnJvd3NlclwiPjwvbmF0dXJhbC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJoYXNSZXF1aXJlZEVycm9yKClcIiBpMThuPkNlIGNoYW1wIGVzdCByZXF1aXM8L21hdC1lcnJvcj5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjwhLS0gQWRkaXRpb25hbCAodW4pc2VsZWN0Lyh1bilsaW5rIGJ1dHRvbnMgZm9yIG1vcmUgdmlzdWFsIGNvaGVzaW9uIHdpdGggbmF0dXJhbC1yZWxhdGlvbnMgLS0+PCEtLSBbY2xlYXJMYWJlbF0gYW5kL29yIFtzZWxlY3RMYWJlbF0gaGFzIHRvIGJlIGdpdmVuIGFzIGF0dHJpYnV0ZSBpbnB1dCAtLT5cbjxkaXYgKm5nSWY9XCJzaG93Q2xlYXJCdXR0b24oKVwiIGNsYXNzPVwiZXh0ZXJuYWwtYnV0dG9uc1wiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImNsZWFyKClcIiAqbmdJZj1cInNob3dDbGVhckJ1dHRvbigpXCIgY29sb3I9XCJ3YXJuXCIgbWF0LWJ1dHRvbj57eyBjbGVhckxhYmVsIH19PC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|