@wavemaker-ai/app-ng-runtime 1.0.0-rc.647469
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/build-task/.npmignore +2 -0
- package/build-task/advanced/carousel/carousel-template/carousel-template.build.d.ts +2 -0
- package/build-task/advanced/carousel/carousel.build.d.ts +2 -0
- package/build-task/advanced/custom-widget-container/custom-widget-container.build.d.ts +2 -0
- package/build-task/advanced/custom-widget-wrapper/custom-widget-wrapper.build.d.ts +2 -0
- package/build-task/advanced/login/login.build.d.ts +2 -0
- package/build-task/advanced/marquee/marquee.build.d.ts +2 -0
- package/build-task/basic/anchor/anchor.build.d.ts +2 -0
- package/build-task/basic/audio/audio.build.d.ts +2 -0
- package/build-task/basic/html/html.build.d.ts +2 -0
- package/build-task/basic/icon/icon.build.d.ts +2 -0
- package/build-task/basic/iframe/iframe.build.d.ts +2 -0
- package/build-task/basic/label/label.build.d.ts +2 -0
- package/build-task/basic/picture/picture.build.d.ts +2 -0
- package/build-task/basic/progress/progress-bar/progress-bar.build.d.ts +2 -0
- package/build-task/basic/progress/progress-circle/progress-circle.build.d.ts +2 -0
- package/build-task/basic/rich-text-editor/rich-text-editor.build.d.ts +2 -0
- package/build-task/basic/search/search.build.d.ts +2 -0
- package/build-task/basic/spinner/spinner.build.d.ts +2 -0
- package/build-task/basic/tree/tree.build.d.ts +1 -0
- package/build-task/basic/video/video.build.d.ts +2 -0
- package/build-task/bundles/index.umd.js +3106 -0
- package/build-task/chart/chart.build.d.ts +2 -0
- package/build-task/containers/accordion/accordion-pane/accordion-pane.build.d.ts +2 -0
- package/build-task/containers/accordion/accordion.build.d.ts +2 -0
- package/build-task/containers/container.build.d.ts +2 -0
- package/build-task/containers/layout-grid/layout-grid-column/layout-grid-column.build.d.ts +2 -0
- package/build-task/containers/layout-grid/layout-grid-row/layout-grid-row.build.d.ts +2 -0
- package/build-task/containers/layout-grid/layout-grid.build.d.ts +2 -0
- package/build-task/containers/linear-layout/linear-layout-item/linear-layout-item.build.d.ts +2 -0
- package/build-task/containers/linear-layout/linear-layout.build.d.ts +2 -0
- package/build-task/containers/panel/panel.build.d.ts +2 -0
- package/build-task/containers/repeat-template.build.d.ts +2 -0
- package/build-task/containers/segmented-control/segment-content/segment-content.build.d.ts +2 -0
- package/build-task/containers/segmented-control/segmented-control.build.d.ts +2 -0
- package/build-task/containers/tabs/tab-pane/tab-pane.build.d.ts +2 -0
- package/build-task/containers/tabs/tabs.build.d.ts +2 -0
- package/build-task/containers/tile/tile.build.d.ts +2 -0
- package/build-task/containers/wizard/wizard-action/wizard-action.build.d.ts +2 -0
- package/build-task/containers/wizard/wizard-step/wizard-step.build.d.ts +2 -0
- package/build-task/containers/wizard/wizard.build.d.ts +2 -0
- package/build-task/data/card/card-actions/card-actions.build.d.ts +2 -0
- package/build-task/data/card/card-content/card-content.build.d.ts +2 -0
- package/build-task/data/card/card-footer/card-footer.build.d.ts +2 -0
- package/build-task/data/card/card.build.d.ts +2 -0
- package/build-task/data/form/form-action/form-action.build.d.ts +2 -0
- package/build-task/data/form/form-field/form-field.build.d.ts +2 -0
- package/build-task/data/form/form.build.d.ts +2 -0
- package/build-task/data/list/list.build.d.ts +2 -0
- package/build-task/data/live-table/live-table.build.d.ts +2 -0
- package/build-task/data/media-list/media-list-item/media-list-item.build.d.ts +2 -0
- package/build-task/data/media-list/media-list.build.d.ts +2 -0
- package/build-task/data/pagination/pagination.build.d.ts +2 -0
- package/build-task/data/table/table-action/table-action.build.d.ts +2 -0
- package/build-task/data/table/table-column/table-column.build.d.ts +2 -0
- package/build-task/data/table/table-column-group/table-column-group.build.d.ts +2 -0
- package/build-task/data/table/table-row/table-row.build.d.ts +2 -0
- package/build-task/data/table/table-row-action/table-row-action.build.d.ts +2 -0
- package/build-task/data/table/table.build.d.ts +2 -0
- package/build-task/device/barcode-scanner/barcode-scanner.build.d.ts +2 -0
- package/build-task/device/camera/camera.build.d.ts +2 -0
- package/build-task/dialogs/alert-dialog/alert-dialog.build.d.ts +2 -0
- package/build-task/dialogs/base/dialog-footer/dialog-footer.build.d.ts +2 -0
- package/build-task/dialogs/confirm-dialog/confirm-dialog.build.d.ts +2 -0
- package/build-task/dialogs/design-dialog/dialog.build.d.ts +2 -0
- package/build-task/dialogs/iframe-dialog/iframe-dialog.build.d.ts +2 -0
- package/build-task/dialogs/login-dialog/login-dialog.build.d.ts +2 -0
- package/build-task/dialogs/partial-dialog/partial-dialog.build.d.ts +2 -0
- package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +31 -0
- package/build-task/esm2022/advanced/carousel/carousel.build.mjs +45 -0
- package/build-task/esm2022/advanced/custom-widget-container/custom-widget-container.build.mjs +15 -0
- package/build-task/esm2022/advanced/custom-widget-wrapper/custom-widget-wrapper.build.mjs +26 -0
- package/build-task/esm2022/advanced/login/login.build.mjs +15 -0
- package/build-task/esm2022/advanced/marquee/marquee.build.mjs +10 -0
- package/build-task/esm2022/basic/anchor/anchor.build.mjs +15 -0
- package/build-task/esm2022/basic/audio/audio.build.mjs +10 -0
- package/build-task/esm2022/basic/html/html.build.mjs +15 -0
- package/build-task/esm2022/basic/icon/icon.build.mjs +10 -0
- package/build-task/esm2022/basic/iframe/iframe.build.mjs +10 -0
- package/build-task/esm2022/basic/label/label.build.mjs +25 -0
- package/build-task/esm2022/basic/picture/picture.build.mjs +14 -0
- package/build-task/esm2022/basic/progress/progress-bar/progress-bar.build.mjs +35 -0
- package/build-task/esm2022/basic/progress/progress-circle/progress-circle.build.mjs +15 -0
- package/build-task/esm2022/basic/rich-text-editor/rich-text-editor.build.mjs +15 -0
- package/build-task/esm2022/basic/search/search.build.mjs +11 -0
- package/build-task/esm2022/basic/spinner/spinner.build.mjs +15 -0
- package/build-task/esm2022/basic/tree/tree.build.mjs +9 -0
- package/build-task/esm2022/basic/video/video.build.mjs +10 -0
- package/build-task/esm2022/chart/chart.build.mjs +10 -0
- package/build-task/esm2022/containers/accordion/accordion-pane/accordion-pane.build.mjs +15 -0
- package/build-task/esm2022/containers/accordion/accordion.build.mjs +40 -0
- package/build-task/esm2022/containers/container.build.mjs +10 -0
- package/build-task/esm2022/containers/layout-grid/layout-grid-column/layout-grid-column.build.mjs +10 -0
- package/build-task/esm2022/containers/layout-grid/layout-grid-row/layout-grid-row.build.mjs +10 -0
- package/build-task/esm2022/containers/layout-grid/layout-grid.build.mjs +10 -0
- package/build-task/esm2022/containers/linear-layout/linear-layout-item/linear-layout-item.build.mjs +10 -0
- package/build-task/esm2022/containers/linear-layout/linear-layout.build.mjs +21 -0
- package/build-task/esm2022/containers/panel/panel.build.mjs +21 -0
- package/build-task/esm2022/containers/repeat-template.build.mjs +26 -0
- package/build-task/esm2022/containers/segmented-control/segment-content/segment-content.build.mjs +10 -0
- package/build-task/esm2022/containers/segmented-control/segmented-control.build.mjs +10 -0
- package/build-task/esm2022/containers/tabs/tab-pane/tab-pane.build.mjs +10 -0
- package/build-task/esm2022/containers/tabs/tabs.build.mjs +40 -0
- package/build-task/esm2022/containers/tile/tile.build.mjs +10 -0
- package/build-task/esm2022/containers/wizard/wizard-action/wizard-action.build.mjs +10 -0
- package/build-task/esm2022/containers/wizard/wizard-step/wizard-step.build.mjs +16 -0
- package/build-task/esm2022/containers/wizard/wizard.build.mjs +39 -0
- package/build-task/esm2022/data/card/card-actions/card-actions.build.mjs +10 -0
- package/build-task/esm2022/data/card/card-content/card-content.build.mjs +10 -0
- package/build-task/esm2022/data/card/card-footer/card-footer.build.mjs +10 -0
- package/build-task/esm2022/data/card/card.build.mjs +10 -0
- package/build-task/esm2022/data/form/form-action/form-action.build.mjs +12 -0
- package/build-task/esm2022/data/form/form-field/form-field.build.mjs +173 -0
- package/build-task/esm2022/data/form/form.build.mjs +161 -0
- package/build-task/esm2022/data/list/list.build.mjs +89 -0
- package/build-task/esm2022/data/live-table/live-table.build.mjs +21 -0
- package/build-task/esm2022/data/media-list/media-list-item/media-list-item.build.mjs +10 -0
- package/build-task/esm2022/data/media-list/media-list.build.mjs +57 -0
- package/build-task/esm2022/data/pagination/pagination.build.mjs +10 -0
- package/build-task/esm2022/data/table/table-action/table-action.build.mjs +10 -0
- package/build-task/esm2022/data/table/table-column/table-column.build.mjs +294 -0
- package/build-task/esm2022/data/table/table-column-group/table-column-group.build.mjs +10 -0
- package/build-task/esm2022/data/table/table-row/table-row.build.mjs +34 -0
- package/build-task/esm2022/data/table/table-row-action/table-row-action.build.mjs +41 -0
- package/build-task/esm2022/data/table/table.build.mjs +86 -0
- package/build-task/esm2022/device/barcode-scanner/barcode-scanner.build.mjs +15 -0
- package/build-task/esm2022/device/camera/camera.build.mjs +15 -0
- package/build-task/esm2022/dialogs/alert-dialog/alert-dialog.build.mjs +10 -0
- package/build-task/esm2022/dialogs/base/dialog-footer/dialog-footer.build.mjs +10 -0
- package/build-task/esm2022/dialogs/confirm-dialog/confirm-dialog.build.mjs +10 -0
- package/build-task/esm2022/dialogs/design-dialog/dialog.build.mjs +17 -0
- package/build-task/esm2022/dialogs/iframe-dialog/iframe-dialog.build.mjs +10 -0
- package/build-task/esm2022/dialogs/login-dialog/login-dialog.build.mjs +10 -0
- package/build-task/esm2022/dialogs/partial-dialog/partial-dialog.build.mjs +40 -0
- package/build-task/esm2022/index.mjs +5 -0
- package/build-task/esm2022/input/calendar/calendar.build.mjs +13 -0
- package/build-task/esm2022/input/chips/chips.build.mjs +11 -0
- package/build-task/esm2022/input/color-picker/color-picker.build.mjs +11 -0
- package/build-task/esm2022/input/currency/currency.build.mjs +11 -0
- package/build-task/esm2022/input/default/button/button.build.mjs +15 -0
- package/build-task/esm2022/input/default/button-group/button-group.build.mjs +10 -0
- package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +18 -0
- package/build-task/esm2022/input/default/checkboxset/checkboxset.build.mjs +11 -0
- package/build-task/esm2022/input/default/composite/composite.build.mjs +10 -0
- package/build-task/esm2022/input/default/number/number.build.mjs +11 -0
- package/build-task/esm2022/input/default/radioset/radioset.build.mjs +15 -0
- package/build-task/esm2022/input/default/select/select.build.mjs +11 -0
- package/build-task/esm2022/input/default/switch/switch.build.mjs +15 -0
- package/build-task/esm2022/input/default/text/text.build.mjs +11 -0
- package/build-task/esm2022/input/default/textarea/textarea.build.mjs +11 -0
- package/build-task/esm2022/input/epoch/date/date.build.mjs +11 -0
- package/build-task/esm2022/input/epoch/date-time/date-time.build.mjs +11 -0
- package/build-task/esm2022/input/epoch/time/time.build.mjs +11 -0
- package/build-task/esm2022/input/file-upload/file-upload.build.mjs +20 -0
- package/build-task/esm2022/input/rating/rating.build.mjs +11 -0
- package/build-task/esm2022/input/slider/slider.build.mjs +11 -0
- package/build-task/esm2022/message/message.build.mjs +15 -0
- package/build-task/esm2022/navigation/breadcrumb/breadcrumb.build.mjs +10 -0
- package/build-task/esm2022/navigation/menu/menu.build.mjs +27 -0
- package/build-task/esm2022/navigation/nav/nav-item/nav-item.build.mjs +10 -0
- package/build-task/esm2022/navigation/nav/nav.build.mjs +10 -0
- package/build-task/esm2022/navigation/navbar/navbar.build.mjs +10 -0
- package/build-task/esm2022/navigation/popover/popover.build.mjs +41 -0
- package/build-task/esm2022/page/content/content.build.mjs +10 -0
- package/build-task/esm2022/page/footer/footer.build.mjs +15 -0
- package/build-task/esm2022/page/header/header.build.mjs +15 -0
- package/build-task/esm2022/page/layout.build.mjs +15 -0
- package/build-task/esm2022/page/left-panel/left-panel.build.mjs +15 -0
- package/build-task/esm2022/page/mobile-navbar/mobile-navbar.build.mjs +10 -0
- package/build-task/esm2022/page/page-content/page-content.build.mjs +36 -0
- package/build-task/esm2022/page/page.build.mjs +59 -0
- package/build-task/esm2022/page/right-panel/right-panel.build.mjs +15 -0
- package/build-task/esm2022/page/router-outlet/router-outlet.build.mjs +10 -0
- package/build-task/esm2022/page/tab-bar/tab-bar.build.mjs +10 -0
- package/build-task/esm2022/page/top-nav/top-nav.build.mjs +15 -0
- package/build-task/esm2022/partial/partial.build.mjs +25 -0
- package/build-task/esm2022/partial-param/partial-param.build.mjs +10 -0
- package/build-task/esm2022/prefab/prefab-container/prefab-container.build.mjs +25 -0
- package/build-task/esm2022/prefab/prefab.build.mjs +10 -0
- package/build-task/esm2022/public_api.mjs +113 -0
- package/build-task/esm2022/utils/utils.mjs +69 -0
- package/build-task/fesm2022/index.mjs +2998 -0
- package/build-task/fesm2022/index.mjs.map +1 -0
- package/build-task/index.d.ts +5 -0
- package/build-task/input/calendar/calendar.build.d.ts +2 -0
- package/build-task/input/chips/chips.build.d.ts +2 -0
- package/build-task/input/color-picker/color-picker.build.d.ts +2 -0
- package/build-task/input/currency/currency.build.d.ts +2 -0
- package/build-task/input/default/button/button.build.d.ts +2 -0
- package/build-task/input/default/button-group/button-group.build.d.ts +2 -0
- package/build-task/input/default/checkbox/checkbox.build.d.ts +2 -0
- package/build-task/input/default/checkboxset/checkboxset.build.d.ts +2 -0
- package/build-task/input/default/composite/composite.build.d.ts +2 -0
- package/build-task/input/default/number/number.build.d.ts +2 -0
- package/build-task/input/default/radioset/radioset.build.d.ts +2 -0
- package/build-task/input/default/select/select.build.d.ts +2 -0
- package/build-task/input/default/switch/switch.build.d.ts +2 -0
- package/build-task/input/default/text/text.build.d.ts +2 -0
- package/build-task/input/default/textarea/textarea.build.d.ts +2 -0
- package/build-task/input/epoch/date/date.build.d.ts +2 -0
- package/build-task/input/epoch/date-time/date-time.build.d.ts +2 -0
- package/build-task/input/epoch/time/time.build.d.ts +2 -0
- package/build-task/input/file-upload/file-upload.build.d.ts +2 -0
- package/build-task/input/rating/rating.build.d.ts +2 -0
- package/build-task/input/slider/slider.build.d.ts +2 -0
- package/build-task/message/message.build.d.ts +2 -0
- package/build-task/navigation/breadcrumb/breadcrumb.build.d.ts +2 -0
- package/build-task/navigation/menu/menu.build.d.ts +2 -0
- package/build-task/navigation/nav/nav-item/nav-item.build.d.ts +2 -0
- package/build-task/navigation/nav/nav.build.d.ts +2 -0
- package/build-task/navigation/navbar/navbar.build.d.ts +2 -0
- package/build-task/navigation/popover/popover.build.d.ts +2 -0
- package/build-task/package.json +25 -0
- package/build-task/page/content/content.build.d.ts +2 -0
- package/build-task/page/footer/footer.build.d.ts +2 -0
- package/build-task/page/header/header.build.d.ts +2 -0
- package/build-task/page/layout.build.d.ts +2 -0
- package/build-task/page/left-panel/left-panel.build.d.ts +2 -0
- package/build-task/page/mobile-navbar/mobile-navbar.build.d.ts +2 -0
- package/build-task/page/page-content/page-content.build.d.ts +2 -0
- package/build-task/page/page.build.d.ts +2 -0
- package/build-task/page/right-panel/right-panel.build.d.ts +2 -0
- package/build-task/page/router-outlet/router-outlet.build.d.ts +2 -0
- package/build-task/page/tab-bar/tab-bar.build.d.ts +2 -0
- package/build-task/page/top-nav/top-nav.build.d.ts +2 -0
- package/build-task/partial/partial.build.d.ts +2 -0
- package/build-task/partial-param/partial-param.build.d.ts +2 -0
- package/build-task/prefab/prefab-container/prefab-container.build.d.ts +2 -0
- package/build-task/prefab/prefab.build.d.ts +2 -0
- package/build-task/public_api.d.ts +112 -0
- package/build-task/utils/utils.d.ts +21 -0
- package/components/advanced/carousel/.npmignore +2 -0
- package/components/advanced/carousel/bundles/index.umd.js +352 -0
- package/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +9 -0
- package/components/advanced/carousel/carousel-template/carousel-template.props.d.ts +1 -0
- package/components/advanced/carousel/carousel.animator.d.ts +45 -0
- package/components/advanced/carousel/carousel.directive.d.ts +35 -0
- package/components/advanced/carousel/carousel.props.d.ts +1 -0
- package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +32 -0
- package/components/advanced/carousel/esm2022/carousel-template/carousel-template.props.mjs +7 -0
- package/components/advanced/carousel/esm2022/carousel.animator.mjs +149 -0
- package/components/advanced/carousel/esm2022/carousel.directive.mjs +135 -0
- package/components/advanced/carousel/esm2022/carousel.props.mjs +13 -0
- package/components/advanced/carousel/esm2022/index.mjs +5 -0
- package/components/advanced/carousel/esm2022/public_api.mjs +4 -0
- package/components/advanced/carousel/fesm2022/index.mjs +335 -0
- package/components/advanced/carousel/fesm2022/index.mjs.map +1 -0
- package/components/advanced/carousel/index.d.ts +5 -0
- package/components/advanced/carousel/package.json +20 -0
- package/components/advanced/carousel/public_api.d.ts +3 -0
- package/components/advanced/custom/.npmignore +2 -0
- package/components/advanced/custom/bundles/index.umd.js +258 -0
- package/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +29 -0
- package/components/advanced/custom/custom-widget-container/custom-widget.props.d.ts +2 -0
- package/components/advanced/custom/custom-widget-prop.d.ts +1 -0
- package/components/advanced/custom/custom-widget.directive.d.ts +19 -0
- package/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +156 -0
- package/components/advanced/custom/esm2022/custom-widget-container/custom-widget.props.mjs +12 -0
- package/components/advanced/custom/esm2022/custom-widget-prop.mjs +8 -0
- package/components/advanced/custom/esm2022/custom-widget.directive.mjs +70 -0
- package/components/advanced/custom/esm2022/index.mjs +5 -0
- package/components/advanced/custom/esm2022/public_api.mjs +3 -0
- package/components/advanced/custom/fesm2022/index.mjs +244 -0
- package/components/advanced/custom/fesm2022/index.mjs.map +1 -0
- package/components/advanced/custom/index.d.ts +5 -0
- package/components/advanced/custom/package.json +20 -0
- package/components/advanced/custom/public_api.d.ts +2 -0
- package/components/advanced/login/.npmignore +2 -0
- package/components/advanced/login/bundles/index.umd.js +135 -0
- package/components/advanced/login/esm2022/index.mjs +5 -0
- package/components/advanced/login/esm2022/login.component.mjs +107 -0
- package/components/advanced/login/esm2022/login.props.mjs +8 -0
- package/components/advanced/login/esm2022/public_api.mjs +2 -0
- package/components/advanced/login/fesm2022/index.mjs +120 -0
- package/components/advanced/login/fesm2022/index.mjs.map +1 -0
- package/components/advanced/login/index.d.ts +5 -0
- package/components/advanced/login/login.component.d.ts +31 -0
- package/components/advanced/login/login.props.d.ts +1 -0
- package/components/advanced/login/package.json +20 -0
- package/components/advanced/login/public_api.d.ts +1 -0
- package/components/advanced/marquee/.npmignore +2 -0
- package/components/advanced/marquee/bundles/index.umd.js +71 -0
- package/components/advanced/marquee/esm2022/index.mjs +5 -0
- package/components/advanced/marquee/esm2022/marquee.directive.mjs +36 -0
- package/components/advanced/marquee/esm2022/marquee.props.mjs +12 -0
- package/components/advanced/marquee/esm2022/public_api.mjs +2 -0
- package/components/advanced/marquee/fesm2022/index.mjs +53 -0
- package/components/advanced/marquee/fesm2022/index.mjs.map +1 -0
- package/components/advanced/marquee/index.d.ts +5 -0
- package/components/advanced/marquee/marquee.directive.d.ts +9 -0
- package/components/advanced/marquee/marquee.props.d.ts +1 -0
- package/components/advanced/marquee/package.json +20 -0
- package/components/advanced/marquee/public_api.d.ts +1 -0
- package/components/base/.npmignore +2 -0
- package/components/base/bundles/index.umd.js +5982 -0
- package/components/base/decorators/autolayout.decorator.d.ts +4 -0
- package/components/base/decorators/autolayout.props.d.ts +1 -0
- package/components/base/directives/show-in-device.directive.d.ts +16 -0
- package/components/base/esm2022/decorators/autolayout.decorator.mjs +476 -0
- package/components/base/esm2022/decorators/autolayout.props.mjs +20 -0
- package/components/base/esm2022/directives/show-in-device.directive.mjs +90 -0
- package/components/base/esm2022/index.mjs +5 -0
- package/components/base/esm2022/pipes/custom-pipes.mjs +473 -0
- package/components/base/esm2022/pipes/image.pipe.mjs +19 -0
- package/components/base/esm2022/pipes/sanitize.pipe.mjs +44 -0
- package/components/base/esm2022/pipes/trust-as.pipe.mjs +41 -0
- package/components/base/esm2022/pipes/wm-pipe.mjs +18 -0
- package/components/base/esm2022/public_api.mjs +36 -0
- package/components/base/esm2022/utils/autolayout-utils.mjs +261 -0
- package/components/base/esm2022/utils/data-utils.mjs +581 -0
- package/components/base/esm2022/utils/form-utils.mjs +451 -0
- package/components/base/esm2022/utils/live-utils.mjs +216 -0
- package/components/base/esm2022/utils/widget-utils.mjs +495 -0
- package/components/base/esm2022/widgets/common/base/base-container.component.mjs +80 -0
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +295 -0
- package/components/base/esm2022/widgets/common/base/base.component.mjs +713 -0
- package/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +48 -0
- package/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +222 -0
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +115 -0
- package/components/base/esm2022/widgets/common/base/stylable.component.mjs +11 -0
- package/components/base/esm2022/widgets/common/base/text-content.directive.mjs +26 -0
- package/components/base/esm2022/widgets/common/container/container.directive.mjs +51 -0
- package/components/base/esm2022/widgets/common/container/container.props.mjs +15 -0
- package/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +170 -0
- package/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +89 -0
- package/components/base/esm2022/widgets/common/item-template/item-template.props.mjs +7 -0
- package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +84 -0
- package/components/base/esm2022/widgets/common/message/message.component.mjs +104 -0
- package/components/base/esm2022/widgets/common/message/message.props.mjs +13 -0
- package/components/base/esm2022/widgets/common/partial/partial.directive.mjs +53 -0
- package/components/base/esm2022/widgets/common/partial/partial.props.mjs +7 -0
- package/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +88 -0
- package/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +261 -0
- package/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +40 -0
- package/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +33 -0
- package/components/base/esm2022/widgets/common/repeat-template/repeat-template.props.mjs +7 -0
- package/components/base/esm2022/widgets/framework/constants.mjs +36 -0
- package/components/base/esm2022/widgets/framework/deviceview.mjs +126 -0
- package/components/base/esm2022/widgets/framework/property-change-handler.mjs +96 -0
- package/components/base/esm2022/widgets/framework/styler.mjs +123 -0
- package/components/base/esm2022/widgets/framework/types.mjs +8 -0
- package/components/base/esm2022/widgets/framework/widget-id-generator.mjs +3 -0
- package/components/base/esm2022/widgets/framework/widget-props.mjs +35 -0
- package/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +75 -0
- package/components/base/esm2022/widgets/framework/widget-registry.mjs +49 -0
- package/components/base/fesm2022/index.mjs +5858 -0
- package/components/base/fesm2022/index.mjs.map +1 -0
- package/components/base/index.d.ts +5 -0
- package/components/base/package.json +28 -0
- package/components/base/pipes/custom-pipes.d.ts +104 -0
- package/components/base/pipes/image.pipe.d.ts +7 -0
- package/components/base/pipes/sanitize.pipe.d.ts +10 -0
- package/components/base/pipes/trust-as.pipe.d.ts +10 -0
- package/components/base/pipes/wm-pipe.d.ts +9 -0
- package/components/base/public_api.d.ts +35 -0
- package/components/base/utils/autolayout-utils.d.ts +29 -0
- package/components/base/utils/data-utils.d.ts +181 -0
- package/components/base/utils/form-utils.d.ts +85 -0
- package/components/base/utils/live-utils.d.ts +65 -0
- package/components/base/utils/widget-utils.d.ts +120 -0
- package/components/base/widgets/common/base/base-container.component.d.ts +16 -0
- package/components/base/widgets/common/base/base-field-validations.d.ts +27 -0
- package/components/base/widgets/common/base/base.component.d.ts +276 -0
- package/components/base/widgets/common/base/custom-widget-container.directive.d.ts +15 -0
- package/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +77 -0
- package/components/base/widgets/common/base/partial-container.directive.d.ts +22 -0
- package/components/base/widgets/common/base/stylable.component.d.ts +54 -0
- package/components/base/widgets/common/base/text-content.directive.d.ts +9 -0
- package/components/base/widgets/common/container/container.directive.d.ts +12 -0
- package/components/base/widgets/common/container/container.props.d.ts +1 -0
- package/components/base/widgets/common/dialog/dialog.service.d.ts +54 -0
- package/components/base/widgets/common/item-template/item-template.directive.d.ts +32 -0
- package/components/base/widgets/common/item-template/item-template.props.d.ts +1 -0
- package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +15 -0
- package/components/base/widgets/common/message/message.component.d.ts +19 -0
- package/components/base/widgets/common/message/message.props.d.ts +1 -0
- package/components/base/widgets/common/partial/partial.directive.d.ts +15 -0
- package/components/base/widgets/common/partial/partial.props.d.ts +1 -0
- package/components/base/widgets/common/partial-param/partial-param.directive.d.ts +21 -0
- package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +48 -0
- package/components/base/widgets/common/redraw/redrawable.directive.d.ts +8 -0
- package/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +9 -0
- package/components/base/widgets/common/repeat-template/repeat-template.props.d.ts +1 -0
- package/components/base/widgets/framework/constants.d.ts +16 -0
- package/components/base/widgets/framework/deviceview.d.ts +1 -0
- package/components/base/widgets/framework/property-change-handler.d.ts +8 -0
- package/components/base/widgets/framework/styler.d.ts +59 -0
- package/components/base/widgets/framework/types.d.ts +23 -0
- package/components/base/widgets/framework/widget-id-generator.d.ts +2 -0
- package/components/base/widgets/framework/widget-props.d.ts +12 -0
- package/components/base/widgets/framework/widget-proxy-provider.d.ts +11 -0
- package/components/base/widgets/framework/widget-registry.d.ts +14 -0
- package/components/basic/anchor/.npmignore +2 -0
- package/components/basic/anchor/anchor.component.d.ts +37 -0
- package/components/basic/anchor/anchor.props.d.ts +1 -0
- package/components/basic/anchor/bundles/index.umd.js +204 -0
- package/components/basic/anchor/esm2022/anchor.component.mjs +155 -0
- package/components/basic/anchor/esm2022/anchor.props.mjs +27 -0
- package/components/basic/anchor/esm2022/index.mjs +5 -0
- package/components/basic/anchor/esm2022/public_api.mjs +2 -0
- package/components/basic/anchor/fesm2022/index.mjs +187 -0
- package/components/basic/anchor/fesm2022/index.mjs.map +1 -0
- package/components/basic/anchor/index.d.ts +5 -0
- package/components/basic/anchor/package.json +20 -0
- package/components/basic/anchor/public_api.d.ts +1 -0
- package/components/basic/audio/.npmignore +2 -0
- package/components/basic/audio/audio.component.d.ts +20 -0
- package/components/basic/audio/audio.props.d.ts +1 -0
- package/components/basic/audio/bundles/index.umd.js +83 -0
- package/components/basic/audio/esm2022/audio.component.mjs +41 -0
- package/components/basic/audio/esm2022/audio.props.mjs +19 -0
- package/components/basic/audio/esm2022/index.mjs +5 -0
- package/components/basic/audio/esm2022/public_api.mjs +2 -0
- package/components/basic/audio/fesm2022/index.mjs +65 -0
- package/components/basic/audio/fesm2022/index.mjs.map +1 -0
- package/components/basic/audio/index.d.ts +5 -0
- package/components/basic/audio/package.json +20 -0
- package/components/basic/audio/public_api.d.ts +1 -0
- package/components/basic/html/.npmignore +2 -0
- package/components/basic/html/bundles/index.umd.js +122 -0
- package/components/basic/html/esm2022/html.directive.mjs +88 -0
- package/components/basic/html/esm2022/html.props.mjs +12 -0
- package/components/basic/html/esm2022/index.mjs +5 -0
- package/components/basic/html/esm2022/public_api.mjs +2 -0
- package/components/basic/html/fesm2022/index.mjs +105 -0
- package/components/basic/html/fesm2022/index.mjs.map +1 -0
- package/components/basic/html/html.directive.d.ts +14 -0
- package/components/basic/html/html.props.d.ts +1 -0
- package/components/basic/html/index.d.ts +5 -0
- package/components/basic/html/package.json +20 -0
- package/components/basic/html/public_api.d.ts +1 -0
- package/components/basic/icon/.npmignore +2 -0
- package/components/basic/icon/bundles/index.umd.js +80 -0
- package/components/basic/icon/esm2022/icon.component.mjs +38 -0
- package/components/basic/icon/esm2022/icon.props.mjs +19 -0
- package/components/basic/icon/esm2022/index.mjs +5 -0
- package/components/basic/icon/esm2022/public_api.mjs +2 -0
- package/components/basic/icon/fesm2022/index.mjs +62 -0
- package/components/basic/icon/fesm2022/index.mjs.map +1 -0
- package/components/basic/icon/icon.component.d.ts +15 -0
- package/components/basic/icon/icon.props.d.ts +1 -0
- package/components/basic/icon/index.d.ts +5 -0
- package/components/basic/icon/package.json +20 -0
- package/components/basic/icon/public_api.d.ts +1 -0
- package/components/basic/iframe/.npmignore +2 -0
- package/components/basic/iframe/bundles/index.umd.js +101 -0
- package/components/basic/iframe/esm2022/iframe.component.mjs +65 -0
- package/components/basic/iframe/esm2022/iframe.props.mjs +15 -0
- package/components/basic/iframe/esm2022/index.mjs +5 -0
- package/components/basic/iframe/esm2022/public_api.mjs +2 -0
- package/components/basic/iframe/fesm2022/index.mjs +84 -0
- package/components/basic/iframe/fesm2022/index.mjs.map +1 -0
- package/components/basic/iframe/iframe.component.d.ts +26 -0
- package/components/basic/iframe/iframe.props.d.ts +1 -0
- package/components/basic/iframe/index.d.ts +5 -0
- package/components/basic/iframe/package.json +20 -0
- package/components/basic/iframe/public_api.d.ts +1 -0
- package/components/basic/label/.npmignore +2 -0
- package/components/basic/label/bundles/index.umd.js +129 -0
- package/components/basic/label/esm2022/index.mjs +5 -0
- package/components/basic/label/esm2022/label.directive.mjs +91 -0
- package/components/basic/label/esm2022/label.props.mjs +17 -0
- package/components/basic/label/esm2022/public_api.mjs +2 -0
- package/components/basic/label/fesm2022/index.mjs +113 -0
- package/components/basic/label/fesm2022/index.mjs.map +1 -0
- package/components/basic/label/index.d.ts +5 -0
- package/components/basic/label/label.directive.d.ts +12 -0
- package/components/basic/label/label.props.d.ts +1 -0
- package/components/basic/label/package.json +20 -0
- package/components/basic/label/public_api.d.ts +1 -0
- package/components/basic/picture/.npmignore +2 -0
- package/components/basic/picture/bundles/index.umd.js +138 -0
- package/components/basic/picture/esm2022/index.mjs +5 -0
- package/components/basic/picture/esm2022/picture.directive.mjs +93 -0
- package/components/basic/picture/esm2022/picture.props.mjs +23 -0
- package/components/basic/picture/esm2022/public_api.mjs +2 -0
- package/components/basic/picture/fesm2022/index.mjs +121 -0
- package/components/basic/picture/fesm2022/index.mjs.map +1 -0
- package/components/basic/picture/index.d.ts +5 -0
- package/components/basic/picture/package.json +20 -0
- package/components/basic/picture/picture.directive.d.ts +19 -0
- package/components/basic/picture/picture.props.d.ts +1 -0
- package/components/basic/picture/public_api.d.ts +1 -0
- package/components/basic/progress/progress-bar/.npmignore +2 -0
- package/components/basic/progress/progress-bar/bundles/index.umd.js +170 -0
- package/components/basic/progress/progress-bar/esm2022/index.mjs +5 -0
- package/components/basic/progress/progress-bar/esm2022/progress-bar.component.mjs +130 -0
- package/components/basic/progress/progress-bar/esm2022/progress-bar.props.mjs +19 -0
- package/components/basic/progress/progress-bar/esm2022/public_api.mjs +2 -0
- package/components/basic/progress/progress-bar/fesm2022/index.mjs +154 -0
- package/components/basic/progress/progress-bar/fesm2022/index.mjs.map +1 -0
- package/components/basic/progress/progress-bar/index.d.ts +5 -0
- package/components/basic/progress/progress-bar/package.json +20 -0
- package/components/basic/progress/progress-bar/progress-bar.component.d.ts +43 -0
- package/components/basic/progress/progress-bar/progress-bar.props.d.ts +1 -0
- package/components/basic/progress/progress-bar/public_api.d.ts +1 -0
- package/components/basic/progress/progress-circle/.npmignore +2 -0
- package/components/basic/progress/progress-circle/bundles/index.umd.js +171 -0
- package/components/basic/progress/progress-circle/esm2022/index.mjs +5 -0
- package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +130 -0
- package/components/basic/progress/progress-circle/esm2022/progress-circle.props.mjs +21 -0
- package/components/basic/progress/progress-circle/esm2022/public_api.mjs +2 -0
- package/components/basic/progress/progress-circle/fesm2022/index.mjs +155 -0
- package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -0
- package/components/basic/progress/progress-circle/index.d.ts +5 -0
- package/components/basic/progress/progress-circle/package.json +20 -0
- package/components/basic/progress/progress-circle/progress-circle.component.d.ts +40 -0
- package/components/basic/progress/progress-circle/progress-circle.props.d.ts +1 -0
- package/components/basic/progress/progress-circle/public_api.d.ts +1 -0
- package/components/basic/progress/progress-utils/.npmignore +2 -0
- package/components/basic/progress/progress-utils/bundles/index.umd.js +35 -0
- package/components/basic/progress/progress-utils/esm2022/index.mjs +5 -0
- package/components/basic/progress/progress-utils/esm2022/progress-utils.mjs +25 -0
- package/components/basic/progress/progress-utils/esm2022/public_api.mjs +2 -0
- package/components/basic/progress/progress-utils/fesm2022/index.mjs +32 -0
- package/components/basic/progress/progress-utils/fesm2022/index.mjs.map +1 -0
- package/components/basic/progress/progress-utils/index.d.ts +5 -0
- package/components/basic/progress/progress-utils/package.json +20 -0
- package/components/basic/progress/progress-utils/progress-utils.d.ts +3 -0
- package/components/basic/progress/progress-utils/public_api.d.ts +1 -0
- package/components/basic/rich-text-editor/.npmignore +2 -0
- package/components/basic/rich-text-editor/bundles/index.umd.js +236 -0
- package/components/basic/rich-text-editor/esm2022/index.mjs +5 -0
- package/components/basic/rich-text-editor/esm2022/public_api.mjs +2 -0
- package/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +197 -0
- package/components/basic/rich-text-editor/esm2022/rich-text-editor.props.mjs +21 -0
- package/components/basic/rich-text-editor/fesm2022/index.mjs +222 -0
- package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -0
- package/components/basic/rich-text-editor/index.d.ts +5 -0
- package/components/basic/rich-text-editor/package.json +20 -0
- package/components/basic/rich-text-editor/public_api.d.ts +1 -0
- package/components/basic/rich-text-editor/rich-text-editor.component.d.ts +55 -0
- package/components/basic/rich-text-editor/rich-text-editor.props.d.ts +2 -0
- package/components/basic/search/.npmignore +2 -0
- package/components/basic/search/bundles/index.umd.js +1091 -0
- package/components/basic/search/data-provider/data-provider.d.ts +42 -0
- package/components/basic/search/data-provider/local-data-provider.d.ts +5 -0
- package/components/basic/search/data-provider/remote-data-provider.d.ts +10 -0
- package/components/basic/search/esm2022/data-provider/data-provider.mjs +34 -0
- package/components/basic/search/esm2022/data-provider/local-data-provider.mjs +77 -0
- package/components/basic/search/esm2022/data-provider/remote-data-provider.mjs +124 -0
- package/components/basic/search/esm2022/index.mjs +5 -0
- package/components/basic/search/esm2022/public_api.mjs +3 -0
- package/components/basic/search/esm2022/scrollable.directive.mjs +44 -0
- package/components/basic/search/esm2022/search.component.mjs +754 -0
- package/components/basic/search/esm2022/search.props.mjs +55 -0
- package/components/basic/search/fesm2022/index.mjs +1080 -0
- package/components/basic/search/fesm2022/index.mjs.map +1 -0
- package/components/basic/search/index.d.ts +5 -0
- package/components/basic/search/package.json +20 -0
- package/components/basic/search/public_api.d.ts +2 -0
- package/components/basic/search/scrollable.directive.d.ts +14 -0
- package/components/basic/search/search.component.d.ts +109 -0
- package/components/basic/search/search.props.d.ts +2 -0
- package/components/basic/spinner/.npmignore +2 -0
- package/components/basic/spinner/bundles/index.umd.js +126 -0
- package/components/basic/spinner/esm2022/index.mjs +5 -0
- package/components/basic/spinner/esm2022/public_api.mjs +2 -0
- package/components/basic/spinner/esm2022/spinner.component.mjs +87 -0
- package/components/basic/spinner/esm2022/spinner.props.mjs +20 -0
- package/components/basic/spinner/fesm2022/index.mjs +111 -0
- package/components/basic/spinner/fesm2022/index.mjs.map +1 -0
- package/components/basic/spinner/index.d.ts +5 -0
- package/components/basic/spinner/package.json +20 -0
- package/components/basic/spinner/public_api.d.ts +1 -0
- package/components/basic/spinner/spinner.component.d.ts +27 -0
- package/components/basic/spinner/spinner.props.d.ts +1 -0
- package/components/basic/tree/.npmignore +2 -0
- package/components/basic/tree/bundles/index.umd.js +566 -0
- package/components/basic/tree/esm2022/index.mjs +5 -0
- package/components/basic/tree/esm2022/public_api.mjs +2 -0
- package/components/basic/tree/esm2022/tree-node-template-host.component.mjs +33 -0
- package/components/basic/tree/esm2022/tree.component.mjs +494 -0
- package/components/basic/tree/esm2022/tree.props.mjs +22 -0
- package/components/basic/tree/fesm2022/index.mjs +550 -0
- package/components/basic/tree/fesm2022/index.mjs.map +1 -0
- package/components/basic/tree/index.d.ts +5 -0
- package/components/basic/tree/package.json +20 -0
- package/components/basic/tree/public_api.d.ts +1 -0
- package/components/basic/tree/tree-node-template-host.component.d.ts +7 -0
- package/components/basic/tree/tree.component.d.ts +66 -0
- package/components/basic/tree/tree.props.d.ts +1 -0
- package/components/basic/video/.npmignore +2 -0
- package/components/basic/video/bundles/index.umd.js +116 -0
- package/components/basic/video/esm2022/index.mjs +5 -0
- package/components/basic/video/esm2022/public_api.mjs +2 -0
- package/components/basic/video/esm2022/video.component.mjs +70 -0
- package/components/basic/video/esm2022/video.props.mjs +24 -0
- package/components/basic/video/fesm2022/index.mjs +99 -0
- package/components/basic/video/fesm2022/index.mjs.map +1 -0
- package/components/basic/video/index.d.ts +5 -0
- package/components/basic/video/package.json +20 -0
- package/components/basic/video/public_api.d.ts +1 -0
- package/components/basic/video/video.component.d.ts +27 -0
- package/components/basic/video/video.props.d.ts +1 -0
- package/components/chart/.npmignore +2 -0
- package/components/chart/bundles/index.umd.js +1747 -0
- package/components/chart/chart.component.d.ts +99 -0
- package/components/chart/chart.props.d.ts +1 -0
- package/components/chart/chart.utils.d.ts +40 -0
- package/components/chart/esm2022/chart.component.mjs +982 -0
- package/components/chart/esm2022/chart.props.mjs +67 -0
- package/components/chart/esm2022/chart.utils.mjs +723 -0
- package/components/chart/esm2022/index.mjs +5 -0
- package/components/chart/esm2022/public_api.mjs +2 -0
- package/components/chart/fesm2022/index.mjs +1774 -0
- package/components/chart/fesm2022/index.mjs.map +1 -0
- package/components/chart/index.d.ts +5 -0
- package/components/chart/package.json +20 -0
- package/components/chart/public_api.d.ts +1 -0
- package/components/containers/accordion/.npmignore +2 -0
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +50 -0
- package/components/containers/accordion/accordion-pane/accordion-pane.props.d.ts +1 -0
- package/components/containers/accordion/accordion.directive.d.ts +66 -0
- package/components/containers/accordion/accordion.props.d.ts +1 -0
- package/components/containers/accordion/bundles/index.umd.js +500 -0
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +145 -0
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.props.mjs +22 -0
- package/components/containers/accordion/esm2022/accordion.directive.mjs +309 -0
- package/components/containers/accordion/esm2022/accordion.props.mjs +16 -0
- package/components/containers/accordion/esm2022/index.mjs +5 -0
- package/components/containers/accordion/esm2022/public_api.mjs +3 -0
- package/components/containers/accordion/fesm2022/index.mjs +486 -0
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -0
- package/components/containers/accordion/index.d.ts +5 -0
- package/components/containers/accordion/package.json +20 -0
- package/components/containers/accordion/public_api.d.ts +2 -0
- package/components/containers/layout-grid/.npmignore +2 -0
- package/components/containers/layout-grid/bundles/index.umd.js +172 -0
- package/components/containers/layout-grid/esm2022/index.mjs +5 -0
- package/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +57 -0
- package/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.props.mjs +11 -0
- package/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +36 -0
- package/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.props.mjs +9 -0
- package/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +36 -0
- package/components/containers/layout-grid/esm2022/layout-grid.props.mjs +9 -0
- package/components/containers/layout-grid/esm2022/public_api.mjs +4 -0
- package/components/containers/layout-grid/fesm2022/index.mjs +153 -0
- package/components/containers/layout-grid/fesm2022/index.mjs.map +1 -0
- package/components/containers/layout-grid/index.d.ts +5 -0
- package/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +12 -0
- package/components/containers/layout-grid/layout-grid-column/layout-grid-column.props.d.ts +1 -0
- package/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +9 -0
- package/components/containers/layout-grid/layout-grid-row/layout-grid-row.props.d.ts +1 -0
- package/components/containers/layout-grid/layout-grid.directive.d.ts +9 -0
- package/components/containers/layout-grid/layout-grid.props.d.ts +1 -0
- package/components/containers/layout-grid/package.json +20 -0
- package/components/containers/layout-grid/public_api.d.ts +3 -0
- package/components/containers/linear-layout/.npmignore +2 -0
- package/components/containers/linear-layout/bundles/index.umd.js +186 -0
- package/components/containers/linear-layout/esm2022/index.mjs +5 -0
- package/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +44 -0
- package/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.props.mjs +10 -0
- package/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +100 -0
- package/components/containers/linear-layout/esm2022/linear-layout.props.mjs +13 -0
- package/components/containers/linear-layout/esm2022/public_api.mjs +3 -0
- package/components/containers/linear-layout/fesm2022/index.mjs +167 -0
- package/components/containers/linear-layout/fesm2022/index.mjs.map +1 -0
- package/components/containers/linear-layout/index.d.ts +5 -0
- package/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +10 -0
- package/components/containers/linear-layout/linear-layout-item/linear-layout-item.props.d.ts +1 -0
- package/components/containers/linear-layout/linear-layout.directive.d.ts +16 -0
- package/components/containers/linear-layout/linear-layout.props.d.ts +1 -0
- package/components/containers/linear-layout/package.json +20 -0
- package/components/containers/linear-layout/public_api.d.ts +2 -0
- package/components/containers/panel/.npmignore +2 -0
- package/components/containers/panel/bundles/index.umd.js +223 -0
- package/components/containers/panel/esm2022/index.mjs +5 -0
- package/components/containers/panel/esm2022/panel.component.mjs +168 -0
- package/components/containers/panel/esm2022/panel.props.mjs +38 -0
- package/components/containers/panel/esm2022/public_api.mjs +2 -0
- package/components/containers/panel/fesm2022/index.mjs +210 -0
- package/components/containers/panel/fesm2022/index.mjs.map +1 -0
- package/components/containers/panel/index.d.ts +5 -0
- package/components/containers/panel/package.json +20 -0
- package/components/containers/panel/panel.component.d.ts +43 -0
- package/components/containers/panel/panel.props.d.ts +1 -0
- package/components/containers/panel/public_api.d.ts +1 -0
- package/components/containers/tabs/.npmignore +2 -0
- package/components/containers/tabs/bundles/index.umd.js +788 -0
- package/components/containers/tabs/esm2022/index.mjs +5 -0
- package/components/containers/tabs/esm2022/public_api.mjs +3 -0
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +179 -0
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.props.mjs +22 -0
- package/components/containers/tabs/esm2022/tabs.animator.mjs +83 -0
- package/components/containers/tabs/esm2022/tabs.component.mjs +478 -0
- package/components/containers/tabs/esm2022/tabs.props.mjs +20 -0
- package/components/containers/tabs/fesm2022/index.mjs +775 -0
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -0
- package/components/containers/tabs/index.d.ts +5 -0
- package/components/containers/tabs/package.json +20 -0
- package/components/containers/tabs/public_api.d.ts +2 -0
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +41 -0
- package/components/containers/tabs/tab-pane/tab-pane.props.d.ts +1 -0
- package/components/containers/tabs/tabs.animator.d.ts +30 -0
- package/components/containers/tabs/tabs.component.d.ts +87 -0
- package/components/containers/tabs/tabs.props.d.ts +1 -0
- package/components/containers/tile/.npmignore +2 -0
- package/components/containers/tile/bundles/index.umd.js +68 -0
- package/components/containers/tile/esm2022/index.mjs +5 -0
- package/components/containers/tile/esm2022/public_api.mjs +2 -0
- package/components/containers/tile/esm2022/tile.directive.mjs +33 -0
- package/components/containers/tile/esm2022/tile.props.mjs +12 -0
- package/components/containers/tile/fesm2022/index.mjs +50 -0
- package/components/containers/tile/fesm2022/index.mjs.map +1 -0
- package/components/containers/tile/index.d.ts +5 -0
- package/components/containers/tile/package.json +20 -0
- package/components/containers/tile/public_api.d.ts +1 -0
- package/components/containers/tile/tile.directive.d.ts +9 -0
- package/components/containers/tile/tile.props.d.ts +1 -0
- package/components/containers/wizard/.npmignore +2 -0
- package/components/containers/wizard/bundles/index.umd.js +1074 -0
- package/components/containers/wizard/esm2022/index.mjs +5 -0
- package/components/containers/wizard/esm2022/public_api.mjs +4 -0
- package/components/containers/wizard/esm2022/wizard-action/wizard-action.directive.mjs +35 -0
- package/components/containers/wizard/esm2022/wizard-action/wizard-action.props.mjs +9 -0
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +182 -0
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.props.mjs +17 -0
- package/components/containers/wizard/esm2022/wizard.component.mjs +801 -0
- package/components/containers/wizard/esm2022/wizard.props.mjs +22 -0
- package/components/containers/wizard/fesm2022/index.mjs +1058 -0
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -0
- package/components/containers/wizard/index.d.ts +5 -0
- package/components/containers/wizard/package.json +20 -0
- package/components/containers/wizard/public_api.d.ts +3 -0
- package/components/containers/wizard/wizard-action/wizard-action.directive.d.ts +9 -0
- package/components/containers/wizard/wizard-action/wizard-action.props.d.ts +1 -0
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +59 -0
- package/components/containers/wizard/wizard-step/wizard-step.props.d.ts +1 -0
- package/components/containers/wizard/wizard.component.d.ts +192 -0
- package/components/containers/wizard/wizard.props.d.ts +1 -0
- package/components/data/card/.npmignore +2 -0
- package/components/data/card/bundles/index.umd.js +237 -0
- package/components/data/card/card-actions/card-actions.directive.d.ts +9 -0
- package/components/data/card/card-actions/card-actions.props.d.ts +1 -0
- package/components/data/card/card-content/card-content.component.d.ts +12 -0
- package/components/data/card/card-content/card-content.props.d.ts +1 -0
- package/components/data/card/card-footer/card-footer.directive.d.ts +9 -0
- package/components/data/card/card-footer/card-footer.props.d.ts +1 -0
- package/components/data/card/card.component.d.ts +23 -0
- package/components/data/card/card.props.d.ts +1 -0
- package/components/data/card/esm2022/card-actions/card-actions.directive.mjs +31 -0
- package/components/data/card/esm2022/card-actions/card-actions.props.mjs +9 -0
- package/components/data/card/esm2022/card-content/card-content.component.mjs +43 -0
- package/components/data/card/esm2022/card-content/card-content.props.mjs +10 -0
- package/components/data/card/esm2022/card-footer/card-footer.directive.mjs +31 -0
- package/components/data/card/esm2022/card-footer/card-footer.props.mjs +9 -0
- package/components/data/card/esm2022/card.component.mjs +75 -0
- package/components/data/card/esm2022/card.props.mjs +24 -0
- package/components/data/card/esm2022/index.mjs +5 -0
- package/components/data/card/esm2022/public_api.mjs +5 -0
- package/components/data/card/fesm2022/index.mjs +220 -0
- package/components/data/card/fesm2022/index.mjs.map +1 -0
- package/components/data/card/index.d.ts +5 -0
- package/components/data/card/package.json +20 -0
- package/components/data/card/public_api.d.ts +4 -0
- package/components/data/form/.npmignore +2 -0
- package/components/data/form/bundles/index.umd.js +3308 -0
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +86 -0
- package/components/data/form/esm2022/form-action/form-action.props.mjs +25 -0
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +611 -0
- package/components/data/form/esm2022/form-field/form-field.props.mjs +52 -0
- package/components/data/form/esm2022/form-widget.directive.mjs +83 -0
- package/components/data/form/esm2022/form.component.mjs +1247 -0
- package/components/data/form/esm2022/form.props.mjs +64 -0
- package/components/data/form/esm2022/index.mjs +5 -0
- package/components/data/form/esm2022/live-actions/dependson.directive.mjs +151 -0
- package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +173 -0
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +356 -0
- package/components/data/form/esm2022/live-form/live-form.directive.mjs +502 -0
- package/components/data/form/esm2022/public_api.mjs +9 -0
- package/components/data/form/fesm2022/index.mjs +3296 -0
- package/components/data/form/fesm2022/index.mjs.map +1 -0
- package/components/data/form/form-action/form-action.directive.d.ts +35 -0
- package/components/data/form/form-action/form-action.props.d.ts +1 -0
- package/components/data/form/form-field/form-field.directive.d.ts +116 -0
- package/components/data/form/form-field/form-field.props.d.ts +1 -0
- package/components/data/form/form-widget.directive.d.ts +19 -0
- package/components/data/form/form.component.d.ts +211 -0
- package/components/data/form/form.props.d.ts +3 -0
- package/components/data/form/index.d.ts +5 -0
- package/components/data/form/live-actions/dependson.directive.d.ts +27 -0
- package/components/data/form/live-actions/live-actions.directive.d.ts +24 -0
- package/components/data/form/live-filter/live-filter.directive.d.ts +24 -0
- package/components/data/form/live-form/live-form.directive.d.ts +44 -0
- package/components/data/form/package.json +20 -0
- package/components/data/form/public_api.d.ts +8 -0
- package/components/data/list/.npmignore +2 -0
- package/components/data/list/bundles/index.umd.js +1610 -0
- package/components/data/list/esm2022/index.mjs +5 -0
- package/components/data/list/esm2022/list-item.directive.mjs +260 -0
- package/components/data/list/esm2022/list-item.props.mjs +7 -0
- package/components/data/list/esm2022/list.animator.mjs +233 -0
- package/components/data/list/esm2022/list.component.mjs +1294 -0
- package/components/data/list/esm2022/list.props.mjs +48 -0
- package/components/data/list/esm2022/public_api.mjs +3 -0
- package/components/data/list/fesm2022/index.mjs +1602 -0
- package/components/data/list/fesm2022/index.mjs.map +1 -0
- package/components/data/list/index.d.ts +5 -0
- package/components/data/list/list-item.directive.d.ts +53 -0
- package/components/data/list/list-item.props.d.ts +1 -0
- package/components/data/list/list.animator.d.ts +32 -0
- package/components/data/list/list.component.d.ts +226 -0
- package/components/data/list/list.props.d.ts +1 -0
- package/components/data/list/package.json +20 -0
- package/components/data/list/public_api.d.ts +2 -0
- package/components/data/live-table/.npmignore +2 -0
- package/components/data/live-table/bundles/index.umd.js +273 -0
- package/components/data/live-table/esm2022/index.mjs +5 -0
- package/components/data/live-table/esm2022/live-table.component.mjs +243 -0
- package/components/data/live-table/esm2022/live-table.props.mjs +10 -0
- package/components/data/live-table/esm2022/public_api.mjs +2 -0
- package/components/data/live-table/fesm2022/index.mjs +258 -0
- package/components/data/live-table/fesm2022/index.mjs.map +1 -0
- package/components/data/live-table/index.d.ts +5 -0
- package/components/data/live-table/live-table.component.d.ts +36 -0
- package/components/data/live-table/live-table.props.d.ts +1 -0
- package/components/data/live-table/package.json +20 -0
- package/components/data/live-table/public_api.d.ts +1 -0
- package/components/data/pagination/.npmignore +2 -0
- package/components/data/pagination/bundles/index.umd.js +850 -0
- package/components/data/pagination/esm2022/index.mjs +5 -0
- package/components/data/pagination/esm2022/pagination.component.mjs +817 -0
- package/components/data/pagination/esm2022/pagination.props.mjs +23 -0
- package/components/data/pagination/esm2022/public_api.mjs +2 -0
- package/components/data/pagination/fesm2022/index.mjs +845 -0
- package/components/data/pagination/fesm2022/index.mjs.map +1 -0
- package/components/data/pagination/index.d.ts +5 -0
- package/components/data/pagination/package.json +20 -0
- package/components/data/pagination/pagination.component.d.ts +101 -0
- package/components/data/pagination/pagination.props.d.ts +1 -0
- package/components/data/pagination/public_api.d.ts +1 -0
- package/components/data/table/.npmignore +2 -0
- package/components/data/table/bundles/index.umd.js +4848 -0
- package/components/data/table/esm2022/index.mjs +5 -0
- package/components/data/table/esm2022/public_api.mjs +9 -0
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +83 -0
- package/components/data/table/esm2022/table-action/table-action.props.mjs +25 -0
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +744 -0
- package/components/data/table/esm2022/table-column/table-column.props.mjs +93 -0
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +80 -0
- package/components/data/table/esm2022/table-column-group/table-column-group.props.mjs +11 -0
- package/components/data/table/esm2022/table-cud.directive.mjs +484 -0
- package/components/data/table/esm2022/table-filter.directive.mjs +706 -0
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +68 -0
- package/components/data/table/esm2022/table-row/table-row.props.mjs +16 -0
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +81 -0
- package/components/data/table/esm2022/table-row-action/table-row-action.props.mjs +20 -0
- package/components/data/table/esm2022/table.component.mjs +2406 -0
- package/components/data/table/esm2022/table.props.mjs +70 -0
- package/components/data/table/fesm2022/index.mjs +4835 -0
- package/components/data/table/fesm2022/index.mjs.map +1 -0
- package/components/data/table/index.d.ts +5 -0
- package/components/data/table/package.json +20 -0
- package/components/data/table/public_api.d.ts +8 -0
- package/components/data/table/table-action/table-action.directive.d.ts +35 -0
- package/components/data/table/table-action/table-action.props.d.ts +1 -0
- package/components/data/table/table-column/table-column.directive.d.ts +152 -0
- package/components/data/table/table-column/table-column.props.d.ts +1 -0
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +23 -0
- package/components/data/table/table-column-group/table-column-group.props.d.ts +1 -0
- package/components/data/table/table-cud.directive.d.ts +34 -0
- package/components/data/table/table-filter.directive.d.ts +35 -0
- package/components/data/table/table-row/table-row.directive.d.ts +25 -0
- package/components/data/table/table-row/table-row.props.d.ts +1 -0
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +31 -0
- package/components/data/table/table-row-action/table-row-action.props.d.ts +1 -0
- package/components/data/table/table.component.d.ts +419 -0
- package/components/data/table/table.props.d.ts +1 -0
- package/components/dialogs/alert-dialog/.npmignore +2 -0
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +23 -0
- package/components/dialogs/alert-dialog/alert-dialog.props.d.ts +1 -0
- package/components/dialogs/alert-dialog/bundles/index.umd.js +126 -0
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +87 -0
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.props.mjs +22 -0
- package/components/dialogs/alert-dialog/esm2022/index.mjs +5 -0
- package/components/dialogs/alert-dialog/esm2022/public_api.mjs +2 -0
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +114 -0
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -0
- package/components/dialogs/alert-dialog/index.d.ts +5 -0
- package/components/dialogs/alert-dialog/package.json +20 -0
- package/components/dialogs/alert-dialog/public_api.d.ts +1 -0
- package/components/dialogs/confirm-dialog/.npmignore +2 -0
- package/components/dialogs/confirm-dialog/bundles/index.umd.js +129 -0
- package/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +26 -0
- package/components/dialogs/confirm-dialog/confirm-dialog.props.d.ts +1 -0
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +90 -0
- package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.props.mjs +22 -0
- package/components/dialogs/confirm-dialog/esm2022/index.mjs +5 -0
- package/components/dialogs/confirm-dialog/esm2022/public_api.mjs +2 -0
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs +117 -0
- package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -0
- package/components/dialogs/confirm-dialog/index.d.ts +5 -0
- package/components/dialogs/confirm-dialog/package.json +20 -0
- package/components/dialogs/confirm-dialog/public_api.d.ts +1 -0
- package/components/dialogs/default/.npmignore +2 -0
- package/components/dialogs/default/base-dialog.d.ts +45 -0
- package/components/dialogs/default/bundles/index.umd.js +379 -0
- package/components/dialogs/default/dialog-body/dialog-body.directive.d.ts +13 -0
- package/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +9 -0
- package/components/dialogs/default/dialog-footer/dialog-footer.props.d.ts +1 -0
- package/components/dialogs/default/dialog-header/dialog-header.component.d.ts +25 -0
- package/components/dialogs/default/esm2022/base-dialog.mjs +184 -0
- package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +86 -0
- package/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +34 -0
- package/components/dialogs/default/esm2022/dialog-footer/dialog-footer.props.mjs +9 -0
- package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +62 -0
- package/components/dialogs/default/esm2022/index.mjs +5 -0
- package/components/dialogs/default/esm2022/public_api.mjs +5 -0
- package/components/dialogs/default/fesm2022/index.mjs +364 -0
- package/components/dialogs/default/fesm2022/index.mjs.map +1 -0
- package/components/dialogs/default/index.d.ts +5 -0
- package/components/dialogs/default/package.json +20 -0
- package/components/dialogs/default/public_api.d.ts +4 -0
- package/components/dialogs/design-dialog/.npmignore +2 -0
- package/components/dialogs/design-dialog/bundles/index.umd.js +149 -0
- package/components/dialogs/design-dialog/dialog.component.d.ts +17 -0
- package/components/dialogs/design-dialog/dialog.props.d.ts +1 -0
- package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +108 -0
- package/components/dialogs/design-dialog/esm2022/dialog.props.mjs +21 -0
- package/components/dialogs/design-dialog/esm2022/index.mjs +5 -0
- package/components/dialogs/design-dialog/esm2022/public_api.mjs +2 -0
- package/components/dialogs/design-dialog/fesm2022/index.mjs +134 -0
- package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -0
- package/components/dialogs/design-dialog/index.d.ts +5 -0
- package/components/dialogs/design-dialog/package.json +20 -0
- package/components/dialogs/design-dialog/public_api.d.ts +1 -0
- package/components/dialogs/iframe-dialog/.npmignore +2 -0
- package/components/dialogs/iframe-dialog/bundles/index.umd.js +119 -0
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +78 -0
- package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.props.mjs +25 -0
- package/components/dialogs/iframe-dialog/esm2022/index.mjs +5 -0
- package/components/dialogs/iframe-dialog/esm2022/public_api.mjs +2 -0
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs +108 -0
- package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -0
- package/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +19 -0
- package/components/dialogs/iframe-dialog/iframe-dialog.props.d.ts +1 -0
- package/components/dialogs/iframe-dialog/index.d.ts +5 -0
- package/components/dialogs/iframe-dialog/package.json +20 -0
- package/components/dialogs/iframe-dialog/public_api.d.ts +1 -0
- package/components/dialogs/login-dialog/.npmignore +2 -0
- package/components/dialogs/login-dialog/bundles/index.umd.js +114 -0
- package/components/dialogs/login-dialog/esm2022/index.mjs +5 -0
- package/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +91 -0
- package/components/dialogs/login-dialog/esm2022/public_api.mjs +2 -0
- package/components/dialogs/login-dialog/fesm2022/index.mjs +98 -0
- package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -0
- package/components/dialogs/login-dialog/index.d.ts +5 -0
- package/components/dialogs/login-dialog/login-dialog.directive.d.ts +23 -0
- package/components/dialogs/login-dialog/package.json +20 -0
- package/components/dialogs/login-dialog/public_api.d.ts +1 -0
- package/components/dialogs/partial-dialog/.npmignore +2 -0
- package/components/dialogs/partial-dialog/bundles/index.umd.js +157 -0
- package/components/dialogs/partial-dialog/esm2022/index.mjs +5 -0
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +119 -0
- package/components/dialogs/partial-dialog/esm2022/partial-dialog.props.mjs +22 -0
- package/components/dialogs/partial-dialog/esm2022/public_api.mjs +2 -0
- package/components/dialogs/partial-dialog/fesm2022/index.mjs +146 -0
- package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -0
- package/components/dialogs/partial-dialog/index.d.ts +5 -0
- package/components/dialogs/partial-dialog/package.json +20 -0
- package/components/dialogs/partial-dialog/partial-dialog.component.d.ts +29 -0
- package/components/dialogs/partial-dialog/partial-dialog.props.d.ts +1 -0
- package/components/dialogs/partial-dialog/public_api.d.ts +1 -0
- package/components/input/base-form/.npmignore +2 -0
- package/components/input/base-form/base-form.component.d.ts +26 -0
- package/components/input/base-form/bundles/index.umd.js +147 -0
- package/components/input/base-form/esm2022/base-form.component.mjs +124 -0
- package/components/input/base-form/esm2022/index.mjs +5 -0
- package/components/input/base-form/esm2022/public_api.mjs +2 -0
- package/components/input/base-form/fesm2022/index.mjs +131 -0
- package/components/input/base-form/fesm2022/index.mjs.map +1 -0
- package/components/input/base-form/index.d.ts +5 -0
- package/components/input/base-form/package.json +20 -0
- package/components/input/base-form/public_api.d.ts +1 -0
- package/components/input/base-form-custom/.npmignore +2 -0
- package/components/input/base-form-custom/base-form-custom.component.d.ts +23 -0
- package/components/input/base-form-custom/bundles/index.umd.js +129 -0
- package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +105 -0
- package/components/input/base-form-custom/esm2022/index.mjs +5 -0
- package/components/input/base-form-custom/esm2022/public_api.mjs +2 -0
- package/components/input/base-form-custom/fesm2022/index.mjs +112 -0
- package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -0
- package/components/input/base-form-custom/index.d.ts +5 -0
- package/components/input/base-form-custom/package.json +20 -0
- package/components/input/base-form-custom/public_api.d.ts +1 -0
- package/components/input/button/.npmignore +2 -0
- package/components/input/button/bundles/index.umd.js +98 -0
- package/components/input/button/button.component.d.ts +19 -0
- package/components/input/button/button.props.d.ts +1 -0
- package/components/input/button/esm2022/button.component.mjs +50 -0
- package/components/input/button/esm2022/button.props.mjs +26 -0
- package/components/input/button/esm2022/index.mjs +5 -0
- package/components/input/button/esm2022/public_api.mjs +2 -0
- package/components/input/button/fesm2022/index.mjs +81 -0
- package/components/input/button/fesm2022/index.mjs.map +1 -0
- package/components/input/button/index.d.ts +5 -0
- package/components/input/button/package.json +20 -0
- package/components/input/button/public_api.d.ts +1 -0
- package/components/input/button-group/.npmignore +2 -0
- package/components/input/button-group/bundles/index.umd.js +80 -0
- package/components/input/button-group/button-group.directive.d.ts +11 -0
- package/components/input/button-group/button-group.props.d.ts +1 -0
- package/components/input/button-group/esm2022/button-group.directive.mjs +47 -0
- package/components/input/button-group/esm2022/button-group.props.mjs +10 -0
- package/components/input/button-group/esm2022/index.mjs +5 -0
- package/components/input/button-group/esm2022/public_api.mjs +2 -0
- package/components/input/button-group/fesm2022/index.mjs +62 -0
- package/components/input/button-group/fesm2022/index.mjs.map +1 -0
- package/components/input/button-group/index.d.ts +5 -0
- package/components/input/button-group/package.json +20 -0
- package/components/input/button-group/public_api.d.ts +1 -0
- package/components/input/calendar/.npmignore +2 -0
- package/components/input/calendar/bundles/index.umd.js +655 -0
- package/components/input/calendar/calendar.component.d.ts +128 -0
- package/components/input/calendar/calendar.props.d.ts +1 -0
- package/components/input/calendar/esm2022/calendar.component.mjs +637 -0
- package/components/input/calendar/esm2022/calendar.props.mjs +23 -0
- package/components/input/calendar/esm2022/index.mjs +5 -0
- package/components/input/calendar/esm2022/public_api.mjs +2 -0
- package/components/input/calendar/fesm2022/index.mjs +665 -0
- package/components/input/calendar/fesm2022/index.mjs.map +1 -0
- package/components/input/calendar/index.d.ts +5 -0
- package/components/input/calendar/package.json +20 -0
- package/components/input/calendar/public_api.d.ts +1 -0
- package/components/input/caption-position/.npmignore +2 -0
- package/components/input/caption-position/bundles/index.umd.js +196 -0
- package/components/input/caption-position/caption-position.directive.d.ts +31 -0
- package/components/input/caption-position/esm2022/caption-position.directive.mjs +172 -0
- package/components/input/caption-position/esm2022/index.mjs +5 -0
- package/components/input/caption-position/esm2022/public_api.mjs +2 -0
- package/components/input/caption-position/fesm2022/index.mjs +178 -0
- package/components/input/caption-position/fesm2022/index.mjs.map +1 -0
- package/components/input/caption-position/index.d.ts +5 -0
- package/components/input/caption-position/package.json +20 -0
- package/components/input/caption-position/public_api.d.ts +1 -0
- package/components/input/checkbox/.npmignore +2 -0
- package/components/input/checkbox/bundles/index.umd.js +206 -0
- package/components/input/checkbox/checkbox.component.d.ts +36 -0
- package/components/input/checkbox/checkbox.props.d.ts +2 -0
- package/components/input/checkbox/esm2022/checkbox.component.mjs +158 -0
- package/components/input/checkbox/esm2022/checkbox.props.mjs +30 -0
- package/components/input/checkbox/esm2022/index.mjs +5 -0
- package/components/input/checkbox/esm2022/public_api.mjs +2 -0
- package/components/input/checkbox/fesm2022/index.mjs +191 -0
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -0
- package/components/input/checkbox/index.d.ts +5 -0
- package/components/input/checkbox/package.json +20 -0
- package/components/input/checkbox/public_api.d.ts +1 -0
- package/components/input/checkboxset/.npmignore +2 -0
- package/components/input/checkboxset/bundles/index.umd.js +178 -0
- package/components/input/checkboxset/checkboxset.component.d.ts +24 -0
- package/components/input/checkboxset/checkboxset.props.d.ts +2 -0
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +125 -0
- package/components/input/checkboxset/esm2022/checkboxset.props.mjs +36 -0
- package/components/input/checkboxset/esm2022/index.mjs +5 -0
- package/components/input/checkboxset/esm2022/public_api.mjs +2 -0
- package/components/input/checkboxset/fesm2022/index.mjs +165 -0
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -0
- package/components/input/checkboxset/index.d.ts +5 -0
- package/components/input/checkboxset/package.json +20 -0
- package/components/input/checkboxset/public_api.d.ts +1 -0
- package/components/input/chips/.npmignore +2 -0
- package/components/input/chips/bundles/index.umd.js +741 -0
- package/components/input/chips/chips.component.d.ts +87 -0
- package/components/input/chips/chips.props.d.ts +2 -0
- package/components/input/chips/esm2022/chips.component.mjs +676 -0
- package/components/input/chips/esm2022/chips.props.mjs +49 -0
- package/components/input/chips/esm2022/index.mjs +5 -0
- package/components/input/chips/esm2022/public_api.mjs +2 -0
- package/components/input/chips/fesm2022/index.mjs +729 -0
- package/components/input/chips/fesm2022/index.mjs.map +1 -0
- package/components/input/chips/index.d.ts +5 -0
- package/components/input/chips/package.json +20 -0
- package/components/input/chips/public_api.d.ts +1 -0
- package/components/input/color-picker/.npmignore +2 -0
- package/components/input/color-picker/bundles/index.umd.js +145 -0
- package/components/input/color-picker/color-picker.component.d.ts +33 -0
- package/components/input/color-picker/color-picker.props.d.ts +2 -0
- package/components/input/color-picker/esm2022/color-picker.component.mjs +107 -0
- package/components/input/color-picker/esm2022/color-picker.props.mjs +22 -0
- package/components/input/color-picker/esm2022/index.mjs +5 -0
- package/components/input/color-picker/esm2022/public_api.mjs +2 -0
- package/components/input/color-picker/fesm2022/index.mjs +132 -0
- package/components/input/color-picker/fesm2022/index.mjs.map +1 -0
- package/components/input/color-picker/index.d.ts +5 -0
- package/components/input/color-picker/package.json +20 -0
- package/components/input/color-picker/public_api.d.ts +1 -0
- package/components/input/composite/.npmignore +2 -0
- package/components/input/composite/bundles/index.umd.js +120 -0
- package/components/input/composite/composite.directive.d.ts +24 -0
- package/components/input/composite/composite.props.d.ts +1 -0
- package/components/input/composite/esm2022/composite.directive.mjs +88 -0
- package/components/input/composite/esm2022/composite.props.mjs +10 -0
- package/components/input/composite/esm2022/index.mjs +5 -0
- package/components/input/composite/esm2022/public_api.mjs +2 -0
- package/components/input/composite/fesm2022/index.mjs +103 -0
- package/components/input/composite/fesm2022/index.mjs.map +1 -0
- package/components/input/composite/index.d.ts +5 -0
- package/components/input/composite/package.json +20 -0
- package/components/input/composite/public_api.d.ts +1 -0
- package/components/input/currency/.npmignore +2 -0
- package/components/input/currency/bundles/index.umd.js +112 -0
- package/components/input/currency/currency.component.d.ts +28 -0
- package/components/input/currency/currency.props.d.ts +2 -0
- package/components/input/currency/esm2022/currency.component.mjs +67 -0
- package/components/input/currency/esm2022/currency.props.mjs +27 -0
- package/components/input/currency/esm2022/index.mjs +5 -0
- package/components/input/currency/esm2022/public_api.mjs +2 -0
- package/components/input/currency/fesm2022/index.mjs +97 -0
- package/components/input/currency/fesm2022/index.mjs.map +1 -0
- package/components/input/currency/index.d.ts +5 -0
- package/components/input/currency/package.json +20 -0
- package/components/input/currency/public_api.d.ts +1 -0
- package/components/input/dataset-aware-form/.npmignore +2 -0
- package/components/input/dataset-aware-form/bundles/index.umd.js +352 -0
- package/components/input/dataset-aware-form/dataset-aware-form.component.d.ts +76 -0
- package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +331 -0
- package/components/input/dataset-aware-form/esm2022/index.mjs +5 -0
- package/components/input/dataset-aware-form/esm2022/public_api.mjs +2 -0
- package/components/input/dataset-aware-form/fesm2022/index.mjs +338 -0
- package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -0
- package/components/input/dataset-aware-form/index.d.ts +5 -0
- package/components/input/dataset-aware-form/package.json +20 -0
- package/components/input/dataset-aware-form/public_api.d.ts +1 -0
- package/components/input/epoch/base-date-time/.npmignore +2 -0
- package/components/input/epoch/base-date-time/base-date-time.component.d.ts +246 -0
- package/components/input/epoch/base-date-time/bundles/index.umd.js +1093 -0
- package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +1077 -0
- package/components/input/epoch/base-date-time/esm2022/index.mjs +5 -0
- package/components/input/epoch/base-date-time/esm2022/public_api.mjs +2 -0
- package/components/input/epoch/base-date-time/fesm2022/index.mjs +1084 -0
- package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -0
- package/components/input/epoch/base-date-time/index.d.ts +5 -0
- package/components/input/epoch/base-date-time/package.json +20 -0
- package/components/input/epoch/base-date-time/public_api.d.ts +1 -0
- package/components/input/epoch/date/.npmignore +2 -0
- package/components/input/epoch/date/bundles/index.umd.js +515 -0
- package/components/input/epoch/date/date.component.d.ts +61 -0
- package/components/input/epoch/date/date.props.d.ts +2 -0
- package/components/input/epoch/date/esm2022/date.component.mjs +345 -0
- package/components/input/epoch/date/esm2022/date.props.mjs +43 -0
- package/components/input/epoch/date/esm2022/imaskUtil.mjs +114 -0
- package/components/input/epoch/date/esm2022/index.mjs +5 -0
- package/components/input/epoch/date/esm2022/public_api.mjs +2 -0
- package/components/input/epoch/date/fesm2022/index.mjs +505 -0
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -0
- package/components/input/epoch/date/imaskUtil.d.ts +92 -0
- package/components/input/epoch/date/index.d.ts +5 -0
- package/components/input/epoch/date/package.json +20 -0
- package/components/input/epoch/date/public_api.d.ts +1 -0
- package/components/input/epoch/date-time/.npmignore +2 -0
- package/components/input/epoch/date-time/bundles/index.umd.js +519 -0
- package/components/input/epoch/date-time/date-time.component.d.ts +109 -0
- package/components/input/epoch/date-time/date-time.props.d.ts +2 -0
- package/components/input/epoch/date-time/esm2022/date-time.component.mjs +459 -0
- package/components/input/epoch/date-time/esm2022/date-time.props.mjs +47 -0
- package/components/input/epoch/date-time/esm2022/index.mjs +5 -0
- package/components/input/epoch/date-time/esm2022/public_api.mjs +2 -0
- package/components/input/epoch/date-time/fesm2022/index.mjs +510 -0
- package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -0
- package/components/input/epoch/date-time/index.d.ts +5 -0
- package/components/input/epoch/date-time/package.json +20 -0
- package/components/input/epoch/date-time/public_api.d.ts +1 -0
- package/components/input/epoch/date-time-picker/.npmignore +2 -0
- package/components/input/epoch/date-time-picker/bundles/index.umd.js +453 -0
- package/components/input/epoch/date-time-picker/date-time-picker.component.d.ts +80 -0
- package/components/input/epoch/date-time-picker/esm2022/date-time-picker.component.mjs +433 -0
- package/components/input/epoch/date-time-picker/esm2022/index.mjs +5 -0
- package/components/input/epoch/date-time-picker/esm2022/public_api.mjs +2 -0
- package/components/input/epoch/date-time-picker/fesm2022/index.mjs +439 -0
- package/components/input/epoch/date-time-picker/fesm2022/index.mjs.map +1 -0
- package/components/input/epoch/date-time-picker/index.d.ts +5 -0
- package/components/input/epoch/date-time-picker/package.json +20 -0
- package/components/input/epoch/date-time-picker/public_api.d.ts +1 -0
- package/components/input/epoch/picker/.npmignore +2 -0
- package/components/input/epoch/picker/bundles/index.umd.js +192 -0
- package/components/input/epoch/picker/esm2022/index.mjs +5 -0
- package/components/input/epoch/picker/esm2022/picker.component.mjs +165 -0
- package/components/input/epoch/picker/esm2022/public_api.mjs +3 -0
- package/components/input/epoch/picker/fesm2022/index.mjs +172 -0
- package/components/input/epoch/picker/fesm2022/index.mjs.map +1 -0
- package/components/input/epoch/picker/index.d.ts +5 -0
- package/components/input/epoch/picker/package.json +20 -0
- package/components/input/epoch/picker/picker.component.d.ts +36 -0
- package/components/input/epoch/picker/public_api.d.ts +2 -0
- package/components/input/epoch/time/.npmignore +2 -0
- package/components/input/epoch/time/bundles/index.umd.js +401 -0
- package/components/input/epoch/time/esm2022/index.mjs +5 -0
- package/components/input/epoch/time/esm2022/public_api.mjs +2 -0
- package/components/input/epoch/time/esm2022/time.component.mjs +352 -0
- package/components/input/epoch/time/esm2022/time.props.mjs +35 -0
- package/components/input/epoch/time/fesm2022/index.mjs +391 -0
- package/components/input/epoch/time/fesm2022/index.mjs.map +1 -0
- package/components/input/epoch/time/index.d.ts +5 -0
- package/components/input/epoch/time/package.json +20 -0
- package/components/input/epoch/time/public_api.d.ts +1 -0
- package/components/input/epoch/time/time.component.d.ts +105 -0
- package/components/input/epoch/time/time.props.d.ts +2 -0
- package/components/input/file-upload/.npmignore +2 -0
- package/components/input/file-upload/bundles/index.umd.js +483 -0
- package/components/input/file-upload/esm2022/file-upload.component.mjs +426 -0
- package/components/input/file-upload/esm2022/file-upload.props.mjs +39 -0
- package/components/input/file-upload/esm2022/index.mjs +5 -0
- package/components/input/file-upload/esm2022/public_api.mjs +2 -0
- package/components/input/file-upload/fesm2022/index.mjs +469 -0
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -0
- package/components/input/file-upload/file-upload.component.d.ts +103 -0
- package/components/input/file-upload/file-upload.props.d.ts +1 -0
- package/components/input/file-upload/index.d.ts +5 -0
- package/components/input/file-upload/package.json +20 -0
- package/components/input/file-upload/public_api.d.ts +1 -0
- package/components/input/number/.npmignore +2 -0
- package/components/input/number/bundles/index.umd.js +109 -0
- package/components/input/number/esm2022/index.mjs +5 -0
- package/components/input/number/esm2022/number.component.mjs +57 -0
- package/components/input/number/esm2022/number.props.mjs +35 -0
- package/components/input/number/esm2022/public_api.mjs +2 -0
- package/components/input/number/fesm2022/index.mjs +95 -0
- package/components/input/number/fesm2022/index.mjs.map +1 -0
- package/components/input/number/index.d.ts +5 -0
- package/components/input/number/number.component.d.ts +26 -0
- package/components/input/number/number.props.d.ts +2 -0
- package/components/input/number/package.json +20 -0
- package/components/input/number/public_api.d.ts +1 -0
- package/components/input/radioset/.npmignore +2 -0
- package/components/input/radioset/bundles/index.umd.js +164 -0
- package/components/input/radioset/esm2022/index.mjs +5 -0
- package/components/input/radioset/esm2022/public_api.mjs +2 -0
- package/components/input/radioset/esm2022/radioset.component.mjs +110 -0
- package/components/input/radioset/esm2022/radioset.props.mjs +37 -0
- package/components/input/radioset/fesm2022/index.mjs +151 -0
- package/components/input/radioset/fesm2022/index.mjs.map +1 -0
- package/components/input/radioset/index.d.ts +5 -0
- package/components/input/radioset/package.json +20 -0
- package/components/input/radioset/public_api.d.ts +1 -0
- package/components/input/radioset/radioset.component.d.ts +23 -0
- package/components/input/radioset/radioset.props.d.ts +2 -0
- package/components/input/rating/.npmignore +2 -0
- package/components/input/rating/bundles/index.umd.js +270 -0
- package/components/input/rating/esm2022/index.mjs +5 -0
- package/components/input/rating/esm2022/public_api.mjs +2 -0
- package/components/input/rating/esm2022/rating.component.mjs +225 -0
- package/components/input/rating/esm2022/rating.props.mjs +29 -0
- package/components/input/rating/fesm2022/index.mjs +257 -0
- package/components/input/rating/fesm2022/index.mjs.map +1 -0
- package/components/input/rating/index.d.ts +5 -0
- package/components/input/rating/package.json +20 -0
- package/components/input/rating/public_api.d.ts +1 -0
- package/components/input/rating/rating.component.d.ts +44 -0
- package/components/input/rating/rating.props.d.ts +2 -0
- package/components/input/select/.npmignore +2 -0
- package/components/input/select/bundles/index.umd.js +225 -0
- package/components/input/select/esm2022/index.mjs +5 -0
- package/components/input/select/esm2022/public_api.mjs +2 -0
- package/components/input/select/esm2022/select.component.mjs +172 -0
- package/components/input/select/esm2022/select.props.mjs +36 -0
- package/components/input/select/fesm2022/index.mjs +211 -0
- package/components/input/select/fesm2022/index.mjs.map +1 -0
- package/components/input/select/index.d.ts +5 -0
- package/components/input/select/package.json +20 -0
- package/components/input/select/public_api.d.ts +1 -0
- package/components/input/select/select.component.d.ts +36 -0
- package/components/input/select/select.props.d.ts +2 -0
- package/components/input/slider/.npmignore +2 -0
- package/components/input/slider/bundles/index.umd.js +203 -0
- package/components/input/slider/esm2022/index.mjs +5 -0
- package/components/input/slider/esm2022/public_api.mjs +2 -0
- package/components/input/slider/esm2022/slider.component.mjs +157 -0
- package/components/input/slider/esm2022/slider.props.mjs +28 -0
- package/components/input/slider/fesm2022/index.mjs +189 -0
- package/components/input/slider/fesm2022/index.mjs.map +1 -0
- package/components/input/slider/index.d.ts +5 -0
- package/components/input/slider/package.json +20 -0
- package/components/input/slider/public_api.d.ts +1 -0
- package/components/input/slider/slider.component.d.ts +39 -0
- package/components/input/slider/slider.props.d.ts +2 -0
- package/components/input/switch/.npmignore +2 -0
- package/components/input/switch/bundles/index.umd.js +224 -0
- package/components/input/switch/esm2022/index.mjs +5 -0
- package/components/input/switch/esm2022/public_api.mjs +2 -0
- package/components/input/switch/esm2022/switch.component.mjs +179 -0
- package/components/input/switch/esm2022/switch.props.mjs +28 -0
- package/components/input/switch/fesm2022/index.mjs +211 -0
- package/components/input/switch/fesm2022/index.mjs.map +1 -0
- package/components/input/switch/index.d.ts +5 -0
- package/components/input/switch/package.json +20 -0
- package/components/input/switch/public_api.d.ts +1 -0
- package/components/input/switch/switch.component.d.ts +30 -0
- package/components/input/switch/switch.props.d.ts +2 -0
- package/components/input/text/.npmignore +2 -0
- package/components/input/text/base-input/base-input.d.ts +33 -0
- package/components/input/text/bundles/index.umd.js +1130 -0
- package/components/input/text/esm2022/base-input/base-input.mjs +93 -0
- package/components/input/text/esm2022/index.mjs +5 -0
- package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +53 -0
- package/components/input/text/esm2022/input-calendar/input-calendar.props.mjs +30 -0
- package/components/input/text/esm2022/input-color/input-color.component.mjs +53 -0
- package/components/input/text/esm2022/input-color/input-color.props.mjs +27 -0
- package/components/input/text/esm2022/input-email/input-email.component.mjs +53 -0
- package/components/input/text/esm2022/input-email/input-email.props.mjs +29 -0
- package/components/input/text/esm2022/input-number/input-number.component.mjs +63 -0
- package/components/input/text/esm2022/input-number/input-number.props.mjs +32 -0
- package/components/input/text/esm2022/input-text/input-text.component.mjs +136 -0
- package/components/input/text/esm2022/input-text/input-text.props.mjs +48 -0
- package/components/input/text/esm2022/number-locale/number-locale.mjs +554 -0
- package/components/input/text/esm2022/public_api.mjs +8 -0
- package/components/input/text/fesm2022/index.mjs +1114 -0
- package/components/input/text/fesm2022/index.mjs.map +1 -0
- package/components/input/text/index.d.ts +5 -0
- package/components/input/text/input-calendar/input-calendar.component.d.ts +30 -0
- package/components/input/text/input-calendar/input-calendar.props.d.ts +2 -0
- package/components/input/text/input-color/input-color.component.d.ts +27 -0
- package/components/input/text/input-color/input-color.props.d.ts +2 -0
- package/components/input/text/input-email/input-email.component.d.ts +29 -0
- package/components/input/text/input-email/input-email.props.d.ts +2 -0
- package/components/input/text/input-number/input-number.component.d.ts +33 -0
- package/components/input/text/input-number/input-number.props.d.ts +2 -0
- package/components/input/text/input-text/input-text.component.d.ts +52 -0
- package/components/input/text/input-text/input-text.props.d.ts +2 -0
- package/components/input/text/number-locale/number-locale.d.ts +127 -0
- package/components/input/text/package.json +20 -0
- package/components/input/text/public_api.d.ts +7 -0
- package/components/input/textarea/.npmignore +2 -0
- package/components/input/textarea/bundles/index.umd.js +108 -0
- package/components/input/textarea/esm2022/index.mjs +5 -0
- package/components/input/textarea/esm2022/public_api.mjs +2 -0
- package/components/input/textarea/esm2022/textarea.component.mjs +60 -0
- package/components/input/textarea/esm2022/textarea.props.mjs +30 -0
- package/components/input/textarea/fesm2022/index.mjs +94 -0
- package/components/input/textarea/fesm2022/index.mjs.map +1 -0
- package/components/input/textarea/index.d.ts +5 -0
- package/components/input/textarea/package.json +20 -0
- package/components/input/textarea/public_api.d.ts +1 -0
- package/components/input/textarea/textarea.component.d.ts +30 -0
- package/components/input/textarea/textarea.props.d.ts +2 -0
- package/components/navigation/breadcrumb/.npmignore +2 -0
- package/components/navigation/breadcrumb/breadcrumb.component.d.ts +25 -0
- package/components/navigation/breadcrumb/breadcrumb.props.d.ts +1 -0
- package/components/navigation/breadcrumb/bundles/index.umd.js +138 -0
- package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +101 -0
- package/components/navigation/breadcrumb/esm2022/breadcrumb.props.mjs +17 -0
- package/components/navigation/breadcrumb/esm2022/index.mjs +5 -0
- package/components/navigation/breadcrumb/esm2022/public_api.mjs +2 -0
- package/components/navigation/breadcrumb/fesm2022/index.mjs +121 -0
- package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -0
- package/components/navigation/breadcrumb/index.d.ts +5 -0
- package/components/navigation/breadcrumb/package.json +20 -0
- package/components/navigation/breadcrumb/public_api.d.ts +1 -0
- package/components/navigation/menu/.npmignore +2 -0
- package/components/navigation/menu/bundles/index.umd.js +947 -0
- package/components/navigation/menu/esm2022/index.mjs +5 -0
- package/components/navigation/menu/esm2022/menu-adapator.component.mjs +80 -0
- package/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +105 -0
- package/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +191 -0
- package/components/navigation/menu/esm2022/menu.component.mjs +282 -0
- package/components/navigation/menu/esm2022/menu.props.mjs +37 -0
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +66 -0
- package/components/navigation/menu/esm2022/nav/nav-item/nav-item.props.mjs +9 -0
- package/components/navigation/menu/esm2022/nav/nav.component.mjs +131 -0
- package/components/navigation/menu/esm2022/nav/nav.props.mjs +28 -0
- package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +49 -0
- package/components/navigation/menu/esm2022/public_api.mjs +8 -0
- package/components/navigation/menu/fesm2022/index.mjs +929 -0
- package/components/navigation/menu/fesm2022/index.mjs.map +1 -0
- package/components/navigation/menu/index.d.ts +5 -0
- package/components/navigation/menu/menu-adapator.component.d.ts +23 -0
- package/components/navigation/menu/menu-dropdown/menu-dropdown.component.d.ts +15 -0
- package/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +35 -0
- package/components/navigation/menu/menu.component.d.ts +65 -0
- package/components/navigation/menu/menu.props.d.ts +1 -0
- package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +14 -0
- package/components/navigation/menu/nav/nav-item/nav-item.props.d.ts +1 -0
- package/components/navigation/menu/nav/nav.component.d.ts +35 -0
- package/components/navigation/menu/nav/nav.props.d.ts +1 -0
- package/components/navigation/menu/nav/navigation-control.directive.d.ts +14 -0
- package/components/navigation/menu/package.json +20 -0
- package/components/navigation/menu/public_api.d.ts +7 -0
- package/components/navigation/navbar/.npmignore +2 -0
- package/components/navigation/navbar/bundles/index.umd.js +87 -0
- package/components/navigation/navbar/esm2022/index.mjs +5 -0
- package/components/navigation/navbar/esm2022/navbar.component.mjs +52 -0
- package/components/navigation/navbar/esm2022/navbar.props.mjs +13 -0
- package/components/navigation/navbar/esm2022/public_api.mjs +2 -0
- package/components/navigation/navbar/fesm2022/index.mjs +70 -0
- package/components/navigation/navbar/fesm2022/index.mjs.map +1 -0
- package/components/navigation/navbar/index.d.ts +5 -0
- package/components/navigation/navbar/navbar.component.d.ts +16 -0
- package/components/navigation/navbar/navbar.props.d.ts +1 -0
- package/components/navigation/navbar/package.json +20 -0
- package/components/navigation/navbar/public_api.d.ts +1 -0
- package/components/navigation/popover/.npmignore +2 -0
- package/components/navigation/popover/bundles/index.umd.js +514 -0
- package/components/navigation/popover/esm2022/index.mjs +5 -0
- package/components/navigation/popover/esm2022/popover.component.mjs +460 -0
- package/components/navigation/popover/esm2022/popover.props.mjs +35 -0
- package/components/navigation/popover/esm2022/public_api.mjs +2 -0
- package/components/navigation/popover/fesm2022/index.mjs +500 -0
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -0
- package/components/navigation/popover/index.d.ts +5 -0
- package/components/navigation/popover/package.json +20 -0
- package/components/navigation/popover/popover.component.d.ts +83 -0
- package/components/navigation/popover/popover.props.d.ts +1 -0
- package/components/navigation/popover/public_api.d.ts +1 -0
- package/components/page/default/.npmignore +2 -0
- package/components/page/default/bundles/index.umd.js +458 -0
- package/components/page/default/content/content.component.d.ts +9 -0
- package/components/page/default/content/content.props.d.ts +1 -0
- package/components/page/default/esm2022/content/content.component.mjs +29 -0
- package/components/page/default/esm2022/content/content.props.mjs +8 -0
- package/components/page/default/esm2022/index.mjs +5 -0
- package/components/page/default/esm2022/layout.directive.mjs +58 -0
- package/components/page/default/esm2022/layout.props.mjs +5 -0
- package/components/page/default/esm2022/page-content/page-content.component.mjs +85 -0
- package/components/page/default/esm2022/page-content/page-content.props.mjs +14 -0
- package/components/page/default/esm2022/page.directive.mjs +97 -0
- package/components/page/default/esm2022/page.props.mjs +11 -0
- package/components/page/default/esm2022/public_api.mjs +7 -0
- package/components/page/default/esm2022/router-outlet.directive.mjs +47 -0
- package/components/page/default/esm2022/router-outlet.props.mjs +8 -0
- package/components/page/default/esm2022/spa-page.directive.mjs +97 -0
- package/components/page/default/esm2022/spa-page.props.mjs +10 -0
- package/components/page/default/fesm2022/index.mjs +438 -0
- package/components/page/default/fesm2022/index.mjs.map +1 -0
- package/components/page/default/index.d.ts +5 -0
- package/components/page/default/layout.directive.d.ts +20 -0
- package/components/page/default/layout.props.d.ts +1 -0
- package/components/page/default/package.json +20 -0
- package/components/page/default/page-content/page-content.component.d.ts +17 -0
- package/components/page/default/page-content/page-content.props.d.ts +1 -0
- package/components/page/default/page.directive.d.ts +38 -0
- package/components/page/default/page.props.d.ts +1 -0
- package/components/page/default/public_api.d.ts +6 -0
- package/components/page/default/router-outlet.directive.d.ts +13 -0
- package/components/page/default/router-outlet.props.d.ts +1 -0
- package/components/page/default/spa-page.directive.d.ts +38 -0
- package/components/page/default/spa-page.props.d.ts +1 -0
- package/components/page/footer/.npmignore +2 -0
- package/components/page/footer/bundles/index.umd.js +71 -0
- package/components/page/footer/esm2022/footer.directive.mjs +37 -0
- package/components/page/footer/esm2022/footer.props.mjs +11 -0
- package/components/page/footer/esm2022/index.mjs +5 -0
- package/components/page/footer/esm2022/public_api.mjs +2 -0
- package/components/page/footer/fesm2022/index.mjs +53 -0
- package/components/page/footer/fesm2022/index.mjs.map +1 -0
- package/components/page/footer/footer.directive.d.ts +9 -0
- package/components/page/footer/footer.props.d.ts +1 -0
- package/components/page/footer/index.d.ts +5 -0
- package/components/page/footer/package.json +20 -0
- package/components/page/footer/public_api.d.ts +1 -0
- package/components/page/header/.npmignore +2 -0
- package/components/page/header/bundles/index.umd.js +67 -0
- package/components/page/header/esm2022/header.component.mjs +33 -0
- package/components/page/header/esm2022/header.props.mjs +11 -0
- package/components/page/header/esm2022/index.mjs +5 -0
- package/components/page/header/esm2022/public_api.mjs +2 -0
- package/components/page/header/fesm2022/index.mjs +49 -0
- package/components/page/header/fesm2022/index.mjs.map +1 -0
- package/components/page/header/header.component.d.ts +10 -0
- package/components/page/header/header.props.d.ts +1 -0
- package/components/page/header/index.d.ts +5 -0
- package/components/page/header/package.json +20 -0
- package/components/page/header/public_api.d.ts +1 -0
- package/components/page/left-panel/.npmignore +2 -0
- package/components/page/left-panel/bundles/index.umd.js +415 -0
- package/components/page/left-panel/esm2022/index.mjs +5 -0
- package/components/page/left-panel/esm2022/left-panel.animator.mjs +133 -0
- package/components/page/left-panel/esm2022/left-panel.directive.mjs +251 -0
- package/components/page/left-panel/esm2022/left-panel.props.mjs +15 -0
- package/components/page/left-panel/esm2022/public_api.mjs +2 -0
- package/components/page/left-panel/fesm2022/index.mjs +400 -0
- package/components/page/left-panel/fesm2022/index.mjs.map +1 -0
- package/components/page/left-panel/index.d.ts +5 -0
- package/components/page/left-panel/left-panel.animator.d.ts +49 -0
- package/components/page/left-panel/left-panel.directive.d.ts +38 -0
- package/components/page/left-panel/left-panel.props.d.ts +1 -0
- package/components/page/left-panel/package.json +20 -0
- package/components/page/left-panel/public_api.d.ts +1 -0
- package/components/page/right-panel/.npmignore +2 -0
- package/components/page/right-panel/bundles/index.umd.js +86 -0
- package/components/page/right-panel/esm2022/index.mjs +5 -0
- package/components/page/right-panel/esm2022/public_api.mjs +2 -0
- package/components/page/right-panel/esm2022/right-panel.directive.mjs +52 -0
- package/components/page/right-panel/esm2022/right-panel.props.mjs +12 -0
- package/components/page/right-panel/fesm2022/index.mjs +69 -0
- package/components/page/right-panel/fesm2022/index.mjs.map +1 -0
- package/components/page/right-panel/index.d.ts +5 -0
- package/components/page/right-panel/package.json +20 -0
- package/components/page/right-panel/public_api.d.ts +1 -0
- package/components/page/right-panel/right-panel.directive.d.ts +10 -0
- package/components/page/right-panel/right-panel.props.d.ts +1 -0
- package/components/page/top-nav/.npmignore +2 -0
- package/components/page/top-nav/bundles/index.umd.js +68 -0
- package/components/page/top-nav/esm2022/index.mjs +5 -0
- package/components/page/top-nav/esm2022/public_api.mjs +2 -0
- package/components/page/top-nav/esm2022/top-nav.directive.mjs +34 -0
- package/components/page/top-nav/esm2022/top-nav.props.mjs +11 -0
- package/components/page/top-nav/fesm2022/index.mjs +50 -0
- package/components/page/top-nav/fesm2022/index.mjs.map +1 -0
- package/components/page/top-nav/index.d.ts +5 -0
- package/components/page/top-nav/package.json +20 -0
- package/components/page/top-nav/public_api.d.ts +1 -0
- package/components/page/top-nav/top-nav.directive.d.ts +9 -0
- package/components/page/top-nav/top-nav.props.d.ts +1 -0
- package/components/prefab/.npmignore +2 -0
- package/components/prefab/bundles/index.umd.js +176 -0
- package/components/prefab/esm2022/index.mjs +5 -0
- package/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +56 -0
- package/components/prefab/esm2022/prefab-container/prefab-container.props.mjs +9 -0
- package/components/prefab/esm2022/prefab.directive.mjs +88 -0
- package/components/prefab/esm2022/prefab.props.mjs +8 -0
- package/components/prefab/esm2022/public_api.mjs +3 -0
- package/components/prefab/fesm2022/index.mjs +159 -0
- package/components/prefab/fesm2022/index.mjs.map +1 -0
- package/components/prefab/index.d.ts +5 -0
- package/components/prefab/package.json +20 -0
- package/components/prefab/prefab-container/prefab-container.directive.d.ts +15 -0
- package/components/prefab/prefab-container/prefab-container.props.d.ts +1 -0
- package/components/prefab/prefab.directive.d.ts +17 -0
- package/components/prefab/prefab.props.d.ts +1 -0
- package/components/prefab/public_api.d.ts +2 -0
- package/core/.npmignore +2 -0
- package/core/bundles/index.umd.js +5608 -0
- package/core/constants/currency-constants.d.ts +1064 -0
- package/core/enums/enums.d.ts +67 -0
- package/core/esm2022/constants/currency-constants.mjs +1065 -0
- package/core/esm2022/enums/enums.mjs +72 -0
- package/core/esm2022/index.mjs +5 -0
- package/core/esm2022/public_api.mjs +26 -0
- package/core/esm2022/services/constant.service.mjs +25 -0
- package/core/esm2022/services/custom-icons-loader.service.mjs +20 -0
- package/core/esm2022/services/field-type.service.mjs +35 -0
- package/core/esm2022/services/field-widget.service.mjs +37 -0
- package/core/esm2022/services/pagination.service.mjs +336 -0
- package/core/esm2022/services/script-loader.service.mjs +75 -0
- package/core/esm2022/services/state-persistence.service.mjs +500 -0
- package/core/esm2022/services/user-custom-pipe-manager.service.mjs +23 -0
- package/core/esm2022/services/utils.service.mjs +16 -0
- package/core/esm2022/services/viewport.service.mjs +121 -0
- package/core/esm2022/types/types.mjs +81 -0
- package/core/esm2022/utils/build-utils.mjs +296 -0
- package/core/esm2022/utils/dom.mjs +123 -0
- package/core/esm2022/utils/event-notifier.mjs +70 -0
- package/core/esm2022/utils/expression-parser.mjs +593 -0
- package/core/esm2022/utils/id-generator.mjs +15 -0
- package/core/esm2022/utils/lru-cache.mjs +95 -0
- package/core/esm2022/utils/utils.mjs +1476 -0
- package/core/esm2022/utils/watcher.mjs +276 -0
- package/core/esm2022/utils/wm-project-properties.mjs +30 -0
- package/core/fesm2022/index.mjs +5455 -0
- package/core/fesm2022/index.mjs.map +1 -0
- package/core/index.d.ts +5 -0
- package/core/package.json +26 -0
- package/core/public_api.d.ts +22 -0
- package/core/services/constant.service.d.ts +28 -0
- package/core/services/custom-icons-loader.service.d.ts +6 -0
- package/core/services/field-type.service.d.ts +6 -0
- package/core/services/field-widget.service.d.ts +6 -0
- package/core/services/pagination.service.d.ts +59 -0
- package/core/services/script-loader.service.d.ts +17 -0
- package/core/services/state-persistence.service.d.ts +231 -0
- package/core/services/user-custom-pipe-manager.service.d.ts +9 -0
- package/core/services/utils.service.d.ts +6 -0
- package/core/services/viewport.service.d.ts +37 -0
- package/core/types/types.d.ts +208 -0
- package/core/utils/build-utils.d.ts +14 -0
- package/core/utils/dom.d.ts +16 -0
- package/core/utils/event-notifier.d.ts +26 -0
- package/core/utils/expression-parser.d.ts +8 -0
- package/core/utils/id-generator.d.ts +5 -0
- package/core/utils/lru-cache.d.ts +23 -0
- package/core/utils/utils.d.ts +279 -0
- package/core/utils/watcher.d.ts +13 -0
- package/core/utils/wm-project-properties.d.ts +4 -0
- package/http/.npmignore +2 -0
- package/http/bundles/index.umd.js +421 -0
- package/http/esm2022/http.service.mjs +301 -0
- package/http/esm2022/index.mjs +5 -0
- package/http/esm2022/public_api.mjs +4 -0
- package/http/esm2022/wm-http-request.mjs +48 -0
- package/http/esm2022/wm-http-response.mjs +52 -0
- package/http/fesm2022/index.mjs +405 -0
- package/http/fesm2022/index.mjs.map +1 -0
- package/http/http.service.d.ts +70 -0
- package/http/index.d.ts +5 -0
- package/http/package.json +25 -0
- package/http/public_api.d.ts +3 -0
- package/http/wm-http-request.d.ts +24 -0
- package/http/wm-http-response.d.ts +22 -0
- package/locales/angular/global/af-na.js +24 -0
- package/locales/angular/global/af.js +24 -0
- package/locales/angular/global/agq.js +22 -0
- package/locales/angular/global/ak.js +24 -0
- package/locales/angular/global/am.js +24 -0
- package/locales/angular/global/ar-ae.js +32 -0
- package/locales/angular/global/ar-bh.js +32 -0
- package/locales/angular/global/ar-dj.js +32 -0
- package/locales/angular/global/ar-dz.js +32 -0
- package/locales/angular/global/ar-eg.js +32 -0
- package/locales/angular/global/ar-eh.js +32 -0
- package/locales/angular/global/ar-er.js +32 -0
- package/locales/angular/global/ar-il.js +32 -0
- package/locales/angular/global/ar-iq.js +32 -0
- package/locales/angular/global/ar-jo.js +32 -0
- package/locales/angular/global/ar-km.js +32 -0
- package/locales/angular/global/ar-kw.js +32 -0
- package/locales/angular/global/ar-lb.js +32 -0
- package/locales/angular/global/ar-ly.js +32 -0
- package/locales/angular/global/ar-ma.js +32 -0
- package/locales/angular/global/ar-mr.js +32 -0
- package/locales/angular/global/ar-om.js +32 -0
- package/locales/angular/global/ar-ps.js +32 -0
- package/locales/angular/global/ar-qa.js +32 -0
- package/locales/angular/global/ar-sa.js +32 -0
- package/locales/angular/global/ar-sd.js +32 -0
- package/locales/angular/global/ar-so.js +32 -0
- package/locales/angular/global/ar-ss.js +32 -0
- package/locales/angular/global/ar-sy.js +32 -0
- package/locales/angular/global/ar-td.js +32 -0
- package/locales/angular/global/ar-tn.js +32 -0
- package/locales/angular/global/ar-ye.js +32 -0
- package/locales/angular/global/ar.js +32 -0
- package/locales/angular/global/as.js +24 -0
- package/locales/angular/global/asa.js +24 -0
- package/locales/angular/global/ast.js +24 -0
- package/locales/angular/global/az-cyrl.js +22 -0
- package/locales/angular/global/az-latn.js +24 -0
- package/locales/angular/global/az.js +24 -0
- package/locales/angular/global/bas.js +22 -0
- package/locales/angular/global/be-tarask.js +28 -0
- package/locales/angular/global/be.js +28 -0
- package/locales/angular/global/bem.js +24 -0
- package/locales/angular/global/bez.js +24 -0
- package/locales/angular/global/bg.js +24 -0
- package/locales/angular/global/bm.js +22 -0
- package/locales/angular/global/bn-in.js +24 -0
- package/locales/angular/global/bn.js +24 -0
- package/locales/angular/global/bo-in.js +22 -0
- package/locales/angular/global/bo.js +22 -0
- package/locales/angular/global/br.js +30 -0
- package/locales/angular/global/brx.js +24 -0
- package/locales/angular/global/bs-cyrl.js +22 -0
- package/locales/angular/global/bs-latn.js +26 -0
- package/locales/angular/global/bs.js +26 -0
- package/locales/angular/global/ca-ad.js +24 -0
- package/locales/angular/global/ca-es-valencia.js +24 -0
- package/locales/angular/global/ca-fr.js +24 -0
- package/locales/angular/global/ca-it.js +24 -0
- package/locales/angular/global/ca.js +24 -0
- package/locales/angular/global/ccp-in.js +22 -0
- package/locales/angular/global/ccp.js +22 -0
- package/locales/angular/global/ce.js +24 -0
- package/locales/angular/global/ceb.js +24 -0
- package/locales/angular/global/cgg.js +24 -0
- package/locales/angular/global/chr.js +24 -0
- package/locales/angular/global/ckb-ir.js +24 -0
- package/locales/angular/global/ckb.js +24 -0
- package/locales/angular/global/cs.js +28 -0
- package/locales/angular/global/cy.js +32 -0
- package/locales/angular/global/da-gl.js +24 -0
- package/locales/angular/global/da.js +24 -0
- package/locales/angular/global/dav.js +22 -0
- package/locales/angular/global/de-at.js +24 -0
- package/locales/angular/global/de-be.js +24 -0
- package/locales/angular/global/de-ch.js +24 -0
- package/locales/angular/global/de-it.js +24 -0
- package/locales/angular/global/de-li.js +24 -0
- package/locales/angular/global/de-lu.js +24 -0
- package/locales/angular/global/de.js +24 -0
- package/locales/angular/global/dje.js +22 -0
- package/locales/angular/global/doi.js +24 -0
- package/locales/angular/global/dsb.js +28 -0
- package/locales/angular/global/dua.js +22 -0
- package/locales/angular/global/dyo.js +22 -0
- package/locales/angular/global/dz.js +22 -0
- package/locales/angular/global/ebu.js +22 -0
- package/locales/angular/global/ee-tg.js +24 -0
- package/locales/angular/global/ee.js +24 -0
- package/locales/angular/global/el-cy.js +24 -0
- package/locales/angular/global/el.js +24 -0
- package/locales/angular/global/en-001.js +24 -0
- package/locales/angular/global/en-150.js +24 -0
- package/locales/angular/global/en-ae.js +24 -0
- package/locales/angular/global/en-ag.js +24 -0
- package/locales/angular/global/en-ai.js +24 -0
- package/locales/angular/global/en-as.js +24 -0
- package/locales/angular/global/en-at.js +24 -0
- package/locales/angular/global/en-au.js +24 -0
- package/locales/angular/global/en-bb.js +24 -0
- package/locales/angular/global/en-be.js +24 -0
- package/locales/angular/global/en-bi.js +24 -0
- package/locales/angular/global/en-bm.js +24 -0
- package/locales/angular/global/en-bs.js +24 -0
- package/locales/angular/global/en-bw.js +24 -0
- package/locales/angular/global/en-bz.js +24 -0
- package/locales/angular/global/en-ca.js +24 -0
- package/locales/angular/global/en-cc.js +24 -0
- package/locales/angular/global/en-ch.js +24 -0
- package/locales/angular/global/en-ck.js +24 -0
- package/locales/angular/global/en-cm.js +24 -0
- package/locales/angular/global/en-cx.js +24 -0
- package/locales/angular/global/en-cy.js +24 -0
- package/locales/angular/global/en-de.js +24 -0
- package/locales/angular/global/en-dg.js +24 -0
- package/locales/angular/global/en-dk.js +24 -0
- package/locales/angular/global/en-dm.js +24 -0
- package/locales/angular/global/en-er.js +24 -0
- package/locales/angular/global/en-fi.js +24 -0
- package/locales/angular/global/en-fj.js +24 -0
- package/locales/angular/global/en-fk.js +24 -0
- package/locales/angular/global/en-fm.js +24 -0
- package/locales/angular/global/en-gb.js +24 -0
- package/locales/angular/global/en-gd.js +24 -0
- package/locales/angular/global/en-gg.js +24 -0
- package/locales/angular/global/en-gh.js +24 -0
- package/locales/angular/global/en-gi.js +24 -0
- package/locales/angular/global/en-gm.js +24 -0
- package/locales/angular/global/en-gu.js +24 -0
- package/locales/angular/global/en-gy.js +24 -0
- package/locales/angular/global/en-hk.js +24 -0
- package/locales/angular/global/en-ie.js +24 -0
- package/locales/angular/global/en-il.js +24 -0
- package/locales/angular/global/en-im.js +24 -0
- package/locales/angular/global/en-in.js +24 -0
- package/locales/angular/global/en-io.js +24 -0
- package/locales/angular/global/en-je.js +24 -0
- package/locales/angular/global/en-jm.js +24 -0
- package/locales/angular/global/en-ke.js +24 -0
- package/locales/angular/global/en-ki.js +24 -0
- package/locales/angular/global/en-kn.js +24 -0
- package/locales/angular/global/en-ky.js +24 -0
- package/locales/angular/global/en-lc.js +24 -0
- package/locales/angular/global/en-lr.js +24 -0
- package/locales/angular/global/en-ls.js +24 -0
- package/locales/angular/global/en-mg.js +24 -0
- package/locales/angular/global/en-mh.js +24 -0
- package/locales/angular/global/en-mo.js +24 -0
- package/locales/angular/global/en-mp.js +24 -0
- package/locales/angular/global/en-ms.js +24 -0
- package/locales/angular/global/en-mt.js +24 -0
- package/locales/angular/global/en-mu.js +24 -0
- package/locales/angular/global/en-mv.js +24 -0
- package/locales/angular/global/en-mw.js +24 -0
- package/locales/angular/global/en-my.js +24 -0
- package/locales/angular/global/en-na.js +24 -0
- package/locales/angular/global/en-nf.js +24 -0
- package/locales/angular/global/en-ng.js +24 -0
- package/locales/angular/global/en-nl.js +24 -0
- package/locales/angular/global/en-nr.js +24 -0
- package/locales/angular/global/en-nu.js +24 -0
- package/locales/angular/global/en-nz.js +24 -0
- package/locales/angular/global/en-pg.js +24 -0
- package/locales/angular/global/en-ph.js +24 -0
- package/locales/angular/global/en-pk.js +24 -0
- package/locales/angular/global/en-pn.js +24 -0
- package/locales/angular/global/en-pr.js +24 -0
- package/locales/angular/global/en-pw.js +24 -0
- package/locales/angular/global/en-rw.js +24 -0
- package/locales/angular/global/en-sb.js +24 -0
- package/locales/angular/global/en-sc.js +24 -0
- package/locales/angular/global/en-sd.js +24 -0
- package/locales/angular/global/en-se.js +24 -0
- package/locales/angular/global/en-sg.js +24 -0
- package/locales/angular/global/en-sh.js +24 -0
- package/locales/angular/global/en-si.js +24 -0
- package/locales/angular/global/en-sl.js +24 -0
- package/locales/angular/global/en-ss.js +24 -0
- package/locales/angular/global/en-sx.js +24 -0
- package/locales/angular/global/en-sz.js +24 -0
- package/locales/angular/global/en-tc.js +24 -0
- package/locales/angular/global/en-tk.js +24 -0
- package/locales/angular/global/en-to.js +24 -0
- package/locales/angular/global/en-tt.js +24 -0
- package/locales/angular/global/en-tv.js +24 -0
- package/locales/angular/global/en-tz.js +24 -0
- package/locales/angular/global/en-ug.js +24 -0
- package/locales/angular/global/en-um.js +24 -0
- package/locales/angular/global/en-vc.js +24 -0
- package/locales/angular/global/en-vg.js +24 -0
- package/locales/angular/global/en-vi.js +24 -0
- package/locales/angular/global/en-vu.js +24 -0
- package/locales/angular/global/en-ws.js +24 -0
- package/locales/angular/global/en-za.js +24 -0
- package/locales/angular/global/en-zm.js +24 -0
- package/locales/angular/global/en-zw.js +24 -0
- package/locales/angular/global/en.js +24 -0
- package/locales/angular/global/eo.js +24 -0
- package/locales/angular/global/es-419.js +26 -0
- package/locales/angular/global/es-ar.js +26 -0
- package/locales/angular/global/es-bo.js +26 -0
- package/locales/angular/global/es-br.js +26 -0
- package/locales/angular/global/es-bz.js +26 -0
- package/locales/angular/global/es-cl.js +26 -0
- package/locales/angular/global/es-co.js +26 -0
- package/locales/angular/global/es-cr.js +26 -0
- package/locales/angular/global/es-cu.js +26 -0
- package/locales/angular/global/es-do.js +26 -0
- package/locales/angular/global/es-ea.js +26 -0
- package/locales/angular/global/es-ec.js +26 -0
- package/locales/angular/global/es-gq.js +26 -0
- package/locales/angular/global/es-gt.js +26 -0
- package/locales/angular/global/es-hn.js +26 -0
- package/locales/angular/global/es-ic.js +26 -0
- package/locales/angular/global/es-mx.js +26 -0
- package/locales/angular/global/es-ni.js +26 -0
- package/locales/angular/global/es-pa.js +26 -0
- package/locales/angular/global/es-pe.js +26 -0
- package/locales/angular/global/es-ph.js +26 -0
- package/locales/angular/global/es-pr.js +26 -0
- package/locales/angular/global/es-py.js +26 -0
- package/locales/angular/global/es-sv.js +26 -0
- package/locales/angular/global/es-us.js +26 -0
- package/locales/angular/global/es-uy.js +26 -0
- package/locales/angular/global/es-ve.js +26 -0
- package/locales/angular/global/es.js +26 -0
- package/locales/angular/global/et.js +24 -0
- package/locales/angular/global/eu.js +24 -0
- package/locales/angular/global/ewo.js +22 -0
- package/locales/angular/global/fa-af.js +24 -0
- package/locales/angular/global/fa.js +24 -0
- package/locales/angular/global/ff-adlm-bf.js +22 -0
- package/locales/angular/global/ff-adlm-cm.js +22 -0
- package/locales/angular/global/ff-adlm-gh.js +22 -0
- package/locales/angular/global/ff-adlm-gm.js +22 -0
- package/locales/angular/global/ff-adlm-gw.js +22 -0
- package/locales/angular/global/ff-adlm-lr.js +22 -0
- package/locales/angular/global/ff-adlm-mr.js +22 -0
- package/locales/angular/global/ff-adlm-ne.js +22 -0
- package/locales/angular/global/ff-adlm-ng.js +22 -0
- package/locales/angular/global/ff-adlm-sl.js +22 -0
- package/locales/angular/global/ff-adlm-sn.js +22 -0
- package/locales/angular/global/ff-adlm.js +22 -0
- package/locales/angular/global/ff-cm.js +74 -0
- package/locales/angular/global/ff-gn.js +74 -0
- package/locales/angular/global/ff-latn-bf.js +24 -0
- package/locales/angular/global/ff-latn-cm.js +24 -0
- package/locales/angular/global/ff-latn-gh.js +24 -0
- package/locales/angular/global/ff-latn-gm.js +24 -0
- package/locales/angular/global/ff-latn-gn.js +24 -0
- package/locales/angular/global/ff-latn-gw.js +24 -0
- package/locales/angular/global/ff-latn-lr.js +24 -0
- package/locales/angular/global/ff-latn-mr.js +24 -0
- package/locales/angular/global/ff-latn-ne.js +24 -0
- package/locales/angular/global/ff-latn-ng.js +24 -0
- package/locales/angular/global/ff-latn-sl.js +24 -0
- package/locales/angular/global/ff-latn.js +24 -0
- package/locales/angular/global/ff-mr.js +74 -0
- package/locales/angular/global/ff.js +24 -0
- package/locales/angular/global/fi.js +24 -0
- package/locales/angular/global/fil.js +24 -0
- package/locales/angular/global/fo-dk.js +24 -0
- package/locales/angular/global/fo.js +24 -0
- package/locales/angular/global/fr-be.js +26 -0
- package/locales/angular/global/fr-bf.js +26 -0
- package/locales/angular/global/fr-bi.js +26 -0
- package/locales/angular/global/fr-bj.js +26 -0
- package/locales/angular/global/fr-bl.js +26 -0
- package/locales/angular/global/fr-ca.js +26 -0
- package/locales/angular/global/fr-cd.js +26 -0
- package/locales/angular/global/fr-cf.js +26 -0
- package/locales/angular/global/fr-cg.js +26 -0
- package/locales/angular/global/fr-ch.js +26 -0
- package/locales/angular/global/fr-ci.js +26 -0
- package/locales/angular/global/fr-cm.js +26 -0
- package/locales/angular/global/fr-dj.js +26 -0
- package/locales/angular/global/fr-dz.js +26 -0
- package/locales/angular/global/fr-ga.js +26 -0
- package/locales/angular/global/fr-gf.js +26 -0
- package/locales/angular/global/fr-gn.js +26 -0
- package/locales/angular/global/fr-gp.js +26 -0
- package/locales/angular/global/fr-gq.js +26 -0
- package/locales/angular/global/fr-ht.js +26 -0
- package/locales/angular/global/fr-km.js +26 -0
- package/locales/angular/global/fr-lu.js +26 -0
- package/locales/angular/global/fr-ma.js +26 -0
- package/locales/angular/global/fr-mc.js +26 -0
- package/locales/angular/global/fr-mf.js +26 -0
- package/locales/angular/global/fr-mg.js +26 -0
- package/locales/angular/global/fr-ml.js +26 -0
- package/locales/angular/global/fr-mq.js +26 -0
- package/locales/angular/global/fr-mr.js +26 -0
- package/locales/angular/global/fr-mu.js +26 -0
- package/locales/angular/global/fr-nc.js +26 -0
- package/locales/angular/global/fr-ne.js +26 -0
- package/locales/angular/global/fr-pf.js +26 -0
- package/locales/angular/global/fr-pm.js +26 -0
- package/locales/angular/global/fr-re.js +26 -0
- package/locales/angular/global/fr-rw.js +26 -0
- package/locales/angular/global/fr-sc.js +26 -0
- package/locales/angular/global/fr-sn.js +26 -0
- package/locales/angular/global/fr-sy.js +26 -0
- package/locales/angular/global/fr-td.js +26 -0
- package/locales/angular/global/fr-tg.js +26 -0
- package/locales/angular/global/fr-tn.js +26 -0
- package/locales/angular/global/fr-vu.js +26 -0
- package/locales/angular/global/fr-wf.js +26 -0
- package/locales/angular/global/fr-yt.js +26 -0
- package/locales/angular/global/fr.js +26 -0
- package/locales/angular/global/fur.js +24 -0
- package/locales/angular/global/fy.js +24 -0
- package/locales/angular/global/ga-gb.js +30 -0
- package/locales/angular/global/ga.js +30 -0
- package/locales/angular/global/gd.js +28 -0
- package/locales/angular/global/gl.js +24 -0
- package/locales/angular/global/gsw-fr.js +24 -0
- package/locales/angular/global/gsw-li.js +24 -0
- package/locales/angular/global/gsw.js +24 -0
- package/locales/angular/global/gu.js +24 -0
- package/locales/angular/global/guz.js +22 -0
- package/locales/angular/global/gv.js +30 -0
- package/locales/angular/global/ha-gh.js +24 -0
- package/locales/angular/global/ha-ne.js +24 -0
- package/locales/angular/global/ha.js +24 -0
- package/locales/angular/global/haw.js +24 -0
- package/locales/angular/global/he.js +28 -0
- package/locales/angular/global/hi-latn.js +24 -0
- package/locales/angular/global/hi.js +24 -0
- package/locales/angular/global/hr-ba.js +26 -0
- package/locales/angular/global/hr.js +26 -0
- package/locales/angular/global/hsb.js +28 -0
- package/locales/angular/global/hu.js +24 -0
- package/locales/angular/global/hy.js +24 -0
- package/locales/angular/global/ia.js +24 -0
- package/locales/angular/global/id.js +22 -0
- package/locales/angular/global/ig.js +22 -0
- package/locales/angular/global/ii.js +22 -0
- package/locales/angular/global/is.js +24 -0
- package/locales/angular/global/it-ch.js +26 -0
- package/locales/angular/global/it-sm.js +26 -0
- package/locales/angular/global/it-va.js +26 -0
- package/locales/angular/global/it.js +26 -0
- package/locales/angular/global/ja.js +22 -0
- package/locales/angular/global/jgo.js +24 -0
- package/locales/angular/global/jmc.js +24 -0
- package/locales/angular/global/jv.js +22 -0
- package/locales/angular/global/ka.js +24 -0
- package/locales/angular/global/kab.js +24 -0
- package/locales/angular/global/kam.js +22 -0
- package/locales/angular/global/kde.js +22 -0
- package/locales/angular/global/kea.js +22 -0
- package/locales/angular/global/kgp.js +22 -0
- package/locales/angular/global/khq.js +22 -0
- package/locales/angular/global/ki.js +22 -0
- package/locales/angular/global/kk.js +24 -0
- package/locales/angular/global/kkj.js +24 -0
- package/locales/angular/global/kl.js +24 -0
- package/locales/angular/global/kln.js +22 -0
- package/locales/angular/global/km.js +22 -0
- package/locales/angular/global/kn.js +24 -0
- package/locales/angular/global/ko-kp.js +22 -0
- package/locales/angular/global/ko.js +22 -0
- package/locales/angular/global/kok.js +22 -0
- package/locales/angular/global/ks-arab.js +24 -0
- package/locales/angular/global/ks-deva.js +22 -0
- package/locales/angular/global/ks.js +24 -0
- package/locales/angular/global/ksb.js +24 -0
- package/locales/angular/global/ksf.js +22 -0
- package/locales/angular/global/ksh.js +26 -0
- package/locales/angular/global/ku.js +24 -0
- package/locales/angular/global/kw.js +32 -0
- package/locales/angular/global/ky.js +24 -0
- package/locales/angular/global/lag.js +26 -0
- package/locales/angular/global/lb.js +24 -0
- package/locales/angular/global/lg.js +24 -0
- package/locales/angular/global/lkt.js +22 -0
- package/locales/angular/global/ln-ao.js +24 -0
- package/locales/angular/global/ln-cf.js +24 -0
- package/locales/angular/global/ln-cg.js +24 -0
- package/locales/angular/global/ln.js +24 -0
- package/locales/angular/global/lo.js +22 -0
- package/locales/angular/global/lrc-iq.js +22 -0
- package/locales/angular/global/lrc.js +22 -0
- package/locales/angular/global/lt.js +28 -0
- package/locales/angular/global/lu.js +22 -0
- package/locales/angular/global/luo.js +22 -0
- package/locales/angular/global/luy.js +22 -0
- package/locales/angular/global/lv.js +26 -0
- package/locales/angular/global/mai.js +22 -0
- package/locales/angular/global/mas-tz.js +24 -0
- package/locales/angular/global/mas.js +24 -0
- package/locales/angular/global/mer.js +22 -0
- package/locales/angular/global/mfe.js +22 -0
- package/locales/angular/global/mg.js +24 -0
- package/locales/angular/global/mgh.js +22 -0
- package/locales/angular/global/mgo.js +24 -0
- package/locales/angular/global/mi.js +22 -0
- package/locales/angular/global/mk.js +24 -0
- package/locales/angular/global/ml.js +24 -0
- package/locales/angular/global/mn.js +24 -0
- package/locales/angular/global/mni-beng.js +22 -0
- package/locales/angular/global/mni.js +22 -0
- package/locales/angular/global/mr.js +24 -0
- package/locales/angular/global/ms-bn.js +22 -0
- package/locales/angular/global/ms-id.js +22 -0
- package/locales/angular/global/ms-sg.js +22 -0
- package/locales/angular/global/ms.js +22 -0
- package/locales/angular/global/mt.js +28 -0
- package/locales/angular/global/mua.js +22 -0
- package/locales/angular/global/my.js +22 -0
- package/locales/angular/global/mzn.js +22 -0
- package/locales/angular/global/naq.js +26 -0
- package/locales/angular/global/nb-sj.js +24 -0
- package/locales/angular/global/nb.js +24 -0
- package/locales/angular/global/nd.js +24 -0
- package/locales/angular/global/nds-nl.js +22 -0
- package/locales/angular/global/nds.js +22 -0
- package/locales/angular/global/ne-in.js +24 -0
- package/locales/angular/global/ne.js +24 -0
- package/locales/angular/global/nl-aw.js +24 -0
- package/locales/angular/global/nl-be.js +24 -0
- package/locales/angular/global/nl-bq.js +24 -0
- package/locales/angular/global/nl-cw.js +24 -0
- package/locales/angular/global/nl-sr.js +24 -0
- package/locales/angular/global/nl-sx.js +24 -0
- package/locales/angular/global/nl.js +24 -0
- package/locales/angular/global/nmg.js +22 -0
- package/locales/angular/global/nn.js +24 -0
- package/locales/angular/global/nnh.js +24 -0
- package/locales/angular/global/no.js +24 -0
- package/locales/angular/global/nus.js +22 -0
- package/locales/angular/global/nyn.js +24 -0
- package/locales/angular/global/om-ke.js +24 -0
- package/locales/angular/global/om.js +24 -0
- package/locales/angular/global/or.js +24 -0
- package/locales/angular/global/os-ru.js +24 -0
- package/locales/angular/global/os.js +24 -0
- package/locales/angular/global/pa-arab.js +22 -0
- package/locales/angular/global/pa-guru.js +24 -0
- package/locales/angular/global/pa.js +24 -0
- package/locales/angular/global/pcm.js +24 -0
- package/locales/angular/global/pl.js +28 -0
- package/locales/angular/global/ps-pk.js +24 -0
- package/locales/angular/global/ps.js +24 -0
- package/locales/angular/global/pt-ao.js +26 -0
- package/locales/angular/global/pt-ch.js +26 -0
- package/locales/angular/global/pt-cv.js +26 -0
- package/locales/angular/global/pt-gq.js +26 -0
- package/locales/angular/global/pt-gw.js +26 -0
- package/locales/angular/global/pt-lu.js +26 -0
- package/locales/angular/global/pt-mo.js +26 -0
- package/locales/angular/global/pt-mz.js +26 -0
- package/locales/angular/global/pt-pt.js +26 -0
- package/locales/angular/global/pt-st.js +26 -0
- package/locales/angular/global/pt-tl.js +26 -0
- package/locales/angular/global/pt.js +26 -0
- package/locales/angular/global/qu-bo.js +22 -0
- package/locales/angular/global/qu-ec.js +22 -0
- package/locales/angular/global/qu.js +22 -0
- package/locales/angular/global/rm.js +24 -0
- package/locales/angular/global/rn.js +22 -0
- package/locales/angular/global/ro-md.js +26 -0
- package/locales/angular/global/ro.js +26 -0
- package/locales/angular/global/rof.js +24 -0
- package/locales/angular/global/ru-by.js +28 -0
- package/locales/angular/global/ru-kg.js +28 -0
- package/locales/angular/global/ru-kz.js +28 -0
- package/locales/angular/global/ru-md.js +28 -0
- package/locales/angular/global/ru-ua.js +28 -0
- package/locales/angular/global/ru.js +28 -0
- package/locales/angular/global/rw.js +22 -0
- package/locales/angular/global/rwk.js +24 -0
- package/locales/angular/global/sa.js +22 -0
- package/locales/angular/global/sah.js +22 -0
- package/locales/angular/global/saq.js +24 -0
- package/locales/angular/global/sat-olck.js +26 -0
- package/locales/angular/global/sat.js +26 -0
- package/locales/angular/global/sbp.js +22 -0
- package/locales/angular/global/sc.js +24 -0
- package/locales/angular/global/sd-arab.js +24 -0
- package/locales/angular/global/sd-deva.js +22 -0
- package/locales/angular/global/sd.js +24 -0
- package/locales/angular/global/se-fi.js +26 -0
- package/locales/angular/global/se-se.js +26 -0
- package/locales/angular/global/se.js +26 -0
- package/locales/angular/global/seh.js +24 -0
- package/locales/angular/global/ses.js +22 -0
- package/locales/angular/global/sg.js +22 -0
- package/locales/angular/global/shi-latn.js +22 -0
- package/locales/angular/global/shi-tfng.js +26 -0
- package/locales/angular/global/shi.js +26 -0
- package/locales/angular/global/si.js +24 -0
- package/locales/angular/global/sk.js +28 -0
- package/locales/angular/global/sl.js +28 -0
- package/locales/angular/global/smn.js +26 -0
- package/locales/angular/global/sn.js +24 -0
- package/locales/angular/global/so-dj.js +24 -0
- package/locales/angular/global/so-et.js +24 -0
- package/locales/angular/global/so-ke.js +24 -0
- package/locales/angular/global/so.js +24 -0
- package/locales/angular/global/sq-mk.js +24 -0
- package/locales/angular/global/sq-xk.js +24 -0
- package/locales/angular/global/sq.js +24 -0
- package/locales/angular/global/sr-cyrl-ba.js +26 -0
- package/locales/angular/global/sr-cyrl-me.js +26 -0
- package/locales/angular/global/sr-cyrl-xk.js +26 -0
- package/locales/angular/global/sr-cyrl.js +26 -0
- package/locales/angular/global/sr-latn-ba.js +22 -0
- package/locales/angular/global/sr-latn-me.js +22 -0
- package/locales/angular/global/sr-latn-xk.js +22 -0
- package/locales/angular/global/sr-latn.js +22 -0
- package/locales/angular/global/sr.js +26 -0
- package/locales/angular/global/su-latn.js +22 -0
- package/locales/angular/global/su.js +22 -0
- package/locales/angular/global/sv-ax.js +24 -0
- package/locales/angular/global/sv-fi.js +24 -0
- package/locales/angular/global/sv.js +24 -0
- package/locales/angular/global/sw-cd.js +24 -0
- package/locales/angular/global/sw-ke.js +24 -0
- package/locales/angular/global/sw-ug.js +24 -0
- package/locales/angular/global/sw.js +24 -0
- package/locales/angular/global/ta-lk.js +24 -0
- package/locales/angular/global/ta-my.js +24 -0
- package/locales/angular/global/ta-sg.js +24 -0
- package/locales/angular/global/ta.js +24 -0
- package/locales/angular/global/te.js +24 -0
- package/locales/angular/global/teo-ke.js +24 -0
- package/locales/angular/global/teo.js +24 -0
- package/locales/angular/global/tg.js +22 -0
- package/locales/angular/global/th.js +22 -0
- package/locales/angular/global/ti-er.js +24 -0
- package/locales/angular/global/ti.js +24 -0
- package/locales/angular/global/tk.js +24 -0
- package/locales/angular/global/to.js +22 -0
- package/locales/angular/global/tr-cy.js +24 -0
- package/locales/angular/global/tr.js +24 -0
- package/locales/angular/global/tt.js +22 -0
- package/locales/angular/global/twq.js +22 -0
- package/locales/angular/global/tzm.js +24 -0
- package/locales/angular/global/ug.js +24 -0
- package/locales/angular/global/uk.js +28 -0
- package/locales/angular/global/und.js +24 -0
- package/locales/angular/global/ur-in.js +24 -0
- package/locales/angular/global/ur.js +24 -0
- package/locales/angular/global/uz-arab.js +22 -0
- package/locales/angular/global/uz-cyrl.js +22 -0
- package/locales/angular/global/uz-latn.js +24 -0
- package/locales/angular/global/uz.js +24 -0
- package/locales/angular/global/vai-latn.js +22 -0
- package/locales/angular/global/vai-vaii.js +22 -0
- package/locales/angular/global/vai.js +22 -0
- package/locales/angular/global/vi.js +22 -0
- package/locales/angular/global/vun.js +24 -0
- package/locales/angular/global/wae.js +24 -0
- package/locales/angular/global/wo.js +22 -0
- package/locales/angular/global/xh.js +24 -0
- package/locales/angular/global/xog.js +24 -0
- package/locales/angular/global/yav.js +22 -0
- package/locales/angular/global/yi.js +24 -0
- package/locales/angular/global/yo-bj.js +22 -0
- package/locales/angular/global/yo.js +22 -0
- package/locales/angular/global/yrl-co.js +22 -0
- package/locales/angular/global/yrl-ve.js +22 -0
- package/locales/angular/global/yrl.js +22 -0
- package/locales/angular/global/yue-hans.js +22 -0
- package/locales/angular/global/yue-hant.js +22 -0
- package/locales/angular/global/yue.js +22 -0
- package/locales/angular/global/zgh.js +22 -0
- package/locales/angular/global/zh-hans-hk.js +22 -0
- package/locales/angular/global/zh-hans-mo.js +22 -0
- package/locales/angular/global/zh-hans-sg.js +22 -0
- package/locales/angular/global/zh-hans.js +22 -0
- package/locales/angular/global/zh-hant-hk.js +22 -0
- package/locales/angular/global/zh-hant-mo.js +22 -0
- package/locales/angular/global/zh-hant.js +22 -0
- package/locales/angular/global/zh.js +22 -0
- package/locales/angular/global/zu.js +24 -0
- package/locales/moment/af.js +82 -0
- package/locales/moment/ar-dz.js +167 -0
- package/locales/moment/ar-kw.js +66 -0
- package/locales/moment/ar-ly.js +182 -0
- package/locales/moment/ar-ma.js +67 -0
- package/locales/moment/ar-ps.js +123 -0
- package/locales/moment/ar-sa.js +116 -0
- package/locales/moment/ar-tn.js +66 -0
- package/locales/moment/ar.js +200 -0
- package/locales/moment/az.js +113 -0
- package/locales/moment/be.js +153 -0
- package/locales/moment/bg.js +98 -0
- package/locales/moment/bm.js +62 -0
- package/locales/moment/bn-bd.js +140 -0
- package/locales/moment/bn.js +130 -0
- package/locales/moment/bo.js +135 -0
- package/locales/moment/br.js +179 -0
- package/locales/moment/bs.js +171 -0
- package/locales/moment/ca.js +111 -0
- package/locales/moment/cs.js +192 -0
- package/locales/moment/cv.js +74 -0
- package/locales/moment/cy.js +109 -0
- package/locales/moment/da.js +64 -0
- package/locales/moment/de-at.js +90 -0
- package/locales/moment/de-ch.js +87 -0
- package/locales/moment/de.js +89 -0
- package/locales/moment/dv.js +101 -0
- package/locales/moment/el.js +117 -0
- package/locales/moment/en-au.js +79 -0
- package/locales/moment/en-ca.js +75 -0
- package/locales/moment/en-gb.js +79 -0
- package/locales/moment/en-ie.js +79 -0
- package/locales/moment/en-il.js +75 -0
- package/locales/moment/en-in.js +79 -0
- package/locales/moment/en-nz.js +79 -0
- package/locales/moment/en-sg.js +79 -0
- package/locales/moment/eo.js +79 -0
- package/locales/moment/es-do.js +119 -0
- package/locales/moment/es-mx.js +121 -0
- package/locales/moment/es-us.js +121 -0
- package/locales/moment/es.js +121 -0
- package/locales/moment/et.js +89 -0
- package/locales/moment/eu.js +76 -0
- package/locales/moment/fa.js +124 -0
- package/locales/moment/fi.js +135 -0
- package/locales/moment/fil.js +69 -0
- package/locales/moment/fo.js +68 -0
- package/locales/moment/fr-ca.js +81 -0
- package/locales/moment/fr-ch.js +85 -0
- package/locales/moment/fr.js +119 -0
- package/locales/moment/fy.js +86 -0
- package/locales/moment/ga.js +106 -0
- package/locales/moment/gd.js +106 -0
- package/locales/moment/gl.js +86 -0
- package/locales/moment/gom-deva.js +137 -0
- package/locales/moment/gom-latn.js +135 -0
- package/locales/moment/gu.js +133 -0
- package/locales/moment/he.js +105 -0
- package/locales/moment/hi.js +179 -0
- package/locales/moment/hr.js +167 -0
- package/locales/moment/hu.js +129 -0
- package/locales/moment/hy-am.js +105 -0
- package/locales/moment/id.js +87 -0
- package/locales/moment/is.js +151 -0
- package/locales/moment/it-ch.js +75 -0
- package/locales/moment/it.js +117 -0
- package/locales/moment/ja.js +159 -0
- package/locales/moment/jv.js +87 -0
- package/locales/moment/ka.js +103 -0
- package/locales/moment/kk.js +93 -0
- package/locales/moment/km.js +114 -0
- package/locales/moment/kn.js +135 -0
- package/locales/moment/ko.js +86 -0
- package/locales/moment/ku-kmr.js +125 -0
- package/locales/moment/ku.js +129 -0
- package/locales/moment/ky.js +95 -0
- package/locales/moment/lb.js +148 -0
- package/locales/moment/lo.js +77 -0
- package/locales/moment/lt.js +136 -0
- package/locales/moment/lv.js +105 -0
- package/locales/moment/me.js +128 -0
- package/locales/moment/mi.js +71 -0
- package/locales/moment/mk.js +97 -0
- package/locales/moment/ml.js +93 -0
- package/locales/moment/mn.js +111 -0
- package/locales/moment/mr.js +214 -0
- package/locales/moment/ms-my.js +87 -0
- package/locales/moment/ms.js +86 -0
- package/locales/moment/mt.js +67 -0
- package/locales/moment/my.js +102 -0
- package/locales/moment/nb.js +71 -0
- package/locales/moment/ne.js +132 -0
- package/locales/moment/nl-be.js +113 -0
- package/locales/moment/nl.js +115 -0
- package/locales/moment/nn.js +70 -0
- package/locales/moment/oc-lnc.js +96 -0
- package/locales/moment/pa-in.js +133 -0
- package/locales/moment/pl.js +151 -0
- package/locales/moment/pt-br.js +69 -0
- package/locales/moment/pt.js +74 -0
- package/locales/moment/ro.js +87 -0
- package/locales/moment/ru.js +224 -0
- package/locales/moment/sd.js +92 -0
- package/locales/moment/se.js +68 -0
- package/locales/moment/si.js +80 -0
- package/locales/moment/sk.js +156 -0
- package/locales/moment/sl.js +182 -0
- package/locales/moment/sq.js +76 -0
- package/locales/moment/sr-cyrl.js +138 -0
- package/locales/moment/sr.js +140 -0
- package/locales/moment/ss.js +95 -0
- package/locales/moment/sv.js +79 -0
- package/locales/moment/sw.js +66 -0
- package/locales/moment/ta.js +142 -0
- package/locales/moment/te.js +99 -0
- package/locales/moment/tet.js +79 -0
- package/locales/moment/tg.js +128 -0
- package/locales/moment/th.js +76 -0
- package/locales/moment/tk.js +102 -0
- package/locales/moment/tl-ph.js +68 -0
- package/locales/moment/tlh.js +135 -0
- package/locales/moment/tr.js +117 -0
- package/locales/moment/tzl.js +100 -0
- package/locales/moment/tzm-latn.js +65 -0
- package/locales/moment/tzm.js +65 -0
- package/locales/moment/ug-cn.js +122 -0
- package/locales/moment/uk.js +178 -0
- package/locales/moment/ur.js +93 -0
- package/locales/moment/uz-latn.js +65 -0
- package/locales/moment/uz.js +62 -0
- package/locales/moment/vi.js +91 -0
- package/locales/moment/x-pseudo.js +84 -0
- package/locales/moment/yo.js +64 -0
- package/locales/moment/zh-cn.js +131 -0
- package/locales/moment/zh-hk.js +112 -0
- package/locales/moment/zh-mo.js +111 -0
- package/locales/moment/zh-tw.js +110 -0
- package/locales/moment-timezone/moment-timezone-with-data.js +1582 -0
- package/npm-shrinkwrap.json +17 -0
- package/oAuth/.npmignore +2 -0
- package/oAuth/bundles/index.umd.js +495 -0
- package/oAuth/esm2022/index.mjs +5 -0
- package/oAuth/esm2022/oAuth.service.mjs +51 -0
- package/oAuth/esm2022/oAuth.utils.mjs +423 -0
- package/oAuth/esm2022/public_api.mjs +3 -0
- package/oAuth/fesm2022/index.mjs +478 -0
- package/oAuth/fesm2022/index.mjs.map +1 -0
- package/oAuth/index.d.ts +5 -0
- package/oAuth/oAuth.service.d.ts +19 -0
- package/oAuth/oAuth.utils.d.ts +20 -0
- package/oAuth/package.json +25 -0
- package/oAuth/public_api.d.ts +2 -0
- package/package-lock.json +17 -0
- package/package.json +16 -0
- package/runtime/base/.npmignore +2 -0
- package/runtime/base/bundles/index.umd.js +6031 -0
- package/runtime/base/components/app-component/app.component.d.ts +46 -0
- package/runtime/base/components/app-spinner.component.d.ts +10 -0
- package/runtime/base/components/base-custom-widget.component.d.ts +75 -0
- package/runtime/base/components/base-layout.component.d.ts +30 -0
- package/runtime/base/components/base-page.component.d.ts +83 -0
- package/runtime/base/components/base-partial.component.d.ts +65 -0
- package/runtime/base/components/base-prefab.component.d.ts +61 -0
- package/runtime/base/components/base-spa-page.component.d.ts +85 -0
- package/runtime/base/components/custom-toaster.component.d.ts +19 -0
- package/runtime/base/components/empty-component/empty-page.component.d.ts +18 -0
- package/runtime/base/components/prefab-preview.component.d.ts +23 -0
- package/runtime/base/directives/accessroles.directive.d.ts +40 -0
- package/runtime/base/directives/prefab.directive.d.ts +17 -0
- package/runtime/base/esm2022/components/app-component/app.component.mjs +201 -0
- package/runtime/base/esm2022/components/app-spinner.component.mjs +54 -0
- package/runtime/base/esm2022/components/base-custom-widget.component.mjs +339 -0
- package/runtime/base/esm2022/components/base-layout.component.mjs +76 -0
- package/runtime/base/esm2022/components/base-page.component.mjs +378 -0
- package/runtime/base/esm2022/components/base-partial.component.mjs +221 -0
- package/runtime/base/esm2022/components/base-prefab.component.mjs +253 -0
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +353 -0
- package/runtime/base/esm2022/components/custom-toaster.component.mjs +87 -0
- package/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +66 -0
- package/runtime/base/esm2022/components/prefab-preview.component.mjs +123 -0
- package/runtime/base/esm2022/directives/accessroles.directive.mjs +118 -0
- package/runtime/base/esm2022/directives/prefab.directive.mjs +50 -0
- package/runtime/base/esm2022/guards/auth.guard.mjs +43 -0
- package/runtime/base/esm2022/guards/can-deactivate-page.guard.mjs +44 -0
- package/runtime/base/esm2022/guards/page-not-found.guard.mjs +22 -0
- package/runtime/base/esm2022/guards/role.guard.mjs +47 -0
- package/runtime/base/esm2022/index.mjs +5 -0
- package/runtime/base/esm2022/overrides/wm_dom_renderer.mjs +363 -0
- package/runtime/base/esm2022/overrides/wm_shared_styles_host.mjs +85 -0
- package/runtime/base/esm2022/public_api.mjs +49 -0
- package/runtime/base/esm2022/resolves/app-before-load.resolve.mjs +22 -0
- package/runtime/base/esm2022/resolves/app-extension.resolve.mjs +48 -0
- package/runtime/base/esm2022/resolves/app-js.resolve.mjs +39 -0
- package/runtime/base/esm2022/resolves/app-variables.resolve.mjs +31 -0
- package/runtime/base/esm2022/resolves/i18n.resolve.mjs +18 -0
- package/runtime/base/esm2022/resolves/metadata.resolve.mjs +22 -0
- package/runtime/base/esm2022/resolves/security-config.resolve.mjs +26 -0
- package/runtime/base/esm2022/runtime-base.module.mjs +942 -0
- package/runtime/base/esm2022/services/app-defaults.service.mjs +22 -0
- package/runtime/base/esm2022/services/app.manager.service.mjs +522 -0
- package/runtime/base/esm2022/services/app.service.mjs +232 -0
- package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +86 -0
- package/runtime/base/esm2022/services/http-interceptor.services.mjs +83 -0
- package/runtime/base/esm2022/services/i18n.service.mjs +305 -0
- package/runtime/base/esm2022/services/navigation.service.mjs +307 -0
- package/runtime/base/esm2022/services/pipe-provider.service.mjs +127 -0
- package/runtime/base/esm2022/services/pipe.service.mjs +33 -0
- package/runtime/base/esm2022/services/prefab-manager.service.mjs +95 -0
- package/runtime/base/esm2022/services/spinner.service.mjs +144 -0
- package/runtime/base/esm2022/services/toaster.service.mjs +90 -0
- package/runtime/base/esm2022/types/types.mjs +22 -0
- package/runtime/base/esm2022/util/fragment-monitor.mjs +59 -0
- package/runtime/base/esm2022/util/utils.mjs +24 -0
- package/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +176 -0
- package/runtime/base/fesm2022/index.mjs +6068 -0
- package/runtime/base/fesm2022/index.mjs.map +1 -0
- package/runtime/base/guards/auth.guard.d.ts +14 -0
- package/runtime/base/guards/can-deactivate-page.guard.d.ts +16 -0
- package/runtime/base/guards/page-not-found.guard.d.ts +12 -0
- package/runtime/base/guards/role.guard.d.ts +17 -0
- package/runtime/base/index.d.ts +5 -0
- package/runtime/base/overrides/wm_dom_renderer.d.ts +33 -0
- package/runtime/base/overrides/wm_shared_styles_host.d.ts +23 -0
- package/runtime/base/package.json +25 -0
- package/runtime/base/public_api.d.ts +48 -0
- package/runtime/base/resolves/app-before-load.resolve.d.ts +11 -0
- package/runtime/base/resolves/app-extension.resolve.d.ts +14 -0
- package/runtime/base/resolves/app-js.resolve.d.ts +15 -0
- package/runtime/base/resolves/app-variables.resolve.d.ts +11 -0
- package/runtime/base/resolves/i18n.resolve.d.ts +9 -0
- package/runtime/base/resolves/metadata.resolve.d.ts +9 -0
- package/runtime/base/resolves/security-config.resolve.d.ts +10 -0
- package/runtime/base/runtime-base.module.d.ts +171 -0
- package/runtime/base/services/app-defaults.service.d.ts +12 -0
- package/runtime/base/services/app.manager.service.d.ts +142 -0
- package/runtime/base/services/app.service.d.ts +70 -0
- package/runtime/base/services/dynamic-component-ref-provider.service.d.ts +26 -0
- package/runtime/base/services/http-interceptor.services.d.ts +17 -0
- package/runtime/base/services/i18n.service.d.ts +58 -0
- package/runtime/base/services/navigation.service.d.ts +45 -0
- package/runtime/base/services/pipe-provider.service.d.ts +31 -0
- package/runtime/base/services/pipe.service.d.ts +12 -0
- package/runtime/base/services/prefab-manager.service.d.ts +25 -0
- package/runtime/base/services/spinner.service.d.ts +49 -0
- package/runtime/base/services/toaster.service.d.ts +23 -0
- package/runtime/base/types/types.d.ts +25 -0
- package/runtime/base/util/fragment-monitor.d.ts +22 -0
- package/runtime/base/util/utils.d.ts +6 -0
- package/runtime/base/util/wm-route-reuse-strategy.d.ts +29 -0
- package/runtime/dynamic/.npmignore +2 -0
- package/runtime/dynamic/app/app.config.d.ts +5 -0
- package/runtime/dynamic/app/app.module.d.ts +37 -0
- package/runtime/dynamic/app/app.routes.d.ts +2 -0
- package/runtime/dynamic/app/components/page-wrapper.component.d.ts +37 -0
- package/runtime/dynamic/app/services/app-extension.service.d.ts +7 -0
- package/runtime/dynamic/app/services/app-js-provider.service.d.ts +10 -0
- package/runtime/dynamic/app/services/app-resource-manager.service.d.ts +10 -0
- package/runtime/dynamic/app/services/app-variables-provider.service.d.ts +12 -0
- package/runtime/dynamic/app/services/component-ref-provider.service.d.ts +17 -0
- package/runtime/dynamic/app/services/customwidget-config-provider.service.d.ts +8 -0
- package/runtime/dynamic/app/services/prefab-config-provider.service.d.ts +10 -0
- package/runtime/dynamic/bundles/index.umd.js +887 -0
- package/runtime/dynamic/esm2022/app/app.config.mjs +141 -0
- package/runtime/dynamic/esm2022/app/app.module.mjs +314 -0
- package/runtime/dynamic/esm2022/app/app.routes.mjs +21 -0
- package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +106 -0
- package/runtime/dynamic/esm2022/app/services/app-extension.service.mjs +24 -0
- package/runtime/dynamic/esm2022/app/services/app-js-provider.service.mjs +25 -0
- package/runtime/dynamic/esm2022/app/services/app-resource-manager.service.mjs +31 -0
- package/runtime/dynamic/esm2022/app/services/app-variables-provider.service.mjs +27 -0
- package/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +266 -0
- package/runtime/dynamic/esm2022/app/services/customwidget-config-provider.service.mjs +22 -0
- package/runtime/dynamic/esm2022/app/services/prefab-config-provider.service.mjs +29 -0
- package/runtime/dynamic/esm2022/index.mjs +5 -0
- package/runtime/dynamic/esm2022/main.mjs +42 -0
- package/runtime/dynamic/esm2022/public_api.mjs +10 -0
- package/runtime/dynamic/fesm2022/index.mjs +950 -0
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -0
- package/runtime/dynamic/index.d.ts +5 -0
- package/runtime/dynamic/main.d.ts +2 -0
- package/runtime/dynamic/package.json +25 -0
- package/runtime/dynamic/public_api.d.ts +9 -0
- package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -0
- package/scripts/d3/d3.min.js +2 -0
- package/scripts/datatable/datatable.js +3769 -0
- package/scripts/iscroll/build/iscroll.js +2091 -0
- package/scripts/jquery-ui/ui/widgets/droppable.js +503 -0
- package/scripts/jquery-ui/ui/widgets/resizable.js +1275 -0
- package/scripts/jquery-ui/ui/widgets/sortable.js +1608 -0
- package/scripts/jquery.ui.touch-punch/jquery.ui.touch-punch.min.js +11 -0
- package/scripts/summernote/dist/summernote-lite.min.js +2 -0
- package/scripts/swipey/swipey.jquery.plugin.js +769 -0
- package/scripts/tree-keyboard-navigation/keyboard-navigation.js +251 -0
- package/security/.npmignore +2 -0
- package/security/bundles/index.umd.js +446 -0
- package/security/esm2022/index.mjs +5 -0
- package/security/esm2022/public_api.mjs +2 -0
- package/security/esm2022/security.service.mjs +439 -0
- package/security/fesm2022/index.mjs +444 -0
- package/security/fesm2022/index.mjs.map +1 -0
- package/security/index.d.ts +5 -0
- package/security/package.json +25 -0
- package/security/public_api.d.ts +1 -0
- package/security/security.service.d.ts +127 -0
- package/swipey/.npmignore +2 -0
- package/swipey/bundles/index.umd.js +54 -0
- package/swipey/esm2022/index.mjs +5 -0
- package/swipey/esm2022/public_api.mjs +2 -0
- package/swipey/esm2022/swipe.animation.mjs +45 -0
- package/swipey/fesm2022/index.mjs +51 -0
- package/swipey/fesm2022/index.mjs.map +1 -0
- package/swipey/index.d.ts +5 -0
- package/swipey/package.json +25 -0
- package/swipey/public_api.d.ts +1 -0
- package/swipey/swipe.animation.d.ts +19 -0
- package/transpiler/.npmignore +2 -0
- package/transpiler/build.d.ts +35 -0
- package/transpiler/bundles/index.umd.js +804 -0
- package/transpiler/esm2022/build.mjs +475 -0
- package/transpiler/esm2022/imports.mjs +318 -0
- package/transpiler/esm2022/index.mjs +5 -0
- package/transpiler/esm2022/public_api.mjs +3 -0
- package/transpiler/fesm2022/index.mjs +799 -0
- package/transpiler/fesm2022/index.mjs.map +1 -0
- package/transpiler/imports.d.ts +2 -0
- package/transpiler/index.d.ts +5 -0
- package/transpiler/package.json +26 -0
- package/transpiler/public_api.d.ts +2 -0
- package/variables/.npmignore +2 -0
- package/variables/advanced-options.d.ts +4 -0
- package/variables/bundles/index.umd.js +3174 -0
- package/variables/constants/variables.constants.d.ts +315 -0
- package/variables/esm2022/advanced-options.mjs +2 -0
- package/variables/esm2022/constants/variables.constants.mjs +333 -0
- package/variables/esm2022/factory/variable-manager.factory.mjs +24 -0
- package/variables/esm2022/factory/variable.factory.mjs +46 -0
- package/variables/esm2022/index.mjs +5 -0
- package/variables/esm2022/manager/action/base-action.manager.mjs +14 -0
- package/variables/esm2022/manager/action/login-action.manager.mjs +180 -0
- package/variables/esm2022/manager/action/logout-action.manager.mjs +77 -0
- package/variables/esm2022/manager/action/navigation-action.manager.mjs +8 -0
- package/variables/esm2022/manager/action/notification-action.manager.mjs +152 -0
- package/variables/esm2022/manager/variable/base-variable.manager.mjs +81 -0
- package/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +289 -0
- package/variables/esm2022/model/action/login-action.mjs +25 -0
- package/variables/esm2022/model/action/logout-action.mjs +22 -0
- package/variables/esm2022/model/action/navigation-action.mjs +26 -0
- package/variables/esm2022/model/action/notification-action.mjs +91 -0
- package/variables/esm2022/model/variable/web-socket-variable.mjs +34 -0
- package/variables/esm2022/public_api.mjs +6 -0
- package/variables/esm2022/service/metadata-service/metadata.service.mjs +60 -0
- package/variables/esm2022/service/variables.service.mjs +199 -0
- package/variables/esm2022/util/action/navigation-action.utils.mjs +52 -0
- package/variables/esm2022/util/oAuth.utils.mjs +11 -0
- package/variables/esm2022/util/variable/pagination.utils.mjs +402 -0
- package/variables/esm2022/util/variable/service-variable.utils.mjs +376 -0
- package/variables/esm2022/util/variable/variables.utils.mjs +809 -0
- package/variables/factory/variable-manager.factory.d.ts +3 -0
- package/variables/factory/variable.factory.d.ts +3 -0
- package/variables/fesm2022/index.mjs +3236 -0
- package/variables/fesm2022/index.mjs.map +1 -0
- package/variables/index.d.ts +5 -0
- package/variables/manager/action/base-action.manager.d.ts +4 -0
- package/variables/manager/action/login-action.manager.d.ts +7 -0
- package/variables/manager/action/logout-action.manager.d.ts +4 -0
- package/variables/manager/action/navigation-action.manager.d.ts +4 -0
- package/variables/manager/action/notification-action.manager.d.ts +23 -0
- package/variables/manager/variable/base-variable.manager.d.ts +24 -0
- package/variables/manager/variable/web-socket-variable.manager.d.ts +124 -0
- package/variables/model/action/login-action.d.ts +11 -0
- package/variables/model/action/logout-action.d.ts +10 -0
- package/variables/model/action/navigation-action.d.ts +9 -0
- package/variables/model/action/notification-action.d.ts +25 -0
- package/variables/model/variable/web-socket-variable.d.ts +11 -0
- package/variables/package.json +25 -0
- package/variables/public_api.d.ts +5 -0
- package/variables/service/metadata-service/metadata.service.d.ts +16 -0
- package/variables/service/variables.service.d.ts +57 -0
- package/variables/util/action/navigation-action.utils.d.ts +6 -0
- package/variables/util/oAuth.utils.d.ts +3 -0
- package/variables/util/variable/pagination.utils.d.ts +82 -0
- package/variables/util/variable/service-variable.utils.d.ts +16 -0
- package/variables/util/variable/variables.utils.d.ts +80 -0
|
@@ -0,0 +1,1476 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { getPreviewProperties } from './wm-project-properties';
|
|
3
|
+
import { $appDigest, $watch } from './watcher';
|
|
4
|
+
import { DataType } from '../enums/enums';
|
|
5
|
+
import { DataSource } from '../types/types';
|
|
6
|
+
import { setAttr } from './dom';
|
|
7
|
+
import { $parseEvent } from './expression-parser';
|
|
8
|
+
import { attempt, camelCase, cloneDeep, every, filter, forEach, get, identity, includes, indexOf, intersection, isArray, isDate, isEqual, isEqualWith, isError, isFunction, isNull, isNumber, isString, isUndefined, keys, map, noop as _noop, omit, replace as _replace, split, startsWith, toLower, toUpper, trim } from "lodash-es";
|
|
9
|
+
import X2JS from 'x2js';
|
|
10
|
+
import * as momentLib from 'moment-timezone/moment-timezone';
|
|
11
|
+
const moment = momentLib.default || window['moment'];
|
|
12
|
+
const userAgent = window.navigator.userAgent;
|
|
13
|
+
const REGEX = {
|
|
14
|
+
SNAKE_CASE: /[A-Z]/g,
|
|
15
|
+
ANDROID: /Android/i,
|
|
16
|
+
IPHONE: /iPhone/i,
|
|
17
|
+
IPOD: /iPod/i,
|
|
18
|
+
IPAD: /iPad/i,
|
|
19
|
+
MAC: /Mac/i,
|
|
20
|
+
ANDROID_TABLET: /android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i,
|
|
21
|
+
MOBILE: /Mobile/i,
|
|
22
|
+
WINDOWS: /Windows Phone/i,
|
|
23
|
+
SUPPORTED_IMAGE_FORMAT: /\.(bmp|gif|jpe|jpg|jpeg|tif|tiff|pbm|png|ico)$/i,
|
|
24
|
+
SUPPORTED_FILE_FORMAT: /\.(txt|js|css|html|script|properties|json|java|xml|smd|xmi|sql|log|wsdl|vm|ftl|jrxml|yml|yaml|md|less|jsp)$/i,
|
|
25
|
+
SUPPORTED_AUDIO_FORMAT: /\.(mp3|ogg|webm|wma|3gp|wav|m4a)$/i,
|
|
26
|
+
SUPPORTED_VIDEO_FORMAT: /\.(mp4|ogg|webm|wmv|mpeg|mpg|avi|mov)$/i,
|
|
27
|
+
PAGE_RESOURCE_PATH: /^\/pages\/.*\.(js|css|html|json)$/,
|
|
28
|
+
MIN_PAGE_RESOURCE_PATH: /.*(page.min.html)$/,
|
|
29
|
+
VALID_EMAIL: /^[a-zA-Z][\w.+]+@[a-zA-Z_]+?\.[a-zA-Z.]{1,4}[a-zA-Z]$/,
|
|
30
|
+
VALID_WEB_URL: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
|
|
31
|
+
VALID_IMAGE_URL: /^(https?|blob|data|file|ftp):/i,
|
|
32
|
+
VALID_WEBSOCKET_URL: /^(ws[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9=:?\/\.\-]+(\.[a-zA-Z]{2,5}[\.]{0,1})?/,
|
|
33
|
+
VALID_RELATIVE_URL: /^(?!www\.|(?:http|ftp)s?:\/\/|[A-Za-z]:\\|\/\/).*/,
|
|
34
|
+
REPLACE_PATTERN: /\$\{([^\}]+)\}/g,
|
|
35
|
+
ZIP_FILE: /\.zip$/i,
|
|
36
|
+
EXE_FILE: /\.exe$/i,
|
|
37
|
+
NO_QUOTES_ALLOWED: /^[^'|"]*$/,
|
|
38
|
+
NO_DOUBLE_QUOTES_ALLOWED: /^[^"]*$/,
|
|
39
|
+
VALID_HTML: /<[a-z][\s\S]*>/i,
|
|
40
|
+
VALID_PASSWORD: /^[0-9a-zA-Z-_.@&*!#$%]+$/,
|
|
41
|
+
SPECIAL_CHARACTERS: /[^A-Z0-9a-z_]+/i,
|
|
42
|
+
APP_SERVER_URL_FORMAT: /^(http[s]?:\/\/)(www\.){0,1}[a-zA-Z0-9\.\-]+([:]?[0-9]{2,5}|\.[a-zA-Z]{2,5}[\.]{0,1})\/+[^?#&=]+$/,
|
|
43
|
+
JSON_DATE_FORMAT: /\d{4}-[0-1]\d-[0-3]\d(T[0-2]\d:[0-5]\d:[0-5]\d.\d{1,3}Z$)?/,
|
|
44
|
+
DATA_URL: /^\s*data:([a-z]+\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s]*)\s*$/i,
|
|
45
|
+
ISO_DATE_FORMAT: /(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(\.\d+)?([+-]\d{2}:?\d{2}|Z)$/
|
|
46
|
+
}, compareBySeparator = ':';
|
|
47
|
+
const NUMBER_TYPES = ['int', DataType.INTEGER, DataType.FLOAT, DataType.DOUBLE, DataType.LONG, DataType.SHORT, DataType.BYTE, DataType.BIG_INTEGER, DataType.BIG_DECIMAL];
|
|
48
|
+
const now = new Date();
|
|
49
|
+
const CURRENT_DATE = 'CURRENT_DATE';
|
|
50
|
+
export const getNavClass = (suffix) => {
|
|
51
|
+
const APP_NAV_CLASS_PREFIX = 'app-nav-';
|
|
52
|
+
return APP_NAV_CLASS_PREFIX + suffix;
|
|
53
|
+
};
|
|
54
|
+
export const getSheetPositionClass = (suffix) => {
|
|
55
|
+
const SHEET_POSITION_CLASS_PREFIX = 'sheet-position-';
|
|
56
|
+
return SHEET_POSITION_CLASS_PREFIX + suffix;
|
|
57
|
+
};
|
|
58
|
+
export const isDefined = v => 'undefined' !== typeof v;
|
|
59
|
+
export const isObject = v => null !== v && 'object' === typeof v;
|
|
60
|
+
export const toBoolean = (val, identity) => ((val && val !== 'false') ? true : (identity ? val === identity : false));
|
|
61
|
+
function isIE11() {
|
|
62
|
+
return window.navigator.appVersion.indexOf('Trident/') > -1;
|
|
63
|
+
}
|
|
64
|
+
export const isIE = () => {
|
|
65
|
+
return isIE11() || window.navigator.userAgent.indexOf('MSIE') > -1;
|
|
66
|
+
};
|
|
67
|
+
export const isAndroid = () => REGEX.ANDROID.test(userAgent);
|
|
68
|
+
export const isAndroidTablet = () => REGEX.ANDROID_TABLET.test(userAgent) && !((/Tablet PC 2.0/i).test(userAgent));
|
|
69
|
+
export const isIphone = () => REGEX.IPHONE.test(userAgent);
|
|
70
|
+
export const isIpod = () => REGEX.IPOD.test(userAgent);
|
|
71
|
+
export const isIpad = () => {
|
|
72
|
+
return REGEX.IPAD.test(userAgent) || (window.navigator.maxTouchPoints && window.navigator.maxTouchPoints > 2 && REGEX.MAC.test(window.navigator.platform));
|
|
73
|
+
};
|
|
74
|
+
export const isIos = () => isIphone() || isIpod() || isIpad();
|
|
75
|
+
export const isSafari = () => navigator.userAgent.indexOf('Safari') !== -1 && navigator.userAgent.indexOf('Chrome') === -1;
|
|
76
|
+
export const isLargeTabletLandscape = (landScapeWidth, landScapeHeight) => {
|
|
77
|
+
const width = landScapeWidth || '1366px';
|
|
78
|
+
const height = landScapeHeight || '1024px';
|
|
79
|
+
return window.matchMedia("only screen and (min-device-width : " + width + ") and (max-device-width : " + width + ") and (min-device-height : " + height + ") and (max-device-height : " + height + ") and (min-width: " + width + ") and (max-width: " + width + ")").matches;
|
|
80
|
+
};
|
|
81
|
+
export const isLargeTabletPortrait = (landScapeWidth, landScapeHeight) => {
|
|
82
|
+
const height = landScapeWidth || '1366px';
|
|
83
|
+
const width = landScapeHeight || '1024px';
|
|
84
|
+
return window.matchMedia("only screen and (min-device-width : " + width + ") and (max-device-width : " + width + ") and (min-device-height : " + height + ") and (max-device-height : " + height + ") and (min-width: " + width + ") and (max-width: " + width + ")").matches;
|
|
85
|
+
};
|
|
86
|
+
export const isMobile = () => isAndroid() || isIos() || isAndroidTablet() || $('#wm-mobile-display:visible').length > 0;
|
|
87
|
+
export const isTablet = () => {
|
|
88
|
+
const scope = document.querySelector('.app-page').widget;
|
|
89
|
+
return scope && scope.viewParent.Viewport.isTabletType;
|
|
90
|
+
};
|
|
91
|
+
export const getAndroidVersion = () => {
|
|
92
|
+
const match = (window.navigator.userAgent.toLowerCase()).match(/android\s([0-9\.]*)/);
|
|
93
|
+
return match ? match[1] : '';
|
|
94
|
+
};
|
|
95
|
+
export const isKitkatDevice = () => isAndroid() && parseInt(getAndroidVersion(), 10) === 4;
|
|
96
|
+
/**
|
|
97
|
+
* this method encodes the url and returns the encoded string
|
|
98
|
+
*/
|
|
99
|
+
export const encodeUrl = (url) => {
|
|
100
|
+
const index = url.indexOf('?');
|
|
101
|
+
if (index > -1) {
|
|
102
|
+
// encode the relative path
|
|
103
|
+
url = encodeURI(url.substring(0, index)) + url.substring(index);
|
|
104
|
+
// encode url params, not encoded through encodeURI
|
|
105
|
+
url = encodeUrlParams(url);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
url = encodeURI(url);
|
|
109
|
+
}
|
|
110
|
+
return url;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* this method encodes the url params and is private to the class only
|
|
114
|
+
*/
|
|
115
|
+
export const encodeUrlParams = (url) => {
|
|
116
|
+
let queryParams, encodedParams = '', queryParamsString, index;
|
|
117
|
+
index = url.indexOf('?');
|
|
118
|
+
if (index > -1) {
|
|
119
|
+
index += 1;
|
|
120
|
+
queryParamsString = url.substring(index);
|
|
121
|
+
// Encoding the query params if exist
|
|
122
|
+
if (queryParamsString) {
|
|
123
|
+
queryParams = queryParamsString.split('&');
|
|
124
|
+
queryParams.forEach(function (param) {
|
|
125
|
+
let decodedParamValue;
|
|
126
|
+
const i = includes(param, '=') ? param.indexOf('=') : (param && param.length), paramName = param.substr(0, i), paramValue = param.substr(i + 1);
|
|
127
|
+
// add the = for param name only when the param value exists in the given param or empty value is assigned
|
|
128
|
+
if (paramValue || includes(param, '=')) {
|
|
129
|
+
try {
|
|
130
|
+
decodedParamValue = decodeURIComponent(paramValue);
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
decodedParamValue = paramValue;
|
|
134
|
+
}
|
|
135
|
+
encodedParams += paramName + '=' + encodeURIComponent(decodedParamValue) + '&';
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
encodedParams += paramName + '&';
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
encodedParams = encodedParams.slice(0, -1);
|
|
142
|
+
url = url.replace(queryParamsString, encodedParams);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return url;
|
|
146
|
+
};
|
|
147
|
+
/* capitalize the first-letter of the string passed */
|
|
148
|
+
export const initCaps = name => {
|
|
149
|
+
if (!name) {
|
|
150
|
+
return '';
|
|
151
|
+
}
|
|
152
|
+
return name.charAt(0).toUpperCase() + name.substring(1);
|
|
153
|
+
};
|
|
154
|
+
/* convert camelCase string to a space separated string */
|
|
155
|
+
export const spaceSeparate = name => {
|
|
156
|
+
if (name === name.toUpperCase()) {
|
|
157
|
+
return name;
|
|
158
|
+
}
|
|
159
|
+
return name.replace(REGEX.SNAKE_CASE, function (letter, pos) {
|
|
160
|
+
return (pos ? ' ' : '') + letter;
|
|
161
|
+
});
|
|
162
|
+
};
|
|
163
|
+
/*Replace the character at a particular index*/
|
|
164
|
+
export const replaceAt = (string, index, character) => string.substr(0, index) + character + string.substr(index + character.length);
|
|
165
|
+
/*Replace '.' with space and capitalize the next letter*/
|
|
166
|
+
export const periodSeparate = name => {
|
|
167
|
+
let dotIndex;
|
|
168
|
+
dotIndex = name.indexOf('.');
|
|
169
|
+
if (dotIndex !== -1) {
|
|
170
|
+
name = replaceAt(name, dotIndex + 1, name.charAt(dotIndex + 1).toUpperCase());
|
|
171
|
+
name = replaceAt(name, dotIndex, ' ');
|
|
172
|
+
}
|
|
173
|
+
return name;
|
|
174
|
+
};
|
|
175
|
+
export const prettifyLabel = label => {
|
|
176
|
+
label = camelCase(label);
|
|
177
|
+
/*capitalize the initial Letter*/
|
|
178
|
+
label = initCaps(label);
|
|
179
|
+
/*Convert camel case words to separated words*/
|
|
180
|
+
label = spaceSeparate(label);
|
|
181
|
+
/*Replace '.' with space and capitalize the next letter*/
|
|
182
|
+
label = periodSeparate(label);
|
|
183
|
+
return label;
|
|
184
|
+
};
|
|
185
|
+
export const deHyphenate = (name) => {
|
|
186
|
+
return name.split('-').join(' ');
|
|
187
|
+
};
|
|
188
|
+
/*Accepts an array or a string separated with symbol and returns prettified result*/
|
|
189
|
+
export const prettifyLabels = (names, separator = ',') => {
|
|
190
|
+
let modifiedNames, namesArray = [];
|
|
191
|
+
if (!isArray(names)) {
|
|
192
|
+
namesArray = split(names, separator);
|
|
193
|
+
}
|
|
194
|
+
modifiedNames = map(namesArray, prettifyLabel);
|
|
195
|
+
if (isArray(names)) {
|
|
196
|
+
return modifiedNames;
|
|
197
|
+
}
|
|
198
|
+
return modifiedNames.join(separator);
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* this method checks if a insecure content request is being made
|
|
202
|
+
*/
|
|
203
|
+
export const isInsecureContentRequest = (url) => {
|
|
204
|
+
const parser = document.createElement('a');
|
|
205
|
+
parser.href = url;
|
|
206
|
+
// for relative urls IE returns the protocol as empty string
|
|
207
|
+
if (parser.protocol === '') {
|
|
208
|
+
return false;
|
|
209
|
+
}
|
|
210
|
+
// If the inputted source is a base64 url, do not throw insecure content error
|
|
211
|
+
if (REGEX.DATA_URL.test(url)) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
if (stringStartsWith(location.href, 'https://')) {
|
|
215
|
+
return parser.protocol !== 'https:' && parser.protocol !== 'wss:';
|
|
216
|
+
}
|
|
217
|
+
return false;
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* this method checks if a given string starts with the given string
|
|
221
|
+
*/
|
|
222
|
+
export const stringStartsWith = (str, startsWith, ignoreCase) => {
|
|
223
|
+
if (!str) {
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
const regEx = new RegExp('^' + startsWith, ignoreCase ? 'i' : '');
|
|
227
|
+
return regEx.test(str);
|
|
228
|
+
};
|
|
229
|
+
export const getEvaluatedExprValue = (object, expression) => {
|
|
230
|
+
let val;
|
|
231
|
+
/**
|
|
232
|
+
* Evaluate the expression with the scope and object.
|
|
233
|
+
* $eval is used, as expression can be in format of field1 + ' ' + field2
|
|
234
|
+
* $eval can fail, if expression is not in correct format, so attempt the eval function
|
|
235
|
+
*/
|
|
236
|
+
val = attempt(function () {
|
|
237
|
+
const argsExpr = Object.keys(object).map((fieldName) => {
|
|
238
|
+
return `var ${fieldName} = data['${fieldName}'];`;
|
|
239
|
+
}).join(' ');
|
|
240
|
+
const f = new Function('data', `${argsExpr} return ${expression}`);
|
|
241
|
+
return f(object);
|
|
242
|
+
});
|
|
243
|
+
/**
|
|
244
|
+
* $eval fails if field expression has spaces. Ex: 'field name' or 'field@name'
|
|
245
|
+
* As a fallback, get value directly from object or scope
|
|
246
|
+
*/
|
|
247
|
+
if (isError(val)) {
|
|
248
|
+
val = get(object, expression);
|
|
249
|
+
}
|
|
250
|
+
return val;
|
|
251
|
+
};
|
|
252
|
+
/* functions for resource Tab*/
|
|
253
|
+
export const isImageFile = (fileName) => {
|
|
254
|
+
return (REGEX.SUPPORTED_IMAGE_FORMAT).test(fileName);
|
|
255
|
+
};
|
|
256
|
+
export const isAudioFile = (fileName) => {
|
|
257
|
+
return (REGEX.SUPPORTED_AUDIO_FORMAT).test(fileName);
|
|
258
|
+
};
|
|
259
|
+
export const isVideoFile = (fileName) => {
|
|
260
|
+
return (REGEX.SUPPORTED_VIDEO_FORMAT).test(fileName);
|
|
261
|
+
};
|
|
262
|
+
export const isValidWebURL = (url) => {
|
|
263
|
+
return (REGEX.VALID_WEB_URL).test(url);
|
|
264
|
+
};
|
|
265
|
+
export const isValidImageUrl = (url) => {
|
|
266
|
+
return (REGEX.VALID_IMAGE_URL).test(url?.trim());
|
|
267
|
+
};
|
|
268
|
+
/*This function returns the url to the resource after checking the validity of url*/
|
|
269
|
+
export const getResourceURL = (urlString) => {
|
|
270
|
+
if (isValidWebURL(urlString)) {
|
|
271
|
+
/*TODO: Use DomSanitizer*/
|
|
272
|
+
// return sanitizer.bypassSecurityTrustResourceUrl(urlString);
|
|
273
|
+
}
|
|
274
|
+
return urlString;
|
|
275
|
+
};
|
|
276
|
+
/*function to check if fn is a function and then execute*/
|
|
277
|
+
export function triggerFn(fn, ...argmnts) {
|
|
278
|
+
/* Use of slice on arguments will make this function not optimizable
|
|
279
|
+
* https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments
|
|
280
|
+
* */
|
|
281
|
+
let start = 1;
|
|
282
|
+
const len = arguments.length, args = new Array(len - start);
|
|
283
|
+
for (start; start < len; start++) {
|
|
284
|
+
args[start - 1] = arguments[start];
|
|
285
|
+
}
|
|
286
|
+
if (isFunction(fn)) {
|
|
287
|
+
return fn.apply(null, args);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* This method is used to get the formatted date
|
|
292
|
+
*/
|
|
293
|
+
export const getFormattedDate = (datePipe, dateObj, format, timeZone, isTimeStampType, isIntervalDateTime, compInstance) => {
|
|
294
|
+
if (!dateObj) {
|
|
295
|
+
return undefined;
|
|
296
|
+
}
|
|
297
|
+
if (format === 'timestamp') {
|
|
298
|
+
return moment(dateObj).valueOf();
|
|
299
|
+
}
|
|
300
|
+
if (format === 'UTC') {
|
|
301
|
+
return new Date(dateObj).toISOString();
|
|
302
|
+
}
|
|
303
|
+
if (timeZone && timeZone !== moment.defaultZone?.name) {
|
|
304
|
+
const momentFormat = format.replaceAll('y', 'Y').replaceAll('d', 'D').replace('a', 'A');
|
|
305
|
+
if (isIntervalDateTime) { // dates which are of type time widget (value is hh:mm:ss) but returned as date string from time comp
|
|
306
|
+
return moment(dateObj).format(momentFormat);
|
|
307
|
+
}
|
|
308
|
+
if (isTimeStampType === 'datetimestamp') {
|
|
309
|
+
dateObj = getMomentLocaleObject(timeZone, dateObj);
|
|
310
|
+
return moment(dateObj).format(momentFormat);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return datePipe.transform(dateObj, format, timeZone, compInstance);
|
|
314
|
+
};
|
|
315
|
+
/**
|
|
316
|
+
* This method is used to check if the date has timezone information or not
|
|
317
|
+
*/
|
|
318
|
+
export const hasOffsetStr = (dateStr) => {
|
|
319
|
+
if (typeof dateStr !== 'string')
|
|
320
|
+
return;
|
|
321
|
+
const matches = dateStr.match(REGEX.ISO_DATE_FORMAT);
|
|
322
|
+
if (matches && matches[4]) {
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
/**
|
|
327
|
+
* method to get the date object from the input received
|
|
328
|
+
*/
|
|
329
|
+
export const getDateObj = (value, options, timezone) => {
|
|
330
|
+
// Handling localization
|
|
331
|
+
if (options && options.pattern && options.pattern !== 'timestamp') {
|
|
332
|
+
// Fix for WMS-19601, invalid date is returned on date selection.
|
|
333
|
+
const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ? get(options, 'isNativePicker') : isMobile();
|
|
334
|
+
const pattern = isNativePicker ? 'YYYY/MM/DD HH:mm:ss' : momentPattern(options.pattern);
|
|
335
|
+
value = moment(value, pattern).toDate();
|
|
336
|
+
}
|
|
337
|
+
/*if the value is a date object, no need to covert it*/
|
|
338
|
+
if (isDate(value)) {
|
|
339
|
+
return value;
|
|
340
|
+
}
|
|
341
|
+
/*if the value is a timestamp string, convert it to a number*/
|
|
342
|
+
if (!isNaN(value)) {
|
|
343
|
+
value = parseInt(value, 10);
|
|
344
|
+
}
|
|
345
|
+
if (!moment(value).isValid() || value === '' || value === null || value === undefined) {
|
|
346
|
+
return undefined;
|
|
347
|
+
}
|
|
348
|
+
let dateObj = new Date(value);
|
|
349
|
+
/**
|
|
350
|
+
* if date value is string "20-05-2019" then new Date(value) return 20May2019 with current time in India,
|
|
351
|
+
* whereas this will return 19May2019 with time lagging for few hours.
|
|
352
|
+
* This is because it returns UTC time i.e. Coordinated Universal Time (UTC).
|
|
353
|
+
* To create date in local time use moment
|
|
354
|
+
*/
|
|
355
|
+
if (isString(value)) {
|
|
356
|
+
/*
|
|
357
|
+
* If selected locale is Arabic, moment(value).format() is giving date in Arabic language
|
|
358
|
+
* (Ex: If date value is "1990-11-23" and moment(value).format() is "١٩٩٠-١١-٢٣T٠٠:٠٠:٠٠+٠٥:٣٠")
|
|
359
|
+
* and new Date(moment(value).format()) is giving Invalid Date. So frst converting it to timestamp value.
|
|
360
|
+
*/
|
|
361
|
+
dateObj = !timezone ? new Date(moment(moment(value).format()).valueOf()) : getMomentLocaleObject(timezone, value);
|
|
362
|
+
;
|
|
363
|
+
}
|
|
364
|
+
if (value === CURRENT_DATE || isNaN(dateObj.getDay())) {
|
|
365
|
+
return now;
|
|
366
|
+
}
|
|
367
|
+
return dateObj;
|
|
368
|
+
};
|
|
369
|
+
export const addEventListenerOnElement = (_element, excludeElement, nativeElement, eventType, isDropDownDisplayEnabledOnInput, successCB, life, isCapture = false) => {
|
|
370
|
+
const element = _element;
|
|
371
|
+
const eventListener = (event) => {
|
|
372
|
+
if (excludeElement && (excludeElement.contains(event.target) || excludeElement === event.target)) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
if (nativeElement.contains(event.target)) {
|
|
376
|
+
if ($(event.target).is('input') && !isDropDownDisplayEnabledOnInput) {
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
element.removeEventListener(eventType, eventListener, isCapture);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
if (life === 0 /* EVENT_LIFE.ONCE */) {
|
|
383
|
+
element.removeEventListener(eventType, eventListener, isCapture);
|
|
384
|
+
}
|
|
385
|
+
successCB();
|
|
386
|
+
};
|
|
387
|
+
element.addEventListener(eventType, eventListener, isCapture);
|
|
388
|
+
const removeEventListener = () => {
|
|
389
|
+
element.removeEventListener(eventType, eventListener, isCapture);
|
|
390
|
+
};
|
|
391
|
+
return removeEventListener;
|
|
392
|
+
};
|
|
393
|
+
/**
|
|
394
|
+
* Returns a deep cloned replica of the passed object/array
|
|
395
|
+
* @param object object/array to clone
|
|
396
|
+
* @returns a clone of the passed object
|
|
397
|
+
*/
|
|
398
|
+
export const getClonedObject = (object) => {
|
|
399
|
+
return cloneDeep(object);
|
|
400
|
+
};
|
|
401
|
+
export const getFiles = (formName, fieldName, isList) => {
|
|
402
|
+
const files = get(document.forms, [formName, fieldName, 'files']);
|
|
403
|
+
return isList ? map(files, identity) : files && files[0];
|
|
404
|
+
};
|
|
405
|
+
/*Function to generate a random number*/
|
|
406
|
+
function random() {
|
|
407
|
+
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
|
|
408
|
+
}
|
|
409
|
+
/*Function to generate a guid based on random numbers.*/
|
|
410
|
+
export const generateGUId = () => {
|
|
411
|
+
return random() + '-' + random() + '-' + random();
|
|
412
|
+
};
|
|
413
|
+
/**
|
|
414
|
+
* Validate if given access role is in current loggedin user access roles
|
|
415
|
+
*/
|
|
416
|
+
export const validateAccessRoles = (roleExp, loggedInUser) => {
|
|
417
|
+
let roles;
|
|
418
|
+
if (roleExp && loggedInUser) {
|
|
419
|
+
roles = roleExp && roleExp.split(',').map(Function.prototype.call, String.prototype.trim);
|
|
420
|
+
return intersection(roles, loggedInUser.userRoles).length;
|
|
421
|
+
}
|
|
422
|
+
return true;
|
|
423
|
+
};
|
|
424
|
+
export const getValidJSON = (content) => {
|
|
425
|
+
if (!content) {
|
|
426
|
+
return undefined;
|
|
427
|
+
}
|
|
428
|
+
try {
|
|
429
|
+
const parsedIntValue = parseInt(content, 10);
|
|
430
|
+
/*obtaining json from editor content string*/
|
|
431
|
+
return isObject(content) || !isNaN(parsedIntValue) ? content : JSON.parse(content);
|
|
432
|
+
}
|
|
433
|
+
catch (e) {
|
|
434
|
+
/*terminating execution if new variable object is not valid json.*/
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
export const xmlToJson = (xmlString) => {
|
|
439
|
+
//TODO: import x2js dynamically
|
|
440
|
+
const x2jsObj = new X2JS({ 'emptyNodeForm': 'object', 'attributePrefix': '', 'enableToStringFunc': false });
|
|
441
|
+
let json = x2jsObj.xml2js(xmlString);
|
|
442
|
+
if (json) {
|
|
443
|
+
json = get(json, Object.keys(json)[0]);
|
|
444
|
+
}
|
|
445
|
+
return json;
|
|
446
|
+
};
|
|
447
|
+
/*
|
|
448
|
+
* Util method to find the value of a key in the object
|
|
449
|
+
* if key not found and create is true, an object is created against that node
|
|
450
|
+
* Examples:
|
|
451
|
+
* var a = {
|
|
452
|
+
* b: {
|
|
453
|
+
* c : {
|
|
454
|
+
* d: 'test'
|
|
455
|
+
* }
|
|
456
|
+
* }
|
|
457
|
+
* }
|
|
458
|
+
* Utils.findValue(a, 'b.c.d') --> 'test'
|
|
459
|
+
* Utils.findValue(a, 'b.c') --> {d: 'test'}
|
|
460
|
+
* Utils.findValue(a, 'e') --> undefined
|
|
461
|
+
* Utils.findValue(a, 'e', true) --> {} and a will become:
|
|
462
|
+
* {
|
|
463
|
+
* b: {
|
|
464
|
+
* c : {
|
|
465
|
+
* d: 'test'
|
|
466
|
+
* }
|
|
467
|
+
* },
|
|
468
|
+
* e: {
|
|
469
|
+
* }
|
|
470
|
+
* }
|
|
471
|
+
*/
|
|
472
|
+
export const findValueOf = (obj, key, create) => {
|
|
473
|
+
if (!obj || !key) {
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
if (!create) {
|
|
477
|
+
return get(obj, key);
|
|
478
|
+
}
|
|
479
|
+
const parts = key.split('.'), keys = [];
|
|
480
|
+
let skipProcessing;
|
|
481
|
+
parts.forEach((part) => {
|
|
482
|
+
if (!parts.length) { // if the part of a key is not valid, skip the processing.
|
|
483
|
+
skipProcessing = true;
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
const subParts = part.match(/\w+/g);
|
|
487
|
+
let subPart;
|
|
488
|
+
while (subParts.length) {
|
|
489
|
+
subPart = subParts.shift();
|
|
490
|
+
keys.push({ 'key': subPart, 'value': subParts.length ? [] : {} }); // determine whether to create an array or an object
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
if (skipProcessing) {
|
|
494
|
+
return undefined;
|
|
495
|
+
}
|
|
496
|
+
keys.forEach((_key) => {
|
|
497
|
+
let tempObj = obj[_key.key];
|
|
498
|
+
if (!isObject(tempObj)) {
|
|
499
|
+
tempObj = getValidJSON(tempObj);
|
|
500
|
+
if (!tempObj) {
|
|
501
|
+
tempObj = _key.value;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
obj[_key.key] = tempObj;
|
|
505
|
+
obj = tempObj;
|
|
506
|
+
});
|
|
507
|
+
return obj;
|
|
508
|
+
};
|
|
509
|
+
/*
|
|
510
|
+
* extracts and returns the last bit from full typeRef of a field
|
|
511
|
+
* e.g. returns 'String' for typeRef = 'java.lang.String'
|
|
512
|
+
* @params: {typeRef} type reference
|
|
513
|
+
*/
|
|
514
|
+
export const extractType = (typeRef) => {
|
|
515
|
+
let type;
|
|
516
|
+
if (!typeRef) {
|
|
517
|
+
return DataType.STRING;
|
|
518
|
+
}
|
|
519
|
+
type = typeRef && typeRef.substring(typeRef.lastIndexOf('.') + 1);
|
|
520
|
+
type = type && type.toLowerCase();
|
|
521
|
+
type = type === DataType.LOCALDATETIME ? DataType.DATETIME : type;
|
|
522
|
+
return type;
|
|
523
|
+
};
|
|
524
|
+
/* returns true if the provided data type matches number type */
|
|
525
|
+
export const isNumberType = (type) => {
|
|
526
|
+
return (NUMBER_TYPES.indexOf(extractType(type).toLowerCase()) !== -1);
|
|
527
|
+
};
|
|
528
|
+
/* function to check if provided object is empty*/
|
|
529
|
+
export const isEmptyObject = (obj) => {
|
|
530
|
+
if (isObject(obj) && !isArray(obj)) {
|
|
531
|
+
return Object.keys(obj).length === 0;
|
|
532
|
+
}
|
|
533
|
+
return false;
|
|
534
|
+
};
|
|
535
|
+
// Function expects an element on which the scrolling should be applied, Depending on the offset of the element scrollbar will be adjusted
|
|
536
|
+
export const scrollToElement = (element) => {
|
|
537
|
+
const $element = $(element);
|
|
538
|
+
const formPosition = $element.offset().top;
|
|
539
|
+
window.scroll({
|
|
540
|
+
top: formPosition,
|
|
541
|
+
left: 0,
|
|
542
|
+
behavior: 'smooth'
|
|
543
|
+
});
|
|
544
|
+
};
|
|
545
|
+
// Function will return whether the given element is in viewport or not
|
|
546
|
+
export const isElementInViewport = (element) => {
|
|
547
|
+
var rect = element.getBoundingClientRect();
|
|
548
|
+
return (rect.top >= 0 &&
|
|
549
|
+
rect.left >= 0 &&
|
|
550
|
+
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
|
551
|
+
rect.right <= (window.innerWidth || document.documentElement.clientWidth));
|
|
552
|
+
};
|
|
553
|
+
/*Function to check whether the specified object is a pageable object or not.*/
|
|
554
|
+
export const isPageable = (obj) => {
|
|
555
|
+
const pageable = {
|
|
556
|
+
'content': [],
|
|
557
|
+
'first': true,
|
|
558
|
+
'last': true,
|
|
559
|
+
'number': 0,
|
|
560
|
+
'numberOfElements': 10,
|
|
561
|
+
'size': 20,
|
|
562
|
+
'sort': null,
|
|
563
|
+
'totalElements': 10,
|
|
564
|
+
'totalPages': 1
|
|
565
|
+
};
|
|
566
|
+
// paginated object may or may not contain 'empty' property. In either case, Pageable should return as true.
|
|
567
|
+
const paginatedObj = omit(obj, 'empty');
|
|
568
|
+
return (isEqual(keys(pageable), keys(paginatedObj).sort()));
|
|
569
|
+
};
|
|
570
|
+
/*
|
|
571
|
+
* Util method to replace patterns in string with object keys or array values
|
|
572
|
+
* Examples:
|
|
573
|
+
* Utils.replace('Hello, ${first} ${last} !', {first: 'wavemaker', last: 'ng'}) --> Hello, wavemaker ng
|
|
574
|
+
* Utils.replace('Hello, ${0} ${1} !', ['wavemaker','ng']) --> Hello, wavemaker ng
|
|
575
|
+
* Examples if parseError is true:
|
|
576
|
+
* Utils.replace('Hello, {0} {1} !', ['wavemaker','ng']) --> Hello, wavemaker ng
|
|
577
|
+
*/
|
|
578
|
+
export const replace = (template, map, parseError) => {
|
|
579
|
+
let regEx = REGEX.REPLACE_PATTERN;
|
|
580
|
+
if (!template) {
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
if (parseError) {
|
|
584
|
+
regEx = /\{([^\}]+)\}/g;
|
|
585
|
+
}
|
|
586
|
+
return template.replace(regEx, function (match, key) {
|
|
587
|
+
return get(map, key);
|
|
588
|
+
});
|
|
589
|
+
};
|
|
590
|
+
/*Function to check if date time type*/
|
|
591
|
+
export const isDateTimeType = type => {
|
|
592
|
+
if (includes(type, '.')) {
|
|
593
|
+
type = toLower(extractType(type));
|
|
594
|
+
}
|
|
595
|
+
return includes([DataType.DATE, DataType.TIME, DataType.TIMESTAMP, DataType.DATETIME, DataType.LOCALDATETIME], type);
|
|
596
|
+
};
|
|
597
|
+
const momentPattern = (pattern) => {
|
|
598
|
+
if (includes(pattern, 'E')) {
|
|
599
|
+
pattern = _replace(pattern, /E[,]?/g, '');
|
|
600
|
+
}
|
|
601
|
+
return _replace(pattern, /y*d*/g, (val) => val.toUpperCase());
|
|
602
|
+
};
|
|
603
|
+
/* This function returns date object. If val is undefined it returns invalid date */
|
|
604
|
+
export const getValidDateObject = (val, options) => {
|
|
605
|
+
const defaultMeridian = ['AM', 'PM'];
|
|
606
|
+
const momentMeridian = moment()._locale.meridiem();
|
|
607
|
+
// Updating localized meridians with default meridians when moment meridian is not defined
|
|
608
|
+
if (options && options.meridians && includes(defaultMeridian, momentMeridian)) {
|
|
609
|
+
forEach(options.meridians, (meridian, index) => {
|
|
610
|
+
if (includes(val, meridian)) {
|
|
611
|
+
val = val.replace(meridian, defaultMeridian[index]);
|
|
612
|
+
}
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ? get(options, 'isNativePicker') : isMobile();
|
|
616
|
+
const pattern = isNativePicker ? (get(options, 'pattern') || 'YYYY/MM/DD HH:mm:ss') : (momentPattern(get(options, 'pattern')) || '');
|
|
617
|
+
// Handling localization
|
|
618
|
+
if (options && options.pattern && options.pattern !== 'timestamp') {
|
|
619
|
+
if (!isNaN(moment(val, pattern).valueOf())) { // Fix for [WMS-27658]: Date() doesn't support some formats like 'dd/MM/yyyy' so using moment() to format the value
|
|
620
|
+
// check whether val is a valid date or not
|
|
621
|
+
if (isIos()) {
|
|
622
|
+
// For iOS, explicitly setting the format to consider even the seconds.
|
|
623
|
+
val = moment(val).format('YYYY/MM/DD HH:mm:ss');
|
|
624
|
+
}
|
|
625
|
+
val = moment(val, pattern);
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
val = moment(val, pattern);
|
|
629
|
+
}
|
|
630
|
+
val = val.toDate();
|
|
631
|
+
}
|
|
632
|
+
if (moment(val, pattern).isValid()) {
|
|
633
|
+
// date with +5 hours is returned in safari browser which is not a valid date.
|
|
634
|
+
// Hence converting the date to the supported format "YYYY/MM/DD HH:mm:ss" in IOS
|
|
635
|
+
if (isIos()) {
|
|
636
|
+
val = moment(moment(val).valueOf()).format('YYYY/MM/DD HH:mm:ss');
|
|
637
|
+
}
|
|
638
|
+
return val;
|
|
639
|
+
}
|
|
640
|
+
/*if the value is a timestamp string, convert it to a number*/
|
|
641
|
+
if (!isNaN(val)) {
|
|
642
|
+
val = parseInt(val, 10);
|
|
643
|
+
}
|
|
644
|
+
else {
|
|
645
|
+
/*if the value is in HH:mm:ss format, it returns a wrong date. So append the date to the given value to get date*/
|
|
646
|
+
if (!(new Date(val).getTime())) {
|
|
647
|
+
val = moment((moment().format('YYYY-MM-DD') + ' ' + val), 'YYYY-MM-DD HH:mm:ss A');
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
return new Date(moment(val).valueOf());
|
|
651
|
+
};
|
|
652
|
+
/* This function returns javascript date object*/
|
|
653
|
+
export const getNativeDateObject = (val, options) => {
|
|
654
|
+
val = getValidDateObject(val, options);
|
|
655
|
+
return new Date(val);
|
|
656
|
+
};
|
|
657
|
+
/**
|
|
658
|
+
* prepare a blob object based on the content and content type provided
|
|
659
|
+
* if content is blob itself, simply returns it back
|
|
660
|
+
* @param val
|
|
661
|
+
* @param valContentType
|
|
662
|
+
* @returns {*}
|
|
663
|
+
*/
|
|
664
|
+
export const getBlob = (val, valContentType) => {
|
|
665
|
+
if (val instanceof Blob) {
|
|
666
|
+
return val;
|
|
667
|
+
}
|
|
668
|
+
const jsonVal = getValidJSON(val);
|
|
669
|
+
if (jsonVal && jsonVal instanceof Object) {
|
|
670
|
+
val = new Blob([JSON.stringify(jsonVal)], { type: valContentType || 'application/json' });
|
|
671
|
+
}
|
|
672
|
+
else {
|
|
673
|
+
val = new Blob([val], { type: valContentType || 'text/plain' });
|
|
674
|
+
}
|
|
675
|
+
return val;
|
|
676
|
+
};
|
|
677
|
+
/**
|
|
678
|
+
* This function returns true by comparing two objects based on the fields
|
|
679
|
+
* @param obj1 object
|
|
680
|
+
* @param obj2 object
|
|
681
|
+
* @param compareBy string field values to compare
|
|
682
|
+
* @returns {boolean} true if object equality returns true based on fields
|
|
683
|
+
*/
|
|
684
|
+
export const isEqualWithFields = (obj1, obj2, compareBy) => {
|
|
685
|
+
// compareBy can be 'id' or 'id1, id2' or 'id1, id2:id3'
|
|
686
|
+
// Split the compareby comma separated values
|
|
687
|
+
let _compareBy = isArray(compareBy) ? compareBy : split(compareBy, ',');
|
|
688
|
+
//@ts-ignore
|
|
689
|
+
_compareBy = map(_compareBy, trim);
|
|
690
|
+
return isEqualWith(obj1, obj2, function (o1, o2) {
|
|
691
|
+
return every(_compareBy, function (cb) {
|
|
692
|
+
let cb1, cb2, _cb;
|
|
693
|
+
// If compareby contains : , compare the values by the keys on either side of :
|
|
694
|
+
if (indexOf(cb, compareBySeparator) === -1) {
|
|
695
|
+
cb1 = cb2 = trim(cb);
|
|
696
|
+
}
|
|
697
|
+
else {
|
|
698
|
+
_cb = split(cb, compareBySeparator);
|
|
699
|
+
cb1 = trim(_cb[0]);
|
|
700
|
+
cb2 = trim(_cb[1]);
|
|
701
|
+
}
|
|
702
|
+
return get(o1, cb1) === get(o2, cb2);
|
|
703
|
+
});
|
|
704
|
+
});
|
|
705
|
+
};
|
|
706
|
+
const getNode = selector => document.querySelector(selector);
|
|
707
|
+
// function to check if the stylesheet is already loaded
|
|
708
|
+
const isStyleSheetLoaded = href => !!getNode(`link[href="${href}"]`);
|
|
709
|
+
// function to remove stylesheet if the stylesheet is already loaded
|
|
710
|
+
const removeStyleSheet = href => {
|
|
711
|
+
const node = getNode(`link[href="${href}"]`);
|
|
712
|
+
if (node) {
|
|
713
|
+
node.remove();
|
|
714
|
+
}
|
|
715
|
+
};
|
|
716
|
+
// function to load a stylesheet
|
|
717
|
+
export const loadStyleSheet = (url, attr) => {
|
|
718
|
+
if (isStyleSheetLoaded(url)) {
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
721
|
+
const link = document.createElement('link');
|
|
722
|
+
link.href = url;
|
|
723
|
+
// To add attributes to link tag
|
|
724
|
+
if (attr && attr.name) {
|
|
725
|
+
link.setAttribute(attr.name, attr.value);
|
|
726
|
+
}
|
|
727
|
+
link.setAttribute('rel', 'stylesheet');
|
|
728
|
+
link.setAttribute('type', 'text/css');
|
|
729
|
+
document.head.appendChild(link);
|
|
730
|
+
return link;
|
|
731
|
+
};
|
|
732
|
+
// function to load stylesheets
|
|
733
|
+
export const loadStyleSheets = (urls = []) => {
|
|
734
|
+
// if the first argument is not an array, convert it to an array
|
|
735
|
+
if (!Array.isArray(urls)) {
|
|
736
|
+
urls = [urls];
|
|
737
|
+
}
|
|
738
|
+
urls.forEach(loadStyleSheet);
|
|
739
|
+
};
|
|
740
|
+
// function to check if the script is already loaded
|
|
741
|
+
const isScriptLoaded = src => !!getNode(`script[src="${src}"], script[data-src="${src}"]`);
|
|
742
|
+
export const getMomentLocaleObject = (timeZone, dateObj) => {
|
|
743
|
+
if (dateObj) {
|
|
744
|
+
return new Date(new Date(moment(dateObj).tz(timeZone).format()).toLocaleString("en-US", { timeZone: timeZone }));
|
|
745
|
+
}
|
|
746
|
+
else {
|
|
747
|
+
return new Date(new Date(moment().tz(timeZone).format()).toLocaleString("en-US", { timeZone: timeZone }));
|
|
748
|
+
}
|
|
749
|
+
};
|
|
750
|
+
export const loadScript = async (url, loadViaScriptTag, cacheable = false) => {
|
|
751
|
+
const _url = url.trim();
|
|
752
|
+
if (!_url.length || isScriptLoaded(_url)) {
|
|
753
|
+
return Promise.resolve();
|
|
754
|
+
}
|
|
755
|
+
if (loadViaScriptTag) {
|
|
756
|
+
return new Promise((resolve, reject) => {
|
|
757
|
+
let script = document.createElement('script');
|
|
758
|
+
script.type = 'text/javascript';
|
|
759
|
+
script.src = _url;
|
|
760
|
+
script.async = false;
|
|
761
|
+
if (script.readyState) { //IE
|
|
762
|
+
script.onreadystatechange = () => {
|
|
763
|
+
if (script.readyState === "loaded" || script.readyState === "complete") {
|
|
764
|
+
script.onreadystatechange = null;
|
|
765
|
+
resolve(true);
|
|
766
|
+
}
|
|
767
|
+
};
|
|
768
|
+
}
|
|
769
|
+
else { //Other browsers
|
|
770
|
+
script.onload = () => {
|
|
771
|
+
resolve(true);
|
|
772
|
+
};
|
|
773
|
+
}
|
|
774
|
+
script.onerror = (error) => reject(error);
|
|
775
|
+
document.getElementsByTagName('head')[0].appendChild(script);
|
|
776
|
+
});
|
|
777
|
+
}
|
|
778
|
+
else if (cacheable) {
|
|
779
|
+
return $.ajax({
|
|
780
|
+
dataType: 'script',
|
|
781
|
+
cache: true,
|
|
782
|
+
url: url
|
|
783
|
+
}).done(response => response)
|
|
784
|
+
.fail(reason => reason);
|
|
785
|
+
}
|
|
786
|
+
else {
|
|
787
|
+
return $.getScript(url)
|
|
788
|
+
.done(response => response)
|
|
789
|
+
.fail(reason => reason);
|
|
790
|
+
}
|
|
791
|
+
};
|
|
792
|
+
export const loadScripts = async (urls = [], loadViaScriptTag = true) => {
|
|
793
|
+
for (const url of urls) {
|
|
794
|
+
await loadScript(url, loadViaScriptTag);
|
|
795
|
+
}
|
|
796
|
+
return Promise.resolve();
|
|
797
|
+
};
|
|
798
|
+
export let _WM_APP_PROJECT = {};
|
|
799
|
+
/**
|
|
800
|
+
* This function sets session storage item based on the project ID
|
|
801
|
+
* @param key string
|
|
802
|
+
* @param value string
|
|
803
|
+
*/
|
|
804
|
+
export const setSessionStorageItem = (key, value) => {
|
|
805
|
+
let item = window.sessionStorage.getItem(_WM_APP_PROJECT.id);
|
|
806
|
+
if (item) {
|
|
807
|
+
item = JSON.parse(item);
|
|
808
|
+
}
|
|
809
|
+
else {
|
|
810
|
+
item = {};
|
|
811
|
+
}
|
|
812
|
+
item[key] = value;
|
|
813
|
+
window.sessionStorage.setItem(_WM_APP_PROJECT.id, JSON.stringify(item));
|
|
814
|
+
};
|
|
815
|
+
/**
|
|
816
|
+
* This function gets session storage item based on the project ID
|
|
817
|
+
* @param key string
|
|
818
|
+
*/
|
|
819
|
+
export const getSessionStorageItem = key => {
|
|
820
|
+
// sanity check for this to work with ng-codegen
|
|
821
|
+
let item = window && window.sessionStorage && window.sessionStorage.getItem(_WM_APP_PROJECT.id);
|
|
822
|
+
if (item) {
|
|
823
|
+
item = JSON.parse(item);
|
|
824
|
+
return item[key];
|
|
825
|
+
}
|
|
826
|
+
};
|
|
827
|
+
export const noop = (...args) => { };
|
|
828
|
+
/**
|
|
829
|
+
* This function returns a blob object from the given file path
|
|
830
|
+
* @param filepath
|
|
831
|
+
* @returns promise having blob object
|
|
832
|
+
*/
|
|
833
|
+
export const convertToBlob = (filepath) => {
|
|
834
|
+
return new Promise((resolve, reject) => {
|
|
835
|
+
// Read the file entry from the file URL
|
|
836
|
+
resolveLocalFileSystemURL(filepath, function (fileEntry) {
|
|
837
|
+
fileEntry.file(function (file) {
|
|
838
|
+
// file has the cordova file structure. To submit to the backend, convert this file to javascript file
|
|
839
|
+
const reader = new FileReader();
|
|
840
|
+
reader.onloadend = () => {
|
|
841
|
+
const imgBlob = new Blob([reader.result], {
|
|
842
|
+
'type': file.type
|
|
843
|
+
});
|
|
844
|
+
resolve({ 'blob': imgBlob, 'filepath': filepath });
|
|
845
|
+
};
|
|
846
|
+
reader.onerror = reject;
|
|
847
|
+
reader.readAsArrayBuffer(file);
|
|
848
|
+
});
|
|
849
|
+
}, reject);
|
|
850
|
+
});
|
|
851
|
+
};
|
|
852
|
+
export const AppConstants = {
|
|
853
|
+
INT_MAX_VALUE: 2147483647
|
|
854
|
+
};
|
|
855
|
+
export const openLink = (link, target = '_self') => {
|
|
856
|
+
window.open(link, target);
|
|
857
|
+
};
|
|
858
|
+
/* util function to load the content from a url */
|
|
859
|
+
export const fetchContent = (dataType, url, inSync = false, success, error) => {
|
|
860
|
+
return $.ajax({ type: 'get', dataType: dataType, url: url, async: !inSync })
|
|
861
|
+
.done(response => success && success(response))
|
|
862
|
+
.fail(reason => error && error(reason));
|
|
863
|
+
};
|
|
864
|
+
/**
|
|
865
|
+
* If the given object is a promise, then object is returned. Otherwise, a promise is resolved with the given object.
|
|
866
|
+
* @param {Promise<T> | T} a
|
|
867
|
+
* @returns {Promise<T>}
|
|
868
|
+
*/
|
|
869
|
+
export const toPromise = (a) => {
|
|
870
|
+
if (a instanceof Promise) {
|
|
871
|
+
return a;
|
|
872
|
+
}
|
|
873
|
+
else {
|
|
874
|
+
return Promise.resolve(a);
|
|
875
|
+
}
|
|
876
|
+
};
|
|
877
|
+
/**
|
|
878
|
+
* This function invokes the given the function (fn) until the function successfully executes or the maximum number
|
|
879
|
+
* of retries is reached or onBeforeRetry returns false.
|
|
880
|
+
*
|
|
881
|
+
* @param fn - a function that is needs to be invoked. The function can also return a promise as well.
|
|
882
|
+
* @param interval - minimum time gap between successive retries. This argument should be greater or equal to 0.
|
|
883
|
+
* @param maxRetries - maximum number of retries. This argument should be greater than 0. For all other values,
|
|
884
|
+
* maxRetries is infinity.
|
|
885
|
+
* @param onBeforeRetry - a callback function that will be invoked before re-invoking again. This function can
|
|
886
|
+
* return false or a promise that is resolved to false to stop further retry attempts.
|
|
887
|
+
* @returns {*} a promise that is resolved when fn is success (or) maximum retry attempts reached
|
|
888
|
+
* (or) onBeforeRetry returned false.
|
|
889
|
+
*/
|
|
890
|
+
export const retryIfFails = (fn, interval, maxRetries, onBeforeRetry = () => Promise.resolve(false)) => {
|
|
891
|
+
let retryCount = 0;
|
|
892
|
+
const tryFn = () => {
|
|
893
|
+
retryCount++;
|
|
894
|
+
if (isFunction(fn)) {
|
|
895
|
+
return fn();
|
|
896
|
+
}
|
|
897
|
+
};
|
|
898
|
+
maxRetries = (isNumber(maxRetries) && maxRetries > 0 ? maxRetries : 0);
|
|
899
|
+
interval = (isNumber(interval) && interval > 0 ? interval : 0);
|
|
900
|
+
return new Promise((resolve, reject) => {
|
|
901
|
+
const errorFn = function () {
|
|
902
|
+
const errArgs = arguments;
|
|
903
|
+
setTimeout(() => {
|
|
904
|
+
toPromise(onBeforeRetry()).then(function (retry) {
|
|
905
|
+
if (retry !== false && (!maxRetries || retryCount <= maxRetries)) {
|
|
906
|
+
toPromise(tryFn()).then(resolve, errorFn);
|
|
907
|
+
}
|
|
908
|
+
else {
|
|
909
|
+
reject(errArgs);
|
|
910
|
+
}
|
|
911
|
+
}, () => reject(errArgs));
|
|
912
|
+
}, interval);
|
|
913
|
+
};
|
|
914
|
+
toPromise(tryFn()).then(resolve, errorFn);
|
|
915
|
+
});
|
|
916
|
+
};
|
|
917
|
+
/**
|
|
918
|
+
* Promise of a defer created using this function, has abort function that will reject the defer when called.
|
|
919
|
+
* @returns {*} angular defer object
|
|
920
|
+
*/
|
|
921
|
+
export const getAbortableDefer = () => {
|
|
922
|
+
const _defer = {
|
|
923
|
+
promise: null,
|
|
924
|
+
reject: null,
|
|
925
|
+
resolve: null,
|
|
926
|
+
onAbort: () => { },
|
|
927
|
+
isAborted: false
|
|
928
|
+
};
|
|
929
|
+
_defer.promise = new Promise((resolve, reject) => {
|
|
930
|
+
_defer.resolve = resolve;
|
|
931
|
+
_defer.reject = reject;
|
|
932
|
+
});
|
|
933
|
+
_defer.promise.abort = () => {
|
|
934
|
+
triggerFn(_defer.onAbort);
|
|
935
|
+
_defer.reject('aborted');
|
|
936
|
+
_defer.isAborted = true;
|
|
937
|
+
};
|
|
938
|
+
return _defer;
|
|
939
|
+
};
|
|
940
|
+
export const createCSSRule = (ruleSelector, rules) => {
|
|
941
|
+
const stylesheet = document.styleSheets[0];
|
|
942
|
+
stylesheet.insertRule(`${ruleSelector} { ${rules} }`);
|
|
943
|
+
};
|
|
944
|
+
export const getUrlParams = (link) => {
|
|
945
|
+
const params = {};
|
|
946
|
+
// If url params are present, construct params object and pass it to search
|
|
947
|
+
const index = link.indexOf('?');
|
|
948
|
+
if (index !== -1) {
|
|
949
|
+
const queryParams = split(link.substring(index + 1, link.length), '&');
|
|
950
|
+
queryParams.forEach((param) => {
|
|
951
|
+
let paramArray = split(param, '=');
|
|
952
|
+
params[paramArray[0]] = paramArray[1];
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
return params;
|
|
956
|
+
};
|
|
957
|
+
export const getRouteNameFromLink = (link) => {
|
|
958
|
+
link = link.replace('#/', '/');
|
|
959
|
+
const index = link.indexOf('?');
|
|
960
|
+
if (index !== -1) {
|
|
961
|
+
link = link.substring(0, index);
|
|
962
|
+
}
|
|
963
|
+
return link;
|
|
964
|
+
};
|
|
965
|
+
export const isAppleProduct = /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);
|
|
966
|
+
export const defer = () => {
|
|
967
|
+
const d = {
|
|
968
|
+
promise: null,
|
|
969
|
+
resolve: noop,
|
|
970
|
+
reject: noop
|
|
971
|
+
};
|
|
972
|
+
d.promise = new Promise((resolve, reject) => {
|
|
973
|
+
d.resolve = resolve;
|
|
974
|
+
d.reject = reject;
|
|
975
|
+
});
|
|
976
|
+
return d;
|
|
977
|
+
};
|
|
978
|
+
/*
|
|
979
|
+
* Invokes the given list of functions sequentially with the given arguments. If a function returns a promise,
|
|
980
|
+
* then next function will be invoked only if the promise is resolved.
|
|
981
|
+
*/
|
|
982
|
+
export const executePromiseChain = (fns, args, d, i) => {
|
|
983
|
+
d = d || defer();
|
|
984
|
+
i = i || 0;
|
|
985
|
+
if (i === 0) {
|
|
986
|
+
fns = filter(fns, function (fn) {
|
|
987
|
+
return !(isUndefined(fn) || isNull(fn));
|
|
988
|
+
});
|
|
989
|
+
}
|
|
990
|
+
if (fns && i < fns.length) {
|
|
991
|
+
try {
|
|
992
|
+
toPromise(fns[i].apply(undefined, args))
|
|
993
|
+
.then(() => executePromiseChain(fns, args, d, i + 1), d.reject);
|
|
994
|
+
}
|
|
995
|
+
catch (e) {
|
|
996
|
+
d.reject(e);
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
else {
|
|
1000
|
+
d.resolve();
|
|
1001
|
+
}
|
|
1002
|
+
return d.promise;
|
|
1003
|
+
};
|
|
1004
|
+
/**
|
|
1005
|
+
* This function accepts two data sources and will check if both are same by comparing the unique id and
|
|
1006
|
+
* context in which datasources are present
|
|
1007
|
+
* @returns {*} boolean true/ false
|
|
1008
|
+
*/
|
|
1009
|
+
export const isDataSourceEqual = (d1, d2) => {
|
|
1010
|
+
return d1.execute(DataSource.Operation.GET_UNIQUE_IDENTIFIER) === d2.execute(DataSource.Operation.GET_UNIQUE_IDENTIFIER) &&
|
|
1011
|
+
isEqual(d1.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER), d2.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER));
|
|
1012
|
+
};
|
|
1013
|
+
/**
|
|
1014
|
+
* checks if the passed datasource context matches with passed context
|
|
1015
|
+
* @param ds, datasource having a context
|
|
1016
|
+
* @param ctx, context to compare with
|
|
1017
|
+
* @returns {boolean}
|
|
1018
|
+
*/
|
|
1019
|
+
export const validateDataSourceCtx = (ds, ctx) => {
|
|
1020
|
+
return ds.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER) === ctx;
|
|
1021
|
+
};
|
|
1022
|
+
/**
|
|
1023
|
+
* This traverses the filterexpressions object recursively and process the bind string if any in the object
|
|
1024
|
+
* @param variable variable object
|
|
1025
|
+
* @param name name of the variable
|
|
1026
|
+
* @param context scope of the variable
|
|
1027
|
+
*/
|
|
1028
|
+
export const processFilterExpBindNode = (context, filterExpressions, variable) => {
|
|
1029
|
+
const destroyFn = context.registerDestroyListener ? context.registerDestroyListener.bind(context) : _noop;
|
|
1030
|
+
const filter$ = new Subject();
|
|
1031
|
+
const bindFilExpObj = (obj, targetNodeKey) => {
|
|
1032
|
+
const listener = (newVal, oldVal) => {
|
|
1033
|
+
if ((newVal === oldVal && isUndefined(newVal)) || (isUndefined(newVal) && !isUndefined(oldVal))) {
|
|
1034
|
+
return;
|
|
1035
|
+
}
|
|
1036
|
+
// Skip cloning for blob column
|
|
1037
|
+
if (!includes(['blob', 'file'], obj.type)) {
|
|
1038
|
+
newVal = getClonedObject(newVal);
|
|
1039
|
+
}
|
|
1040
|
+
// backward compatibility: where we are allowing the user to bind complete object
|
|
1041
|
+
if (obj.target === 'dataBinding') {
|
|
1042
|
+
// remove the existing databinding element
|
|
1043
|
+
filterExpressions.rules = [];
|
|
1044
|
+
// now add all the returned values
|
|
1045
|
+
forEach(newVal, function (value, target) {
|
|
1046
|
+
filterExpressions.rules.push({
|
|
1047
|
+
'target': target,
|
|
1048
|
+
'value': value,
|
|
1049
|
+
'matchMode': obj.matchMode || 'startignorecase',
|
|
1050
|
+
'required': false,
|
|
1051
|
+
'type': ''
|
|
1052
|
+
});
|
|
1053
|
+
});
|
|
1054
|
+
}
|
|
1055
|
+
else {
|
|
1056
|
+
// setting value to the root node
|
|
1057
|
+
obj[targetNodeKey] = newVal;
|
|
1058
|
+
}
|
|
1059
|
+
filter$.next({ filterExpressions, newVal });
|
|
1060
|
+
};
|
|
1061
|
+
if (stringStartsWith(obj[targetNodeKey], 'bind:')) {
|
|
1062
|
+
// [Todo-CSP]: needs a check, where is this used
|
|
1063
|
+
destroyFn($watch(obj[targetNodeKey].replace('bind:', ''), context, {}, variable ? variable.invokeOnFiltertExpressionChange.bind(variable, obj, targetNodeKey) : listener, undefined, false, { arrayType: includes(['in', 'notin'], obj.matchMode) }));
|
|
1064
|
+
}
|
|
1065
|
+
};
|
|
1066
|
+
const traverseFilterExpressions = expressions => {
|
|
1067
|
+
if (expressions.rules) {
|
|
1068
|
+
forEach(expressions.rules, (filExpObj, i) => {
|
|
1069
|
+
if (filExpObj.rules) {
|
|
1070
|
+
traverseFilterExpressions(filExpObj);
|
|
1071
|
+
}
|
|
1072
|
+
else {
|
|
1073
|
+
if (filExpObj.matchMode === 'between') {
|
|
1074
|
+
bindFilExpObj(filExpObj, 'secondvalue');
|
|
1075
|
+
}
|
|
1076
|
+
bindFilExpObj(filExpObj, 'value');
|
|
1077
|
+
}
|
|
1078
|
+
});
|
|
1079
|
+
}
|
|
1080
|
+
};
|
|
1081
|
+
traverseFilterExpressions(filterExpressions);
|
|
1082
|
+
return filter$;
|
|
1083
|
+
};
|
|
1084
|
+
// This method will set the given proto on the target
|
|
1085
|
+
export const extendProto = (target, proto) => {
|
|
1086
|
+
let _proto = Object.getPrototypeOf(target);
|
|
1087
|
+
while (Object.getPrototypeOf(_proto).constructor !== Object) {
|
|
1088
|
+
_proto = Object.getPrototypeOf(_proto);
|
|
1089
|
+
// return if the prototype of created component and prototype of context are same
|
|
1090
|
+
if (proto === _proto) {
|
|
1091
|
+
return;
|
|
1092
|
+
}
|
|
1093
|
+
}
|
|
1094
|
+
Object.setPrototypeOf(_proto, proto);
|
|
1095
|
+
};
|
|
1096
|
+
export const removeExtraSlashes = function (url) {
|
|
1097
|
+
const base64regex = /^data:image\/([a-z]{2,});base64,/;
|
|
1098
|
+
if (isString(url)) {
|
|
1099
|
+
/*
|
|
1100
|
+
* support for mobile apps having local file path url starting with file:/// and
|
|
1101
|
+
* support for base64 format
|
|
1102
|
+
* */
|
|
1103
|
+
if (startsWith(url, 'file:///') || base64regex.test(url)) {
|
|
1104
|
+
return url;
|
|
1105
|
+
}
|
|
1106
|
+
return url.replace(new RegExp('([^:]\/)(\/)+', 'g'), '$1');
|
|
1107
|
+
}
|
|
1108
|
+
};
|
|
1109
|
+
$.cachedScript = (() => {
|
|
1110
|
+
const inProgress = new Map();
|
|
1111
|
+
const resolved = new Set();
|
|
1112
|
+
const isInProgress = url => inProgress.has(url);
|
|
1113
|
+
const isResolved = url => resolved.has(url);
|
|
1114
|
+
const onLoad = url => {
|
|
1115
|
+
resolved.add(url);
|
|
1116
|
+
inProgress.get(url).resolve();
|
|
1117
|
+
inProgress.delete(url);
|
|
1118
|
+
};
|
|
1119
|
+
const setInProgress = url => {
|
|
1120
|
+
let resFn;
|
|
1121
|
+
let rejFn;
|
|
1122
|
+
const promise = new Promise((res, rej) => {
|
|
1123
|
+
resFn = res;
|
|
1124
|
+
rejFn = rej;
|
|
1125
|
+
});
|
|
1126
|
+
promise.resolve = resFn;
|
|
1127
|
+
promise.reject = rejFn;
|
|
1128
|
+
inProgress.set(url, promise);
|
|
1129
|
+
};
|
|
1130
|
+
return function (url) {
|
|
1131
|
+
if (isResolved(url)) {
|
|
1132
|
+
return Promise.resolve();
|
|
1133
|
+
}
|
|
1134
|
+
if (isInProgress(url)) {
|
|
1135
|
+
return inProgress.get(url);
|
|
1136
|
+
}
|
|
1137
|
+
setInProgress(url);
|
|
1138
|
+
const options = {
|
|
1139
|
+
dataType: 'script',
|
|
1140
|
+
cache: true,
|
|
1141
|
+
url
|
|
1142
|
+
};
|
|
1143
|
+
$.ajax(options).done(() => onLoad(url));
|
|
1144
|
+
return inProgress.get(url);
|
|
1145
|
+
};
|
|
1146
|
+
})();
|
|
1147
|
+
const DEFAULT_DISPLAY_FORMATS = {
|
|
1148
|
+
DATE: 'yyyy-MM-dd',
|
|
1149
|
+
TIME: 'hh:mm a',
|
|
1150
|
+
TIMESTAMP: 'yyyy-MM-dd hh:mm:ss a',
|
|
1151
|
+
DATETIME: 'yyyy-MM-dd hh:mm:ss a',
|
|
1152
|
+
};
|
|
1153
|
+
// This method returns the display date format for given type
|
|
1154
|
+
export const getDisplayDateTimeFormat = type => {
|
|
1155
|
+
return DEFAULT_DISPLAY_FORMATS[toUpper(type)];
|
|
1156
|
+
};
|
|
1157
|
+
// Generate for attribute on label and ID on input element, so that label elements are associated to form controls
|
|
1158
|
+
export const addForIdAttributes = (element) => {
|
|
1159
|
+
const labelEl = element.querySelectorAll('label.control-label');
|
|
1160
|
+
let inputEl = element.querySelectorAll('[focus-target]');
|
|
1161
|
+
if (!inputEl.length) {
|
|
1162
|
+
inputEl = element.querySelectorAll('input, select, textarea');
|
|
1163
|
+
}
|
|
1164
|
+
/*if there are only one input el and label El add id and for attribute*/
|
|
1165
|
+
if (labelEl.length && inputEl.length) {
|
|
1166
|
+
const widgetId = $(inputEl[0]).closest('[widget-id]').attr('widget-id');
|
|
1167
|
+
if (widgetId) {
|
|
1168
|
+
setAttr(inputEl[0], 'id', widgetId);
|
|
1169
|
+
setAttr(labelEl[0], 'for', widgetId);
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
/*Adding aria-labelledby to radioset, checkboxset widgets*/
|
|
1173
|
+
const ulEl = element.querySelectorAll('ul');
|
|
1174
|
+
if (labelEl.length && ulEl.length && (ulEl[0].getAttribute('role') === 'radiogroup' || ulEl[0].getAttribute('role') === 'group')) {
|
|
1175
|
+
const widgetId = 'wm-group-label-' + generateGUId();
|
|
1176
|
+
setAttr(ulEl[0], 'aria-labelledby', widgetId);
|
|
1177
|
+
setAttr(labelEl[0], 'id', widgetId);
|
|
1178
|
+
}
|
|
1179
|
+
};
|
|
1180
|
+
/**
|
|
1181
|
+
* This method is used to adjust the container position
|
|
1182
|
+
* For example: 1. When datepicker control placed closed to the screen left edges, it is going to negative values which is cutting the container.
|
|
1183
|
+
* To Fix the container overlapping issue changing the contrainer left translation to 0
|
|
1184
|
+
* @param containerElem - picker/dropdown container element(jquery)
|
|
1185
|
+
* @param parentElem - widget native element
|
|
1186
|
+
* @param ref - scope of particular library directive
|
|
1187
|
+
* @param ele - Child element(jquery). For some of the widgets(time, search) containerElem doesn't have height. The inner element(dropdown-menu) has height so passing it as optional.
|
|
1188
|
+
*/
|
|
1189
|
+
export const adjustContainerPosition = (containerElem, parentElem, ref, ele) => {
|
|
1190
|
+
const zoneRef = ref._ngZone || ref.ngZone;
|
|
1191
|
+
zoneRef.onStable.subscribe(() => {
|
|
1192
|
+
const containerEleTransformations = getWebkitTraslationMatrix(containerElem);
|
|
1193
|
+
if (containerEleTransformations.m41 < 0) {
|
|
1194
|
+
containerEleTransformations.m41 = 0;
|
|
1195
|
+
}
|
|
1196
|
+
else {
|
|
1197
|
+
return;
|
|
1198
|
+
}
|
|
1199
|
+
setTranslation3dPosition(containerElem, containerEleTransformations);
|
|
1200
|
+
});
|
|
1201
|
+
};
|
|
1202
|
+
/**
|
|
1203
|
+
* This method is used to adjust the container position
|
|
1204
|
+
* For example: 1. When datepicker control placed closed to the screen right edges, it is going to out of the viewport values which is cutting the container.
|
|
1205
|
+
* @param containerElem picker/dropdown container element(jquery)
|
|
1206
|
+
* @param parentElem widget native element
|
|
1207
|
+
* @param ref scope of particular library directive
|
|
1208
|
+
* @param ele Child element(jquery). For some of the widgets(time, search) containerElem doesn't have height. The inner element(dropdown-menu) has height so passing it as optional.
|
|
1209
|
+
*/
|
|
1210
|
+
export const adjustContainerRightEdges = (containerElem, parentElem, ref, ele) => {
|
|
1211
|
+
const containerWidth = ele ? parseInt(ele.css('width')) : parseInt(containerElem.css('width'));
|
|
1212
|
+
const viewPortWidth = $(window).width() + window.scrollX;
|
|
1213
|
+
const parentDimesion = parentElem.getBoundingClientRect();
|
|
1214
|
+
const parentRight = parentDimesion.right + window.scrollX;
|
|
1215
|
+
let newLeft;
|
|
1216
|
+
const zoneRef = ref._ngZone || ref.ngZone;
|
|
1217
|
+
zoneRef.onStable.subscribe(() => {
|
|
1218
|
+
const containerEleTransformations = getWebkitTraslationMatrix(containerElem);
|
|
1219
|
+
if (viewPortWidth - (parentRight + parentDimesion.width) < containerWidth) {
|
|
1220
|
+
newLeft = parentRight - containerWidth;
|
|
1221
|
+
if (newLeft < 0) {
|
|
1222
|
+
newLeft = 0;
|
|
1223
|
+
}
|
|
1224
|
+
containerEleTransformations.m41 = newLeft;
|
|
1225
|
+
}
|
|
1226
|
+
else {
|
|
1227
|
+
return;
|
|
1228
|
+
}
|
|
1229
|
+
setTranslation3dPosition(containerElem, containerEleTransformations);
|
|
1230
|
+
});
|
|
1231
|
+
};
|
|
1232
|
+
/**
|
|
1233
|
+
* For given element set the traslation
|
|
1234
|
+
* @param containerElem tanslated element
|
|
1235
|
+
*
|
|
1236
|
+
* @param containerEleTransformations translate matrix positions
|
|
1237
|
+
*/
|
|
1238
|
+
export const setTranslation3dPosition = (containerElem, containerEleTransformations) => {
|
|
1239
|
+
const translatePosition = 'translate3d(' + containerEleTransformations.m41 + 'px, ' + containerEleTransformations.m42 + 'px, 0px)';
|
|
1240
|
+
containerElem[0].style.webkitTransform = translatePosition;
|
|
1241
|
+
containerElem[0].style.MozTransform = translatePosition;
|
|
1242
|
+
containerElem[0].style.msTransform = translatePosition;
|
|
1243
|
+
containerElem[0].style.OTransform = translatePosition;
|
|
1244
|
+
containerElem[0].style.transform = translatePosition;
|
|
1245
|
+
};
|
|
1246
|
+
/**
|
|
1247
|
+
*
|
|
1248
|
+
* @param containerElem elemet for the WebKitCSSMatrix
|
|
1249
|
+
*/
|
|
1250
|
+
export const getWebkitTraslationMatrix = (containerElem) => {
|
|
1251
|
+
if (typeof WebKitCSSMatrix === 'undefined') {
|
|
1252
|
+
return new MSCSSMatrix(window.getComputedStyle(containerElem[0]).transform);
|
|
1253
|
+
}
|
|
1254
|
+
return new WebKitCSSMatrix(window.getComputedStyle(containerElem[0]).webkitTransform);
|
|
1255
|
+
};
|
|
1256
|
+
// close all the popovers.
|
|
1257
|
+
export const closePopover = (element) => {
|
|
1258
|
+
if (!element.closest('.app-popover').length) {
|
|
1259
|
+
const popoverElements = document.querySelectorAll('.app-popover-wrapper');
|
|
1260
|
+
forEach(popoverElements, (ele) => {
|
|
1261
|
+
if (ele.widget.isOpen) {
|
|
1262
|
+
ele.widget.isOpen = false;
|
|
1263
|
+
}
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1266
|
+
};
|
|
1267
|
+
/**
|
|
1268
|
+
* This method is to trigger change detection in the app
|
|
1269
|
+
* This is exposed for the end user developer of WM app
|
|
1270
|
+
* This is the alternative for $rs.$safeApply() in AngularJS
|
|
1271
|
+
* See $appDigest in utils for more info
|
|
1272
|
+
*/
|
|
1273
|
+
export const detectChanges = $appDigest;
|
|
1274
|
+
/**
|
|
1275
|
+
* This method is to trigger the action/link of menu/nav item
|
|
1276
|
+
* @param scope - scope of the widget
|
|
1277
|
+
* @param item - item object
|
|
1278
|
+
*/
|
|
1279
|
+
export const triggerItemAction = (scope, item) => {
|
|
1280
|
+
let itemLink = item.link;
|
|
1281
|
+
const itemAction = item.action;
|
|
1282
|
+
const linkTarget = item.target;
|
|
1283
|
+
if (itemAction) {
|
|
1284
|
+
if (!scope.itemActionFn) {
|
|
1285
|
+
//[Todo-CSP]: This will not work as function will be dynamic
|
|
1286
|
+
scope.itemActionFn = $parseEvent(itemAction);
|
|
1287
|
+
}
|
|
1288
|
+
scope.itemActionFn(scope.userDefinedExecutionContext, Object.create(item));
|
|
1289
|
+
}
|
|
1290
|
+
if (itemLink) {
|
|
1291
|
+
if (itemLink.startsWith('#/') && (!linkTarget || linkTarget === '_self')) {
|
|
1292
|
+
const queryParams = getUrlParams(itemLink);
|
|
1293
|
+
itemLink = getRouteNameFromLink(itemLink);
|
|
1294
|
+
const router = get(scope, 'route') || get(scope, 'menuRef.route');
|
|
1295
|
+
router.navigate([itemLink], { queryParams });
|
|
1296
|
+
}
|
|
1297
|
+
else {
|
|
1298
|
+
openLink(itemLink, linkTarget);
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
};
|
|
1302
|
+
/**
|
|
1303
|
+
* This method is to get datsource from the expression
|
|
1304
|
+
* @param expr - expression of the dataset
|
|
1305
|
+
* @param scope - scope of the widget
|
|
1306
|
+
* Example1: expr - "Variables.staticVar1.dataSet.details[$i].addresses" then the method will return datasource as Variables.staticVar1
|
|
1307
|
+
* Example2: expr - "Widgets.list1.currentItem.addresses" and list1 is bound to "Variables.staticVar1.dataSet.details" then the method will return datasource as Variables.staticVar1
|
|
1308
|
+
*/
|
|
1309
|
+
export const getDatasourceFromExpr = (expr, scope) => {
|
|
1310
|
+
const isBoundToVariable = startsWith(expr, 'Variables.');
|
|
1311
|
+
const isBoundToWidget = startsWith(expr, 'Widgets.');
|
|
1312
|
+
const parts = expr.split('.');
|
|
1313
|
+
if (isBoundToVariable) {
|
|
1314
|
+
return get(scope.viewParent.Variables, parts[1]);
|
|
1315
|
+
}
|
|
1316
|
+
if (isBoundToWidget) {
|
|
1317
|
+
const widgetScope = get(scope.viewParent.Widgets, parts[1]);
|
|
1318
|
+
const widgetDatasetBoundExpr = widgetScope.$attrs.get('datasetboundexpr');
|
|
1319
|
+
let widgetBoundExpression;
|
|
1320
|
+
widgetBoundExpression = (!widgetScope.datasource && widgetDatasetBoundExpr) ? widgetDatasetBoundExpr : widgetScope.binddataset;
|
|
1321
|
+
return getDatasourceFromExpr(widgetBoundExpression, widgetScope);
|
|
1322
|
+
}
|
|
1323
|
+
};
|
|
1324
|
+
/**
|
|
1325
|
+
* This method is to get dataset bound expression from list currentitem expression
|
|
1326
|
+
* @param expr - bound dataset expression
|
|
1327
|
+
* @param scope - scope of the widget
|
|
1328
|
+
* Example1: expr - "Widgets.list1.currentItem.details" and list1 is bound to "Variables.staticVar1.dataSet" then it returns expression as "Variables.staticVar1.dataSet[$i].details"
|
|
1329
|
+
*/
|
|
1330
|
+
export const extractCurrentItemExpr = (expr, scope) => {
|
|
1331
|
+
const currentItemRegEx = /^Widgets\..*\.currentItem/g;
|
|
1332
|
+
if (currentItemRegEx.test(expr)) {
|
|
1333
|
+
const parts = expr.split('.');
|
|
1334
|
+
const widgetScope = get(scope.viewParent.Widgets, parts[1]);
|
|
1335
|
+
const widgetDatasetBoundExpr = widgetScope.$attrs.get('datasetboundexpr');
|
|
1336
|
+
if (!widgetScope.datasource && widgetDatasetBoundExpr) {
|
|
1337
|
+
expr = expr.replace(/^Widgets\..*\.currentItem/g, `${widgetDatasetBoundExpr}[$i]`);
|
|
1338
|
+
return extractCurrentItemExpr(expr, scope);
|
|
1339
|
+
}
|
|
1340
|
+
else {
|
|
1341
|
+
expr = expr.replace(/^Widgets\..*\.currentItem/g, `${widgetScope.binddataset}[$i]`);
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1344
|
+
return expr;
|
|
1345
|
+
};
|
|
1346
|
+
// this will add the html tag to the widget to scope the css to the page.
|
|
1347
|
+
export const findRootContainer = ($el) => {
|
|
1348
|
+
let root = $el.closest('.app-prefab');
|
|
1349
|
+
if (!root.length) {
|
|
1350
|
+
root = $el.closest('.app-partial');
|
|
1351
|
+
}
|
|
1352
|
+
if (!root.length) {
|
|
1353
|
+
root = $el.closest('.app-spa-page');
|
|
1354
|
+
}
|
|
1355
|
+
if (!root.length) {
|
|
1356
|
+
root = $el.closest('.app-page');
|
|
1357
|
+
}
|
|
1358
|
+
return root.length && root.parent()[0].tagName;
|
|
1359
|
+
};
|
|
1360
|
+
export const VALIDATOR = {
|
|
1361
|
+
REQUIRED: 'required',
|
|
1362
|
+
MAXCHARS: 'maxchars',
|
|
1363
|
+
MINVALUE: 'minvalue',
|
|
1364
|
+
MAXVALUE: 'maxvalue',
|
|
1365
|
+
REGEXP: 'regexp',
|
|
1366
|
+
MINDATE: 'mindate',
|
|
1367
|
+
MAXDATE: 'maxdate',
|
|
1368
|
+
MINTIME: 'mintime',
|
|
1369
|
+
MAXTIME: 'maxtime',
|
|
1370
|
+
EXCLUDEDATES: 'excludedates',
|
|
1371
|
+
EXCLUDEDAYS: 'excludedays'
|
|
1372
|
+
};
|
|
1373
|
+
export const transformFileURI = (url) => {
|
|
1374
|
+
return url;
|
|
1375
|
+
};
|
|
1376
|
+
export const appendScriptToHead = (callback) => {
|
|
1377
|
+
const scriptele = document.createElement('script');
|
|
1378
|
+
scriptele.onload = () => {
|
|
1379
|
+
callback(WM_CUSTOM_FORMATTERS);
|
|
1380
|
+
};
|
|
1381
|
+
scriptele.onerror = err => {
|
|
1382
|
+
console.warn('Error while loading the file ' + scriptele.src + '\n' + err);
|
|
1383
|
+
};
|
|
1384
|
+
scriptele.type = 'text/javascript';
|
|
1385
|
+
scriptele.src = './extensions/formatters.js';
|
|
1386
|
+
document.head.appendChild(scriptele);
|
|
1387
|
+
};
|
|
1388
|
+
export const getAppSetting = (key, defaultValue) => {
|
|
1389
|
+
return (_WM_APP_PROPERTIES.extra_settings && get(_WM_APP_PROPERTIES.extra_settings, key)) || defaultValue;
|
|
1390
|
+
};
|
|
1391
|
+
/* this function sets the itemclass depending on itemsperrow.
|
|
1392
|
+
* if itemsperrow is 2 for large device, then itemclass is 'col-xs-1 col-sm-1 col-lg-2'
|
|
1393
|
+
* if itemsperrow is 'lg-3' then itemclass is 'col-lg-3'
|
|
1394
|
+
*/
|
|
1395
|
+
export const setListClass = (scope) => {
|
|
1396
|
+
let temp = '';
|
|
1397
|
+
if (scope.itemsperrow) {
|
|
1398
|
+
if (scope.itemsperrow === "auto") {
|
|
1399
|
+
scope.itemsPerRowClass = "";
|
|
1400
|
+
}
|
|
1401
|
+
else if (isNaN(parseInt(scope.itemsperrow, 10))) {
|
|
1402
|
+
// handling itemsperrow containing string of classes
|
|
1403
|
+
split(scope.itemsperrow, ' ').forEach((cls) => {
|
|
1404
|
+
const keys = split(cls, '-');
|
|
1405
|
+
cls = `${keys[0]}-${(12 / parseInt(keys[1], 10))}`;
|
|
1406
|
+
temp += ` col-${cls}`;
|
|
1407
|
+
});
|
|
1408
|
+
scope.itemsPerRowClass = temp.trim();
|
|
1409
|
+
}
|
|
1410
|
+
else {
|
|
1411
|
+
// handling itemsperrow having integer value.
|
|
1412
|
+
scope.itemsPerRowClass = `col-xs-${(12 / parseInt(scope.itemsperrow, 10))}`;
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
else { // If itemsperrow is not specified make it full width
|
|
1416
|
+
scope.itemsPerRowClass = 'col-xs-12';
|
|
1417
|
+
}
|
|
1418
|
+
};
|
|
1419
|
+
export const findParent = (lView, viewParentApp) => {
|
|
1420
|
+
let parent = findViewParent(lView);
|
|
1421
|
+
return parent ? parent : viewParentApp;
|
|
1422
|
+
};
|
|
1423
|
+
export const findViewParent = (lView) => {
|
|
1424
|
+
return lView[15] ? lView[15][8] : lView[15];
|
|
1425
|
+
/*if(lView[3] === null) {
|
|
1426
|
+
return lView[8];
|
|
1427
|
+
}
|
|
1428
|
+
let parentlView = lView[3];
|
|
1429
|
+
if(typeof lView[1] === "boolean") {
|
|
1430
|
+
return findViewParent(parentlView);
|
|
1431
|
+
}
|
|
1432
|
+
let componentType = lView[1]["type"];
|
|
1433
|
+
if(componentType === 0 || componentType === 1) {
|
|
1434
|
+
let p = lView[8];
|
|
1435
|
+
// ts-ignore
|
|
1436
|
+
if(p.hasOwnProperty("isDialogComponent") || p.hasOwnProperty("isContainerDirective")) {
|
|
1437
|
+
return findViewParent(parentlView);
|
|
1438
|
+
} else {
|
|
1439
|
+
return p;
|
|
1440
|
+
}
|
|
1441
|
+
} else {
|
|
1442
|
+
return findViewParent(parentlView);
|
|
1443
|
+
}*/
|
|
1444
|
+
};
|
|
1445
|
+
export const getFontConfig = () => {
|
|
1446
|
+
return _WM_APP_PROPERTIES.fontConfig || getPreviewProperties();
|
|
1447
|
+
};
|
|
1448
|
+
export const adjustVerticalPosition = (containerElem, parentElem, ref, ele) => {
|
|
1449
|
+
const zoneRef = ref._ngZone || ref.ngZone;
|
|
1450
|
+
zoneRef.onStable.subscribe(() => {
|
|
1451
|
+
const containerHeight = ele
|
|
1452
|
+
? parseInt(ele.css('height'), 10)
|
|
1453
|
+
: parseInt(containerElem.css('height'), 10);
|
|
1454
|
+
const rect = parentElem.getBoundingClientRect();
|
|
1455
|
+
const viewportHeight = window.innerHeight;
|
|
1456
|
+
const spaceBelow = viewportHeight - rect.bottom;
|
|
1457
|
+
const spaceAbove = rect.top;
|
|
1458
|
+
if (spaceBelow < containerHeight && spaceAbove >= containerHeight) {
|
|
1459
|
+
const matrix = getWebkitTraslationMatrix(containerElem);
|
|
1460
|
+
matrix.m42 = matrix.m42 - containerHeight - rect.height;
|
|
1461
|
+
if (matrix.m42 < 0) {
|
|
1462
|
+
matrix.m42 = 0;
|
|
1463
|
+
}
|
|
1464
|
+
setTranslation3dPosition(containerElem, matrix);
|
|
1465
|
+
}
|
|
1466
|
+
});
|
|
1467
|
+
};
|
|
1468
|
+
/*export const getParent = (parent: any) => {
|
|
1469
|
+
if(parent.hasOwnProperty("isDynamicComponent") || parent.hasOwnProperty("isPageComponent")) {
|
|
1470
|
+
return parent
|
|
1471
|
+
} else{
|
|
1472
|
+
return parent.viewParent ? getParent(parent.viewParent) : parent;
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
}*/
|
|
1476
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sT0FBTyxFQUNQLEdBQUcsRUFDSCxRQUFRLEVBQ1IsUUFBUSxFQUNSLE9BQU8sRUFDUCxZQUFZLEVBQ1osT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsV0FBVyxFQUNYLE9BQU8sRUFDUCxVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsV0FBVyxFQUNYLElBQUksRUFDSixHQUFHLEVBQ0gsSUFBSSxJQUFJLEtBQUssRUFDYixJQUFJLEVBQ0osT0FBTyxJQUFJLFFBQVEsRUFDbkIsS0FBSyxFQUNMLFVBQVUsRUFDVixPQUFPLEVBQ1AsT0FBTyxFQUNQLElBQUksRUFDUCxNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxLQUFLLFNBQVMsTUFBTSxpQ0FBaUMsQ0FBQztBQUc3RCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FB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UUFFMUMsTUFBTSxVQUFVLEdBQUcsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUU1QixJQUFJLFVBQVUsR0FBRyxlQUFlLElBQUksVUFBVSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXhELE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUV4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFFRCx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBQ0Y7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Z2V0UHJldmlld1Byb3BlcnRpZXN9IGZyb20gJy4vd20tcHJvamVjdC1wcm9wZXJ0aWVzJztcbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNofSBmcm9tICcuL3dhdGNoZXInO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vZW51bXMvZW51bXMnO1xuaW1wb3J0IHtEYXRhU291cmNlfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3NldEF0dHJ9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7JHBhcnNlRXZlbnR9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHtcbiAgICBhdHRlbXB0LFxuICAgIGNhbWVsQ2FzZSxcbiAgICBjbG9uZURlZXAsXG4gICAgZXZlcnksXG4gICAgZmlsdGVyLFxuICAgIGZvckVhY2gsXG4gICAgZ2V0LFxuICAgIGlkZW50aXR5LFxuICAgIGluY2x1ZGVzLFxuICAgIGluZGV4T2YsXG4gICAgaW50ZXJzZWN0aW9uLFxuICAgIGlzQXJyYXksXG4gICAgaXNEYXRlLFxuICAgIGlzRXF1YWwsXG4gICAgaXNFcXVhbFdpdGgsXG4gICAgaXNFcnJvcixcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzTnVsbCxcbiAgICBpc051bWJlcixcbiAgICBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCxcbiAgICBrZXlzLFxuICAgIG1hcCxcbiAgICBub29wIGFzIF9ub29wLFxuICAgIG9taXQsXG4gICAgcmVwbGFjZSBhcyBfcmVwbGFjZSxcbiAgICBzcGxpdCxcbiAgICBzdGFydHNXaXRoLFxuICAgIHRvTG93ZXIsXG4gICAgdG9VcHBlcixcbiAgICB0cmltXG59IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuaW1wb3J0IFgySlMgZnJvbSAneDJqcyc7XG5pbXBvcnQgKiBhcyBtb21lbnRMaWIgZnJvbSAnbW9tZW50LXRpbWV6b25lL21vbWVudC10aW1lem9uZSc7XG5cbmRlY2xhcmUgY29uc3QgJDtcbmNvbnN0IG1vbWVudCA9IG1vbWVudExpYi5kZWZhdWx0IHx8IHdpbmRvd1snbW9tZW50J107XG5kZWNsYXJlIGNvbnN0IGRvY3VtZW50O1xuZGVjbGFyZSBjb25zdCByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMO1xuZGVjbGFyZSBjb25zdCBXTV9DVVNUT01fRk9STUFUVEVSUztcbmRlY2xhcmUgY29uc3QgTVNDU1NNYXRyaXg7XG5kZWNsYXJlIGNvbnN0IF9XTV9BUFBfUFJPUEVSVElFUztcblxuY29uc3QgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5jb25zdCBSRUdFWCA9IHtcbiAgICBTTkFLRV9DQVNFOiAvW0EtWl0vZyxcbiAgICBBTkRST0lEOiAvQW5kcm9pZC9pLFxuICAgIElQSE9ORTogL2lQaG9uZS9pLFxuICAgIElQT0Q6IC9pUG9kL2ksXG4gICAgSVBBRDogL2lQYWQvaSxcbiAgICBNQUM6IC9NYWMvaSxcbiAgICBBTkRST0lEX1RBQkxFVDogL2FuZHJvaWR8YW5kcm9pZCAzLjB8eG9vbXxzY2gtaTgwMHxwbGF5Ym9va3x0YWJsZXR8a2luZGxlL2ksXG4gICAgTU9CSUxFOiAvTW9iaWxlL2ksXG4gICAgV0lORE9XUzogL1dpbmRvd3MgUGhvbmUvaSxcbiAgICBTVVBQT1JURURfSU1BR0VfRk9STUFUOiAvXFwuKGJtcHxnaWZ8anBlfGpwZ3xqcGVnfHRpZnx0aWZmfHBibXxwbmd8aWNvKSQvaSxcbiAgICBTVVBQT1JURURfRklMRV9GT1JNQVQ6IC9cXC4odHh0fGpzfGNzc3xodG1sfHNjcmlwdHxwcm9wZXJ0aWVzfGpzb258amF2YXx4bWx8c21kfHhtaXxzcWx8bG9nfHdzZGx8dm18ZnRsfGpyeG1sfHltbHx5YW1sfG1kfGxlc3N8anNwKSQvaSxcbiAgICBTVVBQT1JURURfQVVESU9fRk9STUFUOiAvXFwuKG1wM3xvZ2d8d2VibXx3bWF8M2dwfHdhdnxtNGEpJC9pLFxuICAgIFNVUFBPUlRFRF9WSURFT19GT1JNQVQ6IC9cXC4obXA0fG9nZ3x3ZWJtfHdtdnxtcGVnfG1wZ3xhdml8bW92KSQvaSxcbiAgICBQQUdFX1JFU09VUkNFX1BBVEg6IC9eXFwvcGFnZXNcXC8uKlxcLihqc3xjc3N8aHRtbHxqc29uKSQvLFxuICAgIE1JTl9QQUdFX1JFU09VUkNFX1BBVEg6IC8uKihwYWdlLm1pbi5odG1sKSQvLFxuICAgIFZBTElEX0VNQUlMOiAvXlthLXpBLVpdW1xcdy4rXStAW2EtekEtWl9dKz9cXC5bYS16QS1aLl17MSw0fVthLXpBLVpdJC8sXG4gICAgVkFMSURfV0VCX1VSTDogL14oaHR0cFtzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfSU1BR0VfVVJMOiAvXihodHRwcz98YmxvYnxkYXRhfGZpbGV8ZnRwKTovaSxcbiAgICBWQUxJRF9XRUJTT0NLRVRfVVJMOiAvXih3c1tzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfUkVMQVRJVkVfVVJMOiAvXig/IXd3d1xcLnwoPzpodHRwfGZ0cClzPzpcXC9cXC98W0EtWmEtel06XFxcXHxcXC9cXC8pLiovLFxuICAgIFJFUExBQ0VfUEFUVEVSTjogL1xcJFxceyhbXlxcfV0rKVxcfS9nLFxuICAgIFpJUF9GSUxFOiAvXFwuemlwJC9pLFxuICAgIEVYRV9GSUxFOiAvXFwuZXhlJC9pLFxuICAgIE5PX1FVT1RFU19BTExPV0VEOiAvXlteJ3xcIl0qJC8sXG4gICAgTk9fRE9VQkxFX1FVT1RFU19BTExPV0VEOiAvXlteXCJdKiQvLFxuICAgIFZBTElEX0hUTUw6IC88W2Etel1bXFxzXFxTXSo+L2ksXG4gICAgVkFMSURfUEFTU1dPUkQ6IC9eWzAtOWEtekEtWi1fLkAmKiEjJCVdKyQvLFxuICAgIFNQRUNJQUxfQ0hBUkFDVEVSUzogL1teQS1aMC05YS16X10rL2ksXG4gICAgQVBQX1NFUlZFUl9VUkxfRk9STUFUOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTlcXC5cXC1dKyhbOl0/WzAtOV17Miw1fXxcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSlcXC8rW14/IyY9XSskLyxcbiAgICBKU09OX0RBVEVfRk9STUFUOiAvXFxkezR9LVswLTFdXFxkLVswLTNdXFxkKFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZC5cXGR7MSwzfVokKT8vLFxuICAgIERBVEFfVVJMOiAvXlxccypkYXRhOihbYS16XStcXC9bYS16MC05LSsuXSsoO1thLXotXSs9W2EtejAtOS1dKyk/KT8oO2Jhc2U2NCk/LChbYS16MC05ISQmJywoKSorOz1cXC0uX346QFxcLz8lXFxzXSopXFxzKiQvaSxcbiAgICBJU09fREFURV9GT1JNQVQ6IC8oXFxkezR9LVxcZHsyfS1cXGR7Mn0pVChcXGR7Mn06XFxkezJ9OlxcZHsyfSkoXFwuXFxkKyk/KFsrLV1cXGR7Mn06P1xcZHsyfXxaKSQvXG59LFxuICAgIGNvbXBhcmVCeVNlcGFyYXRvciA9ICc6JztcblxuY29uc3QgTlVNQkVSX1RZUEVTID0gWydpbnQnLCBEYXRhVHlwZS5JTlRFR0VSLCBEYXRhVHlwZS5GTE9BVCwgRGF0YVR5cGUuRE9VQkxFLCBEYXRhVHlwZS5MT05HLCBEYXRhVHlwZS5TSE9SVCwgRGF0YVR5cGUuQllURSwgRGF0YVR5cGUuQklHX0lOVEVHRVIsIERhdGFUeXBlLkJJR19ERUNJTUFMXTtcbmNvbnN0IG5vdzogRGF0ZSA9IG5ldyBEYXRlKCk7XG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcblxuZXhwb3J0IGNvbnN0IGdldE5hdkNsYXNzID0gKHN1ZmZpeDogc3RyaW5nKSA6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgQVBQX05BVl9DTEFTU19QUkVGSVggPSAnYXBwLW5hdi0nO1xuICAgIHJldHVybiBBUFBfTkFWX0NMQVNTX1BSRUZJWCArIHN1ZmZpeDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNoZWV0UG9zaXRpb25DbGFzcyA9IChzdWZmaXg6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgU0hFRVRfUE9TSVRJT05fQ0xBU1NfUFJFRklYID0gJ3NoZWV0LXBvc2l0aW9uLSc7XG4gICAgcmV0dXJuIFNIRUVUX1BPU0lUSU9OX0NMQVNTX1BSRUZJWCArIHN1ZmZpeDtcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gRVZFTlRfTElGRSB7IE9OQ0UsIFdJTkRPVyB9XG5cbmV4cG9ydCBjb25zdCBpc0RlZmluZWQgPSB2ID0+ICd1bmRlZmluZWQnICE9PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gdiA9PiBudWxsICE9PSB2ICYmICdvYmplY3QnID09PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IHRvQm9vbGVhbiA9ICh2YWwsIGlkZW50aXR5PykgPT4gKCh2YWwgJiYgdmFsICE9PSAnZmFsc2UnKSA/IHRydWUgOiAoaWRlbnRpdHkgPyB2YWwgPT09IGlkZW50aXR5IDogZmFsc2UpKTtcblxuZnVuY3Rpb24gaXNJRTExKCkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignVHJpZGVudC8nKSA+IC0xO1xufVxuXG5leHBvcnQgY29uc3QgaXNJRSA9ICgpID0+IHtcbiAgICByZXR1cm4gaXNJRTExKCkgfHwgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignTVNJRScpID4gLTE7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWQgPSAoKSA9PiBSRUdFWC5BTkRST0lELnRlc3QodXNlckFnZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZFRhYmxldCA9ICgpID0+IFJFR0VYLkFORFJPSURfVEFCTEVULnRlc3QodXNlckFnZW50KSAmJiAhKCgvVGFibGV0IFBDIDIuMC9pKS50ZXN0KHVzZXJBZ2VudCkpO1xuXG5leHBvcnQgY29uc3QgaXNJcGhvbmUgPSAoKSA9PiBSRUdFWC5JUEhPTkUudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBvZCA9ICgpID0+IFJFR0VYLklQT0QudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBhZCA9ICgpID0+IHtcbiAgICByZXR1cm4gUkVHRVguSVBBRC50ZXN0KHVzZXJBZ2VudCkgfHwgKHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIgJiYgUkVHRVguTUFDLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW9zID0gKCkgPT4gaXNJcGhvbmUoKSB8fCBpc0lwb2QoKSB8fCBpc0lwYWQoKTtcblxuZXhwb3J0IGNvbnN0IGlzU2FmYXJpID0gKCkgPT4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdTYWZhcmknKSAhPT0gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTE7XG5cblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRMYW5kc2NhcGUgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4gIHtcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGdldEFuZHJvaWRWZXJzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpLm1hdGNoKC9hbmRyb2lkXFxzKFswLTlcXC5dKikvKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzS2l0a2F0RGV2aWNlID0gKCkgPT4gaXNBbmRyb2lkKCkgJiYgcGFyc2VJbnQoZ2V0QW5kcm9pZFZlcnNpb24oKSwgMTApID09PSA0O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBhbmQgcmV0dXJucyB0aGUgZW5jb2RlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybCA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgaW5kZXggPSB1cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIC8vIGVuY29kZSB0aGUgcmVsYXRpdmUgcGF0aFxuICAgICAgICB1cmwgPSBlbmNvZGVVUkkodXJsLnN1YnN0cmluZygwLCBpbmRleCkpICsgdXJsLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgIC8vIGVuY29kZSB1cmwgcGFyYW1zLCBub3QgZW5jb2RlZCB0aHJvdWdoIGVuY29kZVVSSVxuICAgICAgICB1cmwgPSBlbmNvZGVVcmxQYXJhbXModXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB1cmwgPSBlbmNvZGVVUkkodXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBlbmNvZGVzIHRoZSB1cmwgcGFyYW1zIGFuZCBpcyBwcml2YXRlIHRvIHRoZSBjbGFzcyBvbmx5XG4gKi9cbmV4cG9ydCBjb25zdCBlbmNvZGVVcmxQYXJhbXMgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCBxdWVyeVBhcmFtcywgZW5jb2RlZFBhcmFtcyA9ICcnLCBxdWVyeVBhcmFtc1N0cmluZywgaW5kZXg7XG4gICAgaW5kZXggPSB1cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIHF1ZXJ5UGFyYW1zU3RyaW5nID0gdXJsLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgIC8vIEVuY29kaW5nIHRoZSBxdWVyeSBwYXJhbXMgaWYgZXhpc3RcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zU3RyaW5nKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zU3RyaW5nLnNwbGl0KCcmJyk7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICAgICAgICAgIGxldCBkZWNvZGVkUGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpID0gaW5jbHVkZXMocGFyYW0sICc9JykgPyBwYXJhbS5pbmRleE9mKCc9JykgOiAocGFyYW0gJiYgcGFyYW0ubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lID0gcGFyYW0uc3Vic3RyKDAsIGkpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbVZhbHVlID0gcGFyYW0uc3Vic3RyKGkgKyAxKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgPSBmb3IgcGFyYW0gbmFtZSBvbmx5IHdoZW4gdGhlIHBhcmFtIHZhbHVlIGV4aXN0cyBpbiB0aGUgZ2l2ZW4gcGFyYW0gb3IgZW1wdHkgdmFsdWUgaXMgYXNzaWduZWRcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1WYWx1ZSB8fCBpbmNsdWRlcyhwYXJhbSwgJz0nKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQocGFyYW1WYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRQYXJhbVZhbHVlID0gcGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVkUGFyYW1WYWx1ZSkgKyAnJic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZFBhcmFtcyArPSBwYXJhbU5hbWUgKyAnJic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbmNvZGVkUGFyYW1zID0gZW5jb2RlZFBhcmFtcy5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZShxdWVyeVBhcmFtc1N0cmluZywgZW5jb2RlZFBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbi8qIGNhcGl0YWxpemUgdGhlIGZpcnN0LWxldHRlciBvZiB0aGUgc3RyaW5nIHBhc3NlZCAqL1xuZXhwb3J0IGNvbnN0IGluaXRDYXBzID0gbmFtZSA9PiB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKTtcbn07XG5cbi8qIGNvbnZlcnQgY2FtZWxDYXNlIHN0cmluZyB0byBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgKi9cbmV4cG9ydCBjb25zdCBzcGFjZVNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IG5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZShSRUdFWC5TTkFLRV9DQVNFLCBmdW5jdGlvbiAobGV0dGVyLCBwb3MpIHtcbiAgICAgICAgcmV0dXJuIChwb3MgPyAnICcgOiAnJykgKyBsZXR0ZXI7XG4gICAgfSk7XG59O1xuXG4vKlJlcGxhY2UgdGhlIGNoYXJhY3RlciBhdCBhIHBhcnRpY3VsYXIgaW5kZXgqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2VBdCA9IChzdHJpbmcsIGluZGV4LCBjaGFyYWN0ZXIpID0+IHN0cmluZy5zdWJzdHIoMCwgaW5kZXgpICsgY2hhcmFjdGVyICsgc3RyaW5nLnN1YnN0cihpbmRleCArIGNoYXJhY3Rlci5sZW5ndGgpO1xuXG4vKlJlcGxhY2UgJy4nIHdpdGggc3BhY2UgYW5kIGNhcGl0YWxpemUgdGhlIG5leHQgbGV0dGVyKi9cbmV4cG9ydCBjb25zdCBwZXJpb2RTZXBhcmF0ZSA9IG5hbWUgPT4ge1xuICAgIGxldCBkb3RJbmRleDtcbiAgICBkb3RJbmRleCA9IG5hbWUuaW5kZXhPZignLicpO1xuICAgIGlmIChkb3RJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCArIDEsIG5hbWUuY2hhckF0KGRvdEluZGV4ICsgMSkudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIG5hbWUgPSByZXBsYWNlQXQobmFtZSwgZG90SW5kZXgsICcgJyk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IHByZXR0aWZ5TGFiZWwgPSBsYWJlbCA9PiB7XG4gICAgbGFiZWwgPSBjYW1lbENhc2UobGFiZWwpO1xuICAgIC8qY2FwaXRhbGl6ZSB0aGUgaW5pdGlhbCBMZXR0ZXIqL1xuICAgIGxhYmVsID0gaW5pdENhcHMobGFiZWwpO1xuICAgIC8qQ29udmVydCBjYW1lbCBjYXNlIHdvcmRzIHRvIHNlcGFyYXRlZCB3b3JkcyovXG4gICAgbGFiZWwgPSBzcGFjZVNlcGFyYXRlKGxhYmVsKTtcbiAgICAvKlJlcGxhY2UgJy4nIHdpdGggc3BhY2UgYW5kIGNhcGl0YWxpemUgdGhlIG5leHQgbGV0dGVyKi9cbiAgICBsYWJlbCA9IHBlcmlvZFNlcGFyYXRlKGxhYmVsKTtcbiAgICByZXR1cm4gbGFiZWw7XG59O1xuXG5leHBvcnQgY29uc3QgZGVIeXBoZW5hdGUgPSAobmFtZSkgPT4ge1xuICAgIHJldHVybiBuYW1lLnNwbGl0KCctJykuam9pbignICcpO1xufTtcblxuLypBY2NlcHRzIGFuIGFycmF5IG9yIGEgc3RyaW5nIHNlcGFyYXRlZCB3aXRoIHN5bWJvbCBhbmQgcmV0dXJucyBwcmV0dGlmaWVkIHJlc3VsdCovXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbHMgPSAobmFtZXMsIHNlcGFyYXRvciA9ICcsJykgPT4ge1xuICAgIGxldCBtb2RpZmllZE5hbWVzLCBuYW1lc0FycmF5ID0gW107XG5cbiAgICBpZiAoIWlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIG5hbWVzQXJyYXkgPSBzcGxpdChuYW1lcywgc2VwYXJhdG9yKTtcbiAgICB9XG5cbiAgICBtb2RpZmllZE5hbWVzID0gbWFwKG5hbWVzQXJyYXksIHByZXR0aWZ5TGFiZWwpO1xuICAgIGlmIChpc0FycmF5KG5hbWVzKSkge1xuICAgICAgICByZXR1cm4gbW9kaWZpZWROYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVkTmFtZXMuam9pbihzZXBhcmF0b3IpO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBpbnNlY3VyZSBjb250ZW50IHJlcXVlc3QgaXMgYmVpbmcgbWFkZVxuICovXG5leHBvcnQgY29uc3QgaXNJbnNlY3VyZUNvbnRlbnRSZXF1ZXN0ID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cbiAgICBjb25zdCBwYXJzZXI6IEhUTUxBbmNob3JFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHBhcnNlci5ocmVmID0gdXJsO1xuXG4gICAgLy8gZm9yIHJlbGF0aXZlIHVybHMgSUUgcmV0dXJucyB0aGUgcHJvdG9jb2wgYXMgZW1wdHkgc3RyaW5nXG4gICAgaWYgKHBhcnNlci5wcm90b2NvbCA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBpbnB1dHRlZCBzb3VyY2UgaXMgYSBiYXNlNjQgdXJsLCBkbyBub3QgdGhyb3cgaW5zZWN1cmUgY29udGVudCBlcnJvclxuICAgIGlmIChSRUdFWC5EQVRBX1VSTC50ZXN0KHVybCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdTdGFydHNXaXRoKGxvY2F0aW9uLmhyZWYsICdodHRwczovLycpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZXIucHJvdG9jb2wgIT09ICdodHRwczonICYmIHBhcnNlci5wcm90b2NvbCAhPT0gJ3dzczonO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogdGhpcyBtZXRob2QgY2hlY2tzIGlmIGEgZ2l2ZW4gc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSBnaXZlbiBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ1N0YXJ0c1dpdGggPSAoc3RyOiBzdHJpbmcsIHN0YXJ0c1dpdGg6IHN0cmluZywgaWdub3JlQ2FzZT8pOiBib29sZWFuID0+IHtcbiAgICBpZiAoIXN0cikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVnRXggPSBuZXcgUmVnRXhwKCdeJyArIHN0YXJ0c1dpdGgsIGlnbm9yZUNhc2UgPyAnaScgOiAnJyk7XG5cbiAgICByZXR1cm4gcmVnRXgudGVzdChzdHIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEV2YWx1YXRlZEV4cHJWYWx1ZSA9IChvYmplY3QsIGV4cHJlc3Npb24pID0+IHtcbiAgICBsZXQgdmFsO1xuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlIHRoZSBleHByZXNzaW9uIHdpdGggdGhlIHNjb3BlIGFuZCBvYmplY3QuXG4gICAgICogJGV2YWwgaXMgdXNlZCwgYXMgZXhwcmVzc2lvbiBjYW4gYmUgaW4gZm9ybWF0IG9mIGZpZWxkMSArICcgJyArIGZpZWxkMlxuICAgICAqICRldmFsIGNhbiBmYWlsLCBpZiBleHByZXNzaW9uIGlzIG5vdCBpbiBjb3JyZWN0IGZvcm1hdCwgc28gYXR0ZW1wdCB0aGUgZXZhbCBmdW5jdGlvblxuICAgICAqL1xuICAgIHZhbCA9IGF0dGVtcHQoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IGFyZ3NFeHByID0gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoKGZpZWxkTmFtZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGB2YXIgJHtmaWVsZE5hbWV9ID0gZGF0YVsnJHtmaWVsZE5hbWV9J107YDtcbiAgICAgICAgfSkuam9pbignICcpO1xuICAgICAgICBjb25zdCBmID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgYCR7YXJnc0V4cHJ9IHJldHVybiAgJHtleHByZXNzaW9ufWApO1xuICAgICAgICByZXR1cm4gZihvYmplY3QpO1xuICAgIH0pO1xuICAgIC8qKlxuICAgICAqICRldmFsIGZhaWxzIGlmIGZpZWxkIGV4cHJlc3Npb24gaGFzIHNwYWNlcy4gRXg6ICdmaWVsZCBuYW1lJyBvciAnZmllbGRAbmFtZSdcbiAgICAgKiBBcyBhIGZhbGxiYWNrLCBnZXQgdmFsdWUgZGlyZWN0bHkgZnJvbSBvYmplY3Qgb3Igc2NvcGVcbiAgICAgKi9cbiAgICBpZiAoaXNFcnJvcih2YWwpKSB7XG4gICAgICAgIHZhbCA9IGdldChvYmplY3QsIGV4cHJlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLyogZnVuY3Rpb25zIGZvciByZXNvdXJjZSBUYWIqL1xuZXhwb3J0IGNvbnN0IGlzSW1hZ2VGaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfSU1BR0VfRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0F1ZGlvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX0FVRElPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWaWRlb0ZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9WSURFT19GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRXZWJVUkwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlZBTElEX1dFQl9VUkwpLnRlc3QodXJsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkSW1hZ2VVcmwgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlZBTElEX0lNQUdFX1VSTCkudGVzdCh1cmw/LnRyaW0oKSk7XG59XG5cbi8qVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB1cmwgdG8gdGhlIHJlc291cmNlIGFmdGVyIGNoZWNraW5nIHRoZSB2YWxpZGl0eSBvZiB1cmwqL1xuZXhwb3J0IGNvbnN0IGdldFJlc291cmNlVVJMID0gKHVybFN0cmluZykgPT4ge1xuICAgIGlmIChpc1ZhbGlkV2ViVVJMKHVybFN0cmluZykpIHtcbiAgICAgICAgLypUT0RPOiBVc2UgRG9tU2FuaXRpemVyKi9cbiAgICAgICAgLy8gcmV0dXJuIHNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwodXJsU3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIHVybFN0cmluZztcbn07XG5cbi8qZnVuY3Rpb24gdG8gY2hlY2sgaWYgZm4gaXMgYSBmdW5jdGlvbiBhbmQgdGhlbiBleGVjdXRlKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyRm4oZm4sIC4uLmFyZ21udHMpIHtcbiAgICAvKiBVc2Ugb2Ygc2xpY2Ugb24gYXJndW1lbnRzIHdpbGwgbWFrZSB0aGlzIGZ1bmN0aW9uIG5vdCBvcHRpbWl6YWJsZVxuICAgICogaHR0cHM6Ly9naXRodWIuY29tL3BldGthYW50b25vdi9ibHVlYmlyZC93aWtpL09wdGltaXphdGlvbi1raWxsZXJzIzMyLWxlYWtpbmctYXJndW1lbnRzXG4gICAgKiAqL1xuXG4gICAgbGV0IHN0YXJ0ID0gMTtcbiAgICBjb25zdCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtIHN0YXJ0KTtcbiAgICBmb3IgKHN0YXJ0OyBzdGFydCA8IGxlbjsgc3RhcnQrKykge1xuICAgICAgICBhcmdzW3N0YXJ0IC0gMV0gPSBhcmd1bWVudHNbc3RhcnRdO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBmb3JtYXR0ZWQgZGF0ZVxuICovXG5leHBvcnQgY29uc3QgZ2V0Rm9ybWF0dGVkRGF0ZSA9IChkYXRlUGlwZSwgZGF0ZU9iaiwgZm9ybWF0LCB0aW1lWm9uZT8sIGlzVGltZVN0YW1wVHlwZT8sIGlzSW50ZXJ2YWxEYXRlVGltZT8sIGNvbXBJbnN0YW5jZT8pOiBhbnkgPT4ge1xuICAgIGlmICghZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSAndGltZXN0YW1wJykge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLnZhbHVlT2YoKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnVVRDJykge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoZGF0ZU9iaikudG9JU09TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHRpbWVab25lICYmIHRpbWVab25lICE9PSAobW9tZW50IGFzIGFueSkuZGVmYXVsdFpvbmU/Lm5hbWUpIHtcbiAgICAgICAgY29uc3QgbW9tZW50Rm9ybWF0ID0gZm9ybWF0LnJlcGxhY2VBbGwoJ3knLCAnWScpLnJlcGxhY2VBbGwoJ2QnLCAnRCcpLnJlcGxhY2UoJ2EnLCAnQScpO1xuICAgICAgICBpZiAoaXNJbnRlcnZhbERhdGVUaW1lICkgeyAvLyBkYXRlcyB3aGljaCBhcmUgb2YgdHlwZSB0aW1lIHdpZGdldCAodmFsdWUgaXMgaGg6bW06c3MpIGJ1dCByZXR1cm5lZCBhcyBkYXRlIHN0cmluZyBmcm9tIHRpbWUgY29tcFxuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS5mb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNUaW1lU3RhbXBUeXBlID09PSAnZGF0ZXRpbWVzdGFtcCcpIHtcbiAgICAgICAgICAgIGRhdGVPYmogPSBnZXRNb21lbnRMb2NhbGVPYmplY3QodGltZVpvbmUsIGRhdGVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS5mb3JtYXQobW9tZW50Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZU9iaiwgZm9ybWF0LCB0aW1lWm9uZSwgY29tcEluc3RhbmNlKTtcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgZGF0ZSBoYXMgdGltZXpvbmUgaW5mb3JtYXRpb24gb3Igbm90XG4gKi9cbmV4cG9ydCBjb25zdCBoYXNPZmZzZXRTdHIgPSAoZGF0ZVN0cikgPT4ge1xuICAgIGlmICh0eXBlb2YgZGF0ZVN0ciAhPT0gJ3N0cmluZycpIHJldHVybjtcbiAgICBjb25zdCBtYXRjaGVzID0gZGF0ZVN0ci5tYXRjaChSRUdFWC5JU09fREFURV9GT1JNQVQpO1xuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXNbNF0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuXG4vKipcbiAqIG1ldGhvZCB0byBnZXQgdGhlIGRhdGUgb2JqZWN0IGZyb20gdGhlIGlucHV0IHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRlT2JqID0gKHZhbHVlLCBvcHRpb25zPywgdGltZXpvbmU/KTogRGF0ZSA9PiB7XG4gICAgLy8gSGFuZGxpbmcgbG9jYWxpemF0aW9uXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuICYmIG9wdGlvbnMucGF0dGVybiAhPT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgLy8gRml4IGZvciBXTVMtMTk2MDEsIGludmFsaWQgZGF0ZSBpcyByZXR1cm5lZCBvbiBkYXRlIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3QgaXNOYXRpdmVQaWNrZXIgPSAob3B0aW9ucyAmJiBvcHRpb25zLmhhc093blByb3BlcnR5KCdpc05hdGl2ZVBpY2tlcicpKSA/IGdldChvcHRpb25zLCAnaXNOYXRpdmVQaWNrZXInKSA6IGlzTW9iaWxlKCk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAgaXNOYXRpdmVQaWNrZXIgPyAnWVlZWS9NTS9ERCBISDptbTpzcycgOiBtb21lbnRQYXR0ZXJuKG9wdGlvbnMucGF0dGVybik7XG4gICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlLCBwYXR0ZXJuKS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIGRhdGUgb2JqZWN0LCBubyBuZWVkIHRvIGNvdmVydCBpdCovXG4gICAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgdGltZXN0YW1wIHN0cmluZywgY29udmVydCBpdCB0byBhIG51bWJlciovXG4gICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cblxuICAgIGlmICghbW9tZW50KHZhbHVlKS5pc1ZhbGlkKCkgfHwgdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IGRhdGVPYmogPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgLyoqXG4gICAgICogaWYgZGF0ZSB2YWx1ZSBpcyBzdHJpbmcgXCIyMC0wNS0yMDE5XCIgdGhlbiBuZXcgRGF0ZSh2YWx1ZSkgcmV0dXJuIDIwTWF5MjAxOSB3aXRoIGN1cnJlbnQgdGltZSBpbiBJbmRpYSxcbiAgICAgKiB3aGVyZWFzIHRoaXMgd2lsbCByZXR1cm4gMTlNYXkyMDE5IHdpdGggdGltZSBsYWdnaW5nIGZvciBmZXcgaG91cnMuXG4gICAgICogVGhpcyBpcyBiZWNhdXNlIGl0IHJldHVybnMgVVRDIHRpbWUgaS5lLiBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSAoVVRDKS5cbiAgICAgKiBUbyBjcmVhdGUgZGF0ZSBpbiBsb2NhbCB0aW1lIHVzZSBtb21lbnRcbiAgICAgKi9cbiAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIElmIHNlbGVjdGVkIGxvY2FsZSBpcyBBcmFiaWMsIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgZ2l2aW5nIGRhdGUgaW4gQXJhYmljIGxhbmd1YWdlXG4gICAgICAgICAqIChFeDogSWYgZGF0ZSB2YWx1ZSBpcyBcIjE5OTAtMTEtMjNcIiBhbmQgbW9tZW50KHZhbHVlKS5mb3JtYXQoKSBpcyBcItmh2anZqdmgLdmh2aEt2aLZo1TZoNmgOtmg2aA62aDZoCvZoNmlOtmj2aBcIilcbiAgICAgICAgICogYW5kIG5ldyBEYXRlKG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkpIGlzIGdpdmluZyBJbnZhbGlkIERhdGUuIFNvIGZyc3QgY29udmVydGluZyBpdCB0byB0aW1lc3RhbXAgdmFsdWUuXG4gICAgICAgICovXG5cbiAgICAgICAgZGF0ZU9iaiA9ICF0aW1lem9uZSA/IG5ldyBEYXRlKG1vbWVudChtb21lbnQodmFsdWUpLmZvcm1hdCgpKS52YWx1ZU9mKCkpIDogZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWV6b25lLCB2YWx1ZSk7O1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA9PT0gQ1VSUkVOVF9EQVRFIHx8IGlzTmFOKGRhdGVPYmouZ2V0RGF5KCkpKSB7XG4gICAgICAgIHJldHVybiBub3c7XG4gICAgfVxuICAgIHJldHVybiBkYXRlT2JqO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEV2ZW50TGlzdGVuZXJPbkVsZW1lbnQgPSAoX2VsZW1lbnQ6IEVsZW1lbnQsIGV4Y2x1ZGVFbGVtZW50OiBFbGVtZW50LCBuYXRpdmVFbGVtZW50OiBFbGVtZW50LCBldmVudFR5cGUsIGlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQsIHN1Y2Nlc3NDQiwgbGlmZTogRVZFTlRfTElGRSwgaXNDYXB0dXJlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBlbGVtZW50OiBFbGVtZW50ID0gX2VsZW1lbnQ7XG4gICAgY29uc3QgZXZlbnRMaXN0ZW5lciA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAoZXhjbHVkZUVsZW1lbnQgJiYgKGV4Y2x1ZGVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgfHwgZXhjbHVkZUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICBpZiAoJChldmVudC50YXJnZXQpLmlzKCdpbnB1dCcpICYmICFpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGlmZSA9PT0gRVZFTlRfTElGRS5PTkNFKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgICAgICB9XG4gICAgICAgIHN1Y2Nlc3NDQigpO1xuICAgIH07XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICBjb25zdCByZW1vdmVFdmVudExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlbW92ZUV2ZW50TGlzdGVuZXI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgYSBkZWVwIGNsb25lZCByZXBsaWNhIG9mIHRoZSBwYXNzZWQgb2JqZWN0L2FycmF5XG4gKiBAcGFyYW0gb2JqZWN0IG9iamVjdC9hcnJheSB0byBjbG9uZVxuICogQHJldHVybnMgYSBjbG9uZSBvZiB0aGUgcGFzc2VkIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0Q2xvbmVkT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuICAgIHJldHVybiBjbG9uZURlZXAob2JqZWN0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlcyA9IChmb3JtTmFtZSwgZmllbGROYW1lLCBpc0xpc3QpID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGdldChkb2N1bWVudC5mb3JtcywgW2Zvcm1OYW1lLCBmaWVsZE5hbWUsICdmaWxlcyddKTtcbiAgICByZXR1cm4gaXNMaXN0ID8gbWFwKGZpbGVzLCBpZGVudGl0eSkgOiBmaWxlcyAmJiBmaWxlc1swXTtcbn07XG5cbi8qRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyKi9cbmZ1bmN0aW9uIHJhbmRvbSgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbn1cblxuLypGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGd1aWQgYmFzZWQgb24gcmFuZG9tIG51bWJlcnMuKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUdVSWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJhbmRvbSgpICsgJy0nICsgcmFuZG9tKCkgKyAnLScgKyByYW5kb20oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgaWYgZ2l2ZW4gYWNjZXNzIHJvbGUgaXMgaW4gY3VycmVudCBsb2dnZWRpbiB1c2VyIGFjY2VzcyByb2xlc1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBY2Nlc3NSb2xlcyA9IChyb2xlRXhwLCBsb2dnZWRJblVzZXIpID0+IHtcbiAgICBsZXQgcm9sZXM7XG5cbiAgICBpZiAocm9sZUV4cCAmJiBsb2dnZWRJblVzZXIpIHtcblxuICAgICAgICByb2xlcyA9IHJvbGVFeHAgJiYgcm9sZUV4cC5zcGxpdCgnLCcpLm1hcChGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCwgU3RyaW5nLnByb3RvdHlwZS50cmltKTtcblxuICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9uKHJvbGVzLCBsb2dnZWRJblVzZXIudXNlclJvbGVzKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmFsaWRKU09OID0gKGNvbnRlbnQpID0+IHtcbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkSW50VmFsdWUgPSBwYXJzZUludChjb250ZW50LCAxMCk7XG4gICAgICAgIC8qb2J0YWluaW5nIGpzb24gZnJvbSBlZGl0b3IgY29udGVudCBzdHJpbmcqL1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgfHwgIWlzTmFOKHBhcnNlZEludFZhbHVlKSA/IGNvbnRlbnQgOiBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyp0ZXJtaW5hdGluZyBleGVjdXRpb24gaWYgbmV3IHZhcmlhYmxlIG9iamVjdCBpcyBub3QgdmFsaWQganNvbi4qL1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCB4bWxUb0pzb24gPSAoeG1sU3RyaW5nKSA9PiB7XG4gICAgLy9UT0RPOiBpbXBvcnQgeDJqcyBkeW5hbWljYWxseVxuICAgIGNvbnN0IHgyanNPYmogPSBuZXcgWDJKUyh7ICdlbXB0eU5vZGVGb3JtJzogJ29iamVjdCcsICdhdHRyaWJ1dGVQcmVmaXgnOiAnJywgJ2VuYWJsZVRvU3RyaW5nRnVuYyc6IGZhbHNlIH0pO1xuICAgIGxldCBqc29uID0geDJqc09iai54bWwyanMoeG1sU3RyaW5nKTtcbiAgICBpZiAoanNvbikge1xuICAgICAgICBqc29uID0gZ2V0KGpzb24sIE9iamVjdC5rZXlzKGpzb24pWzBdKTtcbiAgICB9XG4gICAgcmV0dXJuIGpzb247XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gZmluZCB0aGUgdmFsdWUgb2YgYSBrZXkgaW4gdGhlIG9iamVjdFxuICogaWYga2V5IG5vdCBmb3VuZCBhbmQgY3JlYXRlIGlzIHRydWUsIGFuIG9iamVjdCBpcyBjcmVhdGVkIGFnYWluc3QgdGhhdCBub2RlXG4gKiBFeGFtcGxlczpcbiAqIHZhciBhID0ge1xuICogIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfVxuICogfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdiLmMuZCcpIC0tPiAndGVzdCdcbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jJykgLS0+IHtkOiAndGVzdCd9XG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnKSAtLT4gdW5kZWZpbmVkXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2UnLCB0cnVlKSAtLT4ge30gYW5kIGEgd2lsbCBiZWNvbWU6XG4gKiB7XG4gKiAgIGI6IHtcbiAqICAgICAgYyA6IHtcbiAqICAgICAgICAgIGQ6ICd0ZXN0J1xuICogICAgICB9XG4gKiAgfSxcbiAqICBlOiB7XG4gKiAgfVxuICogfVxuICovXG5leHBvcnQgY29uc3QgZmluZFZhbHVlT2YgPSAob2JqLCBrZXksIGNyZWF0ZT8pID0+IHtcblxuICAgIGlmICghb2JqIHx8ICFrZXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY3JlYXRlKSB7XG4gICAgICAgIHJldHVybiBnZXQob2JqLCBrZXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcuJyksXG4gICAgICAgIGtleXMgPSBbXTtcblxuICAgIGxldCBza2lwUHJvY2Vzc2luZztcblxuICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHsgLy8gaWYgdGhlIHBhcnQgb2YgYSBrZXkgaXMgbm90IHZhbGlkLCBza2lwIHRoZSBwcm9jZXNzaW5nLlxuICAgICAgICAgICAgc2tpcFByb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ViUGFydHMgPSBwYXJ0Lm1hdGNoKC9cXHcrL2cpO1xuICAgICAgICBsZXQgc3ViUGFydDtcblxuICAgICAgICB3aGlsZSAoc3ViUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdWJQYXJ0ID0gc3ViUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGtleXMucHVzaCh7ICdrZXknOiBzdWJQYXJ0LCAndmFsdWUnOiBzdWJQYXJ0cy5sZW5ndGggPyBbXSA6IHt9IH0pOyAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBjcmVhdGUgYW4gYXJyYXkgb3IgYW4gb2JqZWN0XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChza2lwUHJvY2Vzc2luZykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaCgoX2tleSkgPT4ge1xuICAgICAgICBsZXQgdGVtcE9iaiA9IG9ialtfa2V5LmtleV07XG4gICAgICAgIGlmICghaXNPYmplY3QodGVtcE9iaikpIHtcbiAgICAgICAgICAgIHRlbXBPYmogPSBnZXRWYWxpZEpTT04odGVtcE9iaik7XG4gICAgICAgICAgICBpZiAoIXRlbXBPYmopIHtcbiAgICAgICAgICAgICAgICB0ZW1wT2JqID0gX2tleS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmpbX2tleS5rZXldID0gdGVtcE9iajtcbiAgICAgICAgb2JqID0gdGVtcE9iajtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG4vKlxuKiBleHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgbGFzdCBiaXQgZnJvbSBmdWxsIHR5cGVSZWYgb2YgYSBmaWVsZFxuKiBlLmcuIHJldHVybnMgJ1N0cmluZycgZm9yIHR5cGVSZWYgPSAnamF2YS5sYW5nLlN0cmluZydcbiogQHBhcmFtczoge3R5cGVSZWZ9IHR5cGUgcmVmZXJlbmNlXG4qL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RUeXBlID0gKHR5cGVSZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKCF0eXBlUmVmKSB7XG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5TVFJJTkc7XG4gICAgfVxuICAgIHR5cGUgPSB0eXBlUmVmICYmIHR5cGVSZWYuc3Vic3RyaW5nKHR5cGVSZWYubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIHR5cGUgPSB0eXBlICYmIHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB0eXBlID0gdHlwZSA9PT0gRGF0YVR5cGUuTE9DQUxEQVRFVElNRSA/IERhdGFUeXBlLkRBVEVUSU1FIDogdHlwZTtcbiAgICByZXR1cm4gdHlwZTtcbn07XG5cbi8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGF0YSB0eXBlIG1hdGNoZXMgbnVtYmVyIHR5cGUgKi9cbmV4cG9ydCBjb25zdCBpc051bWJlclR5cGUgPSAodHlwZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIChOVU1CRVJfVFlQRVMuaW5kZXhPZihleHRyYWN0VHlwZSh0eXBlKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpO1xufTtcblxuLyogZnVuY3Rpb24gdG8gY2hlY2sgaWYgcHJvdmlkZWQgb2JqZWN0IGlzIGVtcHR5Ki9cbmV4cG9ydCBjb25zdCBpc0VtcHR5T2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KG9iaikgJiYgIWlzQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vIEZ1bmN0aW9uIGV4cGVjdHMgYW4gZWxlbWVudCBvbiB3aGljaCB0aGUgc2Nyb2xsaW5nIHNob3VsZCBiZSBhcHBsaWVkLCBEZXBlbmRpbmcgb24gdGhlIG9mZnNldCBvZiB0aGUgZWxlbWVudCBzY3JvbGxiYXIgd2lsbCBiZSBhZGp1c3RlZFxuZXhwb3J0IGNvbnN0IHNjcm9sbFRvRWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgIGNvbnN0IGZvcm1Qb3NpdGlvbiA9ICRlbGVtZW50Lm9mZnNldCgpLnRvcDtcbiAgICB3aW5kb3cuc2Nyb2xsKHtcbiAgICAgICAgdG9wOiBmb3JtUG9zaXRpb24sXG4gICAgICAgIGxlZnQ6IDAsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgIH0pO1xufVxuXG4vLyBGdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGluIHZpZXdwb3J0IG9yIG5vdFxuZXhwb3J0IGNvbnN0IGlzRWxlbWVudEluVmlld3BvcnQgPSAoZWxlbWVudCkgPT4ge1xuICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gKFxuICAgICAgICByZWN0LnRvcCA+PSAwICYmXG4gICAgICAgIHJlY3QubGVmdCA+PSAwICYmXG4gICAgICAgIHJlY3QuYm90dG9tIDw9ICh3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCkgJiZcbiAgICAgICAgcmVjdC5yaWdodCA8PSAod2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKVxuICAgICk7XG59XG5cbi8qRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIG9iamVjdCBpcyBhIHBhZ2VhYmxlIG9iamVjdCBvciBub3QuKi9cbmV4cG9ydCBjb25zdCBpc1BhZ2VhYmxlID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgcGFnZWFibGUgPSB7XG4gICAgICAgICdjb250ZW50JzogW10sXG4gICAgICAgICdmaXJzdCc6IHRydWUsXG4gICAgICAgICdsYXN0JzogdHJ1ZSxcbiAgICAgICAgJ251bWJlcic6IDAsXG4gICAgICAgICdudW1iZXJPZkVsZW1lbnRzJzogMTAsXG4gICAgICAgICdzaXplJzogMjAsXG4gICAgICAgICdzb3J0JzogbnVsbCxcbiAgICAgICAgJ3RvdGFsRWxlbWVudHMnOiAxMCxcbiAgICAgICAgJ3RvdGFsUGFnZXMnOiAxXG4gICAgfTtcbiAgICAvLyBwYWdpbmF0ZWQgb2JqZWN0IG1heSBvciBtYXkgbm90IGNvbnRhaW4gJ2VtcHR5JyBwcm9wZXJ0eS4gSW4gZWl0aGVyIGNhc2UsIFBhZ2VhYmxlIHNob3VsZCByZXR1cm4gYXMgdHJ1ZS5cbiAgICBjb25zdCBwYWdpbmF0ZWRPYmogPSBvbWl0KG9iaiwgJ2VtcHR5Jyk7XG4gICAgcmV0dXJuIChpc0VxdWFsKGtleXMocGFnZWFibGUpLCBrZXlzKHBhZ2luYXRlZE9iaikuc29ydCgpKSk7XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gcmVwbGFjZSBwYXR0ZXJucyBpbiBzdHJpbmcgd2l0aCBvYmplY3Qga2V5cyBvciBhcnJheSB2YWx1ZXNcbiAqIEV4YW1wbGVzOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7Zmlyc3R9ICR7bGFzdH0gIScsIHtmaXJzdDogJ3dhdmVtYWtlcicsIGxhc3Q6ICduZyd9KSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7MH0gJHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogRXhhbXBsZXMgaWYgcGFyc2VFcnJvciBpcyB0cnVlOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sIHswfSB7MX0gIScsIFsnd2F2ZW1ha2VyJywnbmcnXSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2UgPSAodGVtcGxhdGUsIG1hcCwgcGFyc2VFcnJvcj86IGJvb2xlYW4pID0+IHtcbiAgICBsZXQgcmVnRXggPSBSRUdFWC5SRVBMQUNFX1BBVFRFUk47XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXJzZUVycm9yKSB7XG4gICAgICAgIHJlZ0V4ID0gL1xceyhbXlxcfV0rKVxcfS9nO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ0V4LCBmdW5jdGlvbiAobWF0Y2gsIGtleSkge1xuICAgICAgICByZXR1cm4gZ2V0KG1hcCwga2V5KTtcbiAgICB9KTtcbn07XG5cbi8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgZGF0ZSB0aW1lIHR5cGUqL1xuZXhwb3J0IGNvbnN0IGlzRGF0ZVRpbWVUeXBlID0gdHlwZSA9PiB7XG4gICAgaWYgKGluY2x1ZGVzKHR5cGUsICcuJykpIHtcbiAgICAgICAgdHlwZSA9IHRvTG93ZXIoZXh0cmFjdFR5cGUodHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gaW5jbHVkZXMoW0RhdGFUeXBlLkRBVEUsIERhdGFUeXBlLlRJTUUsIERhdGFUeXBlLlRJTUVTVEFNUCwgRGF0YVR5cGUuREFURVRJTUUsIERhdGFUeXBlLkxPQ0FMREFURVRJTUVdLCB0eXBlKTtcbn07XG5cbmNvbnN0IG1vbWVudFBhdHRlcm4gPSAocGF0dGVybikgPT4ge1xuICAgIGlmIChpbmNsdWRlcyhwYXR0ZXJuLCAnRScpKSB7XG4gICAgICAgIHBhdHRlcm4gPSBfcmVwbGFjZShwYXR0ZXJuLCAvRVssXT8vZywgJycpO1xuICAgIH1cbiAgICByZXR1cm4gX3JlcGxhY2UocGF0dGVybiwgL3kqZCovZywgKHZhbCkgPT4gdmFsLnRvVXBwZXJDYXNlKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBkYXRlIG9iamVjdC4gSWYgdmFsIGlzIHVuZGVmaW5lZCBpdCByZXR1cm5zIGludmFsaWQgZGF0ZSAqL1xuZXhwb3J0IGNvbnN0IGdldFZhbGlkRGF0ZU9iamVjdCA9ICh2YWwsIG9wdGlvbnM/KSA9PiB7XG4gICBjb25zdCBkZWZhdWx0TWVyaWRpYW4gPSBbJ0FNJywgJ1BNJ107XG4gICBjb25zdCBtb21lbnRNZXJpZGlhbiA9IChtb21lbnQoKSBhcyBhbnkpLl9sb2NhbGUubWVyaWRpZW0oKTtcbiAgICAvLyBVcGRhdGluZyBsb2NhbGl6ZWQgbWVyaWRpYW5zIHdpdGggZGVmYXVsdCBtZXJpZGlhbnMgd2hlbiBtb21lbnQgbWVyaWRpYW4gaXMgbm90IGRlZmluZWRcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1lcmlkaWFucyAmJiBpbmNsdWRlcyhkZWZhdWx0TWVyaWRpYW4sIG1vbWVudE1lcmlkaWFuKSkge1xuICAgICAgICBmb3JFYWNoKG9wdGlvbnMubWVyaWRpYW5zLCAobWVyaWRpYW4sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaW5jbHVkZXModmFsLCBtZXJpZGlhbikpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZShtZXJpZGlhbiwgZGVmYXVsdE1lcmlkaWFuW2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpc05hdGl2ZVBpY2tlciA9IChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTmF0aXZlUGlja2VyJykpID8gZ2V0KG9wdGlvbnMsICdpc05hdGl2ZVBpY2tlcicpIDogaXNNb2JpbGUoKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gaXNOYXRpdmVQaWNrZXIgPyAoZ2V0KG9wdGlvbnMsICdwYXR0ZXJuJykgfHwgJ1lZWVkvTU0vREQgSEg6bW06c3MnKSA6IChtb21lbnRQYXR0ZXJuKGdldChvcHRpb25zLCAncGF0dGVybicpKSB8fCAnJyk7XG4gICAgLy8gSGFuZGxpbmcgbG9jYWxpemF0aW9uXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXR0ZXJuICYmIG9wdGlvbnMucGF0dGVybiAhPT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgaWYgKCFpc05hTihtb21lbnQodmFsLCBwYXR0ZXJuKS52YWx1ZU9mKCkpKSB7IC8vIEZpeCBmb3IgW1dNUy0yNzY1OF06IERhdGUoKSBkb2Vzbid0IHN1cHBvcnQgc29tZSBmb3JtYXRzIGxpa2UgJ2RkL01NL3l5eXknICBzbyB1c2luZyBtb21lbnQoKSB0byBmb3JtYXQgdGhlIHZhbHVlXG4gICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHZhbCBpcyBhIHZhbGlkIGRhdGUgb3Igbm90XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBpT1MsIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgZm9ybWF0IHRvIGNvbnNpZGVyIGV2ZW4gdGhlIHNlY29uZHMuXG4gICAgICAgICAgICAgICAgdmFsID0gbW9tZW50KHZhbCkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsLCBwYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwsIHBhdHRlcm4pO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IHZhbC50b0RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAobW9tZW50KHZhbCwgcGF0dGVybikuaXNWYWxpZCgpKSB7XG4gICAgICAgIC8vIGRhdGUgd2l0aCArNSBob3VycyBpcyByZXR1cm5lZCBpbiBzYWZhcmkgYnJvd3NlciB3aGljaCBpcyBub3QgYSB2YWxpZCBkYXRlLlxuICAgICAgICAvLyBIZW5jZSBjb252ZXJ0aW5nIHRoZSBkYXRlIHRvIHRoZSBzdXBwb3J0ZWQgZm9ybWF0IFwiWVlZWS9NTS9ERCBISDptbTpzc1wiIGluIElPU1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KG1vbWVudCh2YWwpLnZhbHVlT2YoKSkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyppZiB0aGUgdmFsdWUgaXMgaW4gSEg6bW06c3MgZm9ybWF0LCBpdCByZXR1cm5zIGEgd3JvbmcgZGF0ZS4gU28gYXBwZW5kIHRoZSBkYXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB0byBnZXQgZGF0ZSovXG4gICAgICAgIGlmICghKG5ldyBEYXRlKHZhbCkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KChtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICcgJyArIHZhbCksICdZWVlZLU1NLUREIEhIOm1tOnNzIEEnKTtcblxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShtb21lbnQodmFsKS52YWx1ZU9mKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBqYXZhc2NyaXB0IGRhdGUgb2JqZWN0Ki9cbmV4cG9ydCBjb25zdCBnZXROYXRpdmVEYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgICB2YWwgPSBnZXRWYWxpZERhdGVPYmplY3QodmFsLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsKTtcbn07XG5cblxuLyoqXG4gKiBwcmVwYXJlIGEgYmxvYiBvYmplY3QgYmFzZWQgb24gdGhlIGNvbnRlbnQgYW5kIGNvbnRlbnQgdHlwZSBwcm92aWRlZFxuICogaWYgY29udGVudCBpcyBibG9iIGl0c2VsZiwgc2ltcGx5IHJldHVybnMgaXQgYmFja1xuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIHZhbENvbnRlbnRUeXBlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJsb2IgPSAodmFsLCB2YWxDb250ZW50VHlwZT8pID0+IHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBjb25zdCBqc29uVmFsID0gZ2V0VmFsaWRKU09OKHZhbCk7XG4gICAgaWYgKGpzb25WYWwgJiYganNvblZhbCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoanNvblZhbCldLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbdmFsXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAndGV4dC9wbGFpbicgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGJ5IGNvbXBhcmluZyB0d28gb2JqZWN0cyBiYXNlZCBvbiB0aGUgZmllbGRzXG4gKiBAcGFyYW0gb2JqMSBvYmplY3RcbiAqIEBwYXJhbSBvYmoyIG9iamVjdFxuICogQHBhcmFtIGNvbXBhcmVCeSBzdHJpbmcgZmllbGQgdmFsdWVzIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIG9iamVjdCBlcXVhbGl0eSByZXR1cm5zIHRydWUgYmFzZWQgb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsV2l0aEZpZWxkcyA9IChvYmoxLCBvYmoyLCBjb21wYXJlQnkpID0+IHtcbiAgICAvLyBjb21wYXJlQnkgY2FuIGJlICdpZCcgb3IgJ2lkMSwgaWQyJyBvciAnaWQxLCBpZDI6aWQzJ1xuICAgIC8vIFNwbGl0IHRoZSBjb21wYXJlYnkgY29tbWEgc2VwYXJhdGVkIHZhbHVlc1xuICAgIGxldCBfY29tcGFyZUJ5ID0gaXNBcnJheShjb21wYXJlQnkpID8gY29tcGFyZUJ5IDogc3BsaXQoY29tcGFyZUJ5LCAnLCcpO1xuXG4gICAgLy9AdHMtaWdub3JlXG4gICAgX2NvbXBhcmVCeSA9IG1hcChfY29tcGFyZUJ5LCB0cmltKTtcblxuICAgIHJldHVybiBpc0VxdWFsV2l0aChvYmoxLCBvYmoyLCBmdW5jdGlvbiAobzEsIG8yKSB7XG4gICAgICAgIHJldHVybiBldmVyeShfY29tcGFyZUJ5LCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGxldCBjYjEsIGNiMiwgX2NiO1xuXG4gICAgICAgICAgICAvLyBJZiBjb21wYXJlYnkgY29udGFpbnMgOiAsIGNvbXBhcmUgdGhlIHZhbHVlcyBieSB0aGUga2V5cyBvbiBlaXRoZXIgc2lkZSBvZiA6XG4gICAgICAgICAgICBpZiAoaW5kZXhPZihjYiwgY29tcGFyZUJ5U2VwYXJhdG9yKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjYjEgPSBjYjIgPSB0cmltKGNiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX2NiID0gc3BsaXQoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgY2IxID0gdHJpbShfY2JbMF0pO1xuICAgICAgICAgICAgICAgIGNiMiA9IHRyaW0oX2NiWzFdKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGdldChvMSwgY2IxKSA9PT0gZ2V0KG8yLCBjYjIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmNvbnN0IGdldE5vZGUgPSBzZWxlY3RvciA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IGlzU3R5bGVTaGVldExvYWRlZCA9IGhyZWYgPT4gISFnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG5cbi8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBzdHlsZXNoZWV0IGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCByZW1vdmVTdHlsZVNoZWV0ID0gaHJlZiA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGdldE5vZGUoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgIH1cbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgYSBzdHlsZXNoZWV0XG5leHBvcnQgY29uc3QgbG9hZFN0eWxlU2hlZXQgPSAodXJsLCBhdHRyKSA9PiB7XG4gICAgaWYgKGlzU3R5bGVTaGVldExvYWRlZCh1cmwpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgLy8gVG8gYWRkIGF0dHJpYnV0ZXMgdG8gbGluayB0YWdcbiAgICBpZiAoYXR0ciAmJiBhdHRyLm5hbWUpIHtcbiAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XG4gICAgbGluay5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIHJldHVybiBsaW5rO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gbG9hZCBzdHlsZXNoZWV0c1xuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0cyA9ICh1cmxzID0gW10pID0+IHtcbiAgICAvLyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IGFuIGFycmF5LCBjb252ZXJ0IGl0IHRvIGFuIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHVybHMpKSB7XG4gICAgICAgIHVybHMgPSBbdXJsc107XG4gICAgfVxuICAgIHVybHMuZm9yRWFjaChsb2FkU3R5bGVTaGVldCk7XG59O1xuXG4vLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc2NyaXB0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1NjcmlwdExvYWRlZCA9IHNyYyA9PiAhIWdldE5vZGUoYHNjcmlwdFtzcmM9XCIke3NyY31cIl0sIHNjcmlwdFtkYXRhLXNyYz1cIiR7c3JjfVwiXWApO1xuXG5leHBvcnQgY29uc3QgZ2V0TW9tZW50TG9jYWxlT2JqZWN0ID0gKHRpbWVab25lLCBkYXRlT2JqPykgPT4ge1xuICAgIGlmIChkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZSgobW9tZW50KGRhdGVPYmopIGFzIGFueSkudHoodGltZVpvbmUpLmZvcm1hdCgpKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKChtb21lbnQoKSBhcyBhbnkpLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHQgPSBhc3luYyAodXJsLCBsb2FkVmlhU2NyaXB0VGFnLCBjYWNoZWFibGUgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IF91cmwgPSB1cmwudHJpbSgpO1xuICAgIGlmICghX3VybC5sZW5ndGggfHwgaXNTY3JpcHRMb2FkZWQoX3VybCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGlmIChsb2FkVmlhU2NyaXB0VGFnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpPT57XG4gICAgICAgICAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IF91cmw7XG4gICAgICAgICAgICBzY3JpcHQuYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkgeyAgLy9JRVxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJsb2FkZWRcIiB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHsgIC8vT3RoZXIgYnJvd3NlcnNcbiAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY3JpcHQub25lcnJvciA9IChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2UgaWYoY2FjaGVhYmxlKSB7XG4gICAgICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICAgICAgZGF0YVR5cGU6ICdzY3JpcHQnLFxuICAgICAgICAgICAgY2FjaGU6IHRydWUsXG4gICAgICAgICAgICB1cmw6IHVybFxuICAgICAgICB9KS5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICQuZ2V0U2NyaXB0KHVybClcbiAgICAgICAgICAgIC5kb25lKHJlc3BvbnNlID0+IHJlc3BvbnNlKVxuICAgICAgICAgICAgLmZhaWwocmVhc29uID0+IHJlYXNvbik7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGxvYWRTY3JpcHRzID0gYXN5bmMgKHVybHMgPSBbXSwgbG9hZFZpYVNjcmlwdFRhZyA9IHRydWUpID0+IHtcbiAgICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzKSB7XG4gICAgICAgIGF3YWl0IGxvYWRTY3JpcHQodXJsLCBsb2FkVmlhU2NyaXB0VGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufTtcblxuZXhwb3J0IGxldCBfV01fQVBQX1BST0pFQ1Q6IGFueSA9IHt9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqIEBwYXJhbSB2YWx1ZSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNldFNlc3Npb25TdG9yYWdlSXRlbSA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgbGV0IGl0ZW06IGFueSA9IHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0ge307XG4gICAgfVxuICAgIGl0ZW1ba2V5XSA9IHZhbHVlO1xuXG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkLCBKU09OLnN0cmluZ2lmeShpdGVtKSk7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBzZXNzaW9uIHN0b3JhZ2UgaXRlbSBiYXNlZCBvbiB0aGUgcHJvamVjdCBJRFxuICogQHBhcmFtIGtleSBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25TdG9yYWdlSXRlbSA9IGtleSA9PiB7XG4gICAgLy8gc2FuaXR5IGNoZWNrIGZvciB0aGlzIHRvIHdvcmsgd2l0aCBuZy1jb2RlZ2VuXG4gICAgbGV0IGl0ZW0gPSB3aW5kb3cgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCk7XG5cbiAgICBpZiAoaXRlbSkge1xuICAgICAgICBpdGVtID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3Qgbm9vcCA9ICguLi5hcmdzKSA9PiB7IH07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYmxvYiBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBwYXRoXG4gKiBAcGFyYW0gZmlsZXBhdGhcbiAqIEByZXR1cm5zIHByb21pc2UgaGF2aW5nIGJsb2Igb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0VG9CbG9iID0gKGZpbGVwYXRoKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIC8vIFJlYWQgdGhlIGZpbGUgZW50cnkgZnJvbSB0aGUgZmlsZSBVUkxcbiAgICAgICAgcmVzb2x2ZUxvY2FsRmlsZVN5c3RlbVVSTChmaWxlcGF0aCwgZnVuY3Rpb24gKGZpbGVFbnRyeSkge1xuICAgICAgICAgICAgZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBmaWxlIGhhcyB0aGUgY29yZG92YSBmaWxlIHN0cnVjdHVyZS4gVG8gc3VibWl0IHRvIHRoZSBiYWNrZW5kLCBjb252ZXJ0IHRoaXMgZmlsZSB0byBqYXZhc2NyaXB0IGZpbGVcbiAgICAgICAgICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZ0Jsb2IgPSBuZXcgQmxvYihbcmVhZGVyLnJlc3VsdF0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogZmlsZS50eXBlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHsgJ2Jsb2InOiBpbWdCbG9iLCAnZmlsZXBhdGgnOiBmaWxlcGF0aCB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xufTtcblxuXG5leHBvcnQgY29uc3QgQXBwQ29uc3RhbnRzID0ge1xuICAgIElOVF9NQVhfVkFMVUU6IDIxNDc0ODM2NDdcbn07XG5cbmV4cG9ydCBjb25zdCBvcGVuTGluayA9IChsaW5rOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nID0gJ19zZWxmJykgPT4ge1xuICAgICAgICB3aW5kb3cub3BlbihsaW5rLCB0YXJnZXQpO1xufTtcblxuLyogdXRpbCBmdW5jdGlvbiB0byBsb2FkIHRoZSBjb250ZW50IGZyb20gYSB1cmwgKi9cbmV4cG9ydCBjb25zdCBmZXRjaENvbnRlbnQgPSAoZGF0YVR5cGUsIHVybDogc3RyaW5nLCBpblN5bmM6IGJvb2xlYW4gPSBmYWxzZSwgc3VjY2Vzcz8sIGVycm9yPyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuICQuYWpheCh7IHR5cGU6ICdnZXQnLCBkYXRhVHlwZTogZGF0YVR5cGUsIHVybDogdXJsLCBhc3luYzogIWluU3luYyB9KVxuICAgICAgICAuZG9uZShyZXNwb25zZSA9PiBzdWNjZXNzICYmIHN1Y2Nlc3MocmVzcG9uc2UpKVxuICAgICAgICAuZmFpbChyZWFzb24gPT4gZXJyb3IgJiYgZXJyb3IocmVhc29uKSk7XG59O1xuXG4vKipcbiAqIElmIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBwcm9taXNlLCB0aGVuIG9iamVjdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogQHBhcmFtIHtQcm9taXNlPFQ+IHwgVH0gYVxuICogQHJldHVybnMge1Byb21pc2U8VD59XG4gKi9cbmV4cG9ydCBjb25zdCB0b1Byb21pc2UgPSA8VD4oYTogVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhIGFzIFQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpbnZva2VzIHRoZSBnaXZlbiB0aGUgZnVuY3Rpb24gKGZuKSB1bnRpbCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzIG9yIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2YgcmV0cmllcyBpcyByZWFjaGVkIG9yIG9uQmVmb3JlUmV0cnkgcmV0dXJucyBmYWxzZS5cbiAqXG4gKiBAcGFyYW0gZm4gLSBhIGZ1bmN0aW9uIHRoYXQgaXMgbmVlZHMgdG8gYmUgaW52b2tlZC4gVGhlIGZ1bmN0aW9uIGNhbiBhbHNvIHJldHVybiBhIHByb21pc2UgYXMgd2VsbC5cbiAqIEBwYXJhbSBpbnRlcnZhbCAtIG1pbmltdW0gdGltZSBnYXAgYmV0d2VlbiBzdWNjZXNzaXZlIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMC5cbiAqIEBwYXJhbSBtYXhSZXRyaWVzIC0gbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIEZvciBhbGwgb3RoZXIgdmFsdWVzLFxuICogbWF4UmV0cmllcyBpcyBpbmZpbml0eS5cbiAqIEBwYXJhbSBvbkJlZm9yZVJldHJ5IC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgcmUtaW52b2tpbmcgYWdhaW4uIFRoaXMgZnVuY3Rpb24gY2FuXG4gKiByZXR1cm4gZmFsc2Ugb3IgYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgdG8gZmFsc2UgdG8gc3RvcCBmdXJ0aGVyIHJldHJ5IGF0dGVtcHRzLlxuICogQHJldHVybnMgeyp9IGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZm4gaXMgc3VjY2VzcyAob3IpIG1heGltdW0gcmV0cnkgYXR0ZW1wdHMgcmVhY2hlZFxuICogKG9yKSBvbkJlZm9yZVJldHJ5IHJldHVybmVkIGZhbHNlLlxuICovXG5leHBvcnQgY29uc3QgcmV0cnlJZkZhaWxzID0gKGZuOiAoKSA9PiBhbnksIGludGVydmFsOiBudW1iZXIsIG1heFJldHJpZXM6IG51bWJlciwgb25CZWZvcmVSZXRyeSA9ICgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpID0+IHtcbiAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgY29uc3QgdHJ5Rm4gPSAoKSA9PiB7XG4gICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgbWF4UmV0cmllcyA9IChpc051bWJlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID4gMCA/IG1heFJldHJpZXMgOiAwKTtcbiAgICBpbnRlcnZhbCA9IChpc051bWJlcihpbnRlcnZhbCkgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiAwKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZXJyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvUHJvbWlzZTxib29sZWFuPihvbkJlZm9yZVJldHJ5KCkpLnRoZW4oZnVuY3Rpb24gKHJldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeSAhPT0gZmFsc2UgJiYgKCFtYXhSZXRyaWVzIHx8IHJldHJ5Q291bnQgPD0gbWF4UmV0cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVyckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gcmVqZWN0KGVyckFyZ3MpKTtcbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFByb21pc2Ugb2YgYSBkZWZlciBjcmVhdGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGhhcyBhYm9ydCBmdW5jdGlvbiB0aGF0IHdpbGwgcmVqZWN0IHRoZSBkZWZlciB3aGVuIGNhbGxlZC5cbiAqIEByZXR1cm5zIHsqfSBhbmd1bGFyIGRlZmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QWJvcnRhYmxlRGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgX2RlZmVyOiBhbnkgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlamVjdDogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbnVsbCxcbiAgICAgICAgb25BYm9ydDogKCkgPT4geyB9LFxuICAgICAgICBpc0Fib3J0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBfZGVmZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgX2RlZmVyLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBfZGVmZXIucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIF9kZWZlci5wcm9taXNlLmFib3J0ID0gKCkgPT4ge1xuICAgICAgICB0cmlnZ2VyRm4oX2RlZmVyLm9uQWJvcnQpO1xuICAgICAgICBfZGVmZXIucmVqZWN0KCdhYm9ydGVkJyk7XG4gICAgICAgIF9kZWZlci5pc0Fib3J0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIF9kZWZlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDU1NSdWxlID0gKHJ1bGVTZWxlY3Rvcjogc3RyaW5nLCBydWxlczogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc3R5bGVzaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdO1xuICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZShgJHtydWxlU2VsZWN0b3J9IHsgJHtydWxlc30gfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9IChsaW5rKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgLy8gSWYgdXJsIHBhcmFtcyBhcmUgcHJlc2VudCwgY29uc3RydWN0IHBhcmFtcyBvYmplY3QgYW5kIHBhc3MgaXQgdG8gc2VhcmNoXG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gc3BsaXQobGluay5zdWJzdHJpbmcoaW5kZXggKyAxLCBsaW5rLmxlbmd0aCksICcmJyk7XG4gICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goKHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBsZXQgcGFyYW1BcnJheSA9IHNwbGl0KHBhcmFtLCAnPScpO1xuICAgICAgICAgICAgcGFyYW1zW3BhcmFtQXJyYXlbMF1dID0gcGFyYW1BcnJheVsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um91dGVOYW1lRnJvbUxpbmsgPSAobGluaykgPT4ge1xuICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoJyMvJywgJy8nKTtcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGluayA9IGxpbmsuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcHBsZVByb2R1Y3QgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbmV4cG9ydCBjb25zdCBkZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBkID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZXNvbHZlOiBub29wLFxuICAgICAgICByZWplY3Q6IG5vb3BcbiAgICB9O1xuICAgIGQucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZC5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZC5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgcmV0dXJuIGQ7XG59O1xuXG4vKlxuICogSW52b2tlcyB0aGUgZ2l2ZW4gbGlzdCBvZiBmdW5jdGlvbnMgc2VxdWVudGlhbGx5IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgcHJvbWlzZSxcbiAqIHRoZW4gbmV4dCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25seSBpZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVQcm9taXNlQ2hhaW4gPSAoZm5zLCBhcmdzLCBkPywgaT8pID0+IHtcbiAgICBkID0gZCB8fCBkZWZlcigpO1xuICAgIGkgPSBpIHx8IDA7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZm5zID0gZmlsdGVyKGZucywgZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICByZXR1cm4gIShpc1VuZGVmaW5lZChmbikgfHwgaXNOdWxsKGZuKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm5zICYmIGkgPCBmbnMubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0b1Byb21pc2UoZm5zW2ldLmFwcGx5KHVuZGVmaW5lZCwgYXJncykpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gZXhlY3V0ZVByb21pc2VDaGFpbihmbnMsIGFyZ3MsIGQsIGkgKyAxKSwgZC5yZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGQucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZC5wcm9taXNlO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGRhdGEgc291cmNlcyBhbmQgd2lsbCBjaGVjayBpZiBib3RoIGFyZSBzYW1lIGJ5IGNvbXBhcmluZyB0aGUgdW5pcXVlIGlkIGFuZFxuICogY29udGV4dCBpbiB3aGljaCBkYXRhc291cmNlcyBhcmUgcHJlc2VudFxuICogQHJldHVybnMgeyp9IGJvb2xlYW4gdHJ1ZS8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0YVNvdXJjZUVxdWFsID0gKGQxLCBkMikgPT4ge1xuICAgIHJldHVybiBkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgPT09IGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSAmJlxuICAgICAgICBpc0VxdWFsKGQxLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUiksIGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikpO1xufTtcblxuLyoqXG4gKiBjaGVja3MgaWYgdGhlIHBhc3NlZCBkYXRhc291cmNlIGNvbnRleHQgbWF0Y2hlcyB3aXRoIHBhc3NlZCBjb250ZXh0XG4gKiBAcGFyYW0gZHMsIGRhdGFzb3VyY2UgaGF2aW5nIGEgY29udGV4dFxuICogQHBhcmFtIGN0eCwgY29udGV4dCB0byBjb21wYXJlIHdpdGhcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEYXRhU291cmNlQ3R4ID0gKGRzLCBjdHgpID0+IHtcbiAgICByZXR1cm4gZHMuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSA9PT0gY3R4O1xufTtcblxuLyoqXG4gKiBUaGlzIHRyYXZlcnNlcyB0aGUgZmlsdGVyZXhwcmVzc2lvbnMgb2JqZWN0IHJlY3Vyc2l2ZWx5IGFuZCBwcm9jZXNzIHRoZSBiaW5kIHN0cmluZyBpZiBhbnkgaW4gdGhlIG9iamVjdFxuICogQHBhcmFtIHZhcmlhYmxlIHZhcmlhYmxlIG9iamVjdFxuICogQHBhcmFtIG5hbWUgbmFtZSBvZiB0aGUgdmFyaWFibGVcbiAqIEBwYXJhbSBjb250ZXh0IHNjb3BlIG9mIHRoZSB2YXJpYWJsZVxuICovXG5leHBvcnQgY29uc3QgcHJvY2Vzc0ZpbHRlckV4cEJpbmROb2RlID0gKGNvbnRleHQsIGZpbHRlckV4cHJlc3Npb25zLCB2YXJpYWJsZT8pID0+IHtcbiAgICBjb25zdCBkZXN0cm95Rm4gPSBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyID8gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lci5iaW5kKGNvbnRleHQpIDogX25vb3A7XG4gICAgY29uc3QgZmlsdGVyJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBiaW5kRmlsRXhwT2JqID0gKG9iaiwgdGFyZ2V0Tm9kZUtleSkgPT4ge1xuICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XG4gICAgICAgICAgIGlmICgobmV3VmFsID09PSBvbGRWYWwgJiYgaXNVbmRlZmluZWQobmV3VmFsKSkgfHwgKGlzVW5kZWZpbmVkKG5ld1ZhbCkgJiYgIWlzVW5kZWZpbmVkKG9sZFZhbCkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2tpcCBjbG9uaW5nIGZvciBibG9iIGNvbHVtblxuICAgICAgICAgICBpZiAoIWluY2x1ZGVzKFsnYmxvYicsICdmaWxlJ10sIG9iai50eXBlKSkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbCA9IGdldENsb25lZE9iamVjdChuZXdWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eTogd2hlcmUgd2UgYXJlIGFsbG93aW5nIHRoZSB1c2VyIHRvIGJpbmQgY29tcGxldGUgb2JqZWN0XG4gICAgICAgICAgICBpZiAob2JqLnRhcmdldCA9PT0gJ2RhdGFCaW5kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZXhpc3RpbmcgZGF0YWJpbmRpbmcgZWxlbWVudFxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25zLnJ1bGVzID0gW107XG4gICAgICAgICAgICAgICAgLy8gbm93IGFkZCBhbGwgdGhlIHJldHVybmVkIHZhbHVlc1xuICAgICAgICAgICAgICAgIGZvckVhY2gobmV3VmFsLCBmdW5jdGlvbiAodmFsdWUsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiBvYmoubWF0Y2hNb2RlIHx8ICdzdGFydGlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHZhbHVlIHRvIHRoZSByb290IG5vZGVcbiAgICAgICAgICAgICAgICBvYmpbdGFyZ2V0Tm9kZUtleV0gPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXIkLm5leHQoeyBmaWx0ZXJFeHByZXNzaW9ucywgbmV3VmFsIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgob2JqW3RhcmdldE5vZGVLZXldLCAnYmluZDonKSkge1xuICAgICAgICAgICAgLy8gW1RvZG8tQ1NQXTogbmVlZHMgYSBjaGVjaywgd2hlcmUgaXMgdGhpcyB1c2VkXG4gICAgICAgICAgICBkZXN0cm95Rm4oXG4gICAgICAgICAgICAgICAgJHdhdGNoKG9ialt0YXJnZXROb2RlS2V5XS5yZXBsYWNlKCdiaW5kOicsICcnKSwgY29udGV4dCwge30sIHZhcmlhYmxlID8gdmFyaWFibGUuaW52b2tlT25GaWx0ZXJ0RXhwcmVzc2lvbkNoYW5nZS5iaW5kKHZhcmlhYmxlLCBvYmosIHRhcmdldE5vZGVLZXkpIDogbGlzdGVuZXIsIHVuZGVmaW5lZCwgZmFsc2UsIHthcnJheVR5cGU6IGluY2x1ZGVzKFsnaW4nLCAnbm90aW4nXSwgb2JqLm1hdGNoTW9kZSl9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zID0gZXhwcmVzc2lvbnMgPT4ge1xuICAgICAgICBpZiAoZXhwcmVzc2lvbnMucnVsZXMpIHtcbiAgICAgICAgICAgIGZvckVhY2goZXhwcmVzc2lvbnMucnVsZXMsIChmaWxFeHBPYmosIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsRXhwT2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3NlY29uZHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbHRlckV4cHJlc3Npb25zKTtcblxuICAgIHJldHVybiBmaWx0ZXIkO1xufTtcblxuLy8gVGhpcyBtZXRob2Qgd2lsbCBzZXQgdGhlIGdpdmVuIHByb3RvIG9uIHRoZSB0YXJnZXRcbmV4cG9ydCBjb25zdCBleHRlbmRQcm90byA9ICh0YXJnZXQsIHByb3RvKSA9PiB7XG4gICAgbGV0IF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pO1xuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIHByb3RvdHlwZSBvZiBjcmVhdGVkIGNvbXBvbmVudCBhbmQgcHJvdG90eXBlIG9mIGNvbnRleHQgYXJlIHNhbWVcbiAgICAgICAgaWYgKHByb3RvID09PSBfcHJvdG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3Byb3RvLCBwcm90byk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXh0cmFTbGFzaGVzID0gZnVuY3Rpb24gKHVybCkge1xuICAgIGNvbnN0IGJhc2U2NHJlZ2V4ID0gL15kYXRhOmltYWdlXFwvKFthLXpdezIsfSk7YmFzZTY0LC87XG4gICAgaWYgKGlzU3RyaW5nKHVybCkpIHtcbiAgICAgICAgLypcbiAgICAgICAgKiBzdXBwb3J0IGZvciBtb2JpbGUgYXBwcyBoYXZpbmcgbG9jYWwgZmlsZSBwYXRoIHVybCBzdGFydGluZyB3aXRoIGZpbGU6Ly8vIGFuZFxuICAgICAgICAqIHN1cHBvcnQgZm9yIGJhc2U2NCBmb3JtYXRcbiAgICAgICAgKiAqL1xuICAgICAgICBpZiAoc3RhcnRzV2l0aCh1cmwsICdmaWxlOi8vLycpIHx8IGJhc2U2NHJlZ2V4LnRlc3QodXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFteOl1cXC8pKFxcLykrJywgJ2cnKSwgJyQxJyk7XG4gICAgfVxufTtcblxuJC5jYWNoZWRTY3JpcHQgPSAoKCkgPT4ge1xuICAgIGNvbnN0IGluUHJvZ3Jlc3MgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0KCk7XG5cbiAgICBjb25zdCBpc0luUHJvZ3Jlc3MgPSB1cmwgPT4gaW5Qcm9ncmVzcy5oYXModXJsKTtcbiAgICBjb25zdCBpc1Jlc29sdmVkID0gdXJsID0+IHJlc29sdmVkLmhhcyh1cmwpO1xuICAgIGNvbnN0IG9uTG9hZCA9IHVybCA9PiB7XG4gICAgICAgIHJlc29sdmVkLmFkZCh1cmwpO1xuICAgICAgICBpblByb2dyZXNzLmdldCh1cmwpLnJlc29sdmUoKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5kZWxldGUodXJsKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V0SW5Qcm9ncmVzcyA9IHVybCA9PiB7XG4gICAgICAgIGxldCByZXNGbjtcbiAgICAgICAgbGV0IHJlakZuO1xuICAgICAgICBjb25zdCBwcm9taXNlOiBhbnkgPSBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICAgICAgICAgIHJlc0ZuID0gcmVzO1xuICAgICAgICAgICAgcmVqRm4gPSByZWo7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc0ZuO1xuICAgICAgICBwcm9taXNlLnJlamVjdCA9IHJlakZuO1xuXG4gICAgICAgIGluUHJvZ3Jlc3Muc2V0KHVybCwgcHJvbWlzZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgIGlmIChpc1Jlc29sdmVkKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0luUHJvZ3Jlc3ModXJsKSkge1xuICAgICAgICAgICAgcmV0dXJuIGluUHJvZ3Jlc3MuZ2V0KHVybCk7XG4gICAgICAgIH1cblxuICAgICAgICBzZXRJblByb2dyZXNzKHVybCk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsXG4gICAgICAgIH07XG5cbiAgICAgICAgJC5hamF4KG9wdGlvbnMpLmRvbmUoKCkgPT4gb25Mb2FkKHVybCkpO1xuXG4gICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgIH07XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0RJU1BMQVlfRk9STUFUUyA9IHtcbiAgICBEQVRFOiAneXl5eS1NTS1kZCcsXG4gICAgVElNRTogJ2hoOm1tIGEnLFxuICAgIFRJTUVTVEFNUDogJ3l5eXktTU0tZGQgaGg6bW06c3MgYScsXG4gICAgREFURVRJTUU6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxufTtcbi8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGRpc3BsYXkgZGF0ZSBmb3JtYXQgZm9yIGdpdmVuIHR5cGVcbmV4cG9ydCBjb25zdCBnZXREaXNwbGF5RGF0ZVRpbWVGb3JtYXQgPSB0eXBlID0+IHtcbiAgICByZXR1cm4gREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFNbdG9VcHBlcih0eXBlKV07XG59O1xuXG4vLyBHZW5lcmF0ZSBmb3IgYXR0cmlidXRlIG9uIGxhYmVsIGFuZCBJRCBvbiBpbnB1dCBlbGVtZW50LCBzbyB0aGF0IGxhYmVsIGVsZW1lbnRzIGFyZSBhc3NvY2lhdGVkIHRvIGZvcm0gY29udHJvbHNcbmV4cG9ydCBjb25zdCBhZGRGb3JJZEF0dHJpYnV0ZXMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBsYWJlbEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbC5jb250cm9sLWxhYmVsJyk7XG4gICAgbGV0IGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgaWYgKCFpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpO1xuICAgIH1cbiAgICAvKmlmIHRoZXJlIGFyZSBvbmx5IG9uZSBpbnB1dCBlbCBhbmQgbGFiZWwgRWwgYWRkIGlkIGFuZCBmb3IgYXR0cmlidXRlKi9cbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAkKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1t3aWRnZXQtaWRdJykuYXR0cignd2lkZ2V0LWlkJyk7XG4gICAgICAgIGlmICh3aWRnZXRJZCkge1xuICAgICAgICAgICAgc2V0QXR0cihpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdmb3InLCB3aWRnZXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLypBZGRpbmcgYXJpYS1sYWJlbGxlZGJ5IHRvIHJhZGlvc2V0LCBjaGVja2JveHNldCB3aWRnZXRzKi9cbiAgICBjb25zdCB1bEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd1bCcpO1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiB1bEVsLmxlbmd0aCAmJiAodWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdncm91cCcpKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJ3dtLWdyb3VwLWxhYmVsLScgKyBnZW5lcmF0ZUdVSWQoKTtcbiAgICAgICAgc2V0QXR0cih1bEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5Jywgd2lkZ2V0SWQpO1xuICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gbGVmdCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gbmVnYXRpdmUgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBUbyBGaXggdGhlIGNvbnRhaW5lciBvdmVybGFwcGluZyBpc3N1ZSBjaGFuZ2luZyB0aGUgY29udHJhaW5lciBsZWZ0IHRyYW5zbGF0aW9uIHRvIDBcbiAqIEBwYXJhbSBjb250YWluZXJFbGVtIC0gcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIC0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmIC0gc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSAtIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPCAwKSB7XG4gICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IDA7XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgIH1cbiAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICB9KTtcbiAgIH07XG5cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIHJpZ2h0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBvdXQgb2YgdGhlIHZpZXdwb3J0IHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG4gICBleHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IGVsZSA/IHBhcnNlSW50KGVsZS5jc3MoJ3dpZHRoJykpIDogcGFyc2VJbnQoY29udGFpbmVyRWxlbS5jc3MoJ3dpZHRoJykpO1xuICAgICAgICBjb25zdCB2aWV3UG9ydFdpZHRoID0gJCh3aW5kb3cpLndpZHRoKCkgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgY29uc3QgcGFyZW50RGltZXNpb24gPSBwYXJlbnRFbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBwYXJlbnRSaWdodCA9IHBhcmVudERpbWVzaW9uLnJpZ2h0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGxldCBuZXdMZWZ0O1xuICAgICAgICBjb25zdCB6b25lUmVmID0gcmVmLl9uZ1pvbmUgfHwgcmVmLm5nWm9uZTtcbiAgICAgICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcblxuICAgICAgICAgICAgaWYgKHZpZXdQb3J0V2lkdGggLSAocGFyZW50UmlnaHQgKyBwYXJlbnREaW1lc2lvbi53aWR0aCkgPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIG5ld0xlZnQgPSBwYXJlbnRSaWdodCAtIGNvbnRhaW5lcldpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZWZ0IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IG5ld0xlZnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICAgICB9KTtcbiAgIH07XG5cbiAgLyoqXG4gICAqIEZvciBnaXZlbiBlbGVtZW50IHNldCB0aGUgdHJhc2xhdGlvblxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSB0YW5zbGF0ZWQgZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zIHRyYW5zbGF0ZSBtYXRyaXggcG9zaXRpb25zXG4gICAqL1xuICAgZXhwb3J0IGNvbnN0IHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbiA9IChjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlUG9zaXRpb24gPSAndHJhbnNsYXRlM2QoJyArIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgKyAncHgsICcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQyICsgJ3B4LCAwcHgpJztcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLk9UcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgIH07XG5cbiAgIC8qKlxuICAgICpcbiAgICAqIEBwYXJhbSBjb250YWluZXJFbGVtIGVsZW1ldCBmb3IgdGhlIFdlYktpdENTU01hdHJpeFxuICAgICovXG4gICAgZXhwb3J0IGNvbnN0IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXggPSAoY29udGFpbmVyRWxlbSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIFdlYktpdENTU01hdHJpeCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTVNDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJFbGVtWzBdKS53ZWJraXRUcmFuc2Zvcm0pO1xuICAgIH1cblxuLy8gY2xvc2UgYWxsIHRoZSBwb3BvdmVycy5cbmV4cG9ydCBjb25zdCBjbG9zZVBvcG92ZXIgPSAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudC5jbG9zZXN0KCcuYXBwLXBvcG92ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFwcC1wb3BvdmVyLXdyYXBwZXInKTtcbiAgICAgICAgZm9yRWFjaChwb3BvdmVyRWxlbWVudHMsIChlbGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGUud2lkZ2V0LmlzT3Blbikge1xuICAgICAgICAgICAgICAgIGVsZS53aWRnZXQuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGluIHRoZSBhcHBcbiAqIFRoaXMgaXMgZXhwb3NlZCBmb3IgdGhlIGVuZCB1c2VyIGRldmVsb3BlciBvZiBXTSBhcHBcbiAqIFRoaXMgaXMgdGhlIGFsdGVybmF0aXZlIGZvciAkcnMuJHNhZmVBcHBseSgpIGluIEFuZ3VsYXJKU1xuICogU2VlICRhcHBEaWdlc3QgaW4gdXRpbHMgZm9yIG1vcmUgaW5mb1xuICovXG5leHBvcnQgY29uc3QgZGV0ZWN0Q2hhbmdlcyA9ICRhcHBEaWdlc3Q7XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gdHJpZ2dlciB0aGUgYWN0aW9uL2xpbmsgb2YgbWVudS9uYXYgaXRlbVxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogQHBhcmFtIGl0ZW0gLSBpdGVtIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgdHJpZ2dlckl0ZW1BY3Rpb24gPSAoc2NvcGUsIGl0ZW0pID0+IHtcbiAgICBsZXQgaXRlbUxpbmsgPSBpdGVtLmxpbms7XG4gICAgY29uc3QgaXRlbUFjdGlvbiA9IGl0ZW0uYWN0aW9uO1xuICAgIGNvbnN0IGxpbmtUYXJnZXQgPSBpdGVtLnRhcmdldDtcbiAgICBpZiAoaXRlbUFjdGlvbikge1xuICAgICAgICBpZiAoIXNjb3BlLml0ZW1BY3Rpb25Gbikge1xuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBUaGlzIHdpbGwgbm90IHdvcmsgYXMgZnVuY3Rpb24gd2lsbCBiZSBkeW5hbWljXG4gICAgICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4gPSAkcGFyc2VFdmVudChpdGVtQWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjb3BlLml0ZW1BY3Rpb25GbihzY29wZS51c2VyRGVmaW5lZEV4ZWN1dGlvbkNvbnRleHQsIE9iamVjdC5jcmVhdGUoaXRlbSkpO1xuICAgIH1cbiAgICBpZiAoaXRlbUxpbmspIHtcbiAgICAgICAgaWYgKGl0ZW1MaW5rLnN0YXJ0c1dpdGgoJyMvJykgJiYgKCFsaW5rVGFyZ2V0IHx8IGxpbmtUYXJnZXQgPT09ICdfc2VsZicpKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGdldFVybFBhcmFtcyhpdGVtTGluayk7XG4gICAgICAgICAgICBpdGVtTGluayA9IGdldFJvdXRlTmFtZUZyb21MaW5rKGl0ZW1MaW5rKTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlciA9IGdldChzY29wZSwgJ3JvdXRlJykgfHwgZ2V0KHNjb3BlLCAnbWVudVJlZi5yb3V0ZScpO1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKFtpdGVtTGlua10sIHsgcXVlcnlQYXJhbXMgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcGVuTGluayhpdGVtTGluaywgbGlua1RhcmdldCk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRzb3VyY2UgZnJvbSB0aGUgZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBleHByZXNzaW9uIG9mIHRoZSBkYXRhc2V0XG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzWyRpXS5hZGRyZXNzZXNcIiB0aGVuIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gZGF0YXNvdXJjZSBhcyBWYXJpYWJsZXMuc3RhdGljVmFyMVxuICogRXhhbXBsZTI6IGV4cHIgLSBcIldpZGdldHMubGlzdDEuY3VycmVudEl0ZW0uYWRkcmVzc2VzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldC5kZXRhaWxzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGFzb3VyY2VGcm9tRXhwciA9IChleHByLCBzY29wZSkgPT4ge1xuICAgIGNvbnN0IGlzQm91bmRUb1ZhcmlhYmxlID0gc3RhcnRzV2l0aChleHByLCAnVmFyaWFibGVzLicpO1xuICAgIGNvbnN0IGlzQm91bmRUb1dpZGdldCA9IHN0YXJ0c1dpdGgoZXhwciwgJ1dpZGdldHMuJyk7XG4gICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgaWYgKGlzQm91bmRUb1ZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiBnZXQoc2NvcGUudmlld1BhcmVudC5WYXJpYWJsZXMsIHBhcnRzWzFdKTtcbiAgICB9XG4gICAgaWYgKGlzQm91bmRUb1dpZGdldCkge1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IGdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgbGV0IHdpZGdldEJvdW5kRXhwcmVzc2lvbjtcbiAgICAgICAgd2lkZ2V0Qm91bmRFeHByZXNzaW9uID0gKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpID8gd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA6IHdpZGdldFNjb3BlLmJpbmRkYXRhc2V0O1xuICAgICAgICByZXR1cm4gZ2V0RGF0YXNvdXJjZUZyb21FeHByKHdpZGdldEJvdW5kRXhwcmVzc2lvbiwgd2lkZ2V0U2NvcGUpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdGFzZXQgYm91bmQgZXhwcmVzc2lvbiBmcm9tIGxpc3QgY3VycmVudGl0ZW0gZXhwcmVzc2lvblxuICogQHBhcmFtIGV4cHIgLSBib3VuZCBkYXRhc2V0IGV4cHJlc3Npb25cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmRldGFpbHNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0XCIgdGhlbiBpdCByZXR1cm5zIGV4cHJlc3Npb24gYXMgXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0WyRpXS5kZXRhaWxzXCJcbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RDdXJyZW50SXRlbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBjdXJyZW50SXRlbVJlZ0V4ID0gL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nO1xuICAgIGlmIChjdXJyZW50SXRlbVJlZ0V4LnRlc3QoZXhwcikpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gZ2V0KHNjb3BlLnZpZXdQYXJlbnQuV2lkZ2V0cywgcGFydHNbMV0pO1xuICAgICAgICBjb25zdCB3aWRnZXREYXRhc2V0Qm91bmRFeHByID0gd2lkZ2V0U2NvcGUuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpO1xuICAgICAgICBpZiAoIXdpZGdldFNjb3BlLmRhdGFzb3VyY2UgJiYgd2lkZ2V0RGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldERhdGFzZXRCb3VuZEV4cHJ9WyRpXWApO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIoZXhwciwgc2NvcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldFNjb3BlLmJpbmRkYXRhc2V0fVskaV1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbn07XG5cbi8vIHRoaXMgd2lsbCBhZGQgdGhlIGh0bWwgdGFnIHRvIHRoZSB3aWRnZXQgdG8gc2NvcGUgdGhlIGNzcyB0byB0aGUgcGFnZS5cbmV4cG9ydCBjb25zdCBmaW5kUm9vdENvbnRhaW5lciA9ICgkZWwpID0+IHtcbiAgICBsZXQgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXByZWZhYicpO1xuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhcnRpYWwnKTtcbiAgICB9XG4gICAgaWYoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1zcGEtcGFnZScpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiByb290Lmxlbmd0aCAmJiByb290LnBhcmVudCgpWzBdLnRhZ05hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgVkFMSURBVE9SID0ge1xuICAgIFJFUVVJUkVEOiAncmVxdWlyZWQnLFxuICAgIE1BWENIQVJTOiAnbWF4Y2hhcnMnLFxuICAgIE1JTlZBTFVFOiAnbWludmFsdWUnLFxuICAgIE1BWFZBTFVFOiAnbWF4dmFsdWUnLFxuICAgIFJFR0VYUDogJ3JlZ2V4cCcsXG4gICAgTUlOREFURTogJ21pbmRhdGUnLFxuICAgIE1BWERBVEU6ICdtYXhkYXRlJyxcbiAgICBNSU5USU1FOiAnbWludGltZScsXG4gICAgTUFYVElNRTogJ21heHRpbWUnLFxuICAgIEVYQ0xVREVEQVRFUzogJ2V4Y2x1ZGVkYXRlcycsXG4gICAgRVhDTFVERURBWVM6ICdleGNsdWRlZGF5cydcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1GaWxlVVJJID0gKHVybCkgPT4ge1xuICAgIHJldHVybiB1cmw7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwZW5kU2NyaXB0VG9IZWFkID0gKGNhbGxiYWNrKSA9PntcblxuICAgIGNvbnN0IHNjcmlwdGVsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdGVsZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgIGNhbGxiYWNrKFdNX0NVU1RPTV9GT1JNQVRURVJTKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS5vbmVycm9yID0gZXJyID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciB3aGlsZSBsb2FkaW5nIHRoZSBmaWxlICcgKyBzY3JpcHRlbGUuc3JjICsgJ1xcbicgKyBlcnIpO1xuICAgIH07XG4gICAgc2NyaXB0ZWxlLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICBzY3JpcHRlbGUuc3JjID0gJy4vZXh0ZW5zaW9ucy9mb3JtYXR0ZXJzLmpzJztcbiAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdGVsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwU2V0dGluZyA9IChrZXksIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICAgIHJldHVybiAoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzICYmIGdldChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MsIGtleSkpIHx8IGRlZmF1bHRWYWx1ZTtcbn07XG5cbi8qIHRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgaXRlbWNsYXNzIGRlcGVuZGluZyBvbiBpdGVtc3BlcnJvdy5cbiAgICogaWYgaXRlbXNwZXJyb3cgaXMgMiBmb3IgbGFyZ2UgZGV2aWNlLCB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLXhzLTEgY29sLXNtLTEgY29sLWxnLTInXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzICdsZy0zJyB0aGVuIGl0ZW1jbGFzcyBpcyAnY29sLWxnLTMnXG4qL1xuZXhwb3J0IGNvbnN0IHNldExpc3RDbGFzcyA9IChzY29wZSkgPT4ge1xuICAgIGxldCB0ZW1wID0gJyc7XG4gICAgaWYgKHNjb3BlLml0ZW1zcGVycm93KSB7XG4gICAgICAgIGlmKHNjb3BlLml0ZW1zcGVycm93ID09PSBcImF1dG9cIikge1xuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IFwiXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOYU4ocGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSkpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGNvbnRhaW5pbmcgc3RyaW5nIG9mIGNsYXNzZXNcbiAgICAgICAgICAgIHNwbGl0KHNjb3BlLml0ZW1zcGVycm93LCAnICcpLmZvckVhY2goKGNsczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IHNwbGl0KGNscywgJy0nKTtcbiAgICAgICAgICAgICAgICBjbHMgPSBgJHtrZXlzWzBdfS0keygxMiAvIHBhcnNlSW50KGtleXNbMV0sIDEwKSl9YDtcbiAgICAgICAgICAgICAgICB0ZW1wICs9IGAgY29sLSR7Y2xzfWA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSB0ZW1wLnRyaW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGhhdmluZyBpbnRlZ2VyIHZhbHVlLlxuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IGBjb2wteHMtJHsoMTIgLyBwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKX1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXRlbXNwZXJyb3cgaXMgbm90IHNwZWNpZmllZCBtYWtlIGl0IGZ1bGwgd2lkdGhcbiAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9ICdjb2wteHMtMTInO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kUGFyZW50ID0gKGxWaWV3OiBhbnksIHZpZXdQYXJlbnRBcHA/OiBhbnkpID0+IHtcbiAgICBsZXQgcGFyZW50ID0gZmluZFZpZXdQYXJlbnQobFZpZXcpO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQgOiB2aWV3UGFyZW50QXBwO1xufVxuXG5leHBvcnQgY29uc3QgZmluZFZpZXdQYXJlbnQgPSAobFZpZXc6IGFueSkgPT4ge1xuICAgIHJldHVybiBsVmlld1sxNV0gPyBsVmlld1sxNV1bOF0gOiBsVmlld1sxNV07XG4gICAgLyppZihsVmlld1szXSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbFZpZXdbOF07XG4gICAgfVxuICAgIGxldCBwYXJlbnRsVmlldyA9IGxWaWV3WzNdO1xuICAgIGlmKHR5cGVvZiBsVmlld1sxXSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICB9XG4gICAgbGV0IGNvbXBvbmVudFR5cGUgPSBsVmlld1sxXVtcInR5cGVcIl07XG4gICAgaWYoY29tcG9uZW50VHlwZSA9PT0gMCB8fCBjb21wb25lbnRUeXBlID09PSAxKSB7XG4gICAgICAgIGxldCBwID0gbFZpZXdbOF07XG4gICAgICAgIC8vIHRzLWlnbm9yZVxuICAgICAgICBpZihwLmhhc093blByb3BlcnR5KFwiaXNEaWFsb2dDb21wb25lbnRcIikgfHwgcC5oYXNPd25Qcm9wZXJ0eShcImlzQ29udGFpbmVyRGlyZWN0aXZlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgIH0qL1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Rm9udENvbmZpZyA9ICgpID0+IHtcbiAgICByZXR1cm4gX1dNX0FQUF9QUk9QRVJUSUVTLmZvbnRDb25maWcgfHwgZ2V0UHJldmlld1Byb3BlcnRpZXMoKTtcbn1cblxuZXhwb3J0IGNvbnN0IGFkanVzdFZlcnRpY2FsUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgcGFyZW50RWxlbTogSFRNTEVsZW1lbnQsIHJlZiwgZWxlPyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuXG4gICAgem9uZVJlZi5vblN0YWJsZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gZWxlXG4gICAgICAgICAgICAgICAgPyBwYXJzZUludChlbGUuY3NzKCdoZWlnaHQnKSwgMTApXG4gICAgICAgICAgICAgICAgOiBwYXJzZUludChjb250YWluZXJFbGVtLmNzcygnaGVpZ2h0JyksIDEwKTtcblxuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHBhcmVudEVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gcmVjdC5ib3R0b207XG4gICAgICAgICAgICBjb25zdCBzcGFjZUFib3ZlID0gcmVjdC50b3A7XG5cbiAgICAgICAgICAgIGlmIChzcGFjZUJlbG93IDwgY29udGFpbmVySGVpZ2h0ICYmIHNwYWNlQWJvdmUgPj0gY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0cml4ID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcblxuICAgICAgICAgICAgICAgIG1hdHJpeC5tNDIgPSBtYXRyaXgubTQyIC0gY29udGFpbmVySGVpZ2h0IC0gcmVjdC5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0cml4Lm00MiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbWF0cml4Lm00MiA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uKGNvbnRhaW5lckVsZW0sIG1hdHJpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufTtcbi8qZXhwb3J0IGNvbnN0IGdldFBhcmVudCA9IChwYXJlbnQ6IGFueSkgPT4ge1xuICAgIGlmKHBhcmVudC5oYXNPd25Qcm9wZXJ0eShcImlzRHluYW1pY0NvbXBvbmVudFwiKSB8fCBwYXJlbnQuaGFzT3duUHJvcGVydHkoXCJpc1BhZ2VDb21wb25lbnRcIikpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFxuICAgIH0gZWxzZXtcbiAgICAgICAgcmV0dXJuIHBhcmVudC52aWV3UGFyZW50ID8gZ2V0UGFyZW50KHBhcmVudC52aWV3UGFyZW50KSA6IHBhcmVudDtcbiAgICB9XG5cbn0qL1xuIl19
|