@inobeta/ui 18.0.1-build.1722007687
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 +1 -0
- package/_index.scss +1 -0
- package/esm2022/inobeta-ui.mjs +5 -0
- package/esm2022/public_api.mjs +17 -0
- package/esm2022/src/app/inobeta-ui/core/filter.pipe.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/core/index.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/http/auth/guard.service.mjs +157 -0
- package/esm2022/src/app/inobeta-ui/http/auth/login.service.mjs +137 -0
- package/esm2022/src/app/inobeta-ui/http/auth/login.service.stub.spec.mjs +20 -0
- package/esm2022/src/app/inobeta-ui/http/auth/session.model.mjs +16 -0
- package/esm2022/src/app/inobeta-ui/http/http/auth.interceptor.mjs +79 -0
- package/esm2022/src/app/inobeta-ui/http/http/error.interceptor.mjs +76 -0
- package/esm2022/src/app/inobeta-ui/http/http/loader.interceptor.mjs +45 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton-container.component.mjs +36 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.component.mjs +34 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.mjs +66 -0
- package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.mjs +22 -0
- package/esm2022/src/app/inobeta-ui/http/http/messages.decorator.mjs +42 -0
- package/esm2022/src/app/inobeta-ui/http/http/role-check.directive.mjs +45 -0
- package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.component.mjs +28 -0
- package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.mjs +15 -0
- package/esm2022/src/app/inobeta-ui/http/http-test.module.mjs +35 -0
- package/esm2022/src/app/inobeta-ui/http/http.module.mjs +178 -0
- package/esm2022/src/app/inobeta-ui/http/index.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/http/store/index.mjs +11 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/actions.mjs +7 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/interfaces.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/reducers.mjs +35 -0
- package/esm2022/src/app/inobeta-ui/http/store/loader/selectors.mjs +9 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/actions.mjs +17 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/effects.mjs +50 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/interfaces.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/reducers.mjs +12 -0
- package/esm2022/src/app/inobeta-ui/http/store/session/selectors.mjs +22 -0
- package/esm2022/src/app/inobeta-ui/http/translations.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/hydration/actions.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/hydration/effects.mjs +45 -0
- package/esm2022/src/app/inobeta-ui/hydration/index.mjs +21 -0
- package/esm2022/src/app/inobeta-ui/hydration/reducer.mjs +36 -0
- package/esm2022/src/app/inobeta-ui/storage/index.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/storage/storage-test.module.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/storage/storage.module.mjs +22 -0
- package/esm2022/src/app/inobeta-ui/storage/storage.service.mjs +105 -0
- package/esm2022/src/app/inobeta-ui/storage/storage.stub.spec.mjs +8 -0
- package/esm2022/src/app/inobeta-ui/translate/index.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/translate/translate-loader.service.mjs +37 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.mjs +63 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.mjs +44 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/index.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.mjs +16 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.module.mjs +92 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.service.mjs +83 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.mjs +42 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.mjs +66 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/index.mjs +10 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/provider.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.mjs +113 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export.component.mjs +58 -0
- package/esm2022/src/app/inobeta-ui/ui/data-export/transformer.mjs +68 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/array/array.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/checkbox.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/dropdown.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/form-control-base.mjs +80 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/radio.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/controls/textbox.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.mjs +118 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.mjs +46 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.mjs +28 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/form-control.service.mjs +57 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/forms.module.mjs +36 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/forms.pipes.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/forms.types.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/forms/index.mjs +12 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.mjs +14 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.mjs +31 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.component.mjs +149 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.types.mjs +30 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.mjs +83 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.mjs +284 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.mjs +111 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.mjs +99 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.mjs +106 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.mjs +98 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.mjs +109 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.module.mjs +175 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/index.mjs +14 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/tokens.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-filter/translations.mjs +51 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/action.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/cells.mjs +212 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/action-column.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/column.mjs +260 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/date-column.mjs +93 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/index.mjs +7 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/number-column.mjs +112 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/selection-column.mjs +149 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/text-column.mjs +90 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/index.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/paginator-intl.mjs +53 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/remote-data-source.mjs +73 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/rowgroup.mjs +17 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/sort-header.mjs +37 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/const.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/index.mjs +9 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.mjs +47 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.mjs +56 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.mjs +19 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table-data-source.mjs +450 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table-url.service.mjs +129 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table.component.mjs +260 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table.module.mjs +150 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/table.types.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/tokens.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/kai-table/translations.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.mjs +120 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.mjs +38 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.mjs +139 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/index.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.mjs +24 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu.module.mjs +63 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.mjs +108 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/button.mjs +80 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/checkbox.mjs +54 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/datepicker.mjs +96 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/dropdown.mjs +149 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/label.mjs +50 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/padding.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/radio.mjs +61 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.mjs +62 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textarea.mjs +63 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textbox.mjs +205 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/index.mjs +18 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.mjs +73 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.mjs +48 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.mjs +65 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.mjs +18 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.mjs +64 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-test.module.mjs +32 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form.module.mjs +168 -0
- package/esm2022/src/app/inobeta-ui/ui/material-forms/translations.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/index.mjs +7 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.component.mjs +76 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.model.mjs +2 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.mjs +64 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.mjs +15 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal-test.module.mjs +26 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/modal.module.mjs +46 -0
- package/esm2022/src/app/inobeta-ui/ui/modal/translations.mjs +10 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/index.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast-test.module.mjs +23 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast.module.mjs +21 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.mjs +54 -0
- package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/ui/uploader/index.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.component.mjs +41 -0
- package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.module.mjs +42 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.mjs +20 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/index.mjs +6 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.mjs +37 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.mjs +186 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.mjs +110 -0
- package/esm2022/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.mjs +43 -0
- package/esm2022/src/app/inobeta-ui/ui/views/index.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/actions.mjs +11 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/index.mjs +3 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/reducer.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/index.mjs +4 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/reducer.mjs +19 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/selectors.mjs +5 -0
- package/esm2022/src/app/inobeta-ui/ui/views/store/views/table-view.mjs +13 -0
- package/esm2022/src/app/inobeta-ui/ui/views/translations.mjs +34 -0
- package/esm2022/src/app/inobeta-ui/ui/views/view.module.mjs +98 -0
- package/esm2022/src/app/inobeta-ui/ui/views/view.service.mjs +137 -0
- package/fesm2022/inobeta-ui.mjs +8610 -0
- package/fesm2022/inobeta-ui.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +55 -0
- package/public_api.d.ts +16 -0
- package/src/app/inobeta-ui/core/filter.pipe.d.ts +7 -0
- package/src/app/inobeta-ui/core/index.d.ts +1 -0
- package/src/app/inobeta-ui/http/auth/guard.service.d.ts +96 -0
- package/src/app/inobeta-ui/http/auth/login.service.d.ts +63 -0
- package/src/app/inobeta-ui/http/auth/login.service.stub.spec.d.ts +9 -0
- package/src/app/inobeta-ui/http/auth/session.model.d.ts +18 -0
- package/src/app/inobeta-ui/http/http/auth.interceptor.d.ts +21 -0
- package/src/app/inobeta-ui/http/http/error.interceptor.d.ts +18 -0
- package/src/app/inobeta-ui/http/http/loader.interceptor.d.ts +17 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton-container.component.d.ts +13 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton.component.d.ts +12 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton.directive.d.ts +27 -0
- package/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.d.ts +13 -0
- package/src/app/inobeta-ui/http/http/messages.decorator.d.ts +18 -0
- package/src/app/inobeta-ui/http/http/role-check.directive.d.ts +17 -0
- package/src/app/inobeta-ui/http/http/spinner-loading.component.d.ts +9 -0
- package/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.d.ts +5 -0
- package/src/app/inobeta-ui/http/http-test.module.d.ts +8 -0
- package/src/app/inobeta-ui/http/http.module.d.ts +20 -0
- package/src/app/inobeta-ui/http/index.d.ts +23 -0
- package/src/app/inobeta-ui/http/store/index.d.ts +10 -0
- package/src/app/inobeta-ui/http/store/loader/actions.d.ts +17 -0
- package/src/app/inobeta-ui/http/store/loader/interfaces.d.ts +8 -0
- package/src/app/inobeta-ui/http/store/loader/reducers.d.ts +3 -0
- package/src/app/inobeta-ui/http/store/loader/selectors.d.ts +5 -0
- package/src/app/inobeta-ui/http/store/session/actions.d.ts +20 -0
- package/src/app/inobeta-ui/http/store/session/effects.d.ts +16 -0
- package/src/app/inobeta-ui/http/store/session/interfaces.d.ts +4 -0
- package/src/app/inobeta-ui/http/store/session/reducers.d.ts +3 -0
- package/src/app/inobeta-ui/http/store/session/selectors.d.ts +4 -0
- package/src/app/inobeta-ui/http/translations.d.ts +12 -0
- package/src/app/inobeta-ui/hydration/actions.d.ts +1 -0
- package/src/app/inobeta-ui/hydration/effects.d.ts +13 -0
- package/src/app/inobeta-ui/hydration/index.d.ts +13 -0
- package/src/app/inobeta-ui/hydration/reducer.d.ts +2 -0
- package/src/app/inobeta-ui/storage/index.d.ts +3 -0
- package/src/app/inobeta-ui/storage/storage-test.module.d.ts +6 -0
- package/src/app/inobeta-ui/storage/storage.module.d.ts +6 -0
- package/src/app/inobeta-ui/storage/storage.service.d.ts +62 -0
- package/src/app/inobeta-ui/storage/storage.stub.spec.d.ts +5 -0
- package/src/app/inobeta-ui/translate/index.d.ts +1 -0
- package/src/app/inobeta-ui/translate/translate-loader.service.d.ts +11 -0
- package/src/app/inobeta-ui/ui/_index.scss +87 -0
- package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.d.ts +28 -0
- package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.d.ts +12 -0
- package/src/app/inobeta-ui/ui/breadcrumb/index.d.ts +3 -0
- package/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.d.ts +6 -0
- package/src/app/inobeta-ui/ui/data-export/data-export.module.d.ts +20 -0
- package/src/app/inobeta-ui/ui/data-export/data-export.service.d.ts +35 -0
- package/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.d.ts +19 -0
- package/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.d.ts +20 -0
- package/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.d.ts +14 -0
- package/src/app/inobeta-ui/ui/data-export/index.d.ts +9 -0
- package/src/app/inobeta-ui/ui/data-export/provider.d.ts +15 -0
- package/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.d.ts +23 -0
- package/src/app/inobeta-ui/ui/data-export/table-data-export.component.d.ts +13 -0
- package/src/app/inobeta-ui/ui/data-export/transformer.d.ts +50 -0
- package/src/app/inobeta-ui/ui/forms/array/array.d.ts +32 -0
- package/src/app/inobeta-ui/ui/forms/controls/checkbox.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/controls/dropdown.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/controls/form-control-base.d.ts +88 -0
- package/src/app/inobeta-ui/ui/forms/controls/radio.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/controls/textbox.d.ts +4 -0
- package/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.d.ts +50 -0
- package/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.d.ts +18 -0
- package/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.d.ts +11 -0
- package/src/app/inobeta-ui/ui/forms/form-control.service.d.ts +13 -0
- package/src/app/inobeta-ui/ui/forms/forms.module.d.ts +12 -0
- package/src/app/inobeta-ui/ui/forms/forms.pipes.d.ts +20 -0
- package/src/app/inobeta-ui/ui/forms/forms.types.d.ts +3 -0
- package/src/app/inobeta-ui/ui/forms/index.d.ts +11 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.d.ts +5 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.d.ts +8 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter.component.d.ts +41 -0
- package/src/app/inobeta-ui/ui/kai-filter/filter.types.d.ts +141 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.d.ts +42 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.d.ts +12 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.d.ts +56 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.d.ts +27 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.d.ts +28 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.d.ts +21 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-filter/filters.module.d.ts +35 -0
- package/src/app/inobeta-ui/ui/kai-filter/index.d.ts +13 -0
- package/src/app/inobeta-ui/ui/kai-filter/tokens.d.ts +2 -0
- package/src/app/inobeta-ui/ui/kai-filter/translations.d.ts +50 -0
- package/src/app/inobeta-ui/ui/kai-table/_table-theme.scss +123 -0
- package/src/app/inobeta-ui/ui/kai-table/action.d.ts +19 -0
- package/src/app/inobeta-ui/ui/kai-table/cells.d.ts +88 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/action-column.d.ts +9 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/column.d.ts +87 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/date-column.d.ts +21 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/index.d.ts +6 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/number-column.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/selection-column.d.ts +26 -0
- package/src/app/inobeta-ui/ui/kai-table/columns/text-column.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-table/index.d.ts +12 -0
- package/src/app/inobeta-ui/ui/kai-table/paginator-intl.d.ts +18 -0
- package/src/app/inobeta-ui/ui/kai-table/remote-data-source.d.ts +60 -0
- package/src/app/inobeta-ui/ui/kai-table/rowgroup.d.ts +8 -0
- package/src/app/inobeta-ui/ui/kai-table/sort-header.d.ts +20 -0
- package/src/app/inobeta-ui/ui/kai-table/store/const.d.ts +1 -0
- package/src/app/inobeta-ui/ui/kai-table/store/index.d.ts +8 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.d.ts +59 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.d.ts +15 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.d.ts +16 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.d.ts +2 -0
- package/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.d.ts +3 -0
- package/src/app/inobeta-ui/ui/kai-table/table-data-source.d.ts +164 -0
- package/src/app/inobeta-ui/ui/kai-table/table-url.service.d.ts +51 -0
- package/src/app/inobeta-ui/ui/kai-table/table.component.d.ts +79 -0
- package/src/app/inobeta-ui/ui/kai-table/table.module.d.ts +30 -0
- package/src/app/inobeta-ui/ui/kai-table/table.types.d.ts +21 -0
- package/src/app/inobeta-ui/ui/kai-table/tokens.d.ts +22 -0
- package/src/app/inobeta-ui/ui/kai-table/translations.d.ts +40 -0
- package/src/app/inobeta-ui/ui/main-menu/_main-menu-theme.scss +226 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.d.ts +56 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.d.ts +18 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.d.ts +13 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.d.ts +9 -0
- package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.d.ts +16 -0
- package/src/app/inobeta-ui/ui/main-menu/index.d.ts +10 -0
- package/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.d.ts +8 -0
- package/src/app/inobeta-ui/ui/main-menu/main-menu.module.d.ts +16 -0
- package/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.d.ts +8 -0
- package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.d.ts +14 -0
- package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.d.ts +4 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.d.ts +14 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/button.d.ts +28 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/checkbox.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/datepicker.d.ts +17 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/dropdown.d.ts +29 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/label.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/padding.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/radio.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.d.ts +10 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/textarea.d.ts +17 -0
- package/src/app/inobeta-ui/ui/material-forms/controls/textbox.d.ts +21 -0
- package/src/app/inobeta-ui/ui/material-forms/index.d.ts +17 -0
- package/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.d.ts +25 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.d.ts +26 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.d.ts +21 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.d.ts +6 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.d.ts +19 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form-test.module.d.ts +9 -0
- package/src/app/inobeta-ui/ui/material-forms/material-form.module.d.ts +49 -0
- package/src/app/inobeta-ui/ui/material-forms/translations.d.ts +25 -0
- package/src/app/inobeta-ui/ui/modal/index.d.ts +6 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.component.d.ts +10 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.model.d.ts +32 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.service.d.ts +49 -0
- package/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.d.ts +6 -0
- package/src/app/inobeta-ui/ui/modal/modal-test.module.d.ts +7 -0
- package/src/app/inobeta-ui/ui/modal/modal.module.d.ts +11 -0
- package/src/app/inobeta-ui/ui/modal/translations.d.ts +9 -0
- package/src/app/inobeta-ui/ui/toast/_toast-theme.scss +56 -0
- package/src/app/inobeta-ui/ui/toast/index.d.ts +4 -0
- package/src/app/inobeta-ui/ui/toast/toast-test.module.d.ts +6 -0
- package/src/app/inobeta-ui/ui/toast/toast.module.d.ts +7 -0
- package/src/app/inobeta-ui/ui/toast/toast.service.d.ts +36 -0
- package/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.d.ts +3 -0
- package/src/app/inobeta-ui/ui/uploader/index.d.ts +2 -0
- package/src/app/inobeta-ui/ui/uploader/uploader.component.d.ts +12 -0
- package/src/app/inobeta-ui/ui/uploader/uploader.module.d.ts +10 -0
- package/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.d.ts +8 -0
- package/src/app/inobeta-ui/ui/views/components/index.d.ts +5 -0
- package/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.d.ts +14 -0
- package/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.d.ts +45 -0
- package/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.d.ts +22 -0
- package/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.d.ts +16 -0
- package/src/app/inobeta-ui/ui/views/index.d.ts +4 -0
- package/src/app/inobeta-ui/ui/views/store/actions.d.ts +27 -0
- package/src/app/inobeta-ui/ui/views/store/index.d.ts +2 -0
- package/src/app/inobeta-ui/ui/views/store/reducer.d.ts +7 -0
- package/src/app/inobeta-ui/ui/views/store/views/index.d.ts +3 -0
- package/src/app/inobeta-ui/ui/views/store/views/reducer.d.ts +3 -0
- package/src/app/inobeta-ui/ui/views/store/views/selectors.d.ts +4 -0
- package/src/app/inobeta-ui/ui/views/store/views/table-view.d.ts +22 -0
- package/src/app/inobeta-ui/ui/views/translations.d.ts +33 -0
- package/src/app/inobeta-ui/ui/views/view.module.d.ts +23 -0
- package/src/app/inobeta-ui/ui/views/view.service.d.ts +40 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Component, Input, booleanAttribute } from "@angular/core";
|
|
2
|
+
import { FormControl } from "@angular/forms";
|
|
3
|
+
import { debounceTime } from "rxjs";
|
|
4
|
+
import { IbFilterOperator } from "../../filter.types";
|
|
5
|
+
import { contains, none } from "../../filters";
|
|
6
|
+
import { IbFilterBase } from "../base/filter-base";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
import * as i2 from "@angular/forms";
|
|
10
|
+
import * as i3 from "@angular/material/input";
|
|
11
|
+
import * as i4 from "@angular/material/form-field";
|
|
12
|
+
import * as i5 from "@angular/material/button";
|
|
13
|
+
import * as i6 from "@angular/material/icon";
|
|
14
|
+
import * as i7 from "@ngx-translate/core";
|
|
15
|
+
export class IbSearchBar extends IbFilterBase {
|
|
16
|
+
name = "ibSearchBar";
|
|
17
|
+
searchCriteria = new FormControl("", { nonNullable: true });
|
|
18
|
+
debounceTime = 0;
|
|
19
|
+
set async(value) {
|
|
20
|
+
if (value) {
|
|
21
|
+
this.debounceTime = 300;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.debounceTime = 0;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
super.ngOnInit();
|
|
29
|
+
this.searchCriteria.valueChanges
|
|
30
|
+
.pipe(debounceTime(this.debounceTime))
|
|
31
|
+
.subscribe(() => {
|
|
32
|
+
this.applyFilter();
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
build = () => this.searchCriteria.value ? contains(this.searchCriteria.value) : none();
|
|
36
|
+
toQuery() {
|
|
37
|
+
if (!this.searchCriteria.value) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
regex: `.*${this.searchCriteria.value}.*`,
|
|
42
|
+
like: `%${this.searchCriteria.value}%`,
|
|
43
|
+
condition: IbFilterOperator.CONTAINS,
|
|
44
|
+
text: this.searchCriteria.value,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbSearchBar, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
48
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.1.1", type: IbSearchBar, selector: "ib-search-bar", inputs: { async: ["async", "async", booleanAttribute] }, providers: [{ provide: IbFilterBase, useExisting: IbSearchBar }], usesInheritance: true, ngImport: i0, template: `<mat-form-field
|
|
49
|
+
[formGroup]="filter?.form"
|
|
50
|
+
subscriptSizing="dynamic"
|
|
51
|
+
style="width: 100%; padding-bottom: 0"
|
|
52
|
+
>
|
|
53
|
+
<mat-icon matPrefix>search</mat-icon>
|
|
54
|
+
<input
|
|
55
|
+
matInput
|
|
56
|
+
[formControlName]="name"
|
|
57
|
+
[placeholder]="'shared.ibFilter.search' | translate"
|
|
58
|
+
/>
|
|
59
|
+
<button
|
|
60
|
+
*ngIf="searchCriteria.value"
|
|
61
|
+
matSuffix
|
|
62
|
+
mat-icon-button
|
|
63
|
+
(click)="clear()"
|
|
64
|
+
>
|
|
65
|
+
<mat-icon>close</mat-icon>
|
|
66
|
+
</button>
|
|
67
|
+
</mat-form-field>`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
|
|
68
|
+
}
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbSearchBar, decorators: [{
|
|
70
|
+
type: Component,
|
|
71
|
+
args: [{
|
|
72
|
+
selector: "ib-search-bar",
|
|
73
|
+
template: `<mat-form-field
|
|
74
|
+
[formGroup]="filter?.form"
|
|
75
|
+
subscriptSizing="dynamic"
|
|
76
|
+
style="width: 100%; padding-bottom: 0"
|
|
77
|
+
>
|
|
78
|
+
<mat-icon matPrefix>search</mat-icon>
|
|
79
|
+
<input
|
|
80
|
+
matInput
|
|
81
|
+
[formControlName]="name"
|
|
82
|
+
[placeholder]="'shared.ibFilter.search' | translate"
|
|
83
|
+
/>
|
|
84
|
+
<button
|
|
85
|
+
*ngIf="searchCriteria.value"
|
|
86
|
+
matSuffix
|
|
87
|
+
mat-icon-button
|
|
88
|
+
(click)="clear()"
|
|
89
|
+
>
|
|
90
|
+
<mat-icon>close</mat-icon>
|
|
91
|
+
</button>
|
|
92
|
+
</mat-form-field>`,
|
|
93
|
+
providers: [{ provide: IbFilterBase, useExisting: IbSearchBar }],
|
|
94
|
+
}]
|
|
95
|
+
}], propDecorators: { async: [{
|
|
96
|
+
type: Input,
|
|
97
|
+
args: [{ transform: booleanAttribute }]
|
|
98
|
+
}] } });
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvdWkva2FpLWZpbHRlci9maWx0ZXJzL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFlLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7QUEwQm5ELE1BQU0sT0FBTyxXQUFZLFNBQVEsWUFBWTtJQUMzQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0lBQ3JCLGNBQWMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRCxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBRXpCLElBQ0ksS0FBSyxDQUFDLEtBQWM7UUFDdEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWTthQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FDWCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBRTNFLE9BQU87UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssSUFBSTtZQUN6QyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRztZQUN0QyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNwQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLO1NBQ2hDLENBQUM7SUFDSixDQUFDO3VHQXJDVSxXQUFXOzJGQUFYLFdBQVcsaUVBS0YsZ0JBQWdCLGdCQVB6QixDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUMsaURBcEJ0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFtQlE7OzJGQUdQLFdBQVc7a0JBeEJ2QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBbUJRO29CQUNsQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxhQUFhLEVBQUUsQ0FBQztpQkFDakU7OEJBT0ssS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgYm9vbGVhbkF0dHJpYnV0ZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IEliRmlsdGVyT3BlcmF0b3IsIEliVGV4dFF1ZXJ5IH0gZnJvbSBcIi4uLy4uL2ZpbHRlci50eXBlc1wiO1xuaW1wb3J0IHsgY29udGFpbnMsIG5vbmUgfSBmcm9tIFwiLi4vLi4vZmlsdGVyc1wiO1xuaW1wb3J0IHsgSWJGaWx0ZXJCYXNlIH0gZnJvbSBcIi4uL2Jhc2UvZmlsdGVyLWJhc2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImliLXNlYXJjaC1iYXJcIixcbiAgdGVtcGxhdGU6IGA8bWF0LWZvcm0tZmllbGRcbiAgICBbZm9ybUdyb3VwXT1cImZpbHRlcj8uZm9ybVwiXG4gICAgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiXG4gICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgcGFkZGluZy1ib3R0b206IDBcIlxuICA+XG4gICAgPG1hdC1pY29uIG1hdFByZWZpeD5zZWFyY2g8L21hdC1pY29uPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibmFtZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ3NoYXJlZC5pYkZpbHRlci5zZWFyY2gnIHwgdHJhbnNsYXRlXCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwic2VhcmNoQ3JpdGVyaWEudmFsdWVcIlxuICAgICAgbWF0U3VmZml4XG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1mb3JtLWZpZWxkPmAsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWJGaWx0ZXJCYXNlLCB1c2VFeGlzdGluZzogSWJTZWFyY2hCYXIgfV0sXG59KVxuZXhwb3J0IGNsYXNzIEliU2VhcmNoQmFyIGV4dGVuZHMgSWJGaWx0ZXJCYXNlIHtcbiAgbmFtZSA9IFwiaWJTZWFyY2hCYXJcIjtcbiAgc2VhcmNoQ3JpdGVyaWEgPSBuZXcgRm9ybUNvbnRyb2woXCJcIiwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBkZWJvdW5jZVRpbWUgPSAwO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgYXN5bmModmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lID0gMzAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZSA9IDA7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGJ1aWxkID0gKCkgPT5cbiAgICB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlID8gY29udGFpbnModGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZSkgOiBub25lKCk7XG5cbiAgdG9RdWVyeSgpOiBJYlRleHRRdWVyeSB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZ2V4OiBgLioke3RoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWV9LipgLFxuICAgICAgbGlrZTogYCUke3RoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWV9JWAsXG4gICAgICBjb25kaXRpb246IEliRmlsdGVyT3BlcmF0b3IuQ09OVEFJTlMsXG4gICAgICB0ZXh0OiB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Component, Input, ViewEncapsulation } from "@angular/core";
|
|
2
|
+
import { FormControl } from "@angular/forms";
|
|
3
|
+
import { eq, none, or } from "../../filters";
|
|
4
|
+
import { IbFilterBase } from "../base/filter-base";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "@angular/material/input";
|
|
8
|
+
import * as i3 from "@angular/material/form-field";
|
|
9
|
+
import * as i4 from "@angular/material/button";
|
|
10
|
+
import * as i5 from "@angular/material/list";
|
|
11
|
+
import * as i6 from "../../filter-button/filter-button.component";
|
|
12
|
+
import * as i7 from "../../filter-button/filter-action-group.component";
|
|
13
|
+
import * as i8 from "@ngx-translate/core";
|
|
14
|
+
import * as i9 from "../../../../core/filter.pipe";
|
|
15
|
+
export class IbTagFilter extends IbFilterBase {
|
|
16
|
+
searchCriteria = new FormControl([], { nonNullable: true });
|
|
17
|
+
multiple = true;
|
|
18
|
+
set options(value) {
|
|
19
|
+
this.isSetByUser = true;
|
|
20
|
+
this.setOptions(value);
|
|
21
|
+
}
|
|
22
|
+
get options() {
|
|
23
|
+
return Array.from(this._options);
|
|
24
|
+
}
|
|
25
|
+
_options = new Set();
|
|
26
|
+
isSetByUser = false;
|
|
27
|
+
hasNullishValues = false;
|
|
28
|
+
query = new FormControl("", { nonNullable: true });
|
|
29
|
+
get displayLabel() {
|
|
30
|
+
if (this.rawValue?.length == 1) {
|
|
31
|
+
if (this.rawValue[0] === "__empty") {
|
|
32
|
+
return "shared.ibFilter.label.tag.empty";
|
|
33
|
+
}
|
|
34
|
+
return "shared.ibFilter.label.tag.singleItem";
|
|
35
|
+
}
|
|
36
|
+
if (this.rawValue?.length > 1) {
|
|
37
|
+
return "shared.ibFilter.label.tag.multipleItems";
|
|
38
|
+
}
|
|
39
|
+
return "";
|
|
40
|
+
}
|
|
41
|
+
get displayLabelParams() {
|
|
42
|
+
return {
|
|
43
|
+
item: this.displayValue,
|
|
44
|
+
length: this.rawValue?.length - 1,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
get displayValue() {
|
|
48
|
+
if (!Array.isArray(this.rawValue)) {
|
|
49
|
+
return "";
|
|
50
|
+
}
|
|
51
|
+
return this.rawValue[0] === "__empty" ? this.rawValue[1] : this.rawValue[0];
|
|
52
|
+
}
|
|
53
|
+
initializeFromColumn(data) {
|
|
54
|
+
if (!this.isSetByUser) {
|
|
55
|
+
this.setOptions(data.map((x) => x[this.name]));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
setOptions(options) {
|
|
59
|
+
this.hasNullishValues = options.some((a) => !a);
|
|
60
|
+
this._options = new Set(options
|
|
61
|
+
.map((a) => a)
|
|
62
|
+
.filter((a) => a)
|
|
63
|
+
.sort((a, b) => (a.toLowerCase() > b.toLowerCase() ? 1 : -1)));
|
|
64
|
+
}
|
|
65
|
+
applyFilter() {
|
|
66
|
+
this.filter.update();
|
|
67
|
+
this.button.closeMenu();
|
|
68
|
+
this.query.setValue("");
|
|
69
|
+
}
|
|
70
|
+
revertFilter() {
|
|
71
|
+
this.query.setValue("");
|
|
72
|
+
super.revertFilter();
|
|
73
|
+
}
|
|
74
|
+
build = () => {
|
|
75
|
+
if (!this.searchCriteria?.value.length) {
|
|
76
|
+
return none();
|
|
77
|
+
}
|
|
78
|
+
let items = this.searchCriteria.value
|
|
79
|
+
.filter((s) => s != "__empty")
|
|
80
|
+
.map((s) => eq(s));
|
|
81
|
+
if (this.searchCriteria.value.includes("__empty")) {
|
|
82
|
+
items = [...items, eq(null), eq(undefined), eq("")];
|
|
83
|
+
}
|
|
84
|
+
return or(items);
|
|
85
|
+
};
|
|
86
|
+
toQuery() {
|
|
87
|
+
const items = this.searchCriteria?.value
|
|
88
|
+
? this.searchCriteria?.value.filter((s) => s != "__empty").map((s) => s)
|
|
89
|
+
: [];
|
|
90
|
+
return {
|
|
91
|
+
items,
|
|
92
|
+
joined: items.join(","),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbTagFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: IbTagFilter, selector: "ib-tag-filter", inputs: { multiple: "multiple", options: "options" }, providers: [{ provide: IbFilterBase, useExisting: IbTagFilter }], usesInheritance: true, ngImport: i0, template: "<ib-filter-button [attr.data-cy]=\"'ib-tag-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value>\n {{ displayLabel | translate : displayLabelParams }}\n </span>\n\n <mat-form-field class=\"ib-tag-filter-search\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"query\" [placeholder]=\"'shared.ibFilter.search' | translate\"/>\n </mat-form-field>\n <section [formGroup]=\"filter?.form\">\n <section class=\"ib-tag-filter\">\n <mat-selection-list\n [multiple]=\"multiple\"\n [formControlName]=\"name\"\n disableRipple=\"true\"\n [attr.data-cy]=\"'ib-tag-filter-' + name + '-options'\"\n >\n @if (hasNullishValues) {\n <mat-list-option\n togglePosition=\"before\"\n [value]=\"'__empty'\"\n >\n {{ 'shared.ibFilter.includeEmpty' | translate }}\n </mat-list-option>\n }\n @for (option of options | filterBy: query.value; track option) {\n <mat-list-option\n togglePosition=\"before\"\n [value]=\"option\"\n >\n {{ option }}\n </mat-list-option>\n } @empty {\n <mat-list-item disabled>{{ 'shared.ibFilter.noItems' | translate }}</mat-list-item>\n }\n </mat-selection-list>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>\n", styles: ["section.ib-tag-filter{overflow-y:auto;min-height:40px;max-height:300px;--mdc-list-list-item-one-line-container-height: 32px;--mdc-list-list-item-two-line-container-height: 48px;--mdc-list-list-item-three-line-container-height: 72px;--mat-list-list-item-leading-icon-start-space: 16px;--mat-list-list-item-leading-icon-end-space: 32px}section.ib-tag-filter .mdc-list-item__start,section.ib-tag-filter .mdc-list-item__end{--mdc-radio-state-layer-size: 28px}section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:40px}section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:56px}.ib-tag-filter-search{margin-top:-8px;--mat-form-field-container-height: 40px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 8px;--mat-form-field-filled-with-label-container-padding-top: 8px;--mat-form-field-filled-with-label-container-padding-bottom: 8px}span.ib-filter-value{display:table-cell;max-width:32ch;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ib-tag-filter-name-hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i5.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "component", type: i5.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: i6.IbFilterButton, selector: "ib-filter-button" }, { kind: "directive", type: i7.IbFilterActionGroup, selector: "ib-filter-action-group" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.IbFilterPipe, name: "filterBy" }], encapsulation: i0.ViewEncapsulation.None });
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbTagFilter, decorators: [{
|
|
99
|
+
type: Component,
|
|
100
|
+
args: [{ selector: "ib-tag-filter", providers: [{ provide: IbFilterBase, useExisting: IbTagFilter }], encapsulation: ViewEncapsulation.None, template: "<ib-filter-button [attr.data-cy]=\"'ib-tag-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value>\n {{ displayLabel | translate : displayLabelParams }}\n </span>\n\n <mat-form-field class=\"ib-tag-filter-search\" subscriptSizing=\"dynamic\">\n <input matInput [formControl]=\"query\" [placeholder]=\"'shared.ibFilter.search' | translate\"/>\n </mat-form-field>\n <section [formGroup]=\"filter?.form\">\n <section class=\"ib-tag-filter\">\n <mat-selection-list\n [multiple]=\"multiple\"\n [formControlName]=\"name\"\n disableRipple=\"true\"\n [attr.data-cy]=\"'ib-tag-filter-' + name + '-options'\"\n >\n @if (hasNullishValues) {\n <mat-list-option\n togglePosition=\"before\"\n [value]=\"'__empty'\"\n >\n {{ 'shared.ibFilter.includeEmpty' | translate }}\n </mat-list-option>\n }\n @for (option of options | filterBy: query.value; track option) {\n <mat-list-option\n togglePosition=\"before\"\n [value]=\"option\"\n >\n {{ option }}\n </mat-list-option>\n } @empty {\n <mat-list-item disabled>{{ 'shared.ibFilter.noItems' | translate }}</mat-list-item>\n }\n </mat-selection-list>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>\n", styles: ["section.ib-tag-filter{overflow-y:auto;min-height:40px;max-height:300px;--mdc-list-list-item-one-line-container-height: 32px;--mdc-list-list-item-two-line-container-height: 48px;--mdc-list-list-item-three-line-container-height: 72px;--mat-list-list-item-leading-icon-start-space: 16px;--mat-list-list-item-leading-icon-end-space: 32px}section.ib-tag-filter .mdc-list-item__start,section.ib-tag-filter .mdc-list-item__end{--mdc-radio-state-layer-size: 28px}section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-one-line,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-one-line,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-one-line{height:40px}section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines,section.ib-tag-filter .mat-mdc-list-item.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines{height:56px}.ib-tag-filter-search{margin-top:-8px;--mat-form-field-container-height: 40px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 8px;--mat-form-field-filled-with-label-container-padding-top: 8px;--mat-form-field-filled-with-label-container-padding-bottom: 8px}span.ib-filter-value{display:table-cell;max-width:32ch;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.ib-tag-filter-name-hidden{display:none}\n"] }]
|
|
101
|
+
}], propDecorators: { multiple: [{
|
|
102
|
+
type: Input
|
|
103
|
+
}], options: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}] } });
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXRhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvdWkva2FpLWZpbHRlci9maWx0ZXJzL3RhZy9maWx0ZXItdGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS91aS9rYWktZmlsdGVyL2ZpbHRlcnMvdGFnL2ZpbHRlci10YWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7O0FBU25ELE1BQU0sT0FBTyxXQUFZLFNBQVEsWUFBWTtJQUMzQyxjQUFjLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbkQsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN6QixJQUNJLE9BQU8sQ0FBQyxLQUFlO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUNELElBQUksT0FBTztRQUNULE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNPLFFBQVEsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNsQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBRTVCLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUN6QixLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFbkQsSUFBSSxZQUFZO1FBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ25DLE9BQU8saUNBQWlDLENBQUM7WUFDM0MsQ0FBQztZQUNELE9BQU8sc0NBQXNDLENBQUM7UUFDaEQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyx5Q0FBeUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQztTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVc7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUFDLE9BQWlCO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQ3JCLE9BQU87YUFDSixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNiLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ2hCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ2hFLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxHQUFHLEdBQWdCLEVBQUU7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSzthQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7YUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xELEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUs7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxPQUFPO1lBQ0wsS0FBSztZQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUN4QixDQUFDO0lBQ0osQ0FBQzt1R0FsR1UsV0FBVzsyRkFBWCxXQUFXLDhGQUhYLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxpRENWbEUsZ3hEQWdEQTs7MkZEbkNhLFdBQVc7a0JBUHZCLFNBQVM7K0JBQ0UsZUFBZSxhQUdkLENBQUMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsYUFBYSxFQUFFLENBQUMsaUJBQ2pELGlCQUFpQixDQUFDLElBQUk7OEJBSzVCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUYsT0FBTztzQkFEVixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEliRmlsdGVyRGVmLCBJYlRhZ1F1ZXJ5IH0gZnJvbSBcIi4uLy4uL2ZpbHRlci50eXBlc1wiO1xuaW1wb3J0IHsgZXEsIG5vbmUsIG9yIH0gZnJvbSBcIi4uLy4uL2ZpbHRlcnNcIjtcbmltcG9ydCB7IEliRmlsdGVyQmFzZSB9IGZyb20gXCIuLi9iYXNlL2ZpbHRlci1iYXNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJpYi10YWctZmlsdGVyXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZmlsdGVyLXRhZy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZmlsdGVyLXRhZy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBJYkZpbHRlckJhc2UsIHVzZUV4aXN0aW5nOiBJYlRhZ0ZpbHRlciB9XSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgSWJUYWdGaWx0ZXIgZXh0ZW5kcyBJYkZpbHRlckJhc2Uge1xuICBzZWFyY2hDcml0ZXJpYSA9IG5ldyBGb3JtQ29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcblxuICBASW5wdXQoKSBtdWx0aXBsZSA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuaXNTZXRCeVVzZXIgPSB0cnVlO1xuICAgIHRoaXMuc2V0T3B0aW9ucyh2YWx1ZSk7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fb3B0aW9ucyk7XG4gIH1cbiAgcHJpdmF0ZSBfb3B0aW9uczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIHByaXZhdGUgaXNTZXRCeVVzZXIgPSBmYWxzZTtcblxuICBoYXNOdWxsaXNoVmFsdWVzID0gZmFsc2U7XG4gIHF1ZXJ5ID0gbmV3IEZvcm1Db250cm9sKFwiXCIsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG5cbiAgZ2V0IGRpc3BsYXlMYWJlbCgpIHtcbiAgICBpZiAodGhpcy5yYXdWYWx1ZT8ubGVuZ3RoID09IDEpIHtcbiAgICAgIGlmICh0aGlzLnJhd1ZhbHVlWzBdID09PSBcIl9fZW1wdHlcIikge1xuICAgICAgICByZXR1cm4gXCJzaGFyZWQuaWJGaWx0ZXIubGFiZWwudGFnLmVtcHR5XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gXCJzaGFyZWQuaWJGaWx0ZXIubGFiZWwudGFnLnNpbmdsZUl0ZW1cIjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yYXdWYWx1ZT8ubGVuZ3RoID4gMSkge1xuICAgICAgcmV0dXJuIFwic2hhcmVkLmliRmlsdGVyLmxhYmVsLnRhZy5tdWx0aXBsZUl0ZW1zXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXQgZGlzcGxheUxhYmVsUGFyYW1zKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtOiB0aGlzLmRpc3BsYXlWYWx1ZSxcbiAgICAgIGxlbmd0aDogdGhpcy5yYXdWYWx1ZT8ubGVuZ3RoIC0gMSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGRpc3BsYXlWYWx1ZSgpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5yYXdWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZVswXSA9PT0gXCJfX2VtcHR5XCIgPyB0aGlzLnJhd1ZhbHVlWzFdIDogdGhpcy5yYXdWYWx1ZVswXTtcbiAgfVxuXG4gIGluaXRpYWxpemVGcm9tQ29sdW1uKGRhdGE6IGFueVtdKSB7XG4gICAgaWYgKCF0aGlzLmlzU2V0QnlVc2VyKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMoZGF0YS5tYXAoKHgpID0+IHhbdGhpcy5uYW1lXSkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucyhvcHRpb25zOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuaGFzTnVsbGlzaFZhbHVlcyA9IG9wdGlvbnMuc29tZSgoYSkgPT4gIWEpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBuZXcgU2V0KFxuICAgICAgb3B0aW9uc1xuICAgICAgICAubWFwKChhKSA9PiBhKVxuICAgICAgICAuZmlsdGVyKChhKSA9PiBhKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gKGEudG9Mb3dlckNhc2UoKSA+IGIudG9Mb3dlckNhc2UoKSA/IDEgOiAtMSkpXG4gICAgKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKCkge1xuICAgIHRoaXMuZmlsdGVyLnVwZGF0ZSgpO1xuICAgIHRoaXMuYnV0dG9uLmNsb3NlTWVudSgpO1xuICAgIHRoaXMucXVlcnkuc2V0VmFsdWUoXCJcIik7XG4gIH1cblxuICByZXZlcnRGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeS5zZXRWYWx1ZShcIlwiKTtcbiAgICBzdXBlci5yZXZlcnRGaWx0ZXIoKTtcbiAgfVxuXG4gIGJ1aWxkID0gKCk6IEliRmlsdGVyRGVmID0+IHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQ3JpdGVyaWE/LnZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5vbmUoKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbXMgPSB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlXG4gICAgICAuZmlsdGVyKChzKSA9PiBzICE9IFwiX19lbXB0eVwiKVxuICAgICAgLm1hcCgocykgPT4gZXEocykpO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUuaW5jbHVkZXMoXCJfX2VtcHR5XCIpKSB7XG4gICAgICBpdGVtcyA9IFsuLi5pdGVtcywgZXEobnVsbCksIGVxKHVuZGVmaW5lZCksIGVxKFwiXCIpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3IoaXRlbXMpO1xuICB9O1xuXG4gIHRvUXVlcnkoKTogSWJUYWdRdWVyeSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnNlYXJjaENyaXRlcmlhPy52YWx1ZVxuICAgICAgPyB0aGlzLnNlYXJjaENyaXRlcmlhPy52YWx1ZS5maWx0ZXIoKHMpID0+IHMgIT0gXCJfX2VtcHR5XCIpLm1hcCgocykgPT4gcylcbiAgICAgIDogW107XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zLFxuICAgICAgam9pbmVkOiBpdGVtcy5qb2luKFwiLFwiKSxcbiAgICB9O1xuICB9XG59XG4iLCI8aWItZmlsdGVyLWJ1dHRvbiBbYXR0ci5kYXRhLWN5XT1cIidpYi10YWctZmlsdGVyLScgKyBuYW1lXCI+XG4gIDxzcGFuIGliLWZpbHRlci1uYW1lPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG4gIDxzcGFuIGliLWZpbHRlci12YWx1ZT5cbiAgICB7eyBkaXNwbGF5TGFiZWwgfCB0cmFuc2xhdGUgOiBkaXNwbGF5TGFiZWxQYXJhbXMgfX1cbiAgPC9zcGFuPlxuXG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImliLXRhZy1maWx0ZXItc2VhcmNoXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwicXVlcnlcIiBbcGxhY2Vob2xkZXJdPVwiJ3NoYXJlZC5pYkZpbHRlci5zZWFyY2gnIHwgdHJhbnNsYXRlXCIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT1cImZpbHRlcj8uZm9ybVwiPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWItdGFnLWZpbHRlclwiPlxuICAgICAgPG1hdC1zZWxlY3Rpb24tbGlzdFxuICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIm5hbWVcIlxuICAgICAgICBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2liLXRhZy1maWx0ZXItJyArIG5hbWUgKyAnLW9wdGlvbnMnXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChoYXNOdWxsaXNoVmFsdWVzKSB7XG4gICAgICAgICAgPG1hdC1saXN0LW9wdGlvblxuICAgICAgICAgICAgdG9nZ2xlUG9zaXRpb249XCJiZWZvcmVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIidfX2VtcHR5J1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ3NoYXJlZC5pYkZpbHRlci5pbmNsdWRlRW1wdHknIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAob3B0aW9uIG9mIG9wdGlvbnMgfCBmaWx0ZXJCeTogcXVlcnkudmFsdWU7IHRyYWNrIG9wdGlvbikge1xuICAgICAgICAgIDxtYXQtbGlzdC1vcHRpb25cbiAgICAgICAgICAgIHRvZ2dsZVBvc2l0aW9uPVwiYmVmb3JlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICAgICAgICB9IEBlbXB0eSB7XG4gICAgICAgICAgPG1hdC1saXN0LWl0ZW0gZGlzYWJsZWQ+e3sgJ3NoYXJlZC5pYkZpbHRlci5ub0l0ZW1zJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxpc3QtaXRlbT5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtc2VsZWN0aW9uLWxpc3Q+XG4gICAgPC9zZWN0aW9uPlxuICA8L3NlY3Rpb24+XG5cbiAgPGliLWZpbHRlci1hY3Rpb24tZ3JvdXA+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgW2Rpc2FibGVkXT1cIiFpc0RpcnR5XCIgW2F0dHIuZGF0YS1jeV09XCInaWItZmlsdGVyLWNsZWFyJ1wiPlxuICAgICAge3sgXCJzaGFyZWQuaWJGaWx0ZXIuY2xlYXJcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXIoKVwiIFthdHRyLmRhdGEtY3ldPVwiJ2liLWZpbHRlci11cGRhdGUnXCI+XG4gICAgICB7eyBcInNoYXJlZC5pYkZpbHRlci51cGRhdGVcIiB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2liLWZpbHRlci1hY3Rpb24tZ3JvdXA+XG48L2liLWZpbHRlci1idXR0b24+XG4iXX0=
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Component } from "@angular/core";
|
|
2
|
+
import { FormControl, FormGroup, Validators } from "@angular/forms";
|
|
3
|
+
import { IbFilterOperator } from "../../filter.types";
|
|
4
|
+
import { none } from "../../filters";
|
|
5
|
+
import { IbFilterBase } from "../base/filter-base";
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
import * as i2 from "@angular/forms";
|
|
9
|
+
import * as i3 from "@angular/material/input";
|
|
10
|
+
import * as i4 from "@angular/material/form-field";
|
|
11
|
+
import * as i5 from "@angular/material/button";
|
|
12
|
+
import * as i6 from "@angular/material/select";
|
|
13
|
+
import * as i7 from "@angular/material/core";
|
|
14
|
+
import * as i8 from "../../filter-button/filter-button.component";
|
|
15
|
+
import * as i9 from "../../filter-button/filter-action-group.component";
|
|
16
|
+
import * as i10 from "@ngx-translate/core";
|
|
17
|
+
export class IbTextFilter extends IbFilterBase {
|
|
18
|
+
searchCriteria = new FormGroup({
|
|
19
|
+
operator: new FormControl(IbFilterOperator.CONTAINS, {
|
|
20
|
+
validators: [Validators.required],
|
|
21
|
+
nonNullable: true,
|
|
22
|
+
}),
|
|
23
|
+
value: new FormControl(null, { nonNullable: true }),
|
|
24
|
+
});
|
|
25
|
+
operators = [
|
|
26
|
+
{
|
|
27
|
+
value: IbFilterOperator.EQUALS,
|
|
28
|
+
displayValue: "shared.ibFilter.eq",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
value: IbFilterOperator.CONTAINS,
|
|
32
|
+
displayValue: "shared.ibFilter.contains",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
value: IbFilterOperator.STARTS_WITH,
|
|
36
|
+
displayValue: "shared.ibFilter.startsWith",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
value: IbFilterOperator.ENDS_WITH,
|
|
40
|
+
displayValue: "shared.ibFilter.endsWith",
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
get displayCondition() {
|
|
44
|
+
const operator = this.rawValue.operator;
|
|
45
|
+
return this.operators.find((o) => o.value === operator)?.displayValue;
|
|
46
|
+
}
|
|
47
|
+
get displayValue() {
|
|
48
|
+
return this.rawValue.value;
|
|
49
|
+
}
|
|
50
|
+
clear() {
|
|
51
|
+
this.searchCriteria.setValue({
|
|
52
|
+
operator: IbFilterOperator.CONTAINS,
|
|
53
|
+
value: "",
|
|
54
|
+
});
|
|
55
|
+
this.filter?.update();
|
|
56
|
+
}
|
|
57
|
+
build() {
|
|
58
|
+
if (!this.searchCriteria.value.value) {
|
|
59
|
+
return none();
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
operator: this.searchCriteria.value.operator,
|
|
63
|
+
value: this.searchCriteria.value.value,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
toQuery() {
|
|
67
|
+
const text = this.searchCriteria.value.value;
|
|
68
|
+
if (!text) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
let regex, like;
|
|
72
|
+
const condition = this.searchCriteria.value.operator;
|
|
73
|
+
if (condition == IbFilterOperator.CONTAINS) {
|
|
74
|
+
regex = `.*${text}.*`;
|
|
75
|
+
like = `%${text}%`;
|
|
76
|
+
}
|
|
77
|
+
if (condition == IbFilterOperator.STARTS_WITH) {
|
|
78
|
+
regex = `^${text}.*`;
|
|
79
|
+
like = `${text}%`;
|
|
80
|
+
}
|
|
81
|
+
if (condition == IbFilterOperator.ENDS_WITH) {
|
|
82
|
+
regex = `.*${text}$`;
|
|
83
|
+
like = `%${text}`;
|
|
84
|
+
}
|
|
85
|
+
if (condition == IbFilterOperator.EQUALS) {
|
|
86
|
+
regex = `^${text}$`;
|
|
87
|
+
like = text;
|
|
88
|
+
}
|
|
89
|
+
return { regex, like, condition, text };
|
|
90
|
+
}
|
|
91
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbTextFilter, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.1", type: IbTextFilter, selector: "ib-text-filter", providers: [{ provide: IbFilterBase, useExisting: IbTextFilter }], usesInheritance: true, ngImport: i0, template: "<ib-filter-button [attr.data-cy]=\"'ib-text-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value *ngIf=\"isDirty\">\n {{ displayCondition | translate | lowercase }} \"{{ displayValue }}\"\n </span>\n\n <section [formGroup]=\"filter?.form\" style=\"padding: 0.5em 1em 0 1em\">\n <section [formGroupName]=\"name\">\n <mat-form-field style=\"width: 100%\">\n <mat-label>{{ \"shared.ibFilter.condition\" | translate }}</mat-label>\n <mat-select formControlName=\"operator\" [attr.data-cy]=\"'ib-text-filter-' + name + '-condition'\">\n <mat-option *ngFor=\"let operator of operators\" [value]=\"operator.value\">\n {{ operator.displayValue | translate }}\n </mat-option>\n </mat-select>\n <mat-error>{{ \"shared.ibFilter.condition\" | translate }}\n {{ \"shared.ibKaiFilter.required\" | translate }}</mat-error>\n </mat-form-field>\n <mat-form-field style=\"width: 100%\">\n <mat-label>{{ \"shared.ibFilter.value\" | translate }}</mat-label>\n <input matInput formControlName=\"value\" [attr.data-cy]=\"'ib-text-filter-' + name + '-value'\" />\n <mat-error>{{ \"shared.ibFilter.value\" | translate }}\n {{ \"shared.ibKaiFilter.required\" | translate }}</mat-error>\n </mat-form-field>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.IbFilterButton, selector: "ib-filter-button" }, { kind: "directive", type: i9.IbFilterActionGroup, selector: "ib-filter-action-group" }, { kind: "pipe", type: i1.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] });
|
|
93
|
+
}
|
|
94
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbTextFilter, decorators: [{
|
|
95
|
+
type: Component,
|
|
96
|
+
args: [{ selector: "ib-text-filter", providers: [{ provide: IbFilterBase, useExisting: IbTextFilter }], template: "<ib-filter-button [attr.data-cy]=\"'ib-text-filter-' + name\">\n <span ib-filter-name><ng-content></ng-content></span>\n <span ib-filter-value *ngIf=\"isDirty\">\n {{ displayCondition | translate | lowercase }} \"{{ displayValue }}\"\n </span>\n\n <section [formGroup]=\"filter?.form\" style=\"padding: 0.5em 1em 0 1em\">\n <section [formGroupName]=\"name\">\n <mat-form-field style=\"width: 100%\">\n <mat-label>{{ \"shared.ibFilter.condition\" | translate }}</mat-label>\n <mat-select formControlName=\"operator\" [attr.data-cy]=\"'ib-text-filter-' + name + '-condition'\">\n <mat-option *ngFor=\"let operator of operators\" [value]=\"operator.value\">\n {{ operator.displayValue | translate }}\n </mat-option>\n </mat-select>\n <mat-error>{{ \"shared.ibFilter.condition\" | translate }}\n {{ \"shared.ibKaiFilter.required\" | translate }}</mat-error>\n </mat-form-field>\n <mat-form-field style=\"width: 100%\">\n <mat-label>{{ \"shared.ibFilter.value\" | translate }}</mat-label>\n <input matInput formControlName=\"value\" [attr.data-cy]=\"'ib-text-filter-' + name + '-value'\" />\n <mat-error>{{ \"shared.ibFilter.value\" | translate }}\n {{ \"shared.ibKaiFilter.required\" | translate }}</mat-error>\n </mat-form-field>\n </section>\n </section>\n\n <ib-filter-action-group>\n <button mat-button (click)=\"clear()\" [disabled]=\"!isDirty\" [attr.data-cy]=\"'ib-filter-clear'\">\n {{ \"shared.ibFilter.clear\" | translate }}\n </button>\n <button mat-button color=\"primary\" (click)=\"applyFilter()\" [attr.data-cy]=\"'ib-filter-update'\">\n {{ \"shared.ibFilter.update\" | translate }}\n </button>\n </ib-filter-action-group>\n</ib-filter-button>" }]
|
|
97
|
+
}] });
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXRleHQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9pbm9iZXRhLXVpL3VpL2thaS1maWx0ZXIvZmlsdGVycy90ZXh0L2ZpbHRlci10ZXh0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS91aS9rYWktZmlsdGVyL2ZpbHRlcnMvdGV4dC9maWx0ZXItdGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBZSxnQkFBZ0IsRUFBZSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPbkQsTUFBTSxPQUFPLFlBQWEsU0FBUSxZQUFZO0lBQzVDLGNBQWMsR0FBRyxJQUFJLFNBQVMsQ0FBQztRQUM3QixRQUFRLEVBQUUsSUFBSSxXQUFXLENBQW1CLGdCQUFnQixDQUFDLFFBQVEsRUFBRTtZQUNyRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2pDLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQUM7UUFDRixLQUFLLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO0tBQ3BELENBQUMsQ0FBQztJQUVILFNBQVMsR0FBRztRQUNWO1lBQ0UsS0FBSyxFQUFFLGdCQUFnQixDQUFDLE1BQU07WUFDOUIsWUFBWSxFQUFFLG9CQUFvQjtTQUNuQztR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RWYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBJYkZpbHRlckRlZiwgSWJGaWx0ZXJPcGVyYXRvciwgSWJUZXh0UXVlcnkgfSBmcm9tIFwiLi4vLi4vZmlsdGVyLnR5cGVzXCI7XG5pbXBvcnQgeyBub25lIH0gZnJvbSBcIi4uLy4uL2ZpbHRlcnNcIjtcbmltcG9ydCB7IEliRmlsdGVyQmFzZSB9IGZyb20gXCIuLi9iYXNlL2ZpbHRlci1iYXNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJpYi10ZXh0LWZpbHRlclwiLFxuICB0ZW1wbGF0ZVVybDogXCJmaWx0ZXItdGV4dC5jb21wb25lbnQuaHRtbFwiLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEliRmlsdGVyQmFzZSwgdXNlRXhpc3Rpbmc6IEliVGV4dEZpbHRlciB9XSxcbn0pXG5leHBvcnQgY2xhc3MgSWJUZXh0RmlsdGVyIGV4dGVuZHMgSWJGaWx0ZXJCYXNlIHtcbiAgc2VhcmNoQ3JpdGVyaWEgPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBvcGVyYXRvcjogbmV3IEZvcm1Db250cm9sPEliRmlsdGVyT3BlcmF0b3I+KEliRmlsdGVyT3BlcmF0b3IuQ09OVEFJTlMsIHtcbiAgICAgIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG5vbk51bGxhYmxlOiB0cnVlLFxuICAgIH0pLFxuICAgIHZhbHVlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSxcbiAgfSk7XG5cbiAgb3BlcmF0b3JzID0gW1xuICAgIHtcbiAgICAgIHZhbHVlOiBJYkZpbHRlck9wZXJhdG9yLkVRVUFMUyxcbiAgICAgIGRpc3BsYXlWYWx1ZTogXCJzaGFyZWQuaWJGaWx0ZXIuZXFcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBJYkZpbHRlck9wZXJhdG9yLkNPTlRBSU5TLFxuICAgICAgZGlzcGxheVZhbHVlOiBcInNoYXJlZC5pYkZpbHRlci5jb250YWluc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgdmFsdWU6IEliRmlsdGVyT3BlcmF0b3IuU1RBUlRTX1dJVEgsXG4gICAgICBkaXNwbGF5VmFsdWU6IFwic2hhcmVkLmliRmlsdGVyLnN0YXJ0c1dpdGhcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHZhbHVlOiBJYkZpbHRlck9wZXJhdG9yLkVORFNfV0lUSCxcbiAgICAgIGRpc3BsYXlWYWx1ZTogXCJzaGFyZWQuaWJGaWx0ZXIuZW5kc1dpdGhcIixcbiAgICB9LFxuICBdO1xuXG4gIGdldCBkaXNwbGF5Q29uZGl0aW9uKCkge1xuICAgIGNvbnN0IG9wZXJhdG9yID0gdGhpcy5yYXdWYWx1ZS5vcGVyYXRvcjtcbiAgICByZXR1cm4gdGhpcy5vcGVyYXRvcnMuZmluZCgobykgPT4gby52YWx1ZSA9PT0gb3BlcmF0b3IpPy5kaXNwbGF5VmFsdWU7XG4gIH1cblxuICBnZXQgZGlzcGxheVZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlLnZhbHVlO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hDcml0ZXJpYS5zZXRWYWx1ZSh7XG4gICAgICBvcGVyYXRvcjogSWJGaWx0ZXJPcGVyYXRvci5DT05UQUlOUyxcbiAgICAgIHZhbHVlOiBcIlwiLFxuICAgIH0pO1xuICAgIHRoaXMuZmlsdGVyPy51cGRhdGUoKTtcbiAgfVxuXG4gIGJ1aWxkKCk6IEliRmlsdGVyRGVmIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUudmFsdWUpIHtcbiAgICAgIHJldHVybiBub25lKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlLm9wZXJhdG9yLFxuICAgICAgdmFsdWU6IHRoaXMuc2VhcmNoQ3JpdGVyaWEudmFsdWUudmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHRvUXVlcnkoKTogSWJUZXh0UXVlcnkge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnNlYXJjaENyaXRlcmlhLnZhbHVlLnZhbHVlO1xuICAgIGlmICghdGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCByZWdleDogc3RyaW5nLCBsaWtlOiBzdHJpbmc7XG4gICAgY29uc3QgY29uZGl0aW9uID0gdGhpcy5zZWFyY2hDcml0ZXJpYS52YWx1ZS5vcGVyYXRvcjtcbiAgICBpZiAoY29uZGl0aW9uID09IEliRmlsdGVyT3BlcmF0b3IuQ09OVEFJTlMpIHtcbiAgICAgIHJlZ2V4ID0gYC4qJHt0ZXh0fS4qYDtcbiAgICAgIGxpa2UgPSBgJSR7dGV4dH0lYDtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uID09IEliRmlsdGVyT3BlcmF0b3IuU1RBUlRTX1dJVEgpIHtcbiAgICAgIHJlZ2V4ID0gYF4ke3RleHR9LipgO1xuICAgICAgbGlrZSA9IGAke3RleHR9JWA7XG4gICAgfVxuXG4gICAgaWYgKGNvbmRpdGlvbiA9PSBJYkZpbHRlck9wZXJhdG9yLkVORFNfV0lUSCkge1xuICAgICAgcmVnZXggPSBgLioke3RleHR9JGA7XG4gICAgICBsaWtlID0gYCUke3RleHR9YDtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uID09IEliRmlsdGVyT3BlcmF0b3IuRVFVQUxTKSB7XG4gICAgICByZWdleCA9IGBeJHt0ZXh0fSRgO1xuICAgICAgbGlrZSA9IHRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmVnZXgsIGxpa2UsIGNvbmRpdGlvbiwgdGV4dCB9O1xuICB9XG59XG4iLCI8aWItZmlsdGVyLWJ1dHRvbiBbYXR0ci5kYXRhLWN5XT1cIidpYi10ZXh0LWZpbHRlci0nICsgbmFtZVwiPlxuICA8c3BhbiBpYi1maWx0ZXItbmFtZT48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9zcGFuPlxuICA8c3BhbiBpYi1maWx0ZXItdmFsdWUgKm5nSWY9XCJpc0RpcnR5XCI+XG4gICAge3sgZGlzcGxheUNvbmRpdGlvbiB8IHRyYW5zbGF0ZSB8IGxvd2VyY2FzZSB9fSBcInt7IGRpc3BsYXlWYWx1ZSB9fVwiXG4gIDwvc3Bhbj5cblxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT1cImZpbHRlcj8uZm9ybVwiIHN0eWxlPVwicGFkZGluZzogMC41ZW0gMWVtIDAgMWVtXCI+XG4gICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPVwibmFtZVwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcInNoYXJlZC5pYkZpbHRlci5jb25kaXRpb25cIiB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJvcGVyYXRvclwiIFthdHRyLmRhdGEtY3ldPVwiJ2liLXRleHQtZmlsdGVyLScgKyBuYW1lICsgJy1jb25kaXRpb24nXCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wZXJhdG9yIG9mIG9wZXJhdG9yc1wiIFt2YWx1ZV09XCJvcGVyYXRvci52YWx1ZVwiPlxuICAgICAgICAgICAge3sgb3BlcmF0b3IuZGlzcGxheVZhbHVlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDxtYXQtZXJyb3I+e3sgXCJzaGFyZWQuaWJGaWx0ZXIuY29uZGl0aW9uXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICB7eyBcInNoYXJlZC5pYkthaUZpbHRlci5yZXF1aXJlZFwiIHwgdHJhbnNsYXRlIH19PC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIHN0eWxlPVwid2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcInNoYXJlZC5pYkZpbHRlci52YWx1ZVwiIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ2YWx1ZVwiIFthdHRyLmRhdGEtY3ldPVwiJ2liLXRleHQtZmlsdGVyLScgKyBuYW1lICsgJy12YWx1ZSdcIiAvPlxuICAgICAgICA8bWF0LWVycm9yPnt7IFwic2hhcmVkLmliRmlsdGVyLnZhbHVlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICB7eyBcInNoYXJlZC5pYkthaUZpbHRlci5yZXF1aXJlZFwiIHwgdHJhbnNsYXRlIH19PC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvc2VjdGlvbj5cbiAgPC9zZWN0aW9uPlxuXG4gIDxpYi1maWx0ZXItYWN0aW9uLWdyb3VwPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiY2xlYXIoKVwiIFtkaXNhYmxlZF09XCIhaXNEaXJ0eVwiIFthdHRyLmRhdGEtY3ldPVwiJ2liLWZpbHRlci1jbGVhcidcIj5cbiAgICAgIHt7IFwic2hhcmVkLmliRmlsdGVyLmNsZWFyXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFwcGx5RmlsdGVyKClcIiBbYXR0ci5kYXRhLWN5XT1cIidpYi1maWx0ZXItdXBkYXRlJ1wiPlxuICAgICAge3sgXCJzaGFyZWQuaWJGaWx0ZXIudXBkYXRlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9pYi1maWx0ZXItYWN0aW9uLWdyb3VwPlxuPC9pYi1maWx0ZXItYnV0dG9uPiJdfQ==
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { IbFilterOperator } from "./filter.types";
|
|
2
|
+
export const eq = (value) => ({
|
|
3
|
+
operator: IbFilterOperator.EQUALS,
|
|
4
|
+
value,
|
|
5
|
+
});
|
|
6
|
+
export const neq = (value) => ({
|
|
7
|
+
operator: IbFilterOperator.NOT_EQUALS,
|
|
8
|
+
value,
|
|
9
|
+
});
|
|
10
|
+
export const gt = (value) => ({
|
|
11
|
+
operator: IbFilterOperator.GREATER_THAN,
|
|
12
|
+
value,
|
|
13
|
+
});
|
|
14
|
+
export const gte = (value) => ({
|
|
15
|
+
operator: IbFilterOperator.GREATER_THAN_EQUALS,
|
|
16
|
+
value,
|
|
17
|
+
});
|
|
18
|
+
export const lt = (value) => ({
|
|
19
|
+
operator: IbFilterOperator.LESS_THAN,
|
|
20
|
+
value,
|
|
21
|
+
});
|
|
22
|
+
export const lte = (value) => ({
|
|
23
|
+
operator: IbFilterOperator.LESS_THAN_EQUALS,
|
|
24
|
+
value,
|
|
25
|
+
});
|
|
26
|
+
export const contains = (value) => ({
|
|
27
|
+
operator: IbFilterOperator.CONTAINS,
|
|
28
|
+
value,
|
|
29
|
+
});
|
|
30
|
+
export const ncontains = (value) => ({
|
|
31
|
+
operator: IbFilterOperator.NOT_CONTAINS,
|
|
32
|
+
value,
|
|
33
|
+
});
|
|
34
|
+
export const startsWith = (value) => ({
|
|
35
|
+
operator: IbFilterOperator.STARTS_WITH,
|
|
36
|
+
value,
|
|
37
|
+
});
|
|
38
|
+
export const endsWith = (value) => ({
|
|
39
|
+
operator: IbFilterOperator.ENDS_WITH,
|
|
40
|
+
value,
|
|
41
|
+
});
|
|
42
|
+
export const and = (value) => ({
|
|
43
|
+
operator: IbFilterOperator.AND,
|
|
44
|
+
value,
|
|
45
|
+
});
|
|
46
|
+
export const or = (value) => ({
|
|
47
|
+
operator: IbFilterOperator.OR,
|
|
48
|
+
value,
|
|
49
|
+
});
|
|
50
|
+
export const none = () => ({
|
|
51
|
+
operator: IbFilterOperator.NONE,
|
|
52
|
+
value: null,
|
|
53
|
+
});
|
|
54
|
+
export function applyFilter(filter, filterValue) {
|
|
55
|
+
if (!filter) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
if (!filter.operator) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
if (filter.operator === IbFilterOperator.OR) {
|
|
62
|
+
return filter.value.some((subFilter) => applyFilter(subFilter, filterValue));
|
|
63
|
+
}
|
|
64
|
+
if (filter.operator === IbFilterOperator.AND) {
|
|
65
|
+
return filter.value.every((subFilter) => applyFilter(subFilter, filterValue));
|
|
66
|
+
}
|
|
67
|
+
return evalOperation(filter.operator, filter.value, filterValue);
|
|
68
|
+
}
|
|
69
|
+
export function evalOperation(operation, value, filterValue) {
|
|
70
|
+
const valueType = typeof value;
|
|
71
|
+
const filterValueType = typeof filterValue;
|
|
72
|
+
if (filterValue instanceof Date) {
|
|
73
|
+
filterValue = filterValue.toISOString();
|
|
74
|
+
}
|
|
75
|
+
if (valueType == "string") {
|
|
76
|
+
value = value.trim().toLowerCase();
|
|
77
|
+
}
|
|
78
|
+
if (filterValueType == "string") {
|
|
79
|
+
filterValue = filterValue.trim().toLowerCase();
|
|
80
|
+
if (operation === IbFilterOperator.CONTAINS) {
|
|
81
|
+
return filterValue.indexOf(value) != -1;
|
|
82
|
+
}
|
|
83
|
+
if (operation === IbFilterOperator.NOT_CONTAINS) {
|
|
84
|
+
return filterValue.indexOf(value) === -1;
|
|
85
|
+
}
|
|
86
|
+
if (operation === IbFilterOperator.STARTS_WITH) {
|
|
87
|
+
return filterValue.startsWith(value);
|
|
88
|
+
}
|
|
89
|
+
if (operation === IbFilterOperator.ENDS_WITH) {
|
|
90
|
+
return filterValue.endsWith(value);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (operation === IbFilterOperator.EQUALS) {
|
|
94
|
+
return filterValue === value;
|
|
95
|
+
}
|
|
96
|
+
if (operation === IbFilterOperator.GREATER_THAN) {
|
|
97
|
+
return filterValue > value;
|
|
98
|
+
}
|
|
99
|
+
if (operation === IbFilterOperator.GREATER_THAN_EQUALS) {
|
|
100
|
+
return filterValue >= value;
|
|
101
|
+
}
|
|
102
|
+
if (operation === IbFilterOperator.LESS_THAN) {
|
|
103
|
+
return filterValue < value;
|
|
104
|
+
}
|
|
105
|
+
if (operation === IbFilterOperator.LESS_THAN_EQUALS) {
|
|
106
|
+
return filterValue <= value;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS91aS9rYWktZmlsdGVyL2ZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO0lBQ2pDLEtBQUs7Q0FDTixDQUFDLENBQUM7QUFDSCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFVBQVU7SUFDckMsS0FBSztDQUNOLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBZSxFQUFFLENBQUMsQ0FBQztJQUN6QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsWUFBWTtJQUN2QyxLQUFLO0NBQ04sQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFBbUI7SUFDOUMsS0FBSztDQUNOLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBZSxFQUFFLENBQUMsQ0FBQztJQUN6QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztJQUNwQyxLQUFLO0NBQ04sQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxnQkFBZ0I7SUFDM0MsS0FBSztD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QUFLLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDcEQsT0FBTyxXQUFXLElBQUksS0FBSyxDQUFDO0lBQzlCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSWJGaWx0ZXJEZWYsIEliRmlsdGVyT3BlcmF0b3IgfSBmcm9tIFwiLi9maWx0ZXIudHlwZXNcIjtcblxuZXhwb3J0IGNvbnN0IGVxID0gKHZhbHVlKTogSWJGaWx0ZXJEZWYgPT4gKHtcbiAgb3BlcmF0b3I6IEliRmlsdGVyT3BlcmF0b3IuRVFVQUxTLFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IG5lcSA9ICh2YWx1ZSk6IEliRmlsdGVyRGVmID0+ICh7XG4gIG9wZXJhdG9yOiBJYkZpbHRlck9wZXJhdG9yLk5PVF9FUVVBTFMsXG4gIHZhbHVlLFxufSk7XG5leHBvcnQgY29uc3QgZ3QgPSAodmFsdWUpOiBJYkZpbHRlckRlZiA9PiAoe1xuICBvcGVyYXRvcjogSWJGaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU4sXG4gIHZhbHVlLFxufSk7XG5leHBvcnQgY29uc3QgZ3RlID0gKHZhbHVlKTogSWJGaWx0ZXJEZWYgPT4gKHtcbiAgb3BlcmF0b3I6IEliRmlsdGVyT3BlcmF0b3IuR1JFQVRFUl9USEFOX0VRVUFMUyxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBsdCA9ICh2YWx1ZSk6IEliRmlsdGVyRGVmID0+ICh7XG4gIG9wZXJhdG9yOiBJYkZpbHRlck9wZXJhdG9yLkxFU1NfVEhBTixcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBsdGUgPSAodmFsdWUpOiBJYkZpbHRlckRlZiA9PiAoe1xuICBvcGVyYXRvcjogSWJGaWx0ZXJPcGVyYXRvci5MRVNTX1RIQU5fRVFVQUxTLFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IGNvbnRhaW5zID0gKHZhbHVlKTogSWJGaWx0ZXJEZWYgPT4gKHtcbiAgb3BlcmF0b3I6IEliRmlsdGVyT3BlcmF0b3IuQ09OVEFJTlMsXG4gIHZhbHVlLFxufSk7XG5leHBvcnQgY29uc3QgbmNvbnRhaW5zID0gKHZhbHVlKTogSWJGaWx0ZXJEZWYgPT4gKHtcbiAgb3BlcmF0b3I6IEliRmlsdGVyT3BlcmF0b3IuTk9UX0NPTlRBSU5TLFxuICB2YWx1ZSxcbn0pO1xuZXhwb3J0IGNvbnN0IHN0YXJ0c1dpdGggPSAodmFsdWUpOiBJYkZpbHRlckRlZiA9PiAoe1xuICBvcGVyYXRvcjogSWJGaWx0ZXJPcGVyYXRvci5TVEFSVFNfV0lUSCxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBlbmRzV2l0aCA9ICh2YWx1ZSk6IEliRmlsdGVyRGVmID0+ICh7XG4gIG9wZXJhdG9yOiBJYkZpbHRlck9wZXJhdG9yLkVORFNfV0lUSCxcbiAgdmFsdWUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGFuZCA9ICh2YWx1ZSk6IEliRmlsdGVyRGVmID0+ICh7XG4gIG9wZXJhdG9yOiBJYkZpbHRlck9wZXJhdG9yLkFORCxcbiAgdmFsdWUsXG59KTtcbmV4cG9ydCBjb25zdCBvciA9ICh2YWx1ZSk6IEliRmlsdGVyRGVmID0+ICh7XG4gIG9wZXJhdG9yOiBJYkZpbHRlck9wZXJhdG9yLk9SLFxuICB2YWx1ZSxcbn0pO1xuXG5leHBvcnQgY29uc3Qgbm9uZSA9ICgpOiBJYkZpbHRlckRlZiA9PiAoe1xuICBvcGVyYXRvcjogSWJGaWx0ZXJPcGVyYXRvci5OT05FLFxuICB2YWx1ZTogbnVsbCxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlGaWx0ZXIoZmlsdGVyOiBJYkZpbHRlckRlZiwgZmlsdGVyVmFsdWU6IGFueSkge1xuICBpZiAoIWZpbHRlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChmaWx0ZXIub3BlcmF0b3IgPT09IEliRmlsdGVyT3BlcmF0b3IuT1IpIHtcbiAgICByZXR1cm4gKGZpbHRlci52YWx1ZSBhcyBJYkZpbHRlckRlZltdKS5zb21lKChzdWJGaWx0ZXIpID0+XG4gICAgICBhcHBseUZpbHRlcihzdWJGaWx0ZXIsIGZpbHRlclZhbHVlKVxuICAgICk7XG4gIH1cblxuICBpZiAoZmlsdGVyLm9wZXJhdG9yID09PSBJYkZpbHRlck9wZXJhdG9yLkFORCkge1xuICAgIHJldHVybiAoZmlsdGVyLnZhbHVlIGFzIEliRmlsdGVyRGVmW10pLmV2ZXJ5KChzdWJGaWx0ZXIpID0+XG4gICAgICBhcHBseUZpbHRlcihzdWJGaWx0ZXIsIGZpbHRlclZhbHVlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZXZhbE9wZXJhdGlvbihmaWx0ZXIub3BlcmF0b3IsIGZpbHRlci52YWx1ZSwgZmlsdGVyVmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbE9wZXJhdGlvbihcbiAgb3BlcmF0aW9uOiBJYkZpbHRlck9wZXJhdG9yLFxuICB2YWx1ZTogYW55LFxuICBmaWx0ZXJWYWx1ZTogYW55XG4pIHtcbiAgY29uc3QgdmFsdWVUeXBlID0gdHlwZW9mIHZhbHVlO1xuICBjb25zdCBmaWx0ZXJWYWx1ZVR5cGUgPSB0eXBlb2YgZmlsdGVyVmFsdWU7XG5cbiAgaWYgKGZpbHRlclZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIGZpbHRlclZhbHVlID0gZmlsdGVyVmFsdWUudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIGlmICh2YWx1ZVR5cGUgPT0gXCJzdHJpbmdcIikge1xuICAgIHZhbHVlID0gKHZhbHVlIGFzIHN0cmluZykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBpZiAoZmlsdGVyVmFsdWVUeXBlID09IFwic3RyaW5nXCIpIHtcbiAgICBmaWx0ZXJWYWx1ZSA9IChmaWx0ZXJWYWx1ZSBhcyBzdHJpbmcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gSWJGaWx0ZXJPcGVyYXRvci5DT05UQUlOUykge1xuICAgICAgcmV0dXJuIGZpbHRlclZhbHVlLmluZGV4T2YodmFsdWUpICE9IC0xO1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09IEliRmlsdGVyT3BlcmF0b3IuTk9UX0NPTlRBSU5TKSB7XG4gICAgICByZXR1cm4gZmlsdGVyVmFsdWUuaW5kZXhPZih2YWx1ZSkgPT09IC0xO1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09IEliRmlsdGVyT3BlcmF0b3IuU1RBUlRTX1dJVEgpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJWYWx1ZS5zdGFydHNXaXRoKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSBJYkZpbHRlck9wZXJhdG9yLkVORFNfV0lUSCkge1xuICAgICAgcmV0dXJuIGZpbHRlclZhbHVlLmVuZHNXaXRoKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBpZiAob3BlcmF0aW9uID09PSBJYkZpbHRlck9wZXJhdG9yLkVRVUFMUykge1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZSA9PT0gdmFsdWU7XG4gIH1cblxuICBpZiAob3BlcmF0aW9uID09PSBJYkZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTikge1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZSA+IHZhbHVlO1xuICB9XG5cbiAgaWYgKG9wZXJhdGlvbiA9PT0gSWJGaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU5fRVFVQUxTKSB7XG4gICAgcmV0dXJuIGZpbHRlclZhbHVlID49IHZhbHVlO1xuICB9XG5cbiAgaWYgKG9wZXJhdGlvbiA9PT0gSWJGaWx0ZXJPcGVyYXRvci5MRVNTX1RIQU4pIHtcbiAgICByZXR1cm4gZmlsdGVyVmFsdWUgPCB2YWx1ZTtcbiAgfVxuXG4gIGlmIChvcGVyYXRpb24gPT09IEliRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX0VRVUFMUykge1xuICAgIHJldHVybiBmaWx0ZXJWYWx1ZSA8PSB2YWx1ZTtcbiAgfVxufVxuIl19
|