From a52d50e788792a63e97a9176ab319d53db7a2853 Mon Sep 17 00:00:00 2001 From: vempo Date: Tue, 24 Jul 2018 17:34:04 +0300 Subject: Replaced old implementation at root Old project files and directories has been moved under 'deprecated-workflow-designer'. The old project is not built by the CI anymore, but can be still built manually. New modules/directories have been moved up and integrated with the CI system. Change-Id: I1528c792bcbcce9e50bfc294a1328a20e72c91cf Issue-ID: SDC-1559 Signed-off-by: vempo --- .../src/app/paletx/assets/css/bootstrap4.0.css | 9320 ++++++++++++++++++++ .../src/app/paletx/assets/css/font-awesome.min.css | 4 + .../src/app/paletx/assets/css/iconfont.css | 95 + .../src/app/paletx/assets/css/ngict-component.css | 1874 ++++ .../src/app/paletx/assets/css/prism.css | 141 + .../src/app/paletx/assets/css/style.css | 1154 +++ .../src/app/paletx/assets/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../src/app/paletx/assets/fonts/ZteIctIcons.eot | Bin 0 -> 57784 bytes .../src/app/paletx/assets/fonts/ZteIctIcons.svg | 239 + .../src/app/paletx/assets/fonts/ZteIctIcons.ttf | Bin 0 -> 57604 bytes .../src/app/paletx/assets/fonts/ZteIctIcons.woff | Bin 0 -> 57680 bytes .../src/app/paletx/assets/fonts/ZteTableIcons.eot | Bin 0 -> 1676 bytes .../src/app/paletx/assets/fonts/ZteTableIcons.svg | 12 + .../src/app/paletx/assets/fonts/ZteTableIcons.ttf | Bin 0 -> 1488 bytes .../src/app/paletx/assets/fonts/ZteTableIcons.woff | Bin 0 -> 1564 bytes .../paletx/assets/fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../paletx/assets/fonts/fontawesome-webfont.svg | 2671 ++++++ .../paletx/assets/fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../paletx/assets/fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../paletx/assets/fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../src/app/paletx/assets/fonts/iconfont.eot | Bin 0 -> 9664 bytes .../src/app/paletx/assets/fonts/iconfont.svg | 150 + .../src/app/paletx/assets/fonts/iconfont.ttf | Bin 0 -> 9496 bytes .../src/app/paletx/assets/fonts/iconfont.woff | Bin 0 -> 5956 bytes .../src/app/paletx/assets/fonts/plx-icons.eot | Bin 0 -> 39680 bytes .../src/app/paletx/assets/fonts/plx-icons.svg | 146 + .../src/app/paletx/assets/fonts/plx-icons.ttf | Bin 0 -> 39508 bytes .../src/app/paletx/assets/fonts/plx-icons.woff | Bin 0 -> 39584 bytes .../app/paletx/assets/images/backtop/backtop.svg | 15 + .../paletx/assets/images/backtop/backtop_hover.svg | 16 + .../checkbox-radio/checkbox-checked-disabled.svg | 12 + .../images/checkbox-radio/checkbox-disabled.svg | 10 + .../images/checkbox-radio/checkbox-hover.svg | 10 + .../assets/images/checkbox-radio/checkbox-init.svg | 10 + .../checkbox-radio/radio-checked-disabled.svg | 11 + .../assets/images/checkbox-radio/radio-checked.svg | 11 + .../images/checkbox-radio/radio-disabled.svg | 9 + .../assets/images/checkbox-radio/radio-hover.svg | 9 + .../assets/images/checkbox-radio/radio-init.svg | 9 + .../checkbox-radio/test/checkbox-checked.svg | 12 + .../app/paletx/assets/themes/NIV/NIV-theme.less | 271 + .../src/app/paletx/assets/themes/NIV/theme.css | 5548 ++++++++++++ .../src/app/paletx/assets/themes/NIV/theme.less | 89 + .../src/app/paletx/assets/themes/common.less | 5577 ++++++++++++ .../paletx/assets/themes/default/NIV-theme.less | 271 + .../src/app/paletx/assets/themes/default/theme.css | 5552 ++++++++++++ .../app/paletx/assets/themes/default/theme.less | 107 + .../src/app/paletx/common/shared.ts | 283 + .../src/app/paletx/core/boolean-field-value.ts | 19 + .../src/app/paletx/core/domhandler.ts | 432 + .../src/app/paletx/core/number-wrapper-parse.ts | 10 + .../core/overlay/fullscreen-overlay-container.ts | 62 + .../paletx/core/overlay/generic-component-type.ts | 9 + .../src/app/paletx/core/overlay/index.ts | 49 + .../app/paletx/core/overlay/overlay-container.ts | 83 + .../app/paletx/core/overlay/overlay-directives.ts | 329 + .../paletx/core/overlay/overlay-position-map.ts | 124 + .../src/app/paletx/core/overlay/overlay-ref.ts | 271 + .../src/app/paletx/core/overlay/overlay-state.ts | 61 + .../src/app/paletx/core/overlay/overlay.ts | 109 + .../position/connected-position-strategy.ts | 478 + .../core/overlay/position/connected-position.ts | 87 + .../core/overlay/position/fake-viewport-ruler.ts | 25 + .../overlay/position/free-position-strategy.ts | 83 + .../overlay/position/global-position-strategy.ts | 178 + .../overlay/position/overlay-position-builder.ts | 51 + .../core/overlay/position/position-strategy.ts | 17 + .../paletx/core/overlay/position/viewport-ruler.ts | 110 + .../core/overlay/scroll/block-scroll-strategy.ts | 77 + .../core/overlay/scroll/close-scroll-strategy.ts | 54 + .../src/app/paletx/core/overlay/scroll/index.ts | 35 + .../core/overlay/scroll/noop-scroll-strategy.ts | 24 + .../overlay/scroll/reposition-scroll-strategy.ts | 59 + .../core/overlay/scroll/scroll-dispatcher.ts | 174 + .../core/overlay/scroll/scroll-strategy-options.ts | 52 + .../paletx/core/overlay/scroll/scroll-strategy.ts | 29 + .../app/paletx/core/overlay/scroll/scrollable.ts | 63 + .../src/app/paletx/core/overlaypanel/index.ts | 1 + .../app/paletx/core/overlaypanel/overlaypanel.ts | 163 + .../src/app/paletx/core/pxbutton/button-state.ts | 6 + .../app/paletx/core/pxbutton/button.directive.ts | 178 + .../src/app/paletx/core/pxbutton/button.module.ts | 14 + .../src/app/paletx/core/pxbutton/index.ts | 2 + .../src/app/paletx/core/select.service.ts | 57 + .../src/app/paletx/core/uuid.ts | 36 + .../paletx/plx-datepicker/numberedFixLen.pipe.ts | 27 + .../app/paletx/plx-datepicker/picker.component.css | 366 + .../paletx/plx-datepicker/picker.component.html | 134 + .../paletx/plx-datepicker/picker.component.less | 434 + .../app/paletx/plx-datepicker/picker.component.ts | 1712 ++++ .../src/app/paletx/plx-datepicker/picker.module.ts | 27 + .../plx-datepicker/pickerrange.component.css | 18 + .../plx-datepicker/pickerrange.component.html | 14 + .../paletx/plx-datepicker/pickerrange.component.ts | 162 + .../app/paletx/plx-datepicker/popover-config.ts | 13 + .../src/app/paletx/plx-datepicker/popover.ts | 175 + .../src/app/paletx/plx-datepicker/time.ts | 51 + .../app/paletx/plx-datepicker/timepicker-config.ts | 19 + .../src/app/paletx/plx-datepicker/timepicker.less | 163 + .../src/app/paletx/plx-datepicker/timepicker.ts | 558 ++ .../src/app/paletx/plx-datepicker/util/popup.ts | 58 + .../app/paletx/plx-datepicker/util/positioning.ts | 153 + .../src/app/paletx/plx-datepicker/util/triggers.ts | 62 + .../src/app/paletx/plx-datepicker/util/util.ts | 39 + .../app/paletx/plx-modal/modal-backdrop.spec.ts | 16 + .../src/app/paletx/plx-modal/modal-backdrop.ts | 9 + .../app/paletx/plx-modal/modal-dismiss-reasons.ts | 4 + .../src/app/paletx/plx-modal/modal-ref.ts | 109 + .../src/app/paletx/plx-modal/modal-stack.ts | 103 + .../src/app/paletx/plx-modal/modal-window.spec.ts | 114 + .../src/app/paletx/plx-modal/modal-window.ts | 82 + .../src/app/paletx/plx-modal/modal.less | 125 + .../src/app/paletx/plx-modal/modal.module.ts | 21 + .../src/app/paletx/plx-modal/modal.spec.ts | 597 ++ .../src/app/paletx/plx-modal/modal.ts | 54 + .../src/app/paletx/plx-text-input/index.ts | 8 + .../plx-text-input/ipv4-validator.directive.ts | 24 + .../plx-text-input/ipv6-validator.directive.ts | 24 + .../plx-text-input/max-validator.directive.ts | 49 + .../plx-text-input/min-validator.directive.ts | 49 + .../text-input-ip-address.component.ts | 170 + .../plx-text-input/text-input-ip.component.ts | 189 + .../paletx/plx-text-input/text-input.component.ts | 765 ++ .../src/app/paletx/plx-text-input/text-input.html | 69 + .../src/app/paletx/plx-text-input/text-input.less | 423 + .../app/paletx/plx-text-input/text-input.module.ts | 31 + .../plx-text-input/validate-on-blur.directive.ts | 18 + .../paletx/plx-tooltip/plx-tooltip-config.spec.ts | 11 + .../app/paletx/plx-tooltip/plx-tooltip-config.ts | 13 + .../src/app/paletx/plx-tooltip/plx-tooltip.less | 241 + .../app/paletx/plx-tooltip/plx-tooltip.module.ts | 12 + .../src/app/paletx/plx-tooltip/plx-tooltip.spec.ts | 485 + .../src/app/paletx/plx-tooltip/plx-tooltip.ts | 176 + .../src/app/paletx/util/popup.ts | 59 + .../src/app/paletx/util/positioning.ts | 425 + .../src/app/paletx/util/triggers.ts | 66 + .../src/app/paletx/util/util.ts | 65 + 137 files changed, 46040 insertions(+) create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/bootstrap4.0.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/font-awesome.min.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/iconfont.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/ngict-component.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/prism.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/style.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/FontAwesome.otf create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.eot create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.ttf create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.woff create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.eot create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.ttf create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.woff create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.eot create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.ttf create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff2 create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.eot create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.ttf create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.woff create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.eot create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.ttf create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.woff create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop_hover.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-checked-disabled.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-disabled.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-hover.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-init.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked-disabled.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-disabled.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-hover.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-init.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/test/checkbox-checked.svg create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/NIV-theme.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/common.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/NIV-theme.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/common/shared.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/boolean-field-value.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/domhandler.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/number-wrapper-parse.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/fullscreen-overlay-container.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/generic-component-type.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/index.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-container.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-directives.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-position-map.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-ref.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-state.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/fake-viewport-ruler.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/free-position-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/global-position-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/overlay-position-builder.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/position-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/viewport-ruler.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/block-scroll-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/close-scroll-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/index.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/noop-scroll-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/reposition-scroll-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-dispatcher.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy-options.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/index.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/overlaypanel.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button-state.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.directive.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.module.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/index.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/select.service.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/uuid.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/numberedFixLen.pipe.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.html create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.module.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.css create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.html create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover-config.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/time.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker-config.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/popup.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/positioning.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/triggers.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/util.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.spec.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-dismiss-reasons.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-ref.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-stack.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.spec.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.module.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.spec.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/index.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv4-validator.directive.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv6-validator.directive.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/min-validator.directive.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip-address.component.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip.component.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.component.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.html create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.module.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/validate-on-blur.directive.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.spec.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.less create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.module.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.spec.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/popup.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/positioning.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/triggers.ts create mode 100644 deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/util.ts (limited to 'deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx') diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/bootstrap4.0.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/bootstrap4.0.css new file mode 100644 index 00000000..d52c5848 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/bootstrap4.0.css @@ -0,0 +1,9320 @@ +/*! + * Bootstrap v4.0.0-alpha.6 (https://getbootstrap.com) + * Copyright 2011-2017 The Bootstrap Authors + * Copyright 2011-2017 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + line-height: 1.15; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +footer, +header, +nav, +section { + display: block; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +figcaption, +figure, +main { + display: block; +} + +figure { + margin: 1em 40px; +} + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; + height: 0; + overflow: visible; +} + +pre { + font-family: monospace, monospace; + font-size: 1em; +} + +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +a:active, +a:hover { + outline-width: 0; +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} + +b, +strong { + font-weight: inherit; +} + +b, +strong { + font-weight: bolder; +} + +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +dfn { + font-style: italic; +} + +mark { + background-color: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +audio, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +img { + border-style: none; +} + +svg:not(:root) { + overflow: hidden; +} + +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + font-size: 100%; + line-height: 1.15; + margin: 0; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal; +} + +progress { + display: inline-block; + vertical-align: baseline; +} + +textarea { + overflow: auto; +} + +[type="checkbox"], +[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +details, +menu { + display: block; +} + +summary { + display: list-item; +} + +canvas { + display: inline-block; +} + +template { + display: none; +} + +[hidden] { + display: none; +} + +@media print { + *, + *::before, + *::after, + p::first-letter, + div::first-letter, + blockquote::first-letter, + li::first-letter, + p::first-line, + div::first-line, + blockquote::first-line, + li::first-line { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +*, +*::before, +*::after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +@-ms-viewport { + width: device-width; +} + +html { + -ms-overflow-style: scrollbar; + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + color: #292b2c; + background-color: #fff; +} + +[tabindex="-1"]:focus { + outline: none !important; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: .5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: bold; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +a { + color: #0275d8; + text-decoration: none; +} + +a:focus, a:hover { + color: #014c8c; + text-decoration: underline; +} + +a:not([href]):not([tabindex]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([tabindex]):focus { + outline: 0; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; +} + +[role="button"] { + cursor: pointer; +} + +a, +area, +button, +[role="button"], +input, +label, +select, +summary, +textarea { + -ms-touch-action: manipulation; + touch-action: manipulation; +} + +table { + border-collapse: collapse; + background-color: transparent; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #636c72; + text-align: left; + caption-side: bottom; +} + +th { + text-align: left; +} + +label { + display: inline-block; + margin-bottom: .5rem; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +textarea { + line-height: inherit; +} + +input[type="radio"]:disabled, +input[type="checkbox"]:disabled { + cursor: not-allowed; +} + +input[type="date"], +input[type="time"], +input[type="datetime-local"], +input[type="month"] { + -webkit-appearance: listbox; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; +} + +input[type="search"] { + -webkit-appearance: none; +} + +output { + display: inline-block; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.5rem; + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.1; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.1; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.1; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.1; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: normal; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 5px; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + padding: 0.5rem 1rem; + margin-bottom: 1rem; + font-size: 1.25rem; + border-left: 0.25rem solid #eceeef; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #636c72; +} + +.blockquote-footer::before { + content: "\2014 \00A0"; +} + +.blockquote-reverse { + padding-right: 1rem; + padding-left: 0; + text-align: right; + border-right: 0.25rem solid #eceeef; + border-left: 0; +} + +.blockquote-reverse .blockquote-footer::before { + content: ""; +} + +.blockquote-reverse .blockquote-footer::after { + content: "\00A0 \2014"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 0.25rem; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #636c72; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +code { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #bd4147; + background-color: #f7f7f9; + border-radius: 0.25rem; +} + +a > code { + padding: 0; + color: inherit; + background-color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 90%; + color: #fff; + background-color: #292b2c; + border-radius: 0.2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + color: #292b2c; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + position: relative; + margin-left: auto; + margin-right: auto; + padding-right: 15px; + padding-left: 15px; +} + +@media (min-width: 576px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 768px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 992px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 1200px) { + .container { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 576px) { + .container { + width: 540px; + max-width: 100%; + } +} + +@media (min-width: 768px) { + .container { + width: 720px; + max-width: 100%; + } +} + +@media (min-width: 992px) { + .container { + width: 960px; + max-width: 100%; + } +} + +@media (min-width: 1200px) { + .container { + width: 1140px; + max-width: 100%; + } +} + +.container-fluid { + position: relative; + margin-left: auto; + margin-right: auto; + padding-right: 15px; + padding-left: 15px; +} + +@media (min-width: 576px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 768px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 992px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 1200px) { + .container-fluid { + padding-right: 15px; + padding-left: 15px; + } +} + +.row { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 576px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 768px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 992px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +@media (min-width: 1200px) { + .row { + margin-right: -15px; + margin-left: -15px; + } +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + position: relative; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +@media (min-width: 576px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 768px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 992px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +@media (min-width: 1200px) { + .col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl { + padding-right: 15px; + padding-left: 15px; + } +} + +.col { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; +} + +.col-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; +} + +.col-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; +} + +.pull-0 { + right: auto; +} + +.pull-1 { + right: 8.333333%; +} + +.pull-2 { + right: 16.666667%; +} + +.pull-3 { + right: 25%; +} + +.pull-4 { + right: 33.333333%; +} + +.pull-5 { + right: 41.666667%; +} + +.pull-6 { + right: 50%; +} + +.pull-7 { + right: 58.333333%; +} + +.pull-8 { + right: 66.666667%; +} + +.pull-9 { + right: 75%; +} + +.pull-10 { + right: 83.333333%; +} + +.pull-11 { + right: 91.666667%; +} + +.pull-12 { + right: 100%; +} + +.push-0 { + left: auto; +} + +.push-1 { + left: 8.333333%; +} + +.push-2 { + left: 16.666667%; +} + +.push-3 { + left: 25%; +} + +.push-4 { + left: 33.333333%; +} + +.push-5 { + left: 41.666667%; +} + +.push-6 { + left: 50%; +} + +.push-7 { + left: 58.333333%; +} + +.push-8 { + left: 66.666667%; +} + +.push-9 { + left: 75%; +} + +.push-10 { + left: 83.333333%; +} + +.push-11 { + left: 91.666667%; +} + +.push-12 { + left: 100%; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-sm-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-sm-0 { + right: auto; + } + .pull-sm-1 { + right: 8.333333%; + } + .pull-sm-2 { + right: 16.666667%; + } + .pull-sm-3 { + right: 25%; + } + .pull-sm-4 { + right: 33.333333%; + } + .pull-sm-5 { + right: 41.666667%; + } + .pull-sm-6 { + right: 50%; + } + .pull-sm-7 { + right: 58.333333%; + } + .pull-sm-8 { + right: 66.666667%; + } + .pull-sm-9 { + right: 75%; + } + .pull-sm-10 { + right: 83.333333%; + } + .pull-sm-11 { + right: 91.666667%; + } + .pull-sm-12 { + right: 100%; + } + .push-sm-0 { + left: auto; + } + .push-sm-1 { + left: 8.333333%; + } + .push-sm-2 { + left: 16.666667%; + } + .push-sm-3 { + left: 25%; + } + .push-sm-4 { + left: 33.333333%; + } + .push-sm-5 { + left: 41.666667%; + } + .push-sm-6 { + left: 50%; + } + .push-sm-7 { + left: 58.333333%; + } + .push-sm-8 { + left: 66.666667%; + } + .push-sm-9 { + left: 75%; + } + .push-sm-10 { + left: 83.333333%; + } + .push-sm-11 { + left: 91.666667%; + } + .push-sm-12 { + left: 100%; + } + .offset-sm-0 { + margin-left: 0%; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-md-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-md-0 { + right: auto; + } + .pull-md-1 { + right: 8.333333%; + } + .pull-md-2 { + right: 16.666667%; + } + .pull-md-3 { + right: 25%; + } + .pull-md-4 { + right: 33.333333%; + } + .pull-md-5 { + right: 41.666667%; + } + .pull-md-6 { + right: 50%; + } + .pull-md-7 { + right: 58.333333%; + } + .pull-md-8 { + right: 66.666667%; + } + .pull-md-9 { + right: 75%; + } + .pull-md-10 { + right: 83.333333%; + } + .pull-md-11 { + right: 91.666667%; + } + .pull-md-12 { + right: 100%; + } + .push-md-0 { + left: auto; + } + .push-md-1 { + left: 8.333333%; + } + .push-md-2 { + left: 16.666667%; + } + .push-md-3 { + left: 25%; + } + .push-md-4 { + left: 33.333333%; + } + .push-md-5 { + left: 41.666667%; + } + .push-md-6 { + left: 50%; + } + .push-md-7 { + left: 58.333333%; + } + .push-md-8 { + left: 66.666667%; + } + .push-md-9 { + left: 75%; + } + .push-md-10 { + left: 83.333333%; + } + .push-md-11 { + left: 91.666667%; + } + .push-md-12 { + left: 100%; + } + .offset-md-0 { + margin-left: 0%; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-lg-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-lg-0 { + right: auto; + } + .pull-lg-1 { + right: 8.333333%; + } + .pull-lg-2 { + right: 16.666667%; + } + .pull-lg-3 { + right: 25%; + } + .pull-lg-4 { + right: 33.333333%; + } + .pull-lg-5 { + right: 41.666667%; + } + .pull-lg-6 { + right: 50%; + } + .pull-lg-7 { + right: 58.333333%; + } + .pull-lg-8 { + right: 66.666667%; + } + .pull-lg-9 { + right: 75%; + } + .pull-lg-10 { + right: 83.333333%; + } + .pull-lg-11 { + right: 91.666667%; + } + .pull-lg-12 { + right: 100%; + } + .push-lg-0 { + left: auto; + } + .push-lg-1 { + left: 8.333333%; + } + .push-lg-2 { + left: 16.666667%; + } + .push-lg-3 { + left: 25%; + } + .push-lg-4 { + left: 33.333333%; + } + .push-lg-5 { + left: 41.666667%; + } + .push-lg-6 { + left: 50%; + } + .push-lg-7 { + left: 58.333333%; + } + .push-lg-8 { + left: 66.666667%; + } + .push-lg-9 { + left: 75%; + } + .push-lg-10 { + left: 83.333333%; + } + .push-lg-11 { + left: 91.666667%; + } + .push-lg-12 { + left: 100%; + } + .offset-lg-0 { + margin-left: 0%; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + -webkit-flex-basis: 0; + -ms-flex-preferred-size: 0; + flex-basis: 0; + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + max-width: 100%; + } + .col-xl-auto { + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 8.333333%; + -ms-flex: 0 0 8.333333%; + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 16.666667%; + -ms-flex: 0 0 16.666667%; + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 33.333333%; + -ms-flex: 0 0 33.333333%; + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 41.666667%; + -ms-flex: 0 0 41.666667%; + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 50%; + -ms-flex: 0 0 50%; + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 58.333333%; + -ms-flex: 0 0 58.333333%; + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 66.666667%; + -ms-flex: 0 0 66.666667%; + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 83.333333%; + -ms-flex: 0 0 83.333333%; + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 91.666667%; + -ms-flex: 0 0 91.666667%; + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 100%; + -ms-flex: 0 0 100%; + flex: 0 0 100%; + max-width: 100%; + } + .pull-xl-0 { + right: auto; + } + .pull-xl-1 { + right: 8.333333%; + } + .pull-xl-2 { + right: 16.666667%; + } + .pull-xl-3 { + right: 25%; + } + .pull-xl-4 { + right: 33.333333%; + } + .pull-xl-5 { + right: 41.666667%; + } + .pull-xl-6 { + right: 50%; + } + .pull-xl-7 { + right: 58.333333%; + } + .pull-xl-8 { + right: 66.666667%; + } + .pull-xl-9 { + right: 75%; + } + .pull-xl-10 { + right: 83.333333%; + } + .pull-xl-11 { + right: 91.666667%; + } + .pull-xl-12 { + right: 100%; + } + .push-xl-0 { + left: auto; + } + .push-xl-1 { + left: 8.333333%; + } + .push-xl-2 { + left: 16.666667%; + } + .push-xl-3 { + left: 25%; + } + .push-xl-4 { + left: 33.333333%; + } + .push-xl-5 { + left: 41.666667%; + } + .push-xl-6 { + left: 50%; + } + .push-xl-7 { + left: 58.333333%; + } + .push-xl-8 { + left: 66.666667%; + } + .push-xl-9 { + left: 75%; + } + .push-xl-10 { + left: 83.333333%; + } + .push-xl-11 { + left: 91.666667%; + } + .push-xl-12 { + left: 100%; + } + .offset-xl-0 { + margin-left: 0%; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #eceeef; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #eceeef; +} + +.table tbody + tbody { + border-top: 2px solid #eceeef; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #eceeef; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #eceeef; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #dff0d8; +} + +.table-hover .table-success:hover { + background-color: #d0e9c6; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #d0e9c6; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #d9edf7; +} + +.table-hover .table-info:hover { + background-color: #c4e3f3; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #c4e3f3; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #fcf8e3; +} + +.table-hover .table-warning:hover { + background-color: #faf2cc; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #faf2cc; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f2dede; +} + +.table-hover .table-danger:hover { + background-color: #ebcccc; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #ebcccc; +} + +.thead-inverse th { + color: #fff; + background-color: #292b2c; +} + +.thead-default th { + color: #464a4c; + background-color: #eceeef; +} + +.table-inverse { + color: #fff; + background-color: #292b2c; +} + +.table-inverse th, +.table-inverse td, +.table-inverse thead th { + border-color: #fff; +} + +.table-inverse.table-bordered { + border: 0; +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -ms-overflow-style: -ms-autohiding-scrollbar; +} + +.table-responsive.table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + padding: 0.5rem 0.75rem; + font-size: 1rem; + line-height: 1.25; + color: #464a4c; + background-color: #fff; + background-image: none; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; + -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; + -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + color: #464a4c; + background-color: #fff; + border-color: #5cb3fd; + outline: none; +} + +.form-control::-webkit-input-placeholder { + color: #636c72; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #636c72; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #636c72; + opacity: 1; +} + +.form-control::placeholder { + color: #636c72; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #eceeef; + opacity: 1; +} + +.form-control:disabled { + cursor: not-allowed; +} + +select.form-control:not([size]):not([multiple]) { + height: calc(2.25rem + 2px); +} + +select.form-control:focus::-ms-value { + color: #464a4c; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; +} + +.col-form-label { + padding-top: calc(0.5rem - 1px * 2); + padding-bottom: calc(0.5rem - 1px * 2); + margin-bottom: 0; +} + +.col-form-label-lg { + padding-top: calc(0.75rem - 1px * 2); + padding-bottom: calc(0.75rem - 1px * 2); + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: calc(0.25rem - 1px * 2); + padding-bottom: calc(0.25rem - 1px * 2); + font-size: 0.875rem; +} + +.col-form-legend { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + margin-bottom: 0; + font-size: 1rem; +} + +.form-control-static { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + margin-bottom: 0; + line-height: 1.25; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-static.form-control-sm, .input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn, .form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), +.input-group-sm > select.input-group-addon:not([size]):not([multiple]), +.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: 1.8125rem; +} + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), +.input-group-lg > select.input-group-addon:not([size]):not([multiple]), +.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) { + height: 3.166667rem; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-check { + position: relative; + display: block; + margin-bottom: 0.5rem; +} + +.form-check.disabled .form-check-label { + color: #636c72; + cursor: not-allowed; +} + +.form-check-label { + padding-left: 1.25rem; + margin-bottom: 0; + cursor: pointer; +} + +.form-check-input { + position: absolute; + margin-top: 0.25rem; + margin-left: -1.25rem; +} + +.form-check-input:only-child { + position: static; +} + +.form-check-inline { + display: inline-block; +} + +.form-check-inline .form-check-label { + vertical-align: middle; +} + +.form-check-inline + .form-check-inline { + margin-left: 0.75rem; +} + +.form-control-feedback { + margin-top: 0.25rem; +} + +.form-control-success, +.form-control-warning, +.form-control-danger { + padding-right: 2.25rem; + background-repeat: no-repeat; + background-position: center right 0.5625rem; + -webkit-background-size: 1.125rem 1.125rem; + background-size: 1.125rem 1.125rem; +} + +.has-success .form-control-feedback, +.has-success .form-control-label, +.has-success .col-form-label, +.has-success .form-check-label, +.has-success .custom-control { + color: #5cb85c; +} + +.has-success .form-control { + border-color: #5cb85c; +} + +.has-success .input-group-addon { + color: #5cb85c; + border-color: #5cb85c; + background-color: #eaf6ea; +} + +.has-success .form-control-success { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E"); +} + +.has-warning .form-control-feedback, +.has-warning .form-control-label, +.has-warning .col-form-label, +.has-warning .form-check-label, +.has-warning .custom-control { + color: #f0ad4e; +} + +.has-warning .form-control { + border-color: #f0ad4e; +} + +.has-warning .input-group-addon { + color: #f0ad4e; + border-color: #f0ad4e; + background-color: white; +} + +.has-warning .form-control-warning { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E"); +} + +.has-danger .form-control-feedback, +.has-danger .form-control-label, +.has-danger .col-form-label, +.has-danger .form-check-label, +.has-danger .custom-control { + color: #d9534f; +} + +.has-danger .form-control { + border-color: #d9534f; +} + +.has-danger .input-group-addon { + color: #d9534f; + border-color: #d9534f; + background-color: #fdf7f7; +} + +.has-danger .form-control-danger { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E"); +} + +.form-inline { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex: 0 0 auto; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + width: auto; + } + .form-inline .form-control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-check { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: auto; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .form-check-label { + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + } + .form-inline .custom-control-indicator { + position: static; + display: inline-block; + margin-right: 0.25rem; + vertical-align: text-bottom; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.btn { + display: inline-block; + font-weight: normal; + line-height: 1.25; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.5rem 1rem; + font-size: 1rem; + border-radius: 0.25rem; + -webkit-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.btn:focus, .btn:hover { + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + -webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.25); + box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.25); +} + +.btn.disabled, .btn:disabled { + cursor: not-allowed; + opacity: .65; +} + +.btn:active, .btn.active { + background-image: none; +} + +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary:hover { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:focus, .btn-primary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); + box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary:active, .btn-primary.active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #025aa5; + background-image: none; + border-color: #01549b; +} + +.btn-secondary { + color: #292b2c; + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary:hover { + color: #292b2c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:focus, .btn-secondary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); + box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary:active, .btn-secondary.active, +.show > .btn-secondary.dropdown-toggle { + color: #292b2c; + background-color: #e6e6e6; + background-image: none; + border-color: #adadad; +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:focus, .btn-info.focus { + -webkit-box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); + box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:active, .btn-info.active, +.show > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + background-image: none; + border-color: #2aabd2; +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:focus, .btn-success.focus { + -webkit-box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); + box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:active, .btn-success.active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #449d44; + background-image: none; + border-color: #419641; +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:focus, .btn-warning.focus { + -webkit-box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); + box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:active, .btn-warning.active, +.show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ec971f; + background-image: none; + border-color: #eb9316; +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:focus, .btn-danger.focus { + -webkit-box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); + box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:active, .btn-danger.active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c9302c; + background-image: none; + border-color: #c12e2a; +} + +.btn-outline-primary { + color: #0275d8; + background-image: none; + background-color: transparent; + border-color: #0275d8; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); + box-shadow: 0 0 0 2px rgba(2, 117, 216, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #0275d8; + background-color: transparent; +} + +.btn-outline-primary:active, .btn-outline-primary.active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-outline-secondary { + color: #ccc; + background-image: none; + background-color: transparent; + border-color: #ccc; +} + +.btn-outline-secondary:hover { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + -webkit-box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); + box-shadow: 0 0 0 2px rgba(204, 204, 204, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #ccc; + background-color: transparent; +} + +.btn-outline-secondary:active, .btn-outline-secondary.active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-outline-info { + color: #5bc0de; + background-image: none; + background-color: transparent; + border-color: #5bc0de; +} + +.btn-outline-info:hover { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + -webkit-box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); + box-shadow: 0 0 0 2px rgba(91, 192, 222, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #5bc0de; + background-color: transparent; +} + +.btn-outline-info:active, .btn-outline-info.active, +.show > .btn-outline-info.dropdown-toggle { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-outline-success { + color: #5cb85c; + background-image: none; + background-color: transparent; + border-color: #5cb85c; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + -webkit-box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); + box-shadow: 0 0 0 2px rgba(92, 184, 92, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #5cb85c; + background-color: transparent; +} + +.btn-outline-success:active, .btn-outline-success.active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-outline-warning { + color: #f0ad4e; + background-image: none; + background-color: transparent; + border-color: #f0ad4e; +} + +.btn-outline-warning:hover { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + -webkit-box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); + box-shadow: 0 0 0 2px rgba(240, 173, 78, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #f0ad4e; + background-color: transparent; +} + +.btn-outline-warning:active, .btn-outline-warning.active, +.show > .btn-outline-warning.dropdown-toggle { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-outline-danger { + color: #d9534f; + background-image: none; + background-color: transparent; + border-color: #d9534f; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + -webkit-box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); + box-shadow: 0 0 0 2px rgba(217, 83, 79, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #d9534f; + background-color: transparent; +} + +.btn-outline-danger:active, .btn-outline-danger.active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-link { + font-weight: normal; + color: #0275d8; + border-radius: 0; +} + +.btn-link, .btn-link:active, .btn-link.active, .btn-link:disabled { + background-color: transparent; +} + +.btn-link, .btn-link:focus, .btn-link:active { + border-color: transparent; +} + +.btn-link:hover { + border-color: transparent; +} + +.btn-link:focus, .btn-link:hover { + color: #014c8c; + text-decoration: underline; + background-color: transparent; +} + +.btn-link:disabled { + color: #636c72; +} + +.btn-link:disabled:focus, .btn-link:disabled:hover { + text-decoration: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.show { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.show { + display: block; +} + +tr.collapse.show { + display: table-row; +} + +tbody.collapse.show { + display: table-row-group; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle::after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.3em; + vertical-align: middle; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropup .dropdown-toggle::after { + border-top: 0; + border-bottom: 0.3em solid; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #292b2c; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.dropdown-divider { + height: 1px; + margin: 0.5rem 0; + overflow: hidden; + background-color: #eceeef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 3px 1.5rem; + clear: both; + font-weight: normal; + color: #292b2c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} + +.dropdown-item:focus, .dropdown-item:hover { + color: #1d1e1f; + text-decoration: none; + background-color: #f7f7f9; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #0275d8; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #636c72; + cursor: not-allowed; + background-color: transparent; +} + +.show > .dropdown-menu { + display: block; +} + +.show > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #636c72; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 0.125rem; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + -webkit-box-flex: 0; + -webkit-flex: 0 1 auto; + -ms-flex: 0 1 auto; + flex: 0 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 2; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group, +.btn-group-vertical .btn + .btn, +.btn-group-vertical .btn + .btn-group, +.btn-group-vertical .btn-group + .btn, +.btn-group-vertical .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn + .dropdown-toggle-split::after { + margin-left: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 1.125rem; + padding-left: 1.125rem; +} + +.btn-group-vertical { + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} + +.btn-group-vertical .btn, +.btn-group-vertical .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + width: 100%; +} + +.input-group .form-control { + position: relative; + z-index: 2; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} + +.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover { + z-index: 3; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: normal; + line-height: 1.25; + color: #464a4c; + text-align: center; + background-color: #eceeef; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.input-group-addon.form-control-sm, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: 0.2rem; +} + +.input-group-addon.form-control-lg, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + border-radius: 0.3rem; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:not(:last-child), +.input-group-addon:not(:last-child), +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group > .btn, +.input-group-btn:not(:last-child) > .dropdown-toggle, +.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} + +.input-group-addon:not(:last-child) { + border-right: 0; +} + +.input-group .form-control:not(:first-child), +.input-group-addon:not(:first-child), +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group > .btn, +.input-group-btn:not(:first-child) > .dropdown-toggle, +.input-group-btn:not(:last-child) > .btn:not(:first-child), +.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.form-control + .input-group-addon:not(:first-child) { + border-left: 0; +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; + -webkit-box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; +} + +.input-group-btn > .btn + .btn { + margin-left: -1px; +} + +.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover { + z-index: 3; +} + +.input-group-btn:not(:last-child) > .btn, +.input-group-btn:not(:last-child) > .btn-group { + margin-right: -1px; +} + +.input-group-btn:not(:first-child) > .btn, +.input-group-btn:not(:first-child) > .btn-group { + z-index: 2; + margin-left: -1px; +} + +.input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover, +.input-group-btn:not(:first-child) > .btn-group:focus, +.input-group-btn:not(:first-child) > .btn-group:active, +.input-group-btn:not(:first-child) > .btn-group:hover { + z-index: 3; +} + +.custom-control { + position: relative; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + min-height: 1.5rem; + padding-left: 1.5rem; + margin-right: 1rem; + cursor: pointer; +} + +.custom-control-input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-indicator { + color: #fff; + background-color: #0275d8; +} + +.custom-control-input:focus ~ .custom-control-indicator { + -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 3px #0275d8; + box-shadow: 0 0 0 1px #fff, 0 0 0 3px #0275d8; +} + +.custom-control-input:active ~ .custom-control-indicator { + color: #fff; + background-color: #8fcafe; +} + +.custom-control-input:disabled ~ .custom-control-indicator { + cursor: not-allowed; + background-color: #eceeef; +} + +.custom-control-input:disabled ~ .custom-control-description { + color: #636c72; + cursor: not-allowed; +} + +.custom-control-indicator { + position: absolute; + top: 0.25rem; + left: 0; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: center center; + -webkit-background-size: 50% 50%; + background-size: 50% 50%; +} + +.custom-checkbox .custom-control-indicator { + border-radius: 0.25rem; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator { + background-color: #0275d8; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); +} + +.custom-radio .custom-control-indicator { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-indicator { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); +} + +.custom-controls-stacked { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +.custom-controls-stacked .custom-control { + margin-bottom: 0.25rem; +} + +.custom-controls-stacked .custom-control + .custom-control { + margin-left: 0; +} + +.custom-select { + display: inline-block; + max-width: 100%; + height: calc(2.25rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + line-height: 1.25; + color: #464a4c; + vertical-align: middle; + background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center; + -webkit-background-size: 8px 10px; + background-size: 8px 10px; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; + -moz-appearance: none; + -webkit-appearance: none; +} + +.custom-select:focus { + border-color: #5cb3fd; + outline: none; +} + +.custom-select:focus::-ms-value { + color: #464a4c; + background-color: #fff; +} + +.custom-select:disabled { + color: #636c72; + cursor: not-allowed; + background-color: #eceeef; +} + +.custom-select::-ms-expand { + opacity: 0; +} + +.custom-select-sm { + padding-top: 0.375rem; + padding-bottom: 0.375rem; + font-size: 75%; +} + +.custom-file { + position: relative; + display: inline-block; + max-width: 100%; + height: 2.5rem; + margin-bottom: 0; + cursor: pointer; +} + +.custom-file-input { + min-width: 14rem; + max-width: 100%; + height: 2.5rem; + margin: 0; + filter: alpha(opacity=0); + opacity: 0; +} + +.custom-file-control { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: 2.5rem; + padding: 0.5rem 1rem; + line-height: 1.5; + color: #464a4c; + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.custom-file-control:lang(en)::after { + content: "Choose file..."; +} + +.custom-file-control::before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + z-index: 6; + display: block; + height: 2.5rem; + padding: 0.5rem 1rem; + line-height: 1.5; + color: #464a4c; + background-color: #eceeef; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0 0.25rem 0.25rem 0; +} + +.custom-file-control:lang(en)::before { + content: "Browse"; +} + +.nav { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5em 1em; +} + +.nav-link:focus, .nav-link:hover { + text-decoration: none; +} + +.nav-link.disabled { + color: #636c72; + cursor: not-allowed; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { + border-color: #eceeef #eceeef #ddd; +} + +.nav-tabs .nav-link.disabled { + color: #636c72; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #464a4c; + background-color: #fff; + border-color: #ddd #ddd #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.nav-pills .nav-link { + border-radius: 0.25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .nav-item.show .nav-link { + color: #fff; + cursor: default; + background-color: #0275d8; +} + +.nav-fill .nav-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + text-align: center; +} + +.nav-justified .nav-item { + -webkit-box-flex: 1; + -webkit-flex: 1 1 100%; + -ms-flex: 1 1 100%; + flex: 1 1 100%; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding: 0.5rem 1rem; +} + +.navbar-brand { + display: inline-block; + padding-top: .25rem; + padding-bottom: .25rem; + margin-right: 1rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:focus, .navbar-brand:hover { + text-decoration: none; +} + +.navbar-nav { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-text { + display: inline-block; + padding-top: .425rem; + padding-bottom: .425rem; +} + +.navbar-toggler { + -webkit-align-self: flex-start; + -ms-flex-item-align: start; + align-self: flex-start; + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.navbar-toggler:focus, .navbar-toggler:hover { + text-decoration: none; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + -webkit-background-size: 100% 100%; + background-size: 100% 100%; +} + +.navbar-toggler-left { + position: absolute; + left: 1rem; +} + +.navbar-toggler-right { + position: absolute; + right: 1rem; +} + +@media (max-width: 575px) { + .navbar-toggleable .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-toggleable { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable .navbar-toggler { + display: none; + } +} + +@media (max-width: 767px) { + .navbar-toggleable-sm .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable-sm > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-toggleable-sm { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-sm .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable-sm .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable-sm > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-sm .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 991px) { + .navbar-toggleable-md .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable-md > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-toggleable-md { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-md .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable-md .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable-md > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-md .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199px) { + .navbar-toggleable-lg .navbar-nav .dropdown-menu { + position: static; + float: none; + } + .navbar-toggleable-lg > .container { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-toggleable-lg { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-lg .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + } + .navbar-toggleable-lg .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; + } + .navbar-toggleable-lg > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + } + .navbar-toggleable-lg .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; + } + .navbar-toggleable-lg .navbar-toggler { + display: none; + } +} + +.navbar-toggleable-xl { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggleable-xl .navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-toggleable-xl > .container { + padding-right: 0; + padding-left: 0; +} + +.navbar-toggleable-xl .navbar-nav { + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; +} + +.navbar-toggleable-xl .navbar-nav .nav-link { + padding-right: .5rem; + padding-left: .5rem; +} + +.navbar-toggleable-xl > .container { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + flex-wrap: nowrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; +} + +.navbar-toggleable-xl .navbar-collapse { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + width: 100%; +} + +.navbar-toggleable-xl .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand, +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover, +.navbar-light .navbar-toggler:focus, +.navbar-light .navbar-toggler:hover { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .open > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.open, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-toggler { + color: white; +} + +.navbar-inverse .navbar-brand:focus, .navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-toggler:focus, +.navbar-inverse .navbar-toggler:hover { + color: white; +} + +.navbar-inverse .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-inverse .navbar-nav .nav-link:focus, .navbar-inverse .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-inverse .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-inverse .navbar-nav .open > .nav-link, +.navbar-inverse .navbar-nav .active > .nav-link, +.navbar-inverse .navbar-nav .nav-link.open, +.navbar-inverse .navbar-nav .nav-link.active { + color: white; +} + +.navbar-inverse .navbar-toggler { + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-inverse .navbar-toggler-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 8h24M4 16h24M4 24h24'/%3E%3C/svg%3E"); +} + +.navbar-inverse .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.card { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} + +.card-block { + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: #f7f7f9; + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: #f7f7f9; + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-primary { + background-color: #0275d8; + border-color: #0275d8; +} + +.card-primary .card-header, +.card-primary .card-footer { + background-color: transparent; +} + +.card-success { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.card-success .card-header, +.card-success .card-footer { + background-color: transparent; +} + +.card-info { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.card-info .card-header, +.card-info .card-footer { + background-color: transparent; +} + +.card-warning { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.card-warning .card-header, +.card-warning .card-footer { + background-color: transparent; +} + +.card-danger { + background-color: #d9534f; + border-color: #d9534f; +} + +.card-danger .card-header, +.card-danger .card-footer { + background-color: transparent; +} + +.card-outline-primary { + background-color: transparent; + border-color: #0275d8; +} + +.card-outline-secondary { + background-color: transparent; + border-color: #ccc; +} + +.card-outline-info { + background-color: transparent; + border-color: #5bc0de; +} + +.card-outline-success { + background-color: transparent; + border-color: #5cb85c; +} + +.card-outline-warning { + background-color: transparent; + border-color: #f0ad4e; +} + +.card-outline-danger { + background-color: transparent; + border-color: #d9534f; +} + +.card-inverse { + color: rgba(255, 255, 255, 0.65); +} + +.card-inverse .card-header, +.card-inverse .card-footer { + background-color: transparent; + border-color: rgba(255, 255, 255, 0.2); +} + +.card-inverse .card-header, +.card-inverse .card-footer, +.card-inverse .card-title, +.card-inverse .card-blockquote { + color: #fff; +} + +.card-inverse .card-link, +.card-inverse .card-text, +.card-inverse .card-subtitle, +.card-inverse .card-blockquote .blockquote-footer { + color: rgba(255, 255, 255, 0.65); +} + +.card-inverse .card-link:focus, .card-inverse .card-link:hover { + color: #fff; +} + +.card-blockquote { + padding: 0; + margin-bottom: 0; + border-left: 0; +} + +.card-img { + border-radius: calc(0.25rem - 1px); +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img-top { + border-top-right-radius: calc(0.25rem - 1px); + border-top-left-radius: calc(0.25rem - 1px); +} + +.card-img-bottom { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +@media (min-width: 576px) { + .card-deck { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-deck .card { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 1; + -webkit-flex: 1 0 0%; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + } + .card-deck .card:not(:first-child) { + margin-left: 15px; + } + .card-deck .card:not(:last-child) { + margin-right: 15px; + } +} + +@media (min-width: 576px) { + .card-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + } + .card-group .card { + -webkit-box-flex: 1; + -webkit-flex: 1 0 0%; + -ms-flex: 1 0 0%; + flex: 1 0 0%; + } + .card-group .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group .card:first-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-top { + border-top-right-radius: 0; + } + .card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0; + } + .card-group .card:last-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-top { + border-top-left-radius: 0; + } + .card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) { + border-radius: 0; + } + .card-group .card:not(:first-child):not(:last-child) .card-img-top, + .card-group .card:not(:first-child):not(:last-child) .card-img-bottom { + border-radius: 0; + } +} + +@media (min-width: 576px) { + .card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; + } + .card-columns .card { + display: inline-block; + width: 100%; + margin-bottom: 0.75rem; + } +} + +.breadcrumb { + padding: 0.75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #eceeef; + border-radius: 0.25rem; +} + +.breadcrumb::after { + display: block; + content: ""; + clear: both; +} + +.breadcrumb-item { + float: left; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + padding-left: 0.5rem; + color: #636c72; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #636c72; +} + +.pagination { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.page-item:first-child .page-link { + margin-left: 0; + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.page-item:last-child .page-link { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.page-item.active .page-link { + z-index: 2; + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.page-item.disabled .page-link { + color: #636c72; + pointer-events: none; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #0275d8; + background-color: #fff; + border: 1px solid #ddd; +} + +.page-link:focus, .page-link:hover { + color: #014c8c; + text-decoration: none; + background-color: #eceeef; + border-color: #ddd; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; +} + +.pagination-lg .page-item:first-child .page-link { + border-bottom-left-radius: 0.3rem; + border-top-left-radius: 0.3rem; +} + +.pagination-lg .page-item:last-child .page-link { + border-bottom-right-radius: 0.3rem; + border-top-right-radius: 0.3rem; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; +} + +.pagination-sm .page-item:first-child .page-link { + border-bottom-left-radius: 0.2rem; + border-top-left-radius: 0.2rem; +} + +.pagination-sm .page-item:last-child .page-link { + border-bottom-right-radius: 0.2rem; + border-top-right-radius: 0.2rem; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.badge:focus, a.badge:hover { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.badge-default { + background-color: #636c72; +} + +.badge-default[href]:focus, .badge-default[href]:hover { + background-color: #4b5257; +} + +.badge-primary { + background-color: #0275d8; +} + +.badge-primary[href]:focus, .badge-primary[href]:hover { + background-color: #025aa5; +} + +.badge-success { + background-color: #5cb85c; +} + +.badge-success[href]:focus, .badge-success[href]:hover { + background-color: #449d44; +} + +.badge-info { + background-color: #5bc0de; +} + +.badge-info[href]:focus, .badge-info[href]:hover { + background-color: #31b0d5; +} + +.badge-warning { + background-color: #f0ad4e; +} + +.badge-warning[href]:focus, .badge-warning[href]:hover { + background-color: #ec971f; +} + +.badge-danger { + background-color: #d9534f; +} + +.badge-danger[href]:focus, .badge-danger[href]:hover { + background-color: #c9302c; +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #eceeef; + border-radius: 0.3rem; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-hr { + border-top-color: #d0d5d8; +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: bold; +} + +.alert-dismissible .close { + position: relative; + top: -0.75rem; + right: -1.25rem; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-success { + background-color: #dff0d8; + border-color: #d0e9c6; + color: #3c763d; +} + +.alert-success hr { + border-top-color: #c1e2b3; +} + +.alert-success .alert-link { + color: #2b542c; +} + +.alert-info { + background-color: #d9edf7; + border-color: #bcdff1; + color: #31708f; +} + +.alert-info hr { + border-top-color: #a6d5ec; +} + +.alert-info .alert-link { + color: #245269; +} + +.alert-warning { + background-color: #fcf8e3; + border-color: #faf2cc; + color: #8a6d3b; +} + +.alert-warning hr { + border-top-color: #f7ecb5; +} + +.alert-warning .alert-link { + color: #66512c; +} + +.alert-danger { + background-color: #f2dede; + border-color: #ebcccc; + color: #a94442; +} + +.alert-danger hr { + border-top-color: #e4b9b9; +} + +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + overflow: hidden; + font-size: 0.75rem; + line-height: 1rem; + text-align: center; + background-color: #eceeef; + border-radius: 0.25rem; +} + +.progress-bar { + height: 1rem; + color: #fff; + background-color: #0275d8; +} + +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; +} + +.progress-bar-animated { + -webkit-animation: progress-bar-stripes 1s linear infinite; + -o-animation: progress-bar-stripes 1s linear infinite; + animation: progress-bar-stripes 1s linear infinite; +} + +.media { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: start; + -webkit-align-items: flex-start; + -ms-flex-align: start; + align-items: flex-start; +} + +.media-body { + -webkit-box-flex: 1; + -webkit-flex: 1 1 0%; + -ms-flex: 1 1 0%; + flex: 1 1 0%; +} + +.list-group { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #464a4c; + text-align: inherit; +} + +.list-group-item-action .list-group-item-heading { + color: #292b2c; +} + +.list-group-item-action:focus, .list-group-item-action:hover { + color: #464a4c; + text-decoration: none; + background-color: #f7f7f9; +} + +.list-group-item-action:active { + color: #292b2c; + background-color: #eceeef; +} + +.list-group-item { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-flow: row wrap; + -ms-flex-flow: row wrap; + flex-flow: row wrap; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + padding: 0.75rem 1.25rem; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.list-group-item:focus, .list-group-item:hover { + text-decoration: none; +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #636c72; + cursor: not-allowed; + background-color: #fff; +} + +.list-group-item.disabled .list-group-item-heading, .list-group-item:disabled .list-group-item-heading { + color: inherit; +} + +.list-group-item.disabled .list-group-item-text, .list-group-item:disabled .list-group-item-text { + color: #636c72; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small { + color: inherit; +} + +.list-group-item.active .list-group-item-text { + color: #daeeff; +} + +.list-group-flush .list-group-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} + +.list-group-flush:first-child .list-group-item:first-child { + border-top: 0; +} + +.list-group-flush:last-child .list-group-item:last-child { + border-bottom: 0; +} + +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} + +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} + +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} + +a.list-group-item-success:focus, a.list-group-item-success:hover, +button.list-group-item-success:focus, +button.list-group-item-success:hover { + color: #3c763d; + background-color: #d0e9c6; +} + +a.list-group-item-success.active, +button.list-group-item-success.active { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} + +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} + +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} + +a.list-group-item-info:focus, a.list-group-item-info:hover, +button.list-group-item-info:focus, +button.list-group-item-info:hover { + color: #31708f; + background-color: #c4e3f3; +} + +a.list-group-item-info.active, +button.list-group-item-info.active { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} + +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} + +a.list-group-item-warning:focus, a.list-group-item-warning:hover, +button.list-group-item-warning:focus, +button.list-group-item-warning:hover { + color: #8a6d3b; + background-color: #faf2cc; +} + +a.list-group-item-warning.active, +button.list-group-item-warning.active { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} + +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} + +a.list-group-item-danger:focus, a.list-group-item-danger:hover, +button.list-group-item-danger:focus, +button.list-group-item-danger:hover { + color: #a94442; + background-color: #ebcccc; +} + +a.list-group-item-danger.active, +button.list-group-item-danger.active { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:focus, .close:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .75; +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + outline: 0; +} + +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform 0.3s ease-out; + transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out, -o-transform 0.3s ease-out; + -webkit-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +.modal.show .modal-dialog { + -webkit-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; + border-bottom: 1px solid #eceeef; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + -webkit-box-flex: 1; + -webkit-flex: 1 1 auto; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + padding: 15px; +} + +.modal-footer { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: end; + -webkit-justify-content: flex-end; + -ms-flex-pack: end; + justify-content: flex-end; + padding: 15px; + border-top: 1px solid #eceeef; +} + +.modal-footer > :not(:first-child) { + margin-left: .25rem; +} + +.modal-footer > :not(:last-child) { + margin-right: .25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 30px auto; + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg { + max-width: 800px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip.tooltip-top, .tooltip.bs-tether-element-attached-bottom { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.tooltip-top .tooltip-inner::before, .tooltip.bs-tether-element-attached-bottom .tooltip-inner::before { + bottom: 0; + left: 50%; + margin-left: -5px; + content: ""; + border-width: 5px 5px 0; + border-top-color: #000; +} + +.tooltip.tooltip-right, .tooltip.bs-tether-element-attached-left { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.tooltip-right .tooltip-inner::before, .tooltip.bs-tether-element-attached-left .tooltip-inner::before { + top: 50%; + left: 0; + margin-top: -5px; + content: ""; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} + +.tooltip.tooltip-bottom, .tooltip.bs-tether-element-attached-top { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.tooltip-bottom .tooltip-inner::before, .tooltip.bs-tether-element-attached-top .tooltip-inner::before { + top: 0; + left: 50%; + margin-left: -5px; + content: ""; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip.tooltip-left, .tooltip.bs-tether-element-attached-right { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip.tooltip-left .tooltip-inner::before, .tooltip.bs-tether-element-attached-right .tooltip-inner::before { + top: 50%; + right: 0; + margin-top: -5px; + content: ""; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.tooltip-inner::before { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + padding: 1px; + font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} + +.popover.popover-top, .popover.bs-tether-element-attached-bottom { + margin-top: -10px; +} + +.popover.popover-top::before, .popover.popover-top::after, .popover.bs-tether-element-attached-bottom::before, .popover.bs-tether-element-attached-bottom::after { + left: 50%; + border-bottom-width: 0; +} + +.popover.popover-top::before, .popover.bs-tether-element-attached-bottom::before { + bottom: -11px; + margin-left: -11px; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-top::after, .popover.bs-tether-element-attached-bottom::after { + bottom: -10px; + margin-left: -10px; + border-top-color: #fff; +} + +.popover.popover-right, .popover.bs-tether-element-attached-left { + margin-left: 10px; +} + +.popover.popover-right::before, .popover.popover-right::after, .popover.bs-tether-element-attached-left::before, .popover.bs-tether-element-attached-left::after { + top: 50%; + border-left-width: 0; +} + +.popover.popover-right::before, .popover.bs-tether-element-attached-left::before { + left: -11px; + margin-top: -11px; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-right::after, .popover.bs-tether-element-attached-left::after { + left: -10px; + margin-top: -10px; + border-right-color: #fff; +} + +.popover.popover-bottom, .popover.bs-tether-element-attached-top { + margin-top: 10px; +} + +.popover.popover-bottom::before, .popover.popover-bottom::after, .popover.bs-tether-element-attached-top::before, .popover.bs-tether-element-attached-top::after { + left: 50%; + border-top-width: 0; +} + +.popover.popover-bottom::before, .popover.bs-tether-element-attached-top::before { + top: -11px; + margin-left: -11px; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-bottom::after, .popover.bs-tether-element-attached-top::after { + top: -10px; + margin-left: -10px; + border-bottom-color: #f7f7f7; +} + +.popover.popover-bottom .popover-title::before, .popover.bs-tether-element-attached-top .popover-title::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 20px; + margin-left: -10px; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.popover.popover-left, .popover.bs-tether-element-attached-right { + margin-left: -10px; +} + +.popover.popover-left::before, .popover.popover-left::after, .popover.bs-tether-element-attached-right::before, .popover.bs-tether-element-attached-right::after { + top: 50%; + border-right-width: 0; +} + +.popover.popover-left::before, .popover.bs-tether-element-attached-right::before { + right: -11px; + margin-top: -11px; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.popover.popover-left::after, .popover.bs-tether-element-attached-right::after { + right: -10px; + margin-top: -10px; + border-left-color: #fff; +} + +.popover-title { + padding: 8px 14px; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-right-radius: calc(0.3rem - 1px); + border-top-left-radius: calc(0.3rem - 1px); +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover::before, +.popover::after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover::before { + content: ""; + border-width: 11px; +} + +.popover::after { + content: ""; + border-width: 10px; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-item { + position: relative; + display: none; + width: 100%; +} + +@media (-webkit-transform-3d) { + .carousel-item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } +} + +@supports ((-webkit-transform: translate3d(0, 0, 0)) or (transform: translate3d(0, 0, 0))) { + .carousel-item { + -webkit-transition: -webkit-transform 0.6s ease-in-out; + transition: -webkit-transform 0.6s ease-in-out; + -o-transition: -o-transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out; + transition: transform 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out, -o-transform 0.6s ease-in-out; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.carousel-item-next, +.carousel-item-prev { + position: absolute; + top: 0; +} + +@media (-webkit-transform-3d) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@supports ((-webkit-transform: translate3d(0, 0, 0)) or (transform: translate3d(0, 0, 0))) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -webkit-align-items: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; +} + +.carousel-control-prev:focus, .carousel-control-prev:hover, +.carousel-control-next:focus, +.carousel-control-next:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + -webkit-background-size: 100% 100%; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + position: relative; + -webkit-box-flex: 1; + -webkit-flex: 1 0 auto; + -ms-flex: 1 0 auto; + flex: 1 0 auto; + max-width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: rgba(255, 255, 255, 0.5); +} + +.carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-faded { + background-color: #f7f7f7; +} + +.bg-primary { + background-color: #0275d8 !important; +} + +a.bg-primary:focus, a.bg-primary:hover { + background-color: #025aa5 !important; +} + +.bg-success { + background-color: #5cb85c !important; +} + +a.bg-success:focus, a.bg-success:hover { + background-color: #449d44 !important; +} + +.bg-info { + background-color: #5bc0de !important; +} + +a.bg-info:focus, a.bg-info:hover { + background-color: #31b0d5 !important; +} + +.bg-warning { + background-color: #f0ad4e !important; +} + +a.bg-warning:focus, a.bg-warning:hover { + background-color: #ec971f !important; +} + +.bg-danger { + background-color: #d9534f !important; +} + +a.bg-danger:focus, a.bg-danger:hover { + background-color: #c9302c !important; +} + +.bg-inverse { + background-color: #292b2c !important; +} + +a.bg-inverse:focus, a.bg-inverse:hover { + background-color: #101112 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.rounded { + border-radius: 0.25rem; +} + +.rounded-top { + border-top-right-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.rounded-right { + border-bottom-right-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.rounded-left { + border-bottom-left-radius: 0.25rem; + border-top-left-radius: 0.25rem; +} + +.rounded-circle { + border-radius: 50%; +} + +.rounded-0 { + border-radius: 0; +} + +.clearfix::after { + display: block; + content: ""; + clear: both; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; +} + +.d-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-sm-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-md-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-lg-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: -webkit-box !important; + display: -webkit-flex !important; + display: -ms-flexbox !important; + display: flex !important; + } + .d-xl-inline-flex { + display: -webkit-inline-box !important; + display: -webkit-inline-flex !important; + display: -ms-inline-flexbox !important; + display: inline-flex !important; + } +} + +.flex-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; +} + +.flex-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; +} + +.flex-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; +} + +.flex-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; +} + +.flex-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; +} + +.flex-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; +} + +.flex-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; +} + +.flex-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; +} + +.justify-content-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; +} + +.justify-content-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; +} + +.justify-content-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; +} + +.justify-content-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; +} + +.align-items-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; +} + +.align-items-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; +} + +.align-items-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; +} + +.align-items-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; +} + +.align-items-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; +} + +.align-content-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; +} + +.align-content-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; +} + +.align-content-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; +} + +.align-content-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; +} + +.align-content-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; +} + +.align-content-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; +} + +.align-self-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; +} + +.align-self-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; +} + +.align-self-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; +} + +.align-self-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; +} + +.align-self-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; +} + +.align-self-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-sm-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-sm-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-sm-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-sm-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-sm-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-sm-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-sm-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-sm-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-sm-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-sm-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-sm-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-sm-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-sm-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-sm-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-sm-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-sm-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-sm-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-sm-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-sm-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-sm-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-sm-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-sm-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-sm-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-sm-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-sm-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-sm-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-md-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-md-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-md-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-md-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-md-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-md-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-md-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-md-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-md-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-md-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-md-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-md-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-md-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-md-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-md-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-md-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-md-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-md-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-md-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-md-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-md-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-md-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-md-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-md-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-md-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-md-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-md-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-md-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-lg-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-lg-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-lg-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-lg-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-lg-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-lg-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-lg-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-lg-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-lg-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-lg-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-lg-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-lg-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-lg-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-lg-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-lg-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-lg-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-lg-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-lg-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-lg-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-lg-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-lg-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-lg-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-lg-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-lg-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-lg-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-lg-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-first { + -webkit-box-ordinal-group: 0; + -webkit-order: -1; + -ms-flex-order: -1; + order: -1; + } + .flex-xl-last { + -webkit-box-ordinal-group: 2; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; + } + .flex-xl-unordered { + -webkit-box-ordinal-group: 1; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; + } + .flex-xl-row { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: row !important; + -ms-flex-direction: row !important; + flex-direction: row !important; + } + .flex-xl-column { + -webkit-box-orient: vertical !important; + -webkit-box-direction: normal !important; + -webkit-flex-direction: column !important; + -ms-flex-direction: column !important; + flex-direction: column !important; + } + .flex-xl-row-reverse { + -webkit-box-orient: horizontal !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: row-reverse !important; + -ms-flex-direction: row-reverse !important; + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + -webkit-box-orient: vertical !important; + -webkit-box-direction: reverse !important; + -webkit-flex-direction: column-reverse !important; + -ms-flex-direction: column-reverse !important; + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + -webkit-flex-wrap: wrap !important; + -ms-flex-wrap: wrap !important; + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + -webkit-flex-wrap: nowrap !important; + -ms-flex-wrap: nowrap !important; + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + -webkit-flex-wrap: wrap-reverse !important; + -ms-flex-wrap: wrap-reverse !important; + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + -webkit-box-pack: start !important; + -webkit-justify-content: flex-start !important; + -ms-flex-pack: start !important; + justify-content: flex-start !important; + } + .justify-content-xl-end { + -webkit-box-pack: end !important; + -webkit-justify-content: flex-end !important; + -ms-flex-pack: end !important; + justify-content: flex-end !important; + } + .justify-content-xl-center { + -webkit-box-pack: center !important; + -webkit-justify-content: center !important; + -ms-flex-pack: center !important; + justify-content: center !important; + } + .justify-content-xl-between { + -webkit-box-pack: justify !important; + -webkit-justify-content: space-between !important; + -ms-flex-pack: justify !important; + justify-content: space-between !important; + } + .justify-content-xl-around { + -webkit-justify-content: space-around !important; + -ms-flex-pack: distribute !important; + justify-content: space-around !important; + } + .align-items-xl-start { + -webkit-box-align: start !important; + -webkit-align-items: flex-start !important; + -ms-flex-align: start !important; + align-items: flex-start !important; + } + .align-items-xl-end { + -webkit-box-align: end !important; + -webkit-align-items: flex-end !important; + -ms-flex-align: end !important; + align-items: flex-end !important; + } + .align-items-xl-center { + -webkit-box-align: center !important; + -webkit-align-items: center !important; + -ms-flex-align: center !important; + align-items: center !important; + } + .align-items-xl-baseline { + -webkit-box-align: baseline !important; + -webkit-align-items: baseline !important; + -ms-flex-align: baseline !important; + align-items: baseline !important; + } + .align-items-xl-stretch { + -webkit-box-align: stretch !important; + -webkit-align-items: stretch !important; + -ms-flex-align: stretch !important; + align-items: stretch !important; + } + .align-content-xl-start { + -webkit-align-content: flex-start !important; + -ms-flex-line-pack: start !important; + align-content: flex-start !important; + } + .align-content-xl-end { + -webkit-align-content: flex-end !important; + -ms-flex-line-pack: end !important; + align-content: flex-end !important; + } + .align-content-xl-center { + -webkit-align-content: center !important; + -ms-flex-line-pack: center !important; + align-content: center !important; + } + .align-content-xl-between { + -webkit-align-content: space-between !important; + -ms-flex-line-pack: justify !important; + align-content: space-between !important; + } + .align-content-xl-around { + -webkit-align-content: space-around !important; + -ms-flex-line-pack: distribute !important; + align-content: space-around !important; + } + .align-content-xl-stretch { + -webkit-align-content: stretch !important; + -ms-flex-line-pack: stretch !important; + align-content: stretch !important; + } + .align-self-xl-auto { + -webkit-align-self: auto !important; + -ms-flex-item-align: auto !important; + -ms-grid-row-align: auto !important; + align-self: auto !important; + } + .align-self-xl-start { + -webkit-align-self: flex-start !important; + -ms-flex-item-align: start !important; + align-self: flex-start !important; + } + .align-self-xl-end { + -webkit-align-self: flex-end !important; + -ms-flex-item-align: end !important; + align-self: flex-end !important; + } + .align-self-xl-center { + -webkit-align-self: center !important; + -ms-flex-item-align: center !important; + -ms-grid-row-align: center !important; + align-self: center !important; + } + .align-self-xl-baseline { + -webkit-align-self: baseline !important; + -ms-flex-item-align: baseline !important; + align-self: baseline !important; + } + .align-self-xl-stretch { + -webkit-align-self: stretch !important; + -ms-flex-item-align: stretch !important; + -ms-grid-row-align: stretch !important; + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1030; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.m-0 { + margin: 0 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mr-0 { + margin-right: 0 !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.ml-0 { + margin-left: 0 !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.m-1 { + margin: 0.25rem 0.25rem !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mr-1 { + margin-right: 0.25rem !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.ml-1 { + margin-left: 0.25rem !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem 0.5rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mr-2 { + margin-right: 0.5rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.ml-2 { + margin-left: 0.5rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.m-3 { + margin: 1rem 1rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mr-3 { + margin-right: 1rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.ml-3 { + margin-left: 1rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.m-4 { + margin: 1.5rem 1.5rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mr-4 { + margin-right: 1.5rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.ml-4 { + margin-left: 1.5rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.m-5 { + margin: 3rem 3rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mr-5 { + margin-right: 3rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.ml-5 { + margin-left: 3rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.p-0 { + padding: 0 0 !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pr-0 { + padding-right: 0 !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pl-0 { + padding-left: 0 !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.p-1 { + padding: 0.25rem 0.25rem !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pr-1 { + padding-right: 0.25rem !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pl-1 { + padding-left: 0.25rem !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem 0.5rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pr-2 { + padding-right: 0.5rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pl-2 { + padding-left: 0.5rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.p-3 { + padding: 1rem 1rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pr-3 { + padding-right: 1rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pl-3 { + padding-left: 1rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.p-4 { + padding: 1.5rem 1.5rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pr-4 { + padding-right: 1.5rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pl-4 { + padding-left: 1.5rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.p-5 { + padding: 3rem 3rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pr-5 { + padding-right: 3rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.pl-5 { + padding-left: 3rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.mr-auto { + margin-right: auto !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ml-auto { + margin-left: auto !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 0 !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0 { + margin-left: 0 !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-sm-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mr-sm-1 { + margin-right: 0.25rem !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .ml-sm-1 { + margin-left: 0.25rem !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mr-sm-2 { + margin-right: 0.5rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .ml-sm-2 { + margin-left: 0.5rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem 1rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mr-sm-3 { + margin-right: 1rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .ml-sm-3 { + margin-left: 1rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mr-sm-4 { + margin-right: 1.5rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .ml-sm-4 { + margin-left: 1.5rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem 3rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mr-sm-5 { + margin-right: 3rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .ml-sm-5 { + margin-left: 3rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-sm-0 { + padding: 0 0 !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0 { + padding-left: 0 !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-sm-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pr-sm-1 { + padding-right: 0.25rem !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pl-sm-1 { + padding-left: 0.25rem !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pr-sm-2 { + padding-right: 0.5rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pl-sm-2 { + padding-left: 0.5rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem 1rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pr-sm-3 { + padding-right: 1rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pl-sm-3 { + padding-left: 1rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pr-sm-4 { + padding-right: 1.5rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pl-sm-4 { + padding-left: 1.5rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem 3rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pr-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .pl-sm-5 { + padding-left: 3rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto { + margin-left: auto !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 0 !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mr-md-0 { + margin-right: 0 !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0 { + margin-left: 0 !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-md-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mr-md-1 { + margin-right: 0.25rem !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .ml-md-1 { + margin-left: 0.25rem !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mr-md-2 { + margin-right: 0.5rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .ml-md-2 { + margin-left: 0.5rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-md-3 { + margin: 1rem 1rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mr-md-3 { + margin-right: 1rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .ml-md-3 { + margin-left: 1rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-md-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mr-md-4 { + margin-right: 1.5rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .ml-md-4 { + margin-left: 1.5rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-md-5 { + margin: 3rem 3rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mr-md-5 { + margin-right: 3rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .ml-md-5 { + margin-left: 3rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-md-0 { + padding: 0 0 !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pr-md-0 { + padding-right: 0 !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0 { + padding-left: 0 !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-md-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pr-md-1 { + padding-right: 0.25rem !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pl-md-1 { + padding-left: 0.25rem !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pr-md-2 { + padding-right: 0.5rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pl-md-2 { + padding-left: 0.5rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-md-3 { + padding: 1rem 1rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pr-md-3 { + padding-right: 1rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pl-md-3 { + padding-left: 1rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-md-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pr-md-4 { + padding-right: 1.5rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pl-md-4 { + padding-left: 1.5rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-md-5 { + padding: 3rem 3rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pr-md-5 { + padding-right: 3rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .pl-md-5 { + padding-left: 3rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .mr-md-auto { + margin-right: auto !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto { + margin-left: auto !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 0 !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0 { + margin-left: 0 !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-lg-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mr-lg-1 { + margin-right: 0.25rem !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .ml-lg-1 { + margin-left: 0.25rem !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mr-lg-2 { + margin-right: 0.5rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .ml-lg-2 { + margin-left: 0.5rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem 1rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mr-lg-3 { + margin-right: 1rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .ml-lg-3 { + margin-left: 1rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mr-lg-4 { + margin-right: 1.5rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .ml-lg-4 { + margin-left: 1.5rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem 3rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mr-lg-5 { + margin-right: 3rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .ml-lg-5 { + margin-left: 3rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-lg-0 { + padding: 0 0 !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0 { + padding-left: 0 !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-lg-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pr-lg-1 { + padding-right: 0.25rem !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pl-lg-1 { + padding-left: 0.25rem !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pr-lg-2 { + padding-right: 0.5rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pl-lg-2 { + padding-left: 0.5rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem 1rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pr-lg-3 { + padding-right: 1rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pl-lg-3 { + padding-left: 1rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pr-lg-4 { + padding-right: 1.5rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pl-lg-4 { + padding-left: 1.5rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem 3rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pr-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .pl-lg-5 { + padding-left: 3rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto { + margin-left: auto !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 0 !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0 { + margin-left: 0 !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .m-xl-1 { + margin: 0.25rem 0.25rem !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mr-xl-1 { + margin-right: 0.25rem !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .ml-xl-1 { + margin-left: 0.25rem !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem 0.5rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mr-xl-2 { + margin-right: 0.5rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .ml-xl-2 { + margin-left: 0.5rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem 1rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mr-xl-3 { + margin-right: 1rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .ml-xl-3 { + margin-left: 1rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem 1.5rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mr-xl-4 { + margin-right: 1.5rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .ml-xl-4 { + margin-left: 1.5rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem 3rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mr-xl-5 { + margin-right: 3rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .ml-xl-5 { + margin-left: 3rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .p-xl-0 { + padding: 0 0 !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0 { + padding-left: 0 !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .p-xl-1 { + padding: 0.25rem 0.25rem !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pr-xl-1 { + padding-right: 0.25rem !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pl-xl-1 { + padding-left: 0.25rem !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem 0.5rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pr-xl-2 { + padding-right: 0.5rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pl-xl-2 { + padding-left: 0.5rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem 1rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pr-xl-3 { + padding-right: 1rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pl-xl-3 { + padding-left: 1rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem 1.5rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pr-xl-4 { + padding-right: 1.5rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pl-xl-4 { + padding-left: 1.5rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem 3rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pr-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .pl-xl-5 { + padding-left: 3rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto { + margin-left: auto !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } +} + +.text-justify { + text-align: justify !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-normal { + font-weight: normal; +} + +.font-weight-bold { + font-weight: bold; +} + +.font-italic { + font-style: italic; +} + +.text-white { + color: #fff !important; +} + +.text-muted { + color: #636c72 !important; +} + +a.text-muted:focus, a.text-muted:hover { + color: #4b5257 !important; +} + +.text-primary { + color: #0275d8 !important; +} + +a.text-primary:focus, a.text-primary:hover { + color: #025aa5 !important; +} + +.text-success { + color: #5cb85c !important; +} + +a.text-success:focus, a.text-success:hover { + color: #449d44 !important; +} + +.text-info { + color: #5bc0de !important; +} + +a.text-info:focus, a.text-info:hover { + color: #31b0d5 !important; +} + +.text-warning { + color: #f0ad4e !important; +} + +a.text-warning:focus, a.text-warning:hover { + color: #ec971f !important; +} + +.text-danger { + color: #d9534f !important; +} + +a.text-danger:focus, a.text-danger:hover { + color: #c9302c !important; +} + +.text-gray-dark { + color: #292b2c !important; +} + +a.text-gray-dark:focus, a.text-gray-dark:hover { + color: #101112 !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.invisible { + visibility: hidden !important; +} + +.hidden-xs-up { + display: none !important; +} + +@media (max-width: 575px) { + .hidden-xs-down { + display: none !important; + } +} + +@media (min-width: 576px) { + .hidden-sm-up { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-sm-down { + display: none !important; + } +} + +@media (min-width: 768px) { + .hidden-md-up { + display: none !important; + } +} + +@media (max-width: 991px) { + .hidden-md-down { + display: none !important; + } +} + +@media (min-width: 992px) { + .hidden-lg-up { + display: none !important; + } +} + +@media (max-width: 1199px) { + .hidden-lg-down { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xl-up { + display: none !important; + } +} + +.hidden-xl-down { + display: none !important; +} + +.visible-print-block { + display: none !important; +} + +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} + +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} + +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/font-awesome.min.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/font-awesome.min.css new file mode 100644 index 00000000..248ea7ab --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale} .fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%} .fa-2x{font-size:2em} .fa-3x{font-size:3em} .fa-4x{font-size:4em} .fa-5x{font-size:5em} .fa-fw{width:1.28571429em;text-align:center} .fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none} .fa-ul>li{position:relative} .fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center} .fa-li.fa-lg{left:-1.85714286em} .fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em} .fa-pull-left{float:left} .fa-pull-right{float:right} .fa.fa-pull-left{margin-right:.3em} .fa.fa-pull-right{margin-left:.3em} .pull-right{float:right} .pull-left{float:left} .fa.pull-left{margin-right:.3em} .fa.pull-right{margin-left:.3em} .fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear} .fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)} @-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} @keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} .fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)} .fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)} .fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)} .fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)} .fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)} :root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none} .fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle} .fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center} .fa-stack-1x{line-height:inherit} .fa-stack-2x{font-size:2em} .fa-inverse{color:#fff} .fa-glass:before{content:"\f000"} .fa-music:before{content:"\f001"} .fa-search:before{content:"\f002"} .fa-envelope-o:before{content:"\f003"} .fa-heart:before{content:"\f004"} .fa-star:before{content:"\f005"} .fa-star-o:before{content:"\f006"} .fa-user:before{content:"\f007"} .fa-film:before{content:"\f008"} .fa-th-large:before{content:"\f009"} .fa-th:before{content:"\f00a"} .fa-th-list:before{content:"\f00b"} .fa-check:before{content:"\f00c"} .fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"} .fa-search-plus:before{content:"\f00e"} .fa-search-minus:before{content:"\f010"} .fa-power-off:before{content:"\f011"} .fa-signal:before{content:"\f012"} .fa-gear:before,.fa-cog:before{content:"\f013"} .fa-trash-o:before{content:"\f014"} .fa-home:before{content:"\f015"} .fa-file-o:before{content:"\f016"} .fa-clock-o:before{content:"\f017"} .fa-road:before{content:"\f018"} .fa-download:before{content:"\f019"} .fa-arrow-circle-o-down:before{content:"\f01a"} .fa-arrow-circle-o-up:before{content:"\f01b"} .fa-inbox:before{content:"\f01c"} .fa-play-circle-o:before{content:"\f01d"} .fa-rotate-right:before,.fa-repeat:before{content:"\f01e"} .fa-refresh:before{content:"\f021"} .fa-list-alt:before{content:"\f022"} .fa-lock:before{content:"\f023"} .fa-flag:before{content:"\f024"} .fa-headphones:before{content:"\f025"} .fa-volume-off:before{content:"\f026"} .fa-volume-down:before{content:"\f027"} .fa-volume-up:before{content:"\f028"} .fa-qrcode:before{content:"\f029"} .fa-barcode:before{content:"\f02a"} .fa-tag:before{content:"\f02b"} .fa-tags:before{content:"\f02c"} .fa-book:before{content:"\f02d"} .fa-bookmark:before{content:"\f02e"} .fa-print:before{content:"\f02f"} .fa-camera:before{content:"\f030"} .fa-font:before{content:"\f031"} .fa-bold:before{content:"\f032"} .fa-italic:before{content:"\f033"} .fa-text-height:before{content:"\f034"} .fa-text-width:before{content:"\f035"} .fa-align-left:before{content:"\f036"} .fa-align-center:before{content:"\f037"} .fa-align-right:before{content:"\f038"} .fa-align-justify:before{content:"\f039"} .fa-list:before{content:"\f03a"} .fa-dedent:before,.fa-outdent:before{content:"\f03b"} .fa-indent:before{content:"\f03c"} .fa-video-camera:before{content:"\f03d"} .fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"} .fa-pencil:before{content:"\f040"} .fa-map-marker:before{content:"\f041"} .fa-adjust:before{content:"\f042"} .fa-tint:before{content:"\f043"} .fa-edit:before,.fa-pencil-square-o:before{content:"\f044"} .fa-share-square-o:before{content:"\f045"} .fa-check-square-o:before{content:"\f046"} .fa-arrows:before{content:"\f047"} .fa-step-backward:before{content:"\f048"} .fa-fast-backward:before{content:"\f049"} .fa-backward:before{content:"\f04a"} .fa-play:before{content:"\f04b"} .fa-pause:before{content:"\f04c"} .fa-stop:before{content:"\f04d"} .fa-forward:before{content:"\f04e"} .fa-fast-forward:before{content:"\f050"} .fa-step-forward:before{content:"\f051"} .fa-eject:before{content:"\f052"} .fa-chevron-left:before{content:"\f053"} .fa-chevron-right:before{content:"\f054"} .fa-plus-circle:before{content:"\f055"} .fa-minus-circle:before{content:"\f056"} .fa-times-circle:before{content:"\f057"} .fa-check-circle:before{content:"\f058"} .fa-question-circle:before{content:"\f059"} .fa-info-circle:before{content:"\f05a"} .fa-crosshairs:before{content:"\f05b"} .fa-times-circle-o:before{content:"\f05c"} .fa-check-circle-o:before{content:"\f05d"} .fa-ban:before{content:"\f05e"} .fa-arrow-left:before{content:"\f060"} .fa-arrow-right:before{content:"\f061"} .fa-arrow-up:before{content:"\f062"} .fa-arrow-down:before{content:"\f063"} .fa-mail-forward:before,.fa-share:before{content:"\f064"} .fa-expand:before{content:"\f065"} .fa-compress:before{content:"\f066"} .fa-plus:before{content:"\f067"} .fa-minus:before{content:"\f068"} .fa-asterisk:before{content:"\f069"} .fa-exclamation-circle:before{content:"\f06a"} .fa-gift:before{content:"\f06b"} .fa-leaf:before{content:"\f06c"} .fa-fire:before{content:"\f06d"} .fa-eye:before{content:"\f06e"} .fa-eye-slash:before{content:"\f070"} .fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"} .fa-plane:before{content:"\f072"} .fa-calendar:before{content:"\f073"} .fa-random:before{content:"\f074"} .fa-comment:before{content:"\f075"} .fa-magnet:before{content:"\f076"} .fa-chevron-up:before{content:"\f077"} .fa-chevron-down:before{content:"\f078"} .fa-retweet:before{content:"\f079"} .fa-shopping-cart:before{content:"\f07a"} .fa-folder:before{content:"\f07b"} .fa-folder-open:before{content:"\f07c"} .fa-arrows-v:before{content:"\f07d"} .fa-arrows-h:before{content:"\f07e"} .fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"} .fa-twitter-square:before{content:"\f081"} .fa-facebook-square:before{content:"\f082"} .fa-camera-retro:before{content:"\f083"} .fa-key:before{content:"\f084"} .fa-gears:before,.fa-cogs:before{content:"\f085"} .fa-comments:before{content:"\f086"} .fa-thumbs-o-up:before{content:"\f087"} .fa-thumbs-o-down:before{content:"\f088"} .fa-star-half:before{content:"\f089"} .fa-heart-o:before{content:"\f08a"} .fa-sign-out:before{content:"\f08b"} .fa-linkedin-square:before{content:"\f08c"} .fa-thumb-tack:before{content:"\f08d"} .fa-external-link:before{content:"\f08e"} .fa-sign-in:before{content:"\f090"} .fa-trophy:before{content:"\f091"} .fa-github-square:before{content:"\f092"} .fa-upload:before{content:"\f093"} .fa-lemon-o:before{content:"\f094"} .fa-phone:before{content:"\f095"} .fa-square-o:before{content:"\f096"} .fa-bookmark-o:before{content:"\f097"} .fa-phone-square:before{content:"\f098"} .fa-twitter:before{content:"\f099"} .fa-facebook-f:before,.fa-facebook:before{content:"\f09a"} .fa-github:before{content:"\f09b"} .fa-unlock:before{content:"\f09c"} .fa-credit-card:before{content:"\f09d"} .fa-feed:before,.fa-rss:before{content:"\f09e"} .fa-hdd-o:before{content:"\f0a0"} .fa-bullhorn:before{content:"\f0a1"} .fa-bell:before{content:"\f0f3"} .fa-certificate:before{content:"\f0a3"} .fa-hand-o-right:before{content:"\f0a4"} .fa-hand-o-left:before{content:"\f0a5"} .fa-hand-o-up:before{content:"\f0a6"} .fa-hand-o-down:before{content:"\f0a7"} .fa-arrow-circle-left:before{content:"\f0a8"} .fa-arrow-circle-right:before{content:"\f0a9"} .fa-arrow-circle-up:before{content:"\f0aa"} .fa-arrow-circle-down:before{content:"\f0ab"} .fa-globe:before{content:"\f0ac"} .fa-wrench:before{content:"\f0ad"} .fa-tasks:before{content:"\f0ae"} .fa-filter:before{content:"\f0b0"} .fa-briefcase:before{content:"\f0b1"} .fa-arrows-alt:before{content:"\f0b2"} .fa-group:before,.fa-users:before{content:"\f0c0"} .fa-chain:before,.fa-link:before{content:"\f0c1"} .fa-cloud:before{content:"\f0c2"} .fa-flask:before{content:"\f0c3"} .fa-cut:before,.fa-scissors:before{content:"\f0c4"} .fa-copy:before,.fa-files-o:before{content:"\f0c5"} .fa-paperclip:before{content:"\f0c6"} .fa-save:before,.fa-floppy-o:before{content:"\f0c7"} .fa-square:before{content:"\f0c8"} .fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"} .fa-list-ul:before{content:"\f0ca"} .fa-list-ol:before{content:"\f0cb"} .fa-strikethrough:before{content:"\f0cc"} .fa-underline:before{content:"\f0cd"} .fa-table:before{content:"\f0ce"} .fa-magic:before{content:"\f0d0"} .fa-truck:before{content:"\f0d1"} .fa-pinterest:before{content:"\f0d2"} .fa-pinterest-square:before{content:"\f0d3"} .fa-google-plus-square:before{content:"\f0d4"} .fa-google-plus:before{content:"\f0d5"} .fa-money:before{content:"\f0d6"} .fa-caret-down:before{content:"\f0d7"} .fa-caret-up:before{content:"\f0d8"} .fa-caret-left:before{content:"\f0d9"} .fa-caret-right:before{content:"\f0da"} .fa-columns:before{content:"\f0db"} .fa-unsorted:before,.fa-sort:before{content:"\f0dc"} .fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"} .fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"} .fa-envelope:before{content:"\f0e0"} .fa-linkedin:before{content:"\f0e1"} .fa-rotate-left:before,.fa-undo:before{content:"\f0e2"} .fa-legal:before,.fa-gavel:before{content:"\f0e3"} .fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"} .fa-comment-o:before{content:"\f0e5"} .fa-comments-o:before{content:"\f0e6"} .fa-flash:before,.fa-bolt:before{content:"\f0e7"} .fa-sitemap:before{content:"\f0e8"} .fa-umbrella:before{content:"\f0e9"} .fa-paste:before,.fa-clipboard:before{content:"\f0ea"} .fa-lightbulb-o:before{content:"\f0eb"} .fa-exchange:before{content:"\f0ec"} .fa-cloud-download:before{content:"\f0ed"} .fa-cloud-upload:before{content:"\f0ee"} .fa-user-md:before{content:"\f0f0"} .fa-stethoscope:before{content:"\f0f1"} .fa-suitcase:before{content:"\f0f2"} .fa-bell-o:before{content:"\f0a2"} .fa-coffee:before{content:"\f0f4"} .fa-cutlery:before{content:"\f0f5"} .fa-file-text-o:before{content:"\f0f6"} .fa-building-o:before{content:"\f0f7"} .fa-hospital-o:before{content:"\f0f8"} .fa-ambulance:before{content:"\f0f9"} .fa-medkit:before{content:"\f0fa"} .fa-fighter-jet:before{content:"\f0fb"} .fa-beer:before{content:"\f0fc"} .fa-h-square:before{content:"\f0fd"} .fa-plus-square:before{content:"\f0fe"} .fa-angle-double-left:before{content:"\f100"} .fa-angle-double-right:before{content:"\f101"} .fa-angle-double-up:before{content:"\f102"} .fa-angle-double-down:before{content:"\f103"} .fa-angle-left:before{content:"\f104"} .fa-angle-right:before{content:"\f105"} .fa-angle-up:before{content:"\f106"} .fa-angle-down:before{content:"\f107"} .fa-desktop:before{content:"\f108"} .fa-laptop:before{content:"\f109"} .fa-tablet:before{content:"\f10a"} .fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"} .fa-circle-o:before{content:"\f10c"} .fa-quote-left:before{content:"\f10d"} .fa-quote-right:before{content:"\f10e"} .fa-spinner:before{content:"\f110"} .fa-circle:before{content:"\f111"} .fa-mail-reply:before,.fa-reply:before{content:"\f112"} .fa-github-alt:before{content:"\f113"} .fa-folder-o:before{content:"\f114"} .fa-folder-open-o:before{content:"\f115"} .fa-smile-o:before{content:"\f118"} .fa-frown-o:before{content:"\f119"} .fa-meh-o:before{content:"\f11a"} .fa-gamepad:before{content:"\f11b"} .fa-keyboard-o:before{content:"\f11c"} .fa-flag-o:before{content:"\f11d"} .fa-flag-checkered:before{content:"\f11e"} .fa-terminal:before{content:"\f120"} .fa-code:before{content:"\f121"} .fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"} .fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"} .fa-location-arrow:before{content:"\f124"} .fa-crop:before{content:"\f125"} .fa-code-fork:before{content:"\f126"} .fa-unlink:before,.fa-chain-broken:before{content:"\f127"} .fa-question:before{content:"\f128"} .fa-info:before{content:"\f129"} .fa-exclamation:before{content:"\f12a"} .fa-superscript:before{content:"\f12b"} .fa-subscript:before{content:"\f12c"} .fa-eraser:before{content:"\f12d"} .fa-puzzle-piece:before{content:"\f12e"} .fa-microphone:before{content:"\f130"} .fa-microphone-slash:before{content:"\f131"} .fa-shield:before{content:"\f132"} .fa-calendar-o:before{content:"\f133"} .fa-fire-extinguisher:before{content:"\f134"} .fa-rocket:before{content:"\f135"} .fa-maxcdn:before{content:"\f136"} .fa-chevron-circle-left:before{content:"\f137"} .fa-chevron-circle-right:before{content:"\f138"} .fa-chevron-circle-up:before{content:"\f139"} .fa-chevron-circle-down:before{content:"\f13a"} .fa-html5:before{content:"\f13b"} .fa-css3:before{content:"\f13c"} .fa-anchor:before{content:"\f13d"} .fa-unlock-alt:before{content:"\f13e"} .fa-bullseye:before{content:"\f140"} .fa-ellipsis-h:before{content:"\f141"} .fa-ellipsis-v:before{content:"\f142"} .fa-rss-square:before{content:"\f143"} .fa-play-circle:before{content:"\f144"} .fa-ticket:before{content:"\f145"} .fa-minus-square:before{content:"\f146"} .fa-minus-square-o:before{content:"\f147"} .fa-level-up:before{content:"\f148"} .fa-level-down:before{content:"\f149"} .fa-check-square:before{content:"\f14a"} .fa-pencil-square:before{content:"\f14b"} .fa-external-link-square:before{content:"\f14c"} .fa-share-square:before{content:"\f14d"} .fa-compass:before{content:"\f14e"} .fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"} .fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"} .fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"} .fa-euro:before,.fa-eur:before{content:"\f153"} .fa-gbp:before{content:"\f154"} .fa-dollar:before,.fa-usd:before{content:"\f155"} .fa-rupee:before,.fa-inr:before{content:"\f156"} .fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"} .fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"} .fa-won:before,.fa-krw:before{content:"\f159"} .fa-bitcoin:before,.fa-btc:before{content:"\f15a"} .fa-file:before{content:"\f15b"} .fa-file-text:before{content:"\f15c"} .fa-sort-alpha-asc:before{content:"\f15d"} .fa-sort-alpha-desc:before{content:"\f15e"} .fa-sort-amount-asc:before{content:"\f160"} .fa-sort-amount-desc:before{content:"\f161"} .fa-sort-numeric-asc:before{content:"\f162"} .fa-sort-numeric-desc:before{content:"\f163"} .fa-thumbs-up:before{content:"\f164"} .fa-thumbs-down:before{content:"\f165"} .fa-youtube-square:before{content:"\f166"} .fa-youtube:before{content:"\f167"} .fa-xing:before{content:"\f168"} .fa-xing-square:before{content:"\f169"} .fa-youtube-play:before{content:"\f16a"} .fa-dropbox:before{content:"\f16b"} .fa-stack-overflow:before{content:"\f16c"} .fa-instagram:before{content:"\f16d"} .fa-flickr:before{content:"\f16e"} .fa-adn:before{content:"\f170"} .fa-bitbucket:before{content:"\f171"} .fa-bitbucket-square:before{content:"\f172"} .fa-tumblr:before{content:"\f173"} .fa-tumblr-square:before{content:"\f174"} .fa-long-arrow-down:before{content:"\f175"} .fa-long-arrow-up:before{content:"\f176"} .fa-long-arrow-left:before{content:"\f177"} .fa-long-arrow-right:before{content:"\f178"} .fa-apple:before{content:"\f179"} .fa-windows:before{content:"\f17a"} .fa-android:before{content:"\f17b"} .fa-linux:before{content:"\f17c"} .fa-dribbble:before{content:"\f17d"} .fa-skype:before{content:"\f17e"} .fa-foursquare:before{content:"\f180"} .fa-trello:before{content:"\f181"} .fa-female:before{content:"\f182"} .fa-male:before{content:"\f183"} .fa-gittip:before,.fa-gratipay:before{content:"\f184"} .fa-sun-o:before{content:"\f185"} .fa-moon-o:before{content:"\f186"} .fa-archive:before{content:"\f187"} .fa-bug:before{content:"\f188"} .fa-vk:before{content:"\f189"} .fa-weibo:before{content:"\f18a"} .fa-renren:before{content:"\f18b"} .fa-pagelines:before{content:"\f18c"} .fa-stack-exchange:before{content:"\f18d"} .fa-arrow-circle-o-right:before{content:"\f18e"} .fa-arrow-circle-o-left:before{content:"\f190"} .fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"} .fa-dot-circle-o:before{content:"\f192"} .fa-wheelchair:before{content:"\f193"} .fa-vimeo-square:before{content:"\f194"} .fa-turkish-lira:before,.fa-try:before{content:"\f195"} .fa-plus-square-o:before{content:"\f196"} .fa-space-shuttle:before{content:"\f197"} .fa-slack:before{content:"\f198"} .fa-envelope-square:before{content:"\f199"} .fa-wordpress:before{content:"\f19a"} .fa-openid:before{content:"\f19b"} .fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"} .fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"} .fa-yahoo:before{content:"\f19e"} .fa-google:before{content:"\f1a0"} .fa-reddit:before{content:"\f1a1"} .fa-reddit-square:before{content:"\f1a2"} .fa-stumbleupon-circle:before{content:"\f1a3"} .fa-stumbleupon:before{content:"\f1a4"} .fa-delicious:before{content:"\f1a5"} .fa-digg:before{content:"\f1a6"} .fa-pied-piper-pp:before{content:"\f1a7"} .fa-pied-piper-alt:before{content:"\f1a8"} .fa-drupal:before{content:"\f1a9"} .fa-joomla:before{content:"\f1aa"} .fa-language:before{content:"\f1ab"} .fa-fax:before{content:"\f1ac"} .fa-building:before{content:"\f1ad"} .fa-child:before{content:"\f1ae"} .fa-paw:before{content:"\f1b0"} .fa-spoon:before{content:"\f1b1"} .fa-cube:before{content:"\f1b2"} .fa-cubes:before{content:"\f1b3"} .fa-behance:before{content:"\f1b4"} .fa-behance-square:before{content:"\f1b5"} .fa-steam:before{content:"\f1b6"} .fa-steam-square:before{content:"\f1b7"} .fa-recycle:before{content:"\f1b8"} .fa-automobile:before,.fa-car:before{content:"\f1b9"} .fa-cab:before,.fa-taxi:before{content:"\f1ba"} .fa-tree:before{content:"\f1bb"} .fa-spotify:before{content:"\f1bc"} .fa-deviantart:before{content:"\f1bd"} .fa-soundcloud:before{content:"\f1be"} .fa-database:before{content:"\f1c0"} .fa-file-pdf-o:before{content:"\f1c1"} .fa-file-word-o:before{content:"\f1c2"} .fa-file-excel-o:before{content:"\f1c3"} .fa-file-powerpoint-o:before{content:"\f1c4"} .fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"} .fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"} .fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"} .fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"} .fa-file-code-o:before{content:"\f1c9"} .fa-vine:before{content:"\f1ca"} .fa-codepen:before{content:"\f1cb"} .fa-jsfiddle:before{content:"\f1cc"} .fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"} .fa-circle-o-notch:before{content:"\f1ce"} .fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"} .fa-ge:before,.fa-empire:before{content:"\f1d1"} .fa-git-square:before{content:"\f1d2"} .fa-git:before{content:"\f1d3"} .fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"} .fa-tencent-weibo:before{content:"\f1d5"} .fa-qq:before{content:"\f1d6"} .fa-wechat:before,.fa-weixin:before{content:"\f1d7"} .fa-send:before,.fa-paper-plane:before{content:"\f1d8"} .fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"} .fa-history:before{content:"\f1da"} .fa-circle-thin:before{content:"\f1db"} .fa-header:before{content:"\f1dc"} .fa-paragraph:before{content:"\f1dd"} .fa-sliders:before{content:"\f1de"} .fa-share-alt:before{content:"\f1e0"} .fa-share-alt-square:before{content:"\f1e1"} .fa-bomb:before{content:"\f1e2"} .fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"} .fa-tty:before{content:"\f1e4"} .fa-binoculars:before{content:"\f1e5"} .fa-plug:before{content:"\f1e6"} .fa-slideshare:before{content:"\f1e7"} .fa-twitch:before{content:"\f1e8"} .fa-yelp:before{content:"\f1e9"} .fa-newspaper-o:before{content:"\f1ea"} .fa-wifi:before{content:"\f1eb"} .fa-calculator:before{content:"\f1ec"} .fa-paypal:before{content:"\f1ed"} .fa-google-wallet:before{content:"\f1ee"} .fa-cc-visa:before{content:"\f1f0"} .fa-cc-mastercard:before{content:"\f1f1"} .fa-cc-discover:before{content:"\f1f2"} .fa-cc-amex:before{content:"\f1f3"} .fa-cc-paypal:before{content:"\f1f4"} .fa-cc-stripe:before{content:"\f1f5"} .fa-bell-slash:before{content:"\f1f6"} .fa-bell-slash-o:before{content:"\f1f7"} .fa-trash:before{content:"\f1f8"} .fa-copyright:before{content:"\f1f9"} .fa-at:before{content:"\f1fa"} .fa-eyedropper:before{content:"\f1fb"} .fa-paint-brush:before{content:"\f1fc"} .fa-birthday-cake:before{content:"\f1fd"} .fa-area-chart:before{content:"\f1fe"} .fa-pie-chart:before{content:"\f200"} .fa-line-chart:before{content:"\f201"} .fa-lastfm:before{content:"\f202"} .fa-lastfm-square:before{content:"\f203"} .fa-toggle-off:before{content:"\f204"} .fa-toggle-on:before{content:"\f205"} .fa-bicycle:before{content:"\f206"} .fa-bus:before{content:"\f207"} .fa-ioxhost:before{content:"\f208"} .fa-angellist:before{content:"\f209"} .fa-cc:before{content:"\f20a"} .fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"} .fa-meanpath:before{content:"\f20c"} .fa-buysellads:before{content:"\f20d"} .fa-connectdevelop:before{content:"\f20e"} .fa-dashcube:before{content:"\f210"} .fa-forumbee:before{content:"\f211"} .fa-leanpub:before{content:"\f212"} .fa-sellsy:before{content:"\f213"} .fa-shirtsinbulk:before{content:"\f214"} .fa-simplybuilt:before{content:"\f215"} .fa-skyatlas:before{content:"\f216"} .fa-cart-plus:before{content:"\f217"} .fa-cart-arrow-down:before{content:"\f218"} .fa-diamond:before{content:"\f219"} .fa-ship:before{content:"\f21a"} .fa-user-secret:before{content:"\f21b"} .fa-motorcycle:before{content:"\f21c"} .fa-street-view:before{content:"\f21d"} .fa-heartbeat:before{content:"\f21e"} .fa-venus:before{content:"\f221"} .fa-mars:before{content:"\f222"} .fa-mercury:before{content:"\f223"} .fa-intersex:before,.fa-transgender:before{content:"\f224"} .fa-transgender-alt:before{content:"\f225"} .fa-venus-double:before{content:"\f226"} .fa-mars-double:before{content:"\f227"} .fa-venus-mars:before{content:"\f228"} .fa-mars-stroke:before{content:"\f229"} .fa-mars-stroke-v:before{content:"\f22a"} .fa-mars-stroke-h:before{content:"\f22b"} .fa-neuter:before{content:"\f22c"} .fa-genderless:before{content:"\f22d"} .fa-facebook-official:before{content:"\f230"} .fa-pinterest-p:before{content:"\f231"} .fa-whatsapp:before{content:"\f232"} .fa-server:before{content:"\f233"} .fa-user-plus:before{content:"\f234"} .fa-user-times:before{content:"\f235"} .fa-hotel:before,.fa-bed:before{content:"\f236"} .fa-viacoin:before{content:"\f237"} .fa-train:before{content:"\f238"} .fa-subway:before{content:"\f239"} .fa-medium:before{content:"\f23a"} .fa-yc:before,.fa-y-combinator:before{content:"\f23b"} .fa-optin-monster:before{content:"\f23c"} .fa-opencart:before{content:"\f23d"} .fa-expeditedssl:before{content:"\f23e"} .fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"} .fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"} .fa-battery-2:before,.fa-battery-half:before{content:"\f242"} .fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"} .fa-battery-0:before,.fa-battery-empty:before{content:"\f244"} .fa-mouse-pointer:before{content:"\f245"} .fa-i-cursor:before{content:"\f246"} .fa-object-group:before{content:"\f247"} .fa-object-ungroup:before{content:"\f248"} .fa-sticky-note:before{content:"\f249"} .fa-sticky-note-o:before{content:"\f24a"} .fa-cc-jcb:before{content:"\f24b"} .fa-cc-diners-club:before{content:"\f24c"} .fa-clone:before{content:"\f24d"} .fa-balance-scale:before{content:"\f24e"} .fa-hourglass-o:before{content:"\f250"} .fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"} .fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"} .fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"} .fa-hourglass:before{content:"\f254"} .fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"} .fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"} .fa-hand-scissors-o:before{content:"\f257"} .fa-hand-lizard-o:before{content:"\f258"} .fa-hand-spock-o:before{content:"\f259"} .fa-hand-pointer-o:before{content:"\f25a"} .fa-hand-peace-o:before{content:"\f25b"} .fa-trademark:before{content:"\f25c"} .fa-registered:before{content:"\f25d"} .fa-creative-commons:before{content:"\f25e"} .fa-gg:before{content:"\f260"} .fa-gg-circle:before{content:"\f261"} .fa-tripadvisor:before{content:"\f262"} .fa-odnoklassniki:before{content:"\f263"} .fa-odnoklassniki-square:before{content:"\f264"} .fa-get-pocket:before{content:"\f265"} .fa-wikipedia-w:before{content:"\f266"} .fa-safari:before{content:"\f267"} .fa-chrome:before{content:"\f268"} .fa-firefox:before{content:"\f269"} .fa-opera:before{content:"\f26a"} .fa-internet-explorer:before{content:"\f26b"} .fa-tv:before,.fa-television:before{content:"\f26c"} .fa-contao:before{content:"\f26d"} .fa-500px:before{content:"\f26e"} .fa-amazon:before{content:"\f270"} .fa-calendar-plus-o:before{content:"\f271"} .fa-calendar-minus-o:before{content:"\f272"} .fa-calendar-times-o:before{content:"\f273"} .fa-calendar-check-o:before{content:"\f274"} .fa-industry:before{content:"\f275"} .fa-map-pin:before{content:"\f276"} .fa-map-signs:before{content:"\f277"} .fa-map-o:before{content:"\f278"} .fa-map:before{content:"\f279"} .fa-commenting:before{content:"\f27a"} .fa-commenting-o:before{content:"\f27b"} .fa-houzz:before{content:"\f27c"} .fa-vimeo:before{content:"\f27d"} .fa-black-tie:before{content:"\f27e"} .fa-fonticons:before{content:"\f280"} .fa-reddit-alien:before{content:"\f281"} .fa-edge:before{content:"\f282"} .fa-credit-card-alt:before{content:"\f283"} .fa-codiepie:before{content:"\f284"} .fa-modx:before{content:"\f285"} .fa-fort-awesome:before{content:"\f286"} .fa-usb:before{content:"\f287"} .fa-product-hunt:before{content:"\f288"} .fa-mixcloud:before{content:"\f289"} .fa-scribd:before{content:"\f28a"} .fa-pause-circle:before{content:"\f28b"} .fa-pause-circle-o:before{content:"\f28c"} .fa-stop-circle:before{content:"\f28d"} .fa-stop-circle-o:before{content:"\f28e"} .fa-shopping-bag:before{content:"\f290"} .fa-shopping-basket:before{content:"\f291"} .fa-hashtag:before{content:"\f292"} .fa-bluetooth:before{content:"\f293"} .fa-bluetooth-b:before{content:"\f294"} .fa-percent:before{content:"\f295"} .fa-gitlab:before{content:"\f296"} .fa-wpbeginner:before{content:"\f297"} .fa-wpforms:before{content:"\f298"} .fa-envira:before{content:"\f299"} .fa-universal-access:before{content:"\f29a"} .fa-wheelchair-alt:before{content:"\f29b"} .fa-question-circle-o:before{content:"\f29c"} .fa-blind:before{content:"\f29d"} .fa-audio-description:before{content:"\f29e"} .fa-volume-control-phone:before{content:"\f2a0"} .fa-braille:before{content:"\f2a1"} .fa-assistive-listening-systems:before{content:"\f2a2"} .fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"} .fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"} .fa-glide:before{content:"\f2a5"} .fa-glide-g:before{content:"\f2a6"} .fa-signing:before,.fa-sign-language:before{content:"\f2a7"} .fa-low-vision:before{content:"\f2a8"} .fa-viadeo:before{content:"\f2a9"} .fa-viadeo-square:before{content:"\f2aa"} .fa-snapchat:before{content:"\f2ab"} .fa-snapchat-ghost:before{content:"\f2ac"} .fa-snapchat-square:before{content:"\f2ad"} .fa-pied-piper:before{content:"\f2ae"} .fa-first-order:before{content:"\f2b0"} .fa-yoast:before{content:"\f2b1"} .fa-themeisle:before{content:"\f2b2"} .fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"} .fa-fa:before,.fa-font-awesome:before{content:"\f2b4"} .fa-handshake-o:before{content:"\f2b5"} .fa-envelope-open:before{content:"\f2b6"} .fa-envelope-open-o:before{content:"\f2b7"} .fa-linode:before{content:"\f2b8"} .fa-address-book:before{content:"\f2b9"} .fa-address-book-o:before{content:"\f2ba"} .fa-vcard:before,.fa-address-card:before{content:"\f2bb"} .fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"} .fa-user-circle:before{content:"\f2bd"} .fa-user-circle-o:before{content:"\f2be"} .fa-user-o:before{content:"\f2c0"} .fa-id-badge:before{content:"\f2c1"} .fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"} .fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"} .fa-quora:before{content:"\f2c4"} .fa-free-code-camp:before{content:"\f2c5"} .fa-telegram:before{content:"\f2c6"} .fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"} .fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"} .fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"} .fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"} .fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"} .fa-shower:before{content:"\f2cc"} .fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"} .fa-podcast:before{content:"\f2ce"} .fa-window-maximize:before{content:"\f2d0"} .fa-window-minimize:before{content:"\f2d1"} .fa-window-restore:before{content:"\f2d2"} .fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"} .fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"} .fa-bandcamp:before{content:"\f2d5"} .fa-grav:before{content:"\f2d6"} .fa-etsy:before{content:"\f2d7"} .fa-imdb:before{content:"\f2d8"} .fa-ravelry:before{content:"\f2d9"} .fa-eercast:before{content:"\f2da"} .fa-microchip:before{content:"\f2db"} .fa-snowflake-o:before{content:"\f2dc"} .fa-superpowers:before{content:"\f2dd"} .fa-wpexplorer:before{content:"\f2de"} .fa-meetup:before{content:"\f2e0"} .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0} .sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/iconfont.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/iconfont.css new file mode 100644 index 00000000..1b4dfb98 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/iconfont.css @@ -0,0 +1,95 @@ + +@font-face {font-family: "iconfont"; + src: url('../fonts/iconfont.eot?t=1510714355480'); /* IE9*/ + src: url('../fonts/iconfont.eot?t=1510714355480#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAABdEAAsAAAAAJRgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADMAAABCsP6z7U9TLzIAAAE8AAAARAAAAFZW7kmjY21hcAAAAYAAAAGdAAAEOjIGFotnbHlmAAADIAAAEGwAABk8OpQGYGhlYWQAABOMAAAALwAAADYPgt3jaGhlYQAAE7wAAAAcAAAAJAfeA6pobXR4AAAT2AAAABQAAACko+kAAGxvY2EAABPsAAAAVAAAAFRt8HQsbWF4cAAAFEAAAAAfAAAAIAFCAJduYW1lAAAUYAAAAUUAAAJtPlT+fXBvc3QAABWoAAABmgAAAmHv9z0eeJxjYGRgYOBikGPQYWB0cfMJYeBgYGGAAJAMY05meiJQDMoDyrGAaQ4gZoOIAgCKIwNPAHicY2Bk/s84gYGVgYOpk+kMAwNDP4RmfM1gxMjBwMDEwMrMgBUEpLmmMDgwVDzfxNzwv4EhhrmBoQEozAiSAwAy6w0meJzFks1OFFEQRk/DiKAoDoOKjsqPoENCXBogI84CkLiAMI/Citdgx4YflSfgKZAnYM3iq61vAF93NQnuNDHxVk5335vq7rq3DnAPGDSLpgEDXyn8RLHm1aJaH+RBtd4oJj3/wLTzHrOnQktaUU+b2lZf+zrQoS50qatoRivasRDLsRuncXZ97fdu87ta15Z26vzzO/mdKv+ozv/zUbim2/hIl1V6dazdiY0q+lX+Owa8q4b3PsR9hhnxDh8yyiPva4wnNBmnxQRPecZzJnnBS9q84jVveM+UT2CGWd4yxzwdf3Dor+r9p6P4f7/+fYyWl+JXPfOpsFfjElXjk0dLiXuAVpLSQHWT0kJ9Sko7tZq4V+hz4q6hXuL+ofXEnUQbSWmtviTuLtpMykq1lbjjaDtx79FOYgtQP7EPaD+xGeggsSPoMLEt6DyxN+hnYoPQRWKX0GViq9BVYr+IZmLTiFZi54h2QnnvJPaQWEhsJLGc2E1iN7GlxFFiX4njxOYSJ4kdJr4ltpn4nthr4kdiw4nTxK4TZwmdG6fXsYMAAAB4nIVZCZAc1Xl+/3vdr++e6Znu6dlDOzszu9O70mrX2p6d0cEeSAosh2zrCoeVsrShVlWSwCTBkEBsJlREEuwYMDIurY3MoTIQSkrB4kSiLHspWRirtHES46JQFamIuARJAYGkiO2CaeV/3XsJIjKa/bvf67/f8R/f/70RkQm5cI79kOVJlvSQVWQj+TwhwFdAyabLoBhU++kK8Iqy57s2C8pBUSmX+tkw+CXu5gZr1YrPFZ4CGzogLA7Wgn4awFB1hK6DwdwygJa21q2Z7vYMewD0fNCxP7qaPg5eodyeGlkZXdU36g52ZtU7zEymJZP5usplWaVUStlws5/TZE3n0WE51er9sNBLC2C2BK3X3mB1tmV2/WX1lmXdvgbQaEC2rdN+ctRpdfD7p625bKZFSVtqvtUqd7lwx6+MfNZcVvk3gp8U7vU8m2KtxMD7LPFJGymQMgnICjJAQlIn68go2YD790KvOBQOlZ2iw4pOsbuIFhDXsuhM/mDJfXZpf+iVu/GPhWGzGu5m1WqzSs9EBKrRGZhtTtHJKJyMP0DOxJ+ppBmRMITZMKTT+DxshnS2uRvOzIaz0VQYhtUwvECWXmAKP7hUsTG2m76JeyJQdHDJXtEJnSKbjE5uiU7C8BYYhqdheK4l1ON36BTMEoqNoEjJFFQhnFp89jZ9mWBkdGuARqaz0ZVwvBA1oLEaxmG8NzoXnfuErkYD9EcIx6MrC9CIGvTl6Fh0rBcKUFjQZeN0X6Jb14CNLyjQTQszfEIXNRUNji1MPL0ww5K9txGSHYH6YM7lZRuUDvCxVa0N5jxs9cMUO33QtCzznqOMHb0Hpe3b2HXwNDQOno4bcS9KoYVd7PTiOiboG7Ftg3ghaI86sF290cvRy73Cqr2wGlb3RifpsV5h34se4Osivw6xN9gEjuGTLtJNBkV+ESVH/BqpVwjrhwAXi0u2gQ3W6tl+KHEli+2y2wGDI1DFDhsomY3ek2VIz85CWpaj92an35Xld6cTaTvAwev0QIaMvdL08p4ZCzYhNJe8+dFXFt6ZfhfCjA2fTXteOpq2s982XctyW4RY8O0bdCLZuxIovuLX/XpAz/UeO9Z74kQs6er5O5SExfb6XTgV77WMPhEgEa4SMFEuXuL+P5cFwTLxR0vLKpX4Llrog58Ea4OPfROb/kQibJiYpIVUyLXkBlxjiXuOgKQhp1qR0e0OWi9udC8+qVXqg/UhtGhKGBkhC6OrUlKAu34Ob3N1dAB4HYB4tvgKTMqqaqhq9O+yAWAYKmf74h6qtqVkSdG+jHEBpjoevRX9mFty9ANZNtKwFi6XdKpRKIEW/R0XLzCNmipvvopvy7Siav8Fqhz9TLSgLqszmhwpsqbJ8FtZm3Vuo5qCs3FFV6JX4DPo87OyLes6tEWzEkgM1v6ObkW3XTQEIdISjPMR0behZRYyoh+WRltgM7eDDo5QxPgswr0XVmv1EQhrfgd4OYHpCn69cKhWx3+jMILAXgkqlBx5S5bfOpLIOFkOxvKQaqucqzair6KoFi2tqjj9mmF2+4FvaOB5fkGROCKNpvpZO6OoTraDtS6MdOStpjw/FMqfA1et9MKIHG73gmrBL6UM9I3RlvV9VzRaUqmU79u5rJlSS9m2lakKmYtDgQsFcg35LOLYMFQrA+hp7hYgCb6igj4XETIK1ZpSLA054WBtGEJRtYTjh6EfRJym5kIhLArbBP0ACO2TEjRUN6VcF91l2LYBjesURdJSOmvQt6JdqaOm9YZkIKxI5bbonKKzwyBV2mEqlcLQUd3oXw68r+sSYw01nVWvt/L2daqrMkpZQ2KPpuAByzyqqD8SI/+ovSLBYaZKUX97BTTJNVWJfvEAifd44Tx9Hv2c5ADBAuw7NpQqgYPr7BCL5qUKxn+te2mDEtMCsPJCfMO0cZE2jBrxlbWCZTaJgECWaF2yNY+Nm9DGfSL3Qr4MDYbxgjb1cxgu/cCxhfYKKtjK+QjLbs4PhzAEVytKx8ZffOnWO7jxyB/efuozEk9n5L5nJifv1fm+iYnnL3tAbP1NMOl5yO/fMVrpPXnnn/yNl7nlD9SMytVdO23nwJ49TxU7RrbHG3nTsOfXs40eIe3YQN9hfuPcSE5yBTQN0hHM7DiC2Zic4rovR99/Kdtt69R+R3Z0rjsy3Clhuj4qq7oWhUc0aqd6Uj+VFU3HfMxoPCVwB+eYpa8je2jD3BoSsQXFJED8IuaVgzYolirVGnIhrEWyK4gUNgUbCpJL0hUU0RIBpldFCC/J0BA9x+6LtrRXMFqOosOhUokm4wibQstHZ20jRJeZoWFPxjJub4HJ9i9dsWFvIaiMfg4G6kB3XrkfeuF9qLRHx9rEKG0w3l65IHzs25twhLzlnEp8/uPe9dcCbFyXp3TbaMrdVr9mF4VN5f45e75NZ8ly3GOFe8KUK9CwmAWxG4O4spaT1SNkxvtH7zbcVuuWLi2NOCmV714hs2/sufqOTnO5v+FGxBrYs4VOXjNB5dWwn1GQlm1Kyxl16xrq3XI/g2s3mDb9wpVufsfaz91M6cTV9e2EzOfzLP1n5GyFON6YSE6cms1PPOTKi2YvX2R3NrtbstTmpGpJu6Gvk5HOPvhoVtiRnhGyOWsbu4UtUSAZOYR6thrtPoxqqH5Y9efslhhMLEVg7DSbZZtIHjOvStbEGSD+FTEAVgCncXXvqqOZIAHcGEGwwCNFFrZLKlJ3EWsUO6bEn2hcMVT5uKjU7NRxIC6Y0Rgio/TSI+j/o7nXt8GkacuvPY5rhhuiM199ChpwQlXdC+T4qagpy+8dl007mkQkfez1XLTFsB95CX5mm4+/JttmNGXaIVTtpwTjw7V/j3lztaGMsSiQIXGlUx5I0ljxKjk/se0o1IRfbRHZmM9YPkVCi6SqY6I7cTXxcCO+yLKExgy3LP/mRonT4Z6eYfD65fT6rhaLse5tak8ezrf3qpU2ha9bC2ktanW0NatBUc2C2m/1WlaBSp0uonRnfuO3l7vpgsxXwWEucQlITxXqXdGG2+U2J5sqmTp85bzfBlBsn767u7wq+qJqQvrRQyldMRSVm7e3oCVzHXDCQp026wLxS5LE5byZPyt8qF5UJ8vkMrKV7CF3kvtERicVQtATpRjjFppB3C/2Q2yvsssVD7vcXIwvOawaCtIJjEDs9YQ9RpgoJAomT4mLwhIbCWtsFccIBHQImjIPHQxfLCYwLQLZo+cjkfemcHzsw//rPqpjuDKGjADQSoak40XHegKSLGmqziQFmKSqtiQKDOgy9jCZS7SrOVlYCbCyQKfiK7eNZow1dMqw6aYk6KfnKkXemk46YEJkrcQkHacCLjFN0p9WVYm7WM9wKtHnSuozODmXcDJMUVS3VFOia3CupXM2W+dns404pzDHp+jzc/7ouzRvYUv6EYIEzXc5JU++w/k7TyZyCSs5WB8HGK8nsrOvb6yvj04rL+7d+6ISy+Yr/MmtW5/ksYQ7F1Tr42dAKI/1xbU2yfc5Xnsp/p5diJZ+JOxxVmIynwKG5K15aglt4iIhbRP2mjZk2CbxdIn2R4eWkCL42wUfxJQc1/L37B/ZFsSeLqTCQWyGYMEkfsxhkbTOrwktxE5OIc2RPzh+4tcyyi0Prf2eqkiWpEgffUc++9jjZyXp7OOPnS18a+3DNxz/QFZ/ffyFD2RYM/gtDookZeDFx87KqPf9Vxl7dQ6Pl9gj/BR7lIfi04w3V/09QbjqQ6HIpk+3z8F40weFkRZv/z9DfUw9uSXzsfVz5CpZxOuQjCEjhHhhEBMWkdJoMiVJv3pQEUxhMOdDLl58smg040WNE1FDLfYU1ahhInx1+Yz4XaoBa0y1SQwdKEWOyLS0xpAqRjctki5z8fZ+Ws06TrZ5Jrs85Xqem13eJRmGhPBFQ4lzqTnrwHdsM65SKKJZ23TFPQoRB7in79IL6IOM2E98jIljD5R6uR4q7MHoIavfih7SfZ+e9f3o3C82//HQX10zQp/xvOb2XAAQQP6Xhw7fPB9X/8HGWI6UyCZRF6oDgi4loYW+U7hXTqqWsJY4VglzlZBVK0gM4otg2BhntbBWAA9Piv0wVIkrsMe8PdZmvx2uqtWugnZ/s7Un09KSoctRftPQpbwjjTGmmPLAKiWtUE75esYtna5YqaVzYKt7VQtmHGtzpto5l8bVzGbLaclEjUw+n4FGpiVSrVxaWicBUL5qJY5AFYePSHgAowPLlXSLpFqWusgl9tJ3iUU649itdCpedg6Es3Jc2nK8rPDqKNIev5ZjczsL8VEKcrWAl9je/ua9/TuprcOvdJPujM4YWhpWyTa9wQfjps00+O7vi55QTtMbc4waN22i5UP0q7feqjVf0DIAWZ2O7W01FHqdZXg0S1s7r1LvwuBuNThst02fubRl2dXqXfPrbdC3iUMCsg7P1HJusN4tmGzQjfgnc1cOZF4KupU4xxaeKgu9833Vyl/DHhkPiiis6GGmy9HDFv3vjXiuxDPk2Y0Kx4RYUJiIfiO6/2dCB2uhl9PUs4w9y3Ru8WcloM8pbX9UepDS+0tU1w02/+zIwD2M/fmA0safo/Q5pllGzJl+w77GNFIkvWSV4EzdIJBAHM0CxIdlCUIkGVkv5sRxqxvjWIB7/WNXdm/0iqdahv6vQrRGv5RlVQs0er9cSlms+c4XWtbrptmzo2WDZloDO1rX64ZxGfzTaTB0rpkwdzkdrZLzaUcBkA27/enlhmtsX2FmrOvF3TzO/ZZ9nZnEQ64/givuj48U8cE4XqA4GFfQtNhZkRQusMTPKUhfcuFgHQ+oyAtqmaCSlKgS3KRlUoorp1sMrMSOku/LYXEGODTRlf7p/Z+P3rycKcyQp4FpPVpKUVM6HqT/4bYj2SCsBIMvWK7GmZJfnucZLPJGPs01pr734EmntFP+8hlT5zyF2zJ7NPoDi0sbwf+aG1Z6BrvjfbzP7mYZsh5PLDdizMfhg+vHuE4hEgrSVw7EYZcrAfbwAt64viL4cG4USZ1ge6EvDss1rDAoB9BP5Rjpww5BZwVEDMY8cUiSlTGZsZqS3t6ytuhRg9+s6LT18up2W1+jaOsQpsZkyoZU+7r8mo48GMrN3KBtY1XMhbqivSTtGh/fAbE8XLuKXYGYweAKJEhFp7NzmFvyTou6+S5jK8KkqmzNrvSZscPSxzo7y4UR2cbHLOuXtOu5ho+3u8t9quPjvxjfwXDI35MnLotHFGIe9+Zr2cqLK1lW8cU5IlDKlaAeVCtor1FaRXxg4ozLP1HAgn2tVNLv269rtHUfY8iEDmzgSM02HJA4MPaJ6hXt2odP1l+pqAf2YS1GJfc+iQJl97n4rqQQjmubYQ02Fv9aXSArSJ1sSU6cF9HGolOUi4s/rPmXuI/f85IfN4pOWXQJLiqGoI1orEWcFFtgJrlGYzATPQok5TipC7G8xD0diF91OhyYGRO9yUC0gYM05waj2Nf8Mzo2g1r4bVx0oTOokbzZFApz+nO/nc6wGdz//G+n/Z/KChd//2Pl5D8nSuilmQ9l+cOZRD7xmiS99kQiU2JyJ9WZac/gl40tKM18+NGpBa0nXqO3g2NHM/G2x2wnCmyhjzX3fwHOAZADeJxjYGRgYADiw4s/qcfz23xl4GZhAIFrhmc+I+j/81gYmJOAXA4GJpAoAFhSC8wAeJxjYGRgYG7438AQw8IAAkCSkQEVaAIARy8CknicY2FgYGB+ycDAwjB4MQDGiwGNAAAAAAB2AOAA+gEIAR4BNAFKAV4BjgGwAgwCJgJaAugDagPcBBwEZASWBQwFUgWaBfgGfAdEB5IH2AgaCHII3AkECXgJ0Ao0Co4K8guAC84MTgyeeJxjYGRgYNBk6GbgZwABJiDmAkIGhv9gPgMAG4kB2gB4nGWPTU7DMBCFX/oHpBKqqGCH5AViASj9EatuWFRq911036ZOmyqJI8et1ANwHo7ACTgC3IA78EgnmzaWx9+8eWNPANzgBx6O3y33kT1cMjtyDRe4F65TfxBukF+Em2jjVbhF/U3YxzOmwm10YXmD17hi9oR3YQ8dfAjXcI1P4Tr1L+EG+Vu4iTv8CrfQ8erCPuZeV7iNRy/2x1YvnF6p5UHFockikzm/gple75KFrdLqnGtbxCZTg6BfSVOdaVvdU+zXQ+ciFVmTqgmrOkmMyq3Z6tAFG+fyUa8XiR6EJuVYY/62xgKOcQWFJQ6MMUIYZIjK6Og7VWb0r7FDwl57Vj3N53RbFNT/c4UBAvTPXFO6stJ5Ok+BPV8bUnV0K27LnpQ0kV7NSRKyQl7WtlRC6gE2ZVeOEXpc0Yk/KGdI/wAJWm7IAAAAeJxtUGtv2zAMNNs0SZ026bq03da9u1cHGOiKYdi/MRSKiYXIkkDJafzvR8X9OH3R3ZHHA1kcFcMri/+/eziCYxjBCYxhAlM4hRJmcAbnMIcFXMALuISXsIQruIYbeAWv4Q3cwlt4B+/hA3yET/AZ7uALfIVv8B1+wD38LGA/RWXJacWjYLtYomJKlfZPrlRuY6mytE6zAbLZNOlZzh3TAXZhjoZRkK+cT9icoPWRLmmPVrUqGe+qoWEmUZyqQ/lMknStMJdjqVVSFbUh9aOGbBjTPnhOY/S2a92Eac0UZW5DuF2IvdN142OqQ/34cD1wcjvD3rXkBnn53JZTtInbgzhfKdx2oc5xQqdoDW4F3G6sXylbR+KdQRIDEybPvdRKcQerMhxrspToNJJibEQ4VlrP1Mp5bsX9+DDhnPT77+LJ89a4TW290sJvZFwv11hZqmUT3zFSFH0WhMWOSfAVU6uMyy5UQaFJvajntF4bNOQwsyV3bujwTpt8ujx8462uo7E7YimEIF9ediS4nx5OXv/6UxT/AIqNtbgAAA==') format('woff'), + url('../fonts/iconfont.ttf?t=1510714355480') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('../fonts/iconfont.svg?t=1510714355480#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family:"iconfont" !important; + font-size:16px; + font-style:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.fp-calendar:before { content: "\e638"; } + +.fp-plus:before { content: "\e63a"; } + +.fp-caret-down:before { content: "\e63c"; } + +.fp-angle-left:before { content: "\e63d"; } + +.fp-angle-right:before { content: "\e63e"; } + +.fp-angle-down:before { content: "\e63f"; } + +.fp-angle-up:before { content: "\e640"; } + +.fp-circle-o-notch:before { content: "\e645"; } + +.fp-close:before { content: "\e646"; } + +.fp-exclamation-circle:before { content: "\e647"; } + +.fp-alert-close:before { content: "\e648"; } + +.fp-card_actions:before { content: "\e64e"; } + +.fp-data-empty:before { content: "\e64f"; } + +.fp-help:before { content: "\e651"; } + +.fp-export:before { content: "\e652"; } + +.fp-column:before { content: "\e691"; } + +.fp-refresh:before { content: "\e698"; } + +.fp-check:before { content: "\e69d"; } + +.fp-cloud_host_p_20:before { content: "\e6c8"; } + +.fp-cloud_environment_p_20:before { content: "\e6c9"; } + +.fp-cloud_hard_disk_p_20:before { content: "\e6ca"; } + +.fp-backup_data_20:before { content: "\e6d8"; } + +.fp-click_20:before { content: "\e6e2"; } + +.fp-global_service_directory_20:before { content: "\e711"; } + +.fp-display_20:before { content: "\e713"; } + +.fp-delete:before { content: "\e71b"; } + +.fp-search_20:before { content: "\e728"; } + +.fp-add:before { content: "\e729"; } + +.fp-abnormal_20:before { content: "\e739"; } + +.fp-risk_48:before { content: "\e79e"; } + +.fp-working_load_48:before { content: "\e79f"; } + +.fp-recyclable_resources_48:before { content: "\e7a0"; } + +.fp-pressure_48:before { content: "\e7a1"; } + +.fp-remaining_capacity_48:before { content: "\e7a2"; } + +.fp-efficiency_48:before { content: "\e7a3"; } + +.fp-running_condition_48:before { content: "\e7a4"; } + +.fp-gold_silver_copper_p_20:before { content: "\e601"; } + +.fp-copy:before { content: "\e772"; } + +.fp-alert_16:before { content: "\e7b2"; } + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/ngict-component.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/ngict-component.css new file mode 100644 index 00000000..98ad2e36 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/ngict-component.css @@ -0,0 +1,1874 @@ +/***main***/ +body, +button, +input, +optgroup, +select, +textarea, +.tooltip { + font-family: "Microsoft yahei", Segoe UI, Arial !important; + font-size: 12px; + color: #333; +} +body { + background-color: transparent; + font-size: 12px; + min-width: 1024px; +} +[class^="col-"], +[class*="col-"] { + float: left; +} +.clearfix:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.clearfix:before, +.clearfix:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + content: " "; + display: table; +} +.label, +label { + font-weight: 400; +} +*:focus { + outline: 0; +} +a { + color: #00abff; + text-decoration: none ; + cursor: pointer; +} +a:hover { + color: #00a3f5; + text-decoration: underline; +} +.border-box { + border: 1px solid #ddd; +} +/***icon***/ +[class^="ict-"], +[class*=" ict-"] { + padding-right: 3px; +} +/***color***/ +.red { + background-color: #ff5b55; + color: #fff; +} +.red:hover { + background-color: #f55651; + color: #fff; +} +.green { + background-color: #5fcc4a; + color: #fff; +} +.green:hover { + background-color: #329d96; + color: #fff; +} +.gold { + background-color: #c0af69; + color: #fff; +} +.gold:hover { + background-color: #ad9a4d; + color: #fff; +} +.over-grey { + background-color: transparent; + color: #00abff; + border: 0; +} +.over-grey:hover { + background-color: #f8f8f8; +} +.over-grey:focus:active { + background-color: #f2f2f2; +} +.grey { + background-color: #fff; + border: 1px solid #fff; + color: #a1abb3; + border: 1px solid #ddd; +} +.grey:hover { + background-color: #f8f8f8; +} +.grey-disabled, +.grey-disabled:hover { + border: 1px solid #c6c6c6; + color: #c6c6c6; + background-color: #fff; +} +.dark-grey { + background-color: #333; + border: 1px solid #333; + color: #fff; +} +.dark-grey:hover { + background-color: #101010; + color: #fff; +} +.px-red { + color: #ff5b55; +} +.bg-danger { + background-color: #ff5b55 !important; +} +.px-red-bg { + background-color: #ff5b55; + border: 1px solid #ff5b55; + color: #fff; +} +.px-red-bg:hover { + background-color: #f55651; + color: #fff; +} +.px-red-bg:active { + background-color: #eb534d; + color: #fff; +} +.px-green { + color: #5fcc4a; +} +.px-green-bg { + background-color: #73cf22; + border: 1px solid #73cf22; + color: #fff; +} +.px-green-bg:hover { + background-color: #6cc41f; + color: #fff; +} +.px-green-bg:active { + background-color: #67ba1e; + color: #fff; +} +.px-yellow { + color: #ffc766; +} +.px-yellow-bg { + background-color: #f7c515; + border: 1px solid #f7c515; + color: #fff; +} +.px-yellow-bg:hover { + background-color: #edbe13; + color: #fff; +} +.px-yellow-bg:active { + background-color: #e3b612; + color: #fff; +} +.px-grey { + color: #a5a5a5; +} +.px-grey-bg { + background-color: #a1abb3; + border: 1px solid #a1abb3; + color: #fff; +} +.px-grey-bg:hover { + background-color: #919da6; + color: #fff; +} +.px-grey-bg:active { + background-color: #85919a; + color: #fff; +} +.blue { + background-color: #fff; + color: #1991c5; +} +.blue:hover { + background-color: #e8f3fd; + color: #3366cc; +} +.blue.selected { + border: 0; + background-color: #00abff; + color: #fff; +} +.blue.selected:hover { + border: 0; + background-color: #00abff; + color: #fff; +} +.blue1 { + background-color: #00abff; + color: #fff; + border: 1px solid #00abff; +} +.blue1:hover { + background-color: #00a3f5; + color: #fff; + border: 1px solid #00a3f5; +} +.blue1:active { + background-color: #009ceb; +} +.blue1.disabled, +.blue1.disabled:hover, +.blue1.disabled:focus:active, +.blue1:disabled, +.blue1:disabled:hover, +.blue1:disabled:focus:active { + background-color: #59c8ff; + border-color: #59c8ff; +} +.blue1:focus { + background-color: #00abff; + color: #fff; + border: 1px solid #00abff; +} +.blue1:focus:hover { + background-color: #00a3f5; + color: #fff; + border: 1px solid #00a3f5; +} +.blue1:focus:active { + background-color: #009ceb; +} +.blue1-active { + background-color: #00abff !important; + color: #fff !important; + border: 1px solid #00abff !important; +} +.blue1-active:hover { + background-color: #00a3f5 !important; + color: #fff !important; + border: 1px solid #00a3f5 !important; +} +.blue1-active:focus { + background-color: #00abff !important; + color: #fff !important; + border: 1px solid #00abff !important; +} +.blue1-active:focus:hover { + background-color: #00a3f5 !important; + color: #fff !important; + border: 1px solid #00a3f5 !important; +} +.white { + background-color: #fff; + border: 1px solid #ddd; + color: #00abff; +} +.white:hover { + background-color: #f8f8f8; +} +.white:active { + background-color: #f2f2f2; +} +.white.active { + background-color: #00abff; + color: #fff; + border-color: #00abff; +} +.white.disabled, +.white.disabled:hover, +.white.disabled:focus:active, +.white:disabled, +.white:disabled:hover, +.white:disabled:focus:active { + background-color: #eee; +} +.white:focus { + background-color: #fff; + border: 1px solid #ddd; + color: #00abff; + outline: none; +} +.white:focus:hover { + background-color: #f8f8f8; +} +.white:focus:hover:active { + background-color: #f2f2f2; +} +.white:focus.active { + background-color: #00abff; + color: #fff; + border-color: #00abff; +} +.blue1-icons { + color: #009ceb; +} +.blue1-icons:hover { + color: #00a3f5; +} +.px-font1, +.px-font1:active, +.px-font1:focus { + color: #c2c6c9; +} +.px-font2, +.px-font2:active, +.px-font2:focus { + color: #777; +} +.px-font3, +.px-font3:active, +.px-font3:focus { + color: #4d5761; +} +.px-font4, +.px-font4:active, +.px-font4:focus { + color: #333; +} +/*** +Responsive & Scrollable Tables +***/ +.table-scrollable { + width: 100%; + overflow-x: auto; + overflow-y: hidden; + border: 1px solid #ddd; +} +.table-scrollable > .table { + width: 100% !important; + margin: 0 !important; + margin-bottom: 0; + background-color: #fff; +} +.table-scrollable > .table-bordered { + border: 0; +} +.table-scrollable > .table-bordered > thead > tr > th:first-child, +.table-scrollable > .table-bordered > tbody > tr > th:first-child, +.table-scrollable > .table-bordered > tfoot > tr > th:first-child, +.table-scrollable > .table-bordered > thead > tr > td:first-child, +.table-scrollable > .table-bordered > tbody > tr > td:first-child, +.table-scrollable > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.table-scrollable > .table-bordered > thead > tr > th:last-child, +.table-scrollable > .table-bordered > tbody > tr > th:last-child, +.table-scrollable > .table-bordered > tfoot > tr > th:last-child, +.table-scrollable > .table-bordered > thead > tr > td:last-child, +.table-scrollable > .table-bordered > tbody > tr > td:last-child, +.table-scrollable > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.table-scrollable > .table-bordered > thead > tr:last-child > th, +.table-scrollable > .table-bordered > tbody > tr:last-child > th, +.table-scrollable > .table-bordered > tfoot > tr:last-child > th, +.table-scrollable > .table-bordered > thead > tr:last-child > td, +.table-scrollable > .table-bordered > tbody > tr:last-child > td, +.table-scrollable > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; +} +/*table*/ +table { + font-size: 12px; +} +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background: #ebf6fd; +} +.dataTables_length, +.dataTables_info, +.dataTables_paginate { + font-size: 12px; + color: #7c868d; + display: inline-block; +} +.dataTables_length { + margin-right: 9px; +} +.dataTables_info { + margin-right: 10px; + color: #4d5761; +} +.dataTables_length select { + margin-left: 1px; + margin-right: 1px; + width: 42px; + height: 30px; + border-color: #ddd; + color: #7c868d; +} +.dataTables_paginate { + vertical-align: top; +} +.dataTables_paginate input { + border-color: #ddd !important; + width: 42px !important; + height: 30px !important; + margin-left: 6px!important; + margin-right: 6px!important; + color: #7c868d; +} +.dataTables_paginate .pagination-panel a { + border: 1px solid #ddd; + width: 26px; + height: 30px; + opacity: 1; + margin-left: 6px; + vertical-align: top; + cursor: pointer; + color: #7c868d; +} +.dataTables_wrapper > div > div { + float: right; + margin-bottom: 10px; + margin-top: 10px; +} +table th { + font-weight: normal; + font-size: 12px; +} +.table thead th { + border-bottom: 0; + color: #8b8b8b; +} +.table th { + border-top: 0; +} +table .heading { + font-size: 12px; + background: #fff !important; + font-weight: normal; +} +table tr:nth-of-type(odd) { + background: #f9f9f9; +} +table tr:nth-of-type(even) { + background: #fff; +} +table tr td label { + cursor: pointer; +} +.table-btn span { + padding-left: 5px; + padding-right: 5px; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 1px; +} +table tr td .btn-xs { + margin-bottom: 3px; + margin-top: 3px; +} +/* px-table */ +.px-table.light .px-th { + padding-bottom: 15px !important; +} +.px-table .px-th { + padding-bottom: 10px !important; +} +/*.px-table.card tr:nth-of-type(odd){ + background-color:#fff !important; +}*/ +.px-table.card tr:nth-of-type(odd):hover { + background-color: #ebf6fd !important; +} +.px-table.card tr td:first-child, +.px-table.card tr th:first-child { + text-align: center; +} +.px-table.card .title { + font-weight: normal; +} +.px-table .filter span.filterToggle { + width: 30px !important; + height: 30px !important; +} +.px-table input[type="checkbox"] { + margin-right: 0; +} +.px-page-item .px-page-link { + height: 28px !important; +} +.px-filters .px-th { + padding-bottom: 2px !important; +} +.px-pagination { + margin-top: 0 !important; +} +.px-table .filter span.filterToggle { + height: 30px !important; +} +.px-table label, +.px-table input[type="checkbox"] { + margin-bottom: 0; +} +.px-table .innerTable tr:nth-of-type(odd) { + background-color: #fff !important; +} +/*ng2-smart-table*/ +.ng2-smart-table.light .ng2-smart-th, +.ng2-smart-table .ng2-smart-th { + padding-bottom: 10px !important; +} +.ng2-smart-table .card tr:nth-of-type(odd) { + background-color: #fff !important; +} +.ng2-smart-table .card tr:nth-of-type(odd):hover { + background-color: #ebf6fd !important; +} +.ng2-smart-table .card tr td:first-child, +.ng2-smart-table .card tr th:first-child { + text-align: center; +} +.ng2-smart-table .card .title { + font-weight: normal; +} +.ng2-smart-table .filter span.filterToggle { + width: 30px !important; + height: 30px !important; +} +.ng2-smart-table input[type="checkbox"] { + margin-right: 0; +} +.ng2-smart-page-item .ng2-smart-page-link { + height: 28px !important; +} +.ng2-smart-filters .ng2-smart-th { + padding-bottom: 2px !important; +} +.ng2-smart-pagination { + margin-top: 0 !important; +} +.ng2-smart-table .filter span.filterToggle { + height: 30px !important; +} +.ng2-smart-table label, +.ng2-smart-table input[type="checkbox"] { + margin-bottom: 0; +} +.ng2-smart-table .innerTable tr:nth-of-type(odd) { + background-color: #fff !important; +} +/***form***/ +.form { + padding: 0 !important; +} +.form-group .multiRow { + margin-bottom: 15px; +} +.form-group .multiRow:last-child { + margin-bottom: 5px; +} +.form-group { + font-size: 12px; +} +.form-group .btn { + font-size: 14px; +} +.form-group .btn-s { + font-size: 12px; +} +.form-group .ict-helpTip { + font-size: 18px; + color: #bababa; + margin-left: 10px; + vertical-align: text-bottom; +} +.form-group .ict-helpTip:hover { + color: #00abff; +} +.form-group.equal-group .form-control { + display: block; +} +.form-group.equal-group .form-control:first-child { + margin-bottom: 5px; +} +.form-body { + padding: 15px; +} +.form-actions .btn { + font-size: 14px; +} +.form-actions.nobg { + background-color: transparent; +} +.form-actions.top { + margin-top: 0; + margin-bottom: 20px; + border-top: 0; + border-bottom: 1px solid #e5e5e5; +} +.form-control { + font-size: 12px; + display: inline-block; +} +.form-actions .btnGroup { + padding-left: 0; +} +.form-actions.fluid > [class^="col-"] { + padding-left: 13px; +} +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} +.form-actions:after { + clear: both; +} +.form-section { + margin: 30px 0px 25px 0px; + padding-bottom: 5px; + border-bottom: 1px solid #eee; +} +.form .form-section:first-child { + margin-top: 5px; +} +.help-inline { + font-size: 13px; + color: #737373; + display: inline-block; + padding: 5px; +} +.submBtn { + /*text-align: center;*/ +} +.subm-iconMargin { + margin-left: -40px; +} +.subm-margin { + margin-left: -40px; +} +.form-actions.right { + padding-left: 0; + padding-right: 10px; + text-align: right; +} +.form-actions.left { + padding-left: 10px; + padding-right: 0; + text-align: left; +} +.help-block { + margin-top: 5px; + margin-bottom: 5px; + color: #a94442 !important; +} +.form-inline input { + margin-bottom: 0px !important; +} +.form-horizontal .control-label { + text-align: right; +} +.form-group .control-label { + padding-top: 3px; +} +.form-control-static { + font-size: 14px; + padding-top: 7px; +} +.control-label .required { + color: #e02222; + font-size: 12px; + padding-left: 2px; +} +.form-control:focus { + -webkit-box-shadow: none; + box-shadow: none; +} +select.form-control, +.form-control { + padding: 4px 12px; + border-radius: 2px; + height: 30px; + /* width:400px;*/ + border-color: #ddd; +} +select.form-control:not([size]):not([multiple]) { + height: 30px ; +} +/***checkbox&radio***/ +/* Checkbox */ +.form-group .checkbox { + padding-left: 0; +} +.checkbox-list > label { + display: block; +} +.checkbox-list > label.checkbox-inline { + display: inline-block; +} +.checkbox-list > label.checkbox-inline:first-child { + padding-left: 0; +} +/* Radios */ +input[type="radio"] { + cursor: pointer; +} +.radio-list > label { + display: block; +} +.radio-list > label.radio-inline { + display: inline-block; +} +.radio-list > label.radio-inline:first-child { + padding-left: 0; +} +.form-horizontal .radio-list .radio { + padding-top: 1px; +} +.form-horizontal .radio-list > label { + margin-bottom: 0; +} +.form-horizontal .radio > span { + margin-top: 2px; +} +input[type="checkbox"]:focus, +input[type="radio"]:focus { + outline: 0; + -webkit-box-shadow: none; + box-shadow: none; + border: 0; +} +.raw-container { + font-size: 0; + position: relative; +} +.raw-container input[type="checkbox"], +.raw-container input[type="radio"] { + position: absolute; + z-index: -1; + opacity: 0; +} +.raw-container input[type="checkbox"] + .checkbox-substitute + span, +.raw-container input[type="radio"] + .radio-substitute + span { + font-weight: normal; + font-size: 12px; + line-height: 12px; + cursor: pointer; + vertical-align: middle; +} +.raw-container input[type="checkbox"] + .checkbox-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 14px; + width: 14px; + border: 1px solid #ccc; + border-radius: 2px; + vertical-align: middle; + margin-right: 6px; +} +.raw-container input[type="checkbox"] + .checkbox-substitute:hover { + border-color: #00abff; +} +.raw-container input[type="checkbox"]:checked + .checkbox-substitute { + border-color: #00abff; + background-color: #00abff; +} +.raw-container input[type="checkbox"]:checked + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 3px; + top: 0; +} +.raw-container input[type="checkbox"][disabled] + .checkbox-substitute { + background-color: #efefef; + cursor: auto; + border-color: #ccc; +} +.raw-container input[type="checkbox"]:checked[disabled] + .checkbox-substitute { + background-color: #efefef; + cursor: auto; + border-color: #ccc; +} +.raw-container input[type="checkbox"]:checked[disabled] + .checkbox-substitute::after { + border: 1px solid #ccc; + border-width: 0 2px 2px 0; +} +.raw-container input[type="checkbox"]:checked.portion + .checkbox-substitute { + background-color: #97dbfc; + border-color: #97dbfc; +} +.raw-container input[type="radio"] + .radio-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 14px; + width: 14px; + border: 1px solid #ccc; + border-radius: 14px; + vertical-align: middle; + margin-right: 6px; +} +.raw-container input[type="radio"] + .radio-substitute:hover { + border-color: #00abff; +} +.raw-container input[type="radio"]:checked + .radio-substitute { + border-color: #00abff; + border-width: 4px; +} +.raw-container input[type="radio"][disabled] + .radio-substitute { + border-color: #ccc; + background-color: #efefef; + cursor: auto; +} +.raw-container input[type="radio"]:checked [disabled] + .radio-substitute { + border-color: #ccc; + cursor: auto; +} +/***input***/ +::-webkit-input-placeholder { + color: #bcbcbc !important; +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #bcbcbc !important; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #bcbcbc !important; +} +input:-ms-input-placeholder { + color: #bcbcbc !important; +} +input::-webkit-input-placeholder { + color: #bcbcbc !important; +} +/*group*/ +.input-group-btn-vertical.fa { + font-size: 12px; +} +.input-group.spinner .btn { + min-width: 20px !important; + height: 16px; +} +.spinner { + width: 60px !important; + margin-left: 10px; + margin-right: 30px; +} +.spinner input { + text-align: right; +} +.input-group-btn-vertical { + position: relative; + white-space: nowrap; + width: 1%; + vertical-align: middle; + display: table-cell; +} +.input-group-btn-vertical > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; + padding: 6px; + margin-left: -1px; + position: relative; + border-radius: 0; +} +.input-group-btn-vertical > .btn { + min-width: 20px; +} +.input-group-btn-vertical > .btn:first-child { + border-top-right-radius: 4px; +} +.input-group-btn-vertical > .btn:last-child { + margin-top: -2px; + border-bottom-right-radius: 4px; +} +.input-group-btn-vertical i { + position: absolute; + top: 0; + left: 6px; +} +/*.input-group .form-control { + height: 26px !important; +}*/ +.input-group { + /* width:400px;*/ + font-size: 0; +} +.input-group .form-control { + display: inline-block; +} +.input-group .form-control:hover, +.input-group .form-control:focus:hover { + z-index: 2; +} +.input-group .input-group-btn { + z-index: 0; +} +/*html滑块组件*/ +input[type="range"] { + margin-top: 2px; + background-color: #f0f3f9; + border: 1px solid #ccd6e8; + border-radius: 15px; + width: 400px; + -webkit-appearance: none; + height: 15px; +} +input[type="range"]::-webkit-slider-thumb { + -webkit-appearance: none; + cursor: pointer; + top: -5px; + height: 28px; + width: 15px; + transform: translateY(-4px); + background: none repeat scroll 0 0 #f0f3f9; + background-color: #9cc2cb; + border-radius: 20px; +} +input[type="range"]:focus { + outline: none; +} +/*search*/ +.input-group .btn { + min-width: 40px; + padding-top: 3px; +} +/***tab***/ +/*.nav-tabs { + border: 0; + font-weight: bold; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + border: 0; +} +.nav-tabs > li > a { + border-radius: 0; + font-weight: bold; + border: 0; + margin-right: 0; +} +.nav > li > a:hover, +.nav > li > a:focus { + background-color: transparent; +} +.nav-tabs.boder-tab > li.active > a, +.nav-tabs.boder-tab > div > li.active > a { + border: 1px solid #ddd; + border-bottom: 0; +} +.nav-tabs-content { + border: 1px solid #ddd; +} +!***tab***! +.nav-tabs.tabset > li.active, +.nav-tabs.tabset > li.active:hover, +.nav-tabs.tabset > li.active:focus { + border: 0; + border-top: 2px solid #00abff; +} +.nav-tabs > div > li.active, +.nav-tabs > div > li.active:hover, +.nav-tabs > div > li.active:focus { + border: 0; + background-color: #fcfcfc; + border-top: 2px solid #00abff; +} +ul.nav.nav-tabs { + background-color: transparent; +} +.nav-tabs > div > li > a:hover { + background-color: transparent; + border-bottom: 1px transparent; +} +.nav-tabs .nav-link { + border-top-right-radius: 0; + border-top-left-radius: 0; + color: #777; +} +.nav-tabs .nav-link:hover { + background-color: transparent; + border-color: transparent; + color: #777; +} +.nav-tabs .nav-link:focus { + border-left-color: transparent; + border-right-color: transparent; +} +.boder-tab ul.nav.nav-tabs { + background-color: #fff; +} +.boder-tab ul.nav.nav-tabs .nav-link:hover { + border-bottom: 1px solid #ddd ; + background-color: #fcfcfc; +} +.boder-tab ul.nav.nav-tabs .nav-link.active:hover { + border-bottom: 0 ; +} +.nav-tabs { + border: 0; + font-weight: normal; +} +.nav-tabs > li > a { + border-radius: 0; + font-weight: normal; + border: 0; + margin-right: 0; +} +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + background-color: transparent; +} +.nav-tabs .nav-link.active { + border: 0; + border-top: 2px solid #00abff; + background-color: #fff; +} +.nav-tabs .nav-link.active:hover { + background-color: #fff; + border-top: 2px solid #00abff; +} +.nav-tabs .nav-link.disabled { + border-top: 0; + color: #c2c6c9; +} +.nav-tabs .nav-link.disabled:hover, +.nav-tabs .nav-link.disabled:focus { + background-color: transparent; + color: #c2c6c9; +} +.boder-tab > .nav-tabs > .nav-item > .nav-link.active, +.less-border > .nav-tabs > .nav-item > .nav-link.active { + border: 1px solid #ddd; + border-top: 2px solid #00abff; + border-bottom: 0; +} +.boder-tab .tab-pane.active { + border: 1px solid #ddd; +} +.tab-pane.active { + padding: 15px; +} +.nav-pills .nav-link.active, +.nav-pills .nav-item.show .nav-link { + color: #fff; + cursor: default; + background-color: #00abff; +} +.less-border .tab-pane.active { + border-top: 1px solid #ddd; + border-left: 0; + border-right: 0; + border-bottom: 0; +}*/ +/***button***/ +button { + font-size: 14px; +} +.btn { + min-width: 80px; + letter-spacing: 1px; + padding-top: 4px !important; + padding-bottom: 4px !important; + height: 30px; + font-size: 14px; + cursor: pointer; + line-height: 1.42857143; +} +.btnGroup .btn, +.btnGroup a { + margin-right: 10px; +} +.btnGroup a:last-child, +.btnGroup .btn:last-child { + margin-right: 0; +} +.btnGroup .sub-btn { + /*float:right; + width: 400px;*/ + /*text-align: right;*/ +} +.pagination-panel .btn { + min-width: 4px; +} +.btn.dropdown-toggle, +.btn-group .btn.dropdown-toggle, +.btn:hover, +.btn:disabled, +.btn[disabled], +.btn:focus, +.btn:active, +.btn.active { + outline: none !important; + background-image: none !important; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.btn-s { + min-width: 50px; + height: 26px; + line-height: 14px; + font-size: 12px; + cursor: pointer; +} +.btn-s:hover { + text-decoration: none ; +} +.btn-s:focus { + outline: 0; +} +.btn-xs { + min-width: 50px; + line-height: 1.2; + padding-top: 3px; + padding-bottom: 3px; + font-size: 12px; + cursor: pointer; +} +.btn-xs:hover { + text-decoration: none ; +} +.btn-xs:focus { + outline: 0; +} +/***btn-group***/ +.btn-group .blue1-active { + border-left: #a4d7f7 1px solid !important; +} +.btn-group .blue1-active:hover { + border-left: #1289d6 1px solid !important; +} +.btn-group .white.btn.active, +.btn-group .white.btn-s.active { + border-left: #6ac7f5 1px solid !important; +} +/***toolbar & icons ***/ +.toolbar span { + padding: 5px; + font-size: 20px; + cursor: pointer; + color: #00abff; + border: 1px solid transparent; +} +.toolbar span:hover { + color: #00a3f5; + border: 1px solid #cbdfec; +} +.toolbar i.seperate-vertical { + padding: 0; + border-right: 1px solid #ddd; + margin-right: 8px; + margin-left: 4px; +} +/*btn-link*/ +.btn-link { + color: #ccc; +} +.btn-link:hover { + color: #1798eb; +} +/***radius***/ +.radius-l { + border-radius: 20px; +} +.radius-m { + border-radius: 8px; +} +.radius-s { + border-radius: 4px; +} +.radius-xs { + border-radius: 3px; +} +/***progress***/ +.progress, +.progress-s { + border: 0; + background-image: none !important; + filter: none !important; + -webkit-box-shadow: none !important; + -moz-box-shadow: none !important; + box-shadow: none !important; + opacity: 0.7; +} +.progress { + height: 8px; + display: inline-block; +} +.progress-s { + height: 2px; +} +.progress > .progress-bar-success { + background-color: #00abff; +} +.progress-bar { + height: 8px; +} +.progress > .bg-success { + background-color: #00abff !important; +} +.px-progressbar .progress { + display: inline-block; +} +.progress-rate { + vertical-align: sub; + margin-left: 5px; +} +.progress-error { + display: inline-block; + width: 16px; + height: 16px; + border-radius: 16px; + border: 1px solid #ff5b55; + font-size: 12px; + color: #ff5b55; + text-align: center; + line-height: 1; + margin-left: 5px; +} +.progress-error::before { + content: "!"; +} +.progressbar-s .progress { + height: 2px; +} +/***separator & title***/ +.separator-line { + height: 1px; + width: 100%; + background: #ddd; + overflow: hidden; + margin-bottom: 15px; + opacity: 0.7; +} +.separator { + opacity: 0.7; +} +.separator:hover { + opacity: 1; +} +.separator-line-dashed { + margin-top: 15px; + height: 1px; + border-bottom: 1px dashed #ddd; + margin-bottom: 15px; + overflow: hidden; + width: 100%; +} +.titlefont { + font-size: 14px; + margin-top: 15px; + margin-bottom: 5px; + color: #777; +} +.form-title, +.form-title-foldable { + border-left: 3px solid #00abff; +} +.form-title { + padding: 1px 2px 1px 5px; + margin-bottom: 15px; + color: #7c868d; + font-size: 14px; +} +.form-title-foldable { + padding: 1px 2px 1px 5px; + margin-bottom: 15px; + font-size: 14px; +} +.form-title-foldable span { + margin-right: 10px; + cursor: pointer; +} +.form-title-foldable span[class^="ict-"] { + font-size: 12px; + color: #009ceb; +} +/***ztree***/ +.ztree { + padding: 15px 30px 0 5px; +} +.ztree * { + font-family: "microsoft yahei"; + font-size: 12px; +} +.ztree li a { + width: auto; + padding-right: 5px; + height: 25px; + border: 1px solid #fff; + padding-left: 5px; +} +.ztree li a:hover { + border: 1px solid #ddd !important; +} +.ztree li > span { + margin-top: 5px !important; +} +.ztree li span.button.chk { + width: 13px; + height: 13px; + margin-left: 10px; + cursor: auto; +} +.ztree li span.button.add { + margin-left: 2px; + margin-right: 4px; + background-position: -144px 0; + vertical-align: top; + *vertical-align: middle; + float: right; +} +.ztree li span.button.edit { + margin-right: 4px; + background-position: -110px -48px; + vertical-align: top; + *vertical-align: middle; + float: right; +} +.ztree li span.button.remove { + margin-right: 4px; + background-position: -110px -64px; + vertical-align: top; + *vertical-align: middle; + float: right; +} +.ztree li a.curSelectedNode { + height: 25px; + border: 1px #accbdd solid !important; +} +.ztree-select .ztree li a { + border: 1px solid #fff !important; +} +.ztree-select .ztree li a:hover { + border: 1px #ddd solid !important; +} +/***px-tree***/ +.px-tree ul.px-tree-children { + -webkit-padding-start: 21px; +} +/***tip***/ +.terminology { + color: #468ECE; + border-bottom: 1px #468ECE dotted; +} +.General-tip { + height: 20px; + width: 20px; + background-color: #fff; + border: 1px #5b9bd1 solid; + padding-bottom: 5px; + padding-left: 5px; + border-radius: 20px; + margin-top: 5px; +} +.General-tip span { + font-size: 15px; + text-align: center; + color: #5b9bd1; + line-height: 1.1; +} +.General-tip:hover { + border: 1px #2a6496 solid; + cursor: pointer; +} +.General-tip:hover span { + color: #2a6496; +} +/*tip-box*/ +.frmTipBoxTransition { + -webkit-transition: -webkit-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; + -webkit-transform: translate(0, 50%); + -ms-transform: translate(0, 50%); + -o-transform: translate(0, 50%); + transform: translate(0, 50%); +} +#frmTipBox { + position: absolute; + width: 400px; + margin: 10px auto; + left: 30%; + right: 30%; + top: 14px; +} +/*alert*/ +.alert { + padding: 12px 15px; + max-width: 600px; + text-align: left; + -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1); +} +/* +.alert-success { + color: #fff; + background-color: #73cf22; + border-color:#73cf22; +} + +.alert-info { + color: #fff; + background-color: #00abff; + border-color:#00abff; +} + +.alert-warning { + color: #fff; + background-color: #f7c515; + border-color:#f7c515; +} + +.alert-danger { + color: #fff; + background-color: #ff5b55; + border-color:#ff5b55; +}*/ +.close { + color: #f2f2f2; + font-size: 16px; +} +.close:hover, +.close:focus { + color: inherit; + outline: 0; +} +.alert-success { + color: #56963e; + background-color: #edfbe8; + border-color: #d5eccc; + opacity: 0.85; +} +.alert-info { + color: #5090c3; + background-color: #ecf7fd; + border-color: #bce1f1; + opacity: 0.85; +} +.alert-warning { + color: #bf880a; + background-color: #fff8e9; + border-color: #f5e1b8; + opacity: 0.85; +} +.alert-danger { + color: #df4364; + background-color: #fbf0f1; + border-color: #f3d9da; + opacity: 0.85; +} +.close { + color: #333; + font-size: 1rem; +} +/*tooltip*/ +.tooltip.show { + font-size: 12px; + opacity: 1; +} +.tooltip.show .tooltip-inner { + background-color: #4d5761; + border-radius: 4px; + padding: 5px 8px; +} +.tooltip.tooltip-top .tooltip-inner::before, +.tooltip.bs-tether-element-attached-bottom .tooltip-inner::before { + border-top-color: #4d5761; +} +.tooltip.tooltip-right .tooltip-inner::before, +.tooltip.bs-tether-element-attached-left .tooltip-inner::before { + border-right-color: #4d5761; +} +.tooltip.tooltip-bottom .tooltip-inner::before, +.tooltip.bs-tether-element-attached-top .tooltip-inner::before { + border-bottom-color: #4d5761; +} +.tooltip.tooltip-left .tooltip-inner::before, +.tooltip.bs-tether-element-attached-right .tooltip-inner::before { + border-left-color: #4d5761; +} +/*modal*/ + +/***pagination***/ +.page-item.active .page-link { + background-color: #1798eb; + border-color: #1798eb; +} +/***wizard***/ +.form-wizard .nav > li > a { + padding-bottom: 0; +} +.wizard-body .button-next.disabled, +.wizard-body .button-previous.disabled { + display: none ; +} +.wizard-body .nav .step { + background: none !important; +} +.form-wizard .progress { + margin-bottom: 30px; + margin-top: 10px; + height: 4px; + width: 100%; +} +.form-wizard .steps { + background-color: #fff ; + background-image: none ; + filter: none ; + border: 0px; + box-shadow: none ; +} +.form-wizard .steps li a { + background-color: #fff ; + background-image: none ; + filter: none; + border: 0px; + box-shadow: none ; + color: #7c868d; +} +.form-wizard .steps:hover { + background: none; +} +.form-wizard .step:hover { + text-decoration: none; +} +.form-wizard .step .number { + background-color: #ddd; + color: #fff; + display: inline-block; + text-align: center !important; + font-size: 14px; + font-weight: 300; + padding-top: 2px; + margin-right: 10px; + height: 24px; + width: 24px; + -webkit-border-radius: 50% !important; + -moz-border-radius: 50% !important; + border-radius: 50% !important; +} +.form-wizard .step .desc { + display: inline-block; + font-size: 14px; + font-weight: 300; + color: #7c868d; +} +.form-wizard .step i { + display: none; +} +.form-wizard .active .step .number { + background-color: #35aa47; + color: #fff; +} +.form-wizard .active .step .desc { + color: #333; + font-weight: 400; +} +.form-wizard .done .step .number { + background-color: #73cf22 ; + color: #fff; +} +.form-wizard .done .step .desc { + font-weight: 400; +} +.form-wizard .done .step .form-wizard .done .step i { + font-size: 12px; + font-weight: normal; + color: #999; + display: inline-block; +} +.form-wizard .steps > li.active > a.step .number { + background-color: #00abff; +} +@media (min-width: 600px) and (max-width: 1280px) { + .form-wizard .step .desc { + margin-top: 10px; + display: block; + } +} +@media (max-width: 600px) { + .form-wizard .steps > li > a { + text-align: left; + } +} +@media (min-width: 600px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } +} +.px-wizard .nav.nav-pills.steps li { + text-align: center; +} +.px-wizard .nav.nav-pills.steps li .desc { + font-size: 14px; +} +.px-wizard .nav.nav-pills.steps li .px-wizard .form-wizard .step .number { + padding-top: 1px; +} +/***popover***/ +ngb-popover-window.popover.show { + color: #333; + border: 1px solid #ddd; +} +.popover.popover-top::after, +.popover.bs-tether-element-attached-bottom::after { + border-top-color: #fff; +} +.popover.popover-top::before, +.popover.bs-tether-element-attached-bottom::before { + border-top-color: #ddd; +} +.popover.popover-left::after, +.popover.bs-tether-element-attached-right::after { + border-left-color: #fff; +} +.popover.popover-left::before, +.popover.bs-tether-element-attached-right::before { + border-left-color: #ddd; +} +.popover.popover-right::after, +.popover.bs-tether-element-attached-left::after { + border-right-color: #fff; +} +.popover.popover-right::before, +.popover.bs-tether-element-attached-left::before { + border-right-color: #ddd; +} +.popover.popover-bottom::after, +.popover.bs-tether-element-attached-top::after { + border-bottom-color: #fff; +} +.popover.popover-bottom::before, +.popover.bs-tether-element-attached-top::before { + border-bottom-color: #ddd; +} +.popover { + max-width: 600px; + min-width: 250px; + background-color: #fff; + font-family: "Microsoft yahei", Segoe UI, Arial !important; + font-size: 12px; + border-color: #ddd; + -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); +} +.popover .popover-title { + background-color: #fff; + border-bottom: 1px solid #ddd; +} +.popover .popover-content { + background-color: #fff; + padding-top: 20px; +} +.popover .ict-warning { + color: #ff5b55; + font-size: 26px; + margin-right: 5px; +} +.popover .popo { + text-align: center; +} +.popover .pop-btn { + float: right; + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} +.popover .pop-btn .btn-s { + margin-left: 10px; +} +.popover .tip-info span { + vertical-align: middle; +} +.popover .tip-info .content { + font-size: 14px; +} +/***collapse***/ +/*.collapse-bottom .card span.pop-trgl { + position: absolute; + top: -10px; + left: 20px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 10px 10px 10px; + border-color: transparent transparent #cbc5c5 transparent; +} +.collapse-bottom .card span.pop-trgl i { + position: absolute; + left: -9px; + top: 1px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 9px 9px 9px; + border-color: transparent transparent #fff transparent; +} + +.collapse-top .card span.pop-trgl { + position: absolute; + bottom: -10px; + left: 20px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 10px 10px 10px; + border-color: transparent transparent #cbc5c5 transparent; + transform:rotate(180deg); +} +.collapse-top .card span.pop-trgl i { + position: absolute; + left: -9px; + top: 1px; + width: 0; + height: 0; + border-style: solid; + border-width: 0 9px 9px 9px; + border-color: transparent transparent #fff transparent; +} +.collapse-top .card-block { + padding: 0; +} +.collapse-top .card { + margin-bottom: 5px; + padding: 15px; +} +.collapse-bottom .card { + margin-top: 5px; + padding: 15px; +}*/ +/***select-box with icon***/ +.iconselect-box .col-xs-1 { + width: 15px; + padding: 110px 0 0 0; +} +.iconPosition > div { + margin: 20px 0px 0px 0px; +} +/***.dropdown-item***/ +.dropdown-item { + color: #4d5761; +} +.dropdown-item:focus, +.dropdown-item:hover, +.dropdown-item:active { + background-color: #f8f8f8; + outline: none; + color: #4d5761; +} +.dropdown-menu { + border: 0; + -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 8px rgba(0, 0, 0, 0.2); +} +.btn-xs + .dropdown-menu .dropdown-item { + font-size: 12px; +} +/***datepicker***/ +.px-dp-header { + border-bottom: 0 !important; +} +.px-dp-header select.custom-select { + color: #777; + margin-top: 5px; + width: 45%; + margin-right: 5px; + font-size: 12px; +} +.px-date-range-picker .ngb-dp-weekday { + color: #777; +} +/*.px-dp-months.pb-1{ + padding-left:15px !important; + padding-right:15px !important; + .px-dp-day, + .px-dp-weekday, + .px-dp-week-number{ + width:40px; + height:40px; + } + }*/ +.px-dp-week.d-flex { + color: #777; +} +.font-italic { + font-style: normal; +} +.px-dp-weekday.text-info { + color: #777 !important; +} +.px-dp-day .btn-secondary { + border-radius: 20px !important; +} +.px-dp-day .bg-primary { + background-color: #00abff !important; + border-radius: 20px !important; +} +.dropdown-menu .px-dp-day { + font-size: 14px; +} +.dropdown-menu .px-dp-weekday.small { + font-size: 80%; +} +.px-dp-month-name.text-center { + color: #777; + font-size: 14px !important; +} +.custom-day.weekend { + background-color: #00abff !important; + height: 2rem; + line-height: 1.8; + border-radius: 20px !important; +} +.custom-day.weekend:hover { + background-color: #00a3f5 !important; +} +/***px-upload***/ +.px-uploder .progress { + width: 300px; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/prism.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/prism.css new file mode 100644 index 00000000..0100f8dd --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/prism.css @@ -0,0 +1,141 @@ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family:"Helvetica Neue","PingFang SC",Tahoma,"Microsoft Yahei"; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: 0; + overflow: auto; + padding-top: 20px; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #fff; + border:1px solid #e9e9e9; + border-top:0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/style.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/style.css new file mode 100644 index 00000000..9cb8e913 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/css/style.css @@ -0,0 +1,1154 @@ +@font-face { + font-family: 'ZteIctIcons'; + src: url('../fonts/ZteIctIcons.eot?yfideg'); + src: url('../fonts/ZteIctIcons.eot?yfideg#iefix') format('embedded-opentype'), + url('../fonts/ZteIctIcons.ttf?yfideg') format('truetype'), + url('../fonts/ZteIctIcons.woff?yfideg') format('woff'), + url('../fonts/ZteIctIcons.svg?yfideg#ZteIctIcons') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="ict-"], [class*=" ict-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'ZteIctIcons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.ict-pm-query:before { + content: "\e900"; +} +.ict-sm-follow-up:before { + content: "\e901"; +} +.ict-sm-syn-down:before { + content: "\e902"; +} +.ict-pm:before { + content: "\e903"; +} +.ict-pm-monitor:before { + content: "\e904"; +} +.ict-pm-customized:before { + content: "\e905"; +} +.ict-fm-group:before { + content: "\e906"; +} +.ict-fm-alarm-code:before { + content: "\e907"; +} +.ict-new:before { + content: "\e908"; +} +.ict-fm-restype:before { + content: "\e909"; +} +.ict-fm-moc:before { + content: "\e90a"; +} +.ict-col:before { + content: "\e90b"; +} +.ict-filter:before { + content: "\e90c"; +} +.ict-filter-f:before { + content: "\e90d"; +} +.ict-code:before { + content: "\e90e"; +} +.ict-code-f:before { + content: "\e90f"; +} +.ict-fullScreen:before { + content: "\e910"; +} +.ict-reduction:before { + content: "\e911"; +} +.ict-userCompare:before { + content: "\e912"; +} +.ict-userDispatch:before { + content: "\e913"; +} +.ict-voice:before { + content: "\e914"; +} +.ict-warning:before { + content: "\e915"; +} +.ict-xml:before { + content: "\e916"; +} +.ict-zoomIn:before { + content: "\e917"; +} +.ict-zoomOut:before { + content: "\e918"; +} +.ict-zoomOverView:before { + content: "\e919"; +} +.ict-zoomReset:before { + content: "\e91a"; +} +.ict-thumbtack:before { + content: "\e91b"; +} +.ict-toRight:before { + content: "\e91c"; +} +.ict-treefile:before { + content: "\e91d"; +} +.ict-treeFolder:before { + content: "\e91e"; +} +.ict-triangle:before { + content: "\e91f"; +} +.ict-unacknownledge:before { + content: "\e920"; +} +.ict-unlock:before { + content: "\e921"; +} +.ict-up:before { + content: "\e922"; +} +.ict-upload:before { + content: "\e923"; +} +.ict-user:before { + content: "\e924"; +} +.ict-start:before { + content: "\e925"; +} +.ict-stop:before { + content: "\e926"; +} +.ict-stretch:before { + content: "\e927"; +} +.ict-strikeOut:before { + content: "\e928"; +} +.ict-Synchronous:before { + content: "\e929"; +} +.ict-table:before { + content: "\e92a"; +} +.ict-third-grid:before { + content: "\e92b"; +} +.ict-third-grid-selected:before { + content: "\e92c"; +} +.ict-thumbtack-selected:before { + content: "\e92d"; +} +.ict-save:before { + content: "\e92e"; +} +.ict-select:before { + content: "\e92f"; +} +.ict-selectAll:before { + content: "\e930"; +} +.ict-selectLeft:before { + content: "\e931"; +} +.ict-selectRight:before { + content: "\e932"; +} +.ict-show:before { + content: "\e933"; +} +.ict-shrink:before { + content: "\e934"; +} +.ict-singleCommand:before { + content: "\e935"; +} +.ict-sm-center:before { + content: "\e936"; +} +.ict-sql:before { + content: "\e937"; +} +.ict-process:before { + content: "\e938"; +} +.ict-product:before { + content: "\e939"; +} +.ict-rbArrow:before { + content: "\e93a"; +} +.ict-refresh:before { + content: "\e93b"; +} +.ict-rename:before { + content: "\e93c"; +} +.ict-right-select:before { + content: "\e93d"; +} +.ict-role:before { + content: "\e93e"; +} +.ict-roleset:before { + content: "\e93f"; +} +.ict-openTree:before { + content: "\e940"; +} +.ict-Operation:before { + content: "\e941"; +} +.ict-palette:before { + content: "\e942"; +} +.ict-parallel:before { + content: "\e943"; +} +.ict-pause:before { + content: "\e944"; +} +.ict-pbp:before { + content: "\e945"; +} +.ict-pie:before { + content: "\e946"; +} +.ict-poNode:before { + content: "\e947"; +} +.ict-pre:before { + content: "\e948"; +} +.ict-print:before { + content: "\e949"; +} +.ict-move:before { + content: "\e94a"; +} +.ict-node-close:before { + content: "\e94b"; +} +.ict-node-open:before { + content: "\e94c"; +} +.ict-noticeAlarm:before { + content: "\e94d"; +} +.ict-noticeFilter:before { + content: "\e94e"; +} +.ict-open:before { + content: "\e94f"; +} +.ict-next:before { + content: "\e950"; +} +.ict-no-voice:before { + content: "\e951"; +} +.ict-message:before { + content: "\e952"; +} +.ict-modify:before { + content: "\e953"; +} +.ict-Monitor:before { + content: "\e954"; +} +.ict-more:before { + content: "\e955"; +} +.ict-more-line:before { + content: "\e956"; +} +.ict-newShortcut:before { + content: "\e957"; +} +.ict-lock:before { + content: "\e958"; +} +.ict-loseError:before { + content: "\e959"; +} +.ict-ltArrow:before { + content: "\e95a"; +} +.ict-Magnifier:before { + content: "\e95b"; +} +.ict-Maintain:before { + content: "\e95c"; +} +.ict-manAnalysis:before { + content: "\e95d"; +} +.ict-maximize:before { + content: "\e95e"; +} +.ict-memory:before { + content: "\e95f"; +} +.ict-menu:before { + content: "\e960"; +} +.ict-idea:before { + content: "\e961"; +} +.ict-import:before { + content: "\e962"; +} +.ict-inProgress:before { + content: "\e963"; +} +.ict-launchingTower:before { + content: "\e964"; +} +.ict-layout:before { + content: "\e965"; +} +.ict-legendhide:before { + content: "\e966"; +} +.ict-legendshow:before { + content: "\e967"; +} +.ict-link:before { + content: "\e968"; +} +.ict-godown:before { + content: "\e969"; +} +.ict-goup:before { + content: "\e96a"; +} +.ict-grammarCheck:before { + content: "\e96b"; +} +.ict-Graphical:before { + content: "\e96c"; +} +.ict-half-grid:before { + content: "\e96d"; +} +.ict-half-grid-selected:before { + content: "\e96e"; +} +.ict-helpTip:before { + content: "\e96f"; +} +.ict-hide:before { + content: "\e970"; +} +.ict-history:before { + content: "\e971"; +} +.ict-historyAlarm:before { + content: "\e972"; +} +.ict-eye-closed:before { + content: "\e973"; +} +.ict-forceOut:before { + content: "\e974"; +} +.ict-full-grid:before { + content: "\e975"; +} +.ict-full-grid-selected:before { + content: "\e976"; +} +.ict-gear:before { + content: "\e977"; +} +.ict-go:before { + content: "\e978"; +} +.ict-find:before { + content: "\e979"; +} +.ict-fobidden:before { + content: "\e97a"; +} +.ict-fold:before { + content: "\e97b"; +} +.ict-folder:before { + content: "\e97c"; +} +.ict-folderOpen:before { + content: "\e97d"; +} +.ict-drill:before { + content: "\e97e"; +} +.ict-empty:before { + content: "\e97f"; +} +.ict-executNext:before { + content: "\e980"; +} +.ict-export:before { + content: "\e981"; +} +.ict-export-ne:before { + content: "\e982"; +} +.ict-eye:before { + content: "\e983"; +} +.ict-file:before { + content: "\e984"; +} +.ict-currentAlarm:before { + content: "\e985"; +} +.ict-debug:before { + content: "\e986"; +} +.ict-deleSingle:before { + content: "\e987"; +} +.ict-delete:before { + content: "\e988"; +} +.ict-department:before { + content: "\e989"; +} +.ict-detail:before { + content: "\e98a"; +} +.ict-displaySwitch:before { + content: "\e98b"; +} +.ict-down:before { + content: "\e98c"; +} +.ict-download:before { + content: "\e98d"; +} +.ict-circle:before { + content: "\e98e"; +} +.ict-clearAlarm:before { + content: "\e98f"; +} +.ict-close:before { + content: "\e990"; +} +.ict-closeTree:before { + content: "\e991"; +} +.ict-cloud:before { + content: "\e992"; +} +.ict-completed:before { + content: "\e993"; +} +.ict-computer:before { + content: "\e994"; +} +.ict-configmap:before { + content: "\e995"; +} +.ict-copy:before { + content: "\e996"; +} +.ict-cpu:before { + content: "\e997"; +} +.ict-arrowRight:before { + content: "\e998"; +} +.ict-autoFind:before { + content: "\e999"; +} +.ict-back:before { + content: "\e99a"; +} +.ict-ball:before { + content: "\e99b"; +} +.ict-batchCommand:before { + content: "\e99c"; +} +.ict-bell:before { + content: "\e99d"; +} +.ict-blackList:before { + content: "\e99e"; +} +.ict-breakLink:before { + content: "\e99f"; +} +.ict-cancle:before { + content: "\e9a0"; +} +.ict-check-error:before { + content: "\e9a1"; +} +.ict-check-right:before { + content: "\e9a2"; +} +.ict-alarmBox:before { + content: "\e9a3"; +} +.ict-alarmFilter:before { + content: "\e9a4"; +} +.ict-alarmTurn:before { + content: "\e9a5"; +} +.ict-allSelected:before { + content: "\e9a6"; +} +.ict-angleLeft:before { + content: "\e9a7"; +} +.ict-angleRight:before { + content: "\e9a8"; +} +.ict-arrowLeft:before { + content: "\e9a9"; +} +.ict-arrowLeftAll:before { + content: "\e9aa"; +} +.ict-arrowRightAll:before { + content: "\e9ab"; +} +.ict-acknownledge:before { + content: "\e9ac"; +} +.ict-Admin:before { + content: "\e9ad"; +} +.ict-advice:before { + content: "\e9ae"; +} +.ict-afreshDef:before { + content: "\e9af"; +} +.ict-alarm:before { + content: "\e9b0"; +} +.ict-code-b:before { + content: "\e9b1"; +} +.ict-log:before { + content: "\e9b2"; +} +.ict-analysis:before { + content: "\e9b3"; +} +.ict-bindingRelationship:before { + content: "\e9b4"; +} +.ict-browsePolicy:before { + content: "\e9b5"; +} +.ict-businessManagment:before { + content: "\e9b6"; +} +.ict-cardData:before { + content: "\e9b7"; +} +.ict-dailyManagment:before { + content: "\e9b8"; +} +.ict-enterpriseCustomer:before { + content: "\e9b9"; +} +.ict-equipmentBlacklist:before { + content: "\e9ba"; +} +.ict-equipmentModel:before { + content: "\e9bb"; +} +.ict-examine:before { + content: "\e9bc"; +} +.ict-failureList:before { + content: "\e9bd"; +} +.ict-familyCustomer:before { + content: "\e9be"; +} +.ict-fileTool:before { + content: "\e9bf"; +} +.ict-groupManagment:before { + content: "\e9c0"; +} +.ict-notice:before { + content: "\e9c1"; +} +.ict-policy:before { + content: "\e9c2"; +} +.ict-portal:before { + content: "\e9c3"; +} +.ict-recordQuery:before { + content: "\e9c4"; +} +.ict-resourceManagment:before { + content: "\e9c5"; +} +.ict-ruleManagment:before { + content: "\e9c6"; +} +.ict-sucessRate:before { + content: "\e9c7"; +} +.ict-terminalManagment:before { + content: "\e9c8"; +} +.ict-tools:before { + content: "\e9c9"; +} +.ict-track:before { + content: "\e9ca"; +} +.ict-userManagment:before { + content: "\e9cb"; +} +.ict-versionManagment:before { + content: "\e9cc"; +} +.ict-workOrder:before { + content: "\e9cd"; +} +.ict-app:before { + content: "\e9ce"; +} +.ict-car:before { + content: "\e9cf"; +} +.ict-chgpile:before { + content: "\e9d0"; +} +.ict-chgposition:before { + content: "\e9d1"; +} +.ict-chgstation:before { + content: "\e9d2"; +} +.ict-cms:before { + content: "\e9d3"; +} +.ict-common_dc:before { + content: "\e9d4"; +} +.ict-common_ncd:before { + content: "\e9d5"; +} +.ict-common_ncd_break:before { + content: "\e9d6"; +} +.ict-common_ncd_stop:before { + content: "\e9d7"; +} +.ict-common_sc:before { + content: "\e9d8"; +} +.ict-ems:before { + content: "\e9d9"; +} +.ict-host:before { + content: "\e9da"; +} +.ict-network:before { + content: "\e9db"; +} +.ict-NFV:before { + content: "\e9dc"; +} +.ict-NS:before { + content: "\e9dd"; +} +.ict-sdno:before { + content: "\e9de"; +} +.ict-vapel_chgpile:before { + content: "\e9df"; +} +.ict-VDU:before { + content: "\e9e0"; +} +.ict-VIM:before { + content: "\e9e1"; +} +.ict-VNF:before { + content: "\e9e2"; +} +.ict-VNFC:before { + content: "\e9e3"; +} +.ict-VNFM:before { + content: "\e9e4"; +} + + +/********************************** + + plx-icons + +**********************************/ +@font-face { + font-family: 'plx-icons'; + src: url('../fonts/plx-icons.eot?15hpu9'); + src: url('../fonts/plx-icons.eot?15hpu9#iefix') format('embedded-opentype'), + url('../fonts/plx-icons.ttf?15hpu9') format('truetype'), + url('../fonts/plx-icons.woff?15hpu9') format('woff'), + url('../fonts/plx-icons.svg?15hpu9#plx-icons') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="plx-ico-"], [class*=" plx-ico-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'plx-icons' !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.plx-ico-drag-drop-16:before { + content: "\e987"; +} +.plx-ico-all-selected-16:before { + content: "\e900"; +} +.plx-ico-arrow-down-16:before { + content: "\e901"; +} +.plx-ico-arrow-left-16:before { + content: "\e902"; +} +.plx-ico-arrow-right-16:before { + content: "\e903"; +} +.plx-ico-arrow-up-16:before { + content: "\e904"; +} +.plx-ico-bell-20:before { + content: "\e905"; +} +.plx-ico-calendar-16:before { + content: "\e906"; +} +.plx-ico-close-16:before { + content: "\e907"; +} +.plx-ico-code-16:before { + content: "\e908"; +} +.plx-ico-code-f-16:before { + content: "\e909"; +} +.plx-ico-copy-16:before { + content: "\e90a"; +} +.plx-ico-delete-16:before { + content: "\e90b"; +} +.plx-ico-detail-16:before { + content: "\e90c"; +} +.plx-ico-double-left-16:before { + content: "\e90d"; +} +.plx-ico-double-right-16:before { + content: "\e90e"; +} +.plx-ico-down-16:before { + content: "\e90f"; +} +.plx-ico-download-16:before { + content: "\e910"; +} +.plx-ico-empty-16:before { + content: "\e911"; +} +.plx-ico-export-16:before { + content: "\e912"; +} +.plx-ico-export-other-16:before { + content: "\e913"; +} +.plx-ico-eye-16:before { + content: "\e914"; +} +.plx-ico-eye-closed-16:before { + content: "\e915"; +} +.plx-ico-file-16:before { + content: "\e916"; +} +.plx-ico-filter-16:before { + content: "\e917"; +} +.plx-ico-filter-f-16:before { + content: "\e918"; +} +.plx-ico-folder-16:before { + content: "\e919"; +} +.plx-ico-folder-custom-16:before { + content: "\e91a"; +} +.plx-ico-folder-open-16:before { + content: "\e91b"; +} +.plx-ico-folder-open-custom-16:before { + content: "\e91c"; +} +.plx-ico-full-grid-16:before { + content: "\e91d"; +} +.plx-ico-full-grid-f-16:before { + content: "\e91e"; +} +.plx-ico-full-screen-16:before { + content: "\e91f"; +} +.plx-ico-gear-16:before { + content: "\e920"; +} +.plx-ico-half-grid-16:before { + content: "\e921"; +} +.plx-ico-half-grid-f-16:before { + content: "\e922"; +} +.plx-ico-help-tip-16:before { + content: "\e923"; +} +.plx-ico-help-tip-20:before { + content: "\e924"; +} +.plx-ico-history-16:before { + content: "\e925"; +} +.plx-ico-import-16:before { + content: "\e926"; +} +.plx-ico-info-16:before { + content: "\e927"; +} +.plx-ico-info-f-20:before { + content: "\e928"; +} +.plx-ico-left-16:before { + content: "\e929"; +} +.plx-ico-lock-16:before { + content: "\e92a"; +} +.plx-ico-magnifier-16:before { + content: "\e92b"; +} +.plx-ico-maximize-16:before { + content: "\e92c"; +} +.plx-ico-menu-16:before { + content: "\e92d"; +} +.plx-ico-message-16:before { + content: "\e92e"; +} +.plx-ico-message-20:before { + content: "\e92f"; +} +.plx-ico-minus-16:before { + content: "\e930"; +} +.plx-ico-modify-16:before { + content: "\e931"; +} +.plx-ico-move-16:before { + content: "\e932"; +} +.plx-ico-new-16:before { + content: "\e933"; +} +.plx-ico-pause-16:before { + content: "\e934"; +} +.plx-ico-plus-16:before { + content: "\e935"; +} +.plx-ico-print-16:before { + content: "\e936"; +} +.plx-ico-reduction-16:before { + content: "\e937"; +} +.plx-ico-refresh-16:before { + content: "\e938"; +} +.plx-ico-remove-16:before { + content: "\e939"; +} +.plx-ico-right-16:before { + content: "\e93a"; +} +.plx-ico-save-16:before { + content: "\e93b"; +} +.plx-ico-select-16:before { + content: "\e93c"; +} +.plx-ico-setting-20:before { + content: "\e93d"; +} +.plx-ico-square-down-16:before { + content: "\e93e"; +} +.plx-ico-square-left-16:before { + content: "\e93f"; +} +.plx-ico-square-right-16:before { + content: "\e940"; +} +.plx-ico-square-up-16:before { + content: "\e941"; +} +.plx-ico-start-16:before { + content: "\e942"; +} +.plx-ico-stop-16:before { + content: "\e943"; +} +.plx-ico-sucess-16:before { + content: "\e944"; +} +.plx-ico-sucess-f-20:before { + content: "\e945"; +} +.plx-ico-three-grid-16:before { + content: "\e946"; +} +.plx-ico-three-grid-f-16:before { + content: "\e947"; +} +.plx-ico-unlock-16:before { + content: "\e948"; +} +.plx-ico-up-16:before { + content: "\e949"; +} +.plx-ico-upload-16:before { + content: "\e94a"; +} +.plx-ico-user-20:before { + content: "\e94b"; +} +.plx-ico-warning-16:before { + content: "\e94c"; +} +.plx-ico-warning-f-20:before { + content: "\e94d"; +} +.plx-ico-zoom-in-16:before { + content: "\e94e"; +} +.plx-ico-zoom-out-16:before { + content: "\e94f"; +} +.plx-ico-zoom-overview-16:before { + content: "\e950"; +} +.plx-ico-zoom-reset-16:before { + content: "\e951"; +} +.plx-ico-config-auto-discover-16:before { + content: "\e952"; +} +.plx-ico-config-backup-16:before { + content: "\e953"; +} +.plx-ico-config-script-16:before { + content: "\e954"; +} +.plx-ico-console-16:before { + content: "\e955"; +} +.plx-ico-fm-acknownledge-16:before { + content: "\e956"; +} +.plx-ico-fm-alarm-16:before { + content: "\e957"; +} +.plx-ico-fm-alarm-box-16:before { + content: "\e958"; +} +.plx-ico-fm-alarm-code-16:before { + content: "\e959"; +} +.plx-ico-fm-alarm-turn-16:before { + content: "\e95a"; +} +.plx-ico-fm-current-alarm-16:before { + content: "\e95b"; +} +.plx-ico-fm-group-16:before { + content: "\e95c"; +} +.plx-ico-fm-history-alarm-16:before { + content: "\e95d"; +} +.plx-ico-fm-moc-16:before { + content: "\e95e"; +} +.plx-ico-fm-notice-alarm-16:before { + content: "\e95f"; +} +.plx-ico-fm-no-voice-16:before { + content: "\e960"; +} +.plx-ico-fm-restype-16:before { + content: "\e961"; +} +.plx-ico-fm-setting-16:before { + content: "\e962"; +} +.plx-ico-fm-unacknownledge-16:before { + content: "\e963"; +} +.plx-ico-fm-voice-16:before { + content: "\e964"; +} +.plx-ico-hmf-16:before { + content: "\e965"; +} +.plx-ico-license-16:before { + content: "\e966"; +} +.plx-ico-log-16:before { + content: "\e967"; +} +.plx-ico-mml-16:before { + content: "\e968"; +} +.plx-ico-mml-batch-command-16:before { + content: "\e969"; +} +.plx-ico-mml-debug-16:before { + content: "\e96a"; +} +.plx-ico-mml-dele-single-16:before { + content: "\e96b"; +} +.plx-ico-mml-execut-next-16:before { + content: "\e96c"; +} +.plx-ico-mml-grammar-check-16:before { + content: "\e96d"; +} +.plx-ico-mml-lose-error-16:before { + content: "\e96e"; +} +.plx-ico-mml-parallel-16:before { + content: "\e96f"; +} +.plx-ico-mml-single-command-16:before { + content: "\e970"; +} +.plx-ico-octopus-16:before { + content: "\e971"; +} +.plx-ico-performance-16:before { + content: "\e972"; +} +.plx-ico-pm-customized-16:before { + content: "\e973"; +} +.plx-ico-pm-monitor-16:before { + content: "\e974"; +} +.plx-ico-pm-query-16:before { + content: "\e975"; +} +.plx-ico-sm-16:before { + content: "\e976"; +} +.plx-ico-sm-admin-16:before { + content: "\e977"; +} +.plx-ico-sm-blacklist-16:before { + content: "\e978"; +} +.plx-ico-sm-department-16:before { + content: "\e979"; +} +.plx-ico-sm-follow-up-16:before { + content: "\e97a"; +} +.plx-ico-sm-maintain-16:before { + content: "\e97b"; +} +.plx-ico-sm-operation-16:before { + content: "\e97c"; +} +.plx-ico-sm-role-16:before { + content: "\e97d"; +} +.plx-ico-sm-roleset-16:before { + content: "\e97e"; +} +.plx-ico-sm-syn-down-16:before { + content: "\e97f"; +} +.plx-ico-sm-user-16:before { + content: "\e980"; +} +.plx-ico-sm-user-compare-16:before { + content: "\e981"; +} +.plx-ico-sm-user-dispatch-16:before { + content: "\e982"; +} +.plx-ico-sm-user-managment-16:before { + content: "\e983"; +} +.plx-ico-topo-group-16:before { + content: "\e984"; +} +.plx-ico-topo-layer-access-16:before { + content: "\e985"; +} +.plx-ico-topo-logic-16:before { + content: "\e986"; +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/FontAwesome.otf b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/FontAwesome.otf new file mode 100644 index 00000000..401ec0f3 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/FontAwesome.otf differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.eot b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.eot new file mode 100644 index 00000000..8ddba569 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.eot differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.svg new file mode 100644 index 00000000..94a04d7c --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.svg @@ -0,0 +1,239 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.ttf b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.ttf new file mode 100644 index 00000000..5cc40aac Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.ttf differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.woff b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.woff new file mode 100644 index 00000000..0564e188 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteIctIcons.woff differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.eot b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.eot new file mode 100644 index 00000000..2b6211f8 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.eot differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.svg new file mode 100644 index 00000000..77eff7d7 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.svg @@ -0,0 +1,12 @@ + + + +Generated by IcoMoon + + + + + + + + \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.ttf b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.ttf new file mode 100644 index 00000000..f52ce211 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.ttf differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.woff b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.woff new file mode 100644 index 00000000..f120a67e Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/ZteTableIcons.woff differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.eot b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.eot differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.ttf b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.ttf differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff2 b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/fontawesome-webfont.woff2 differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.eot b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.eot new file mode 100644 index 00000000..e45edf09 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.eot differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.svg new file mode 100644 index 00000000..f5e45b4d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.svg @@ -0,0 +1,150 @@ + + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.ttf b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.ttf new file mode 100644 index 00000000..b8bc410e Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.ttf differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.woff b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.woff new file mode 100644 index 00000000..7cbe02f9 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/iconfont.woff differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.eot b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.eot new file mode 100644 index 00000000..5611721d Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.eot differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.svg new file mode 100644 index 00000000..98d20729 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.svg @@ -0,0 +1,146 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.ttf b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.ttf new file mode 100644 index 00000000..2d56c73c Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.ttf differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.woff b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.woff new file mode 100644 index 00000000..bf943465 Binary files /dev/null and b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/fonts/plx-icons.woff differ diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop.svg new file mode 100644 index 00000000..58bca254 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop_hover.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop_hover.svg new file mode 100644 index 00000000..f35c0fb0 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/backtop/backtop_hover.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-checked-disabled.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-checked-disabled.svg new file mode 100644 index 00000000..041c368b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-checked-disabled.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-disabled.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-disabled.svg new file mode 100644 index 00000000..03bfad63 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-disabled.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-hover.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-hover.svg new file mode 100644 index 00000000..4cac1803 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-hover.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-init.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-init.svg new file mode 100644 index 00000000..d518db1b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/checkbox-init.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked-disabled.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked-disabled.svg new file mode 100644 index 00000000..ff139644 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked-disabled.svg @@ -0,0 +1,11 @@ + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked.svg new file mode 100644 index 00000000..29dfaf84 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-checked.svg @@ -0,0 +1,11 @@ + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-disabled.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-disabled.svg new file mode 100644 index 00000000..6e1a1b12 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-disabled.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-hover.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-hover.svg new file mode 100644 index 00000000..c050f69d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-hover.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-init.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-init.svg new file mode 100644 index 00000000..7e2977c2 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/radio-init.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/test/checkbox-checked.svg b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/test/checkbox-checked.svg new file mode 100644 index 00000000..22b9535c --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/images/checkbox-radio/test/checkbox-checked.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/NIV-theme.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/NIV-theme.less new file mode 100644 index 00000000..2490a0d9 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/NIV-theme.less @@ -0,0 +1,271 @@ +//color +@blue-1: #e7f4fd; +@blue-2: #cfe9fc; +@blue-3: #a0d3f8; +@blue-4: #70bef5; +@blue-5: #40a8f2; +@blue-6: #108ee9; +@blue-7: #0d75bf; +@blue-8: #0c66a7; +@blue-9: #084977; +@blue-10: #073a5f; + +@green-1: #e5f6ee; +@green-2: #cceedd; +@green-3: #99dcbb; +@green-4: #66cb98; +@green-5: #33b976; +@green-6: #00a854; +@green-7: #00994d; +@green-8: #008040; +@green-9: #006633; +@green-10: #004d26; + +@red-1: #fdeae8; +@red-2: #fad4d1; +@red-3: #f8bfba; +@red-4: #f5aaa3; +@red-5: #ee6a5d; +@red-6: #ea4335; +@red-7: #e72918; +@red-8: #b92113; +@red-9: #a21d11; +@red-10: #8a190f; + +@yellow-1: #fff8e6; +@yellow-2: #fef2cd; +@yellow-3: #fde59b; +@yellow-4: #fdde81; +@yellow-5: #fcca36; +@yellow-6: #f3b709; +@yellow-7: #c99703; +@yellow-8: #977202; +@yellow-9: #7e5f02; +@yellow-10: #644c02; + +@orange-1: #fff1e6; +@orange-2: #ffe2cc; +@orange-3: #ffd4b3; +@orange-4: #ffb780; +@orange-5: #ff8b33; +@orange-6: #f56a30; +@orange-7: #cc5800; +@orange-8: #994200; +@orange-9: #803700; +@orange-10: #662c00; + +@purple-1: #f5e9f7; +@purple-2: #ebd4ef; +@purple-3: #d7a9df; +@purple-4: #c47cd0; +@purple-5: #ad49be; +@purple-6: #9c27b0; +@purple-7: #862097; +@purple-8: #6f1c7d; +@purple-9: #60166d; +@purple-10: #51145c; + +@pink-1: #fde8ef; +@pink-2: #fad1df; +@pink-3: #f8bace; +@pink-4: #ff84af; +@pink-5: #ee5d8e; +@pink-6: #e81e63; +@pink-7: #d01654; +@pink-8: #b9134a; +@pink-9: #a21141; +@pink-10: #8a0f38; + +@cyan-1: #ebf8f9; +@cyan-2: #cfedf0; +@cyan-3: #a7dfe3; +@cyan-4: #76cdd3; +@cyan-5: #3db8c1; +@cyan-6: #00a2ae; +@cyan-7: #008997; +@cyan-8: #00707f; +@cyan-9: #005667; +@cyan-10: #003c4e; + +@lemon-1: #fffdeb; +@lemon-2: #ffface; +@lemon-3: #fff7b1; +@lemon-4: #fff59d; +@lemon-5: #fff175; +@lemon-6: #ffeb3b; +@lemon-7: #f7e225; +@lemon-8: #e8d211; +@lemon-9: #d3bf0b; +@lemon-10: #c3b003; + +@brown-1: #f5f1ef; +@brown-2: #ece3df; +@brown-3: #d9c6bf; +@brown-4: #c6aa9f; +@brown-5: #9f7160; +@brown-6: #795548; +@brown-7: #604439; +@brown-8: #503830; +@brown-9: #402d26; +@brown-10: #30221d; + +@indigo-1: #eceef8; +@indigo-2: #d9ddf2; +@indigo-3: #c6cceb; +@indigo-4: #a1aade; +@indigo-5: #6877ca; +@indigo-6: #3f51b5; +@indigo-7: #354497; +@indigo-8: #2e3b84; +@indigo-9: #212a5e; +@indigo-10: #1b224b; + +@lime-1: #f3f9ec; +@lime-2: #e6f2d9; +@lime-3: #daecc6; +@lime-4: #b5d98c; +@lime-5: #9ccc66; +@lime-6: #8bc24a; +@lime-7: #77ac39; +@lime-8: #699933; +@lime-9: #4f7326; +@lime-10: #426020; + +@bluegray-1: #f0f3f5; +@bluegray-2: #d2dbe0; +@bluegray-3: #b4c3cb; +@bluegray-4: #96abb6; +@bluegray-5: #7893a1; +@bluegray-6: #607d8b; +@bluegray-7: #546c78; +@bluegray-8: #495f69; +@bluegray-9: #34444b; +@bluegray-10: #2a363c; + +@default-white: #ffffff; +@default-black: #000000; + +@default-blue: @blue-6; +@hover-blue: @blue-7; +@active-blue: @blue-8; + +@nav-default-blue: @default-blue; +@nav-hover-blue: @hover-blue; +@nav-active-blue: @active-blue; + +@default-green: @green-6; +@hover-green: @green-7; +@active-green: @green-8; + +@default-red: @red-6; +@hover-red: @red-7; +@active-red: @red-8; + +@default-yellow: @yellow-6; +@hover-yellow: @yellow-7; +@active-yellow: @yellow-8; + +@gray-grade-1: #212121; +@gray-grade-2: #404040; +@gray-grade-3: #595959; +@gray-grade-4: #737373; +@gray-grade-5: #999999; +@gray-grade-6: #bfbfbf; +@gray-grade-7: #d9d9d9; +@gray-grade-8: #e9e9e9; +@gray-grade-9: #f5f5f5; + +//font +@font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + +@font-size-normal: 14px; +@font-size-xl: 24px; +@font-size-lg: 20px; +@font-size-sm: 12px; + +@font-gray-normal: @gray-grade-3; +@font-gray-light: @gray-grade-5; +@font-gray-lightest: @gray-grade-6; +@font-gray-dark: @gray-grade-2; + +@font-weight-normal: 400; +@font-weight-bold: 500; +@title-font-weight: 500; + +.font(@font-size: @font-size-normal, @color:@font-gray-normal, @font-weight: @font-weight-normal) { + font-family: @font-family; + font-weight: @font-weight; + font-size: @font-size; + line-height: @font-size; + color: @color; +} + +.input-font(@font-size: @font-size-normal, @color:@font-gray-normal) { + .font(@font-size, @color, @font-weight-bold); +} + +//disabled +@disabled-font: @font-gray-lightest; +@disabled-background: @gray-grade-9; +@disabled-border-color: rgba(191, 191, 191, 0.5); + +//hover +@hover-background: @blue-1; +@hover-border-color: @default-blue; + +//active +@active-background: @gray-grade-9; + +//highlight +@highlight-background: @gray-grade-6; + +//border +@border-color: @gray-grade-7; +@border-base: 1px solid @border-color; +@border-radius-base: 3px; +@box-shadow-base: 0 2px 4px 0 rgba(0, 0, 0, 0.2); + +//height +@component-height-lg: 32px; +@component-height-md: 28px; +@component-height-sm: 24px; +@line-height-base: 1.5; + +//spacing +@spacing-within-item: 10px; +@spacing-between-item: 20px; + +//z-index +@z-index-affix : 10; +@z-index-back-top : 10; +@z-index-modal-mask : 1000; +@z-index-modal : 1000; +@z-index-notification : 1010; +@z-index-message : 1010; +@z-index-popover : 1030; +@z-index-picker : 1050; +@z-index-dropdown : 1050; +@z-index-tooltip : 1060; + +//input +@input-padding-both-side: 10px; +@input-width: 400px; + +//overlay +@overlay-margin-top: 5px; +@overlay-item-padding-left: 10px; + +//clear icon +@hover-clear-icon-bg: @gray-grade-9; +@clear-icon-color: @gray-grade-5; + +//button +@button-width: 88px; +@button-border: 0; +@button-border-color: @border-base; + +//tab +@tab-height: 36px; +@tab-active-line-height: 2px; +@tab-line-height: @tab-height - @tab-active-line-height; +@icon-menu-active-bg: @blue-2; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.css new file mode 100644 index 00000000..4bbbcd55 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.css @@ -0,0 +1,5548 @@ +.plx-breadcrumb { + margin: 0; + padding: 5px 10px; + font-size: 12px; +} +.plx-breadcrumb li { + display: inline-block; +} +.plx-breadcrumb a { + color: #737373; + text-decoration: none; +} +.plx-breadcrumb a:hover { + color: #108EE9; +} +.plx-breadcrumb .plx-breadcrumb-separator { + color: #999; + padding: 0 5px; + vertical-align: 1px; +} +.plx-breadcrumb .plx-breadcrumb-collapse { + padding-left: 6px; + padding-right: 6px; + cursor: pointer; +} +.plx-breadcrumb .plx-breadcrumb-collapse circle { + fill: #8e8e8e; +} +.plx-breadcrumb .plx-breadcrumb-collapse:hover circle { + fill: #108EE9; +} +.plx-breadcrumb .plx-breadcrumb-active { + vertical-align: 1px; +} +.plx-breadcrumb .plx-breadcrumb-active a { + font-size: 20px; + color: #404040; + cursor: text; +} +.owl-dateTime { + display: inline-block; + position: relative; + width: 100%; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + background: #fff; + color: #595959; +} +.owl-dateTime input { + font-size: 14px; + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; +} +.short-text-input .owl-dateTime input { + width: 120px; +} +.text-input-with-unit .owl-dateTime input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .owl-dateTime input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .owl-dateTime input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .owl-dateTime input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .owl-dateTime input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .owl-dateTime input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .owl-dateTime input { + width: 246px; +} +.short-text-input.text-input-with-prefix .owl-dateTime input { + width: 80px; +} +.short-text-input.text-input-with-unit .owl-dateTime input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .owl-dateTime input { + width: 40px; +} +.owl-dateTime input:focus { + border: 1px solid #108EE9; +} +.owl-dateTime input:disabled, +.owl-dateTime input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.owl-dateTime input:-ms-input-placeholder { + color: #999 !important; +} +.owl-dateTime input::-webkit-input-placeholder { + color: #999 !important; +} +.owl-dateTime-input { + width: 100%; + padding-right: 1.5em; +} +.owl-dateTime-cancel { + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + transform: translateY(-50%); + cursor: pointer; + color: inherit; +} +.owl-dateTime-inputWrapper { + position: relative; +} +.owl-dateTime-customTemp { + display: inline-block; + position: relative; +} +.owl-dateTime-dialog { + padding: 0px; + position: absolute; +} +.owl-dateTime-dialogHeader { + display: flex; + justify-content: center; + align-items: center; + width: 100%; +} +.owl-calendar-wrapper, +.owl-timer-wrapper { + position: relative; + width: 100%; + padding: .2em .5em; +} +.owl-calendar-control { + display: flex; + justify-content: space-around; + width: 100%; + height: 2em; +} +.owl-calendar-control .owl-calendar-controlNav { + position: relative; + cursor: pointer; + width: 12.5%; +} +.owl-calendar-control .owl-calendar-controlContent { + display: flex; + justify-content: center; + align-items: center; + width: 75%; + height: 100%; +} +.owl-calendar { + position: relative; + min-height: 13.7em; +} +.owl-calendar table { + width: 100%; + border-collapse: collapse; +} +.owl-calendar tbody td { + position: relative; + text-align: center; +} +.owl-calendar tbody td a { + display: block; + width: 100%; + height: 100%; + text-decoration: none; + color: inherit; + font-size: 12px; +} +.owl-calendar .owl-calendar-yearArrow { + position: absolute; + top: 50%; + width: 1.5em; + height: 1.5em; + transform: translateY(-50%); + cursor: pointer; +} +.owl-calendar .owl-calendar-yearArrow.left { + left: -0.5em; +} +.owl-calendar .owl-calendar-yearArrow.right { + right: -0.5em; +} +.owl-timer-wrapper { + position: relative; + display: flex; + justify-content: center; +} +.owl-timer-wrapper .owl-timer { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 25%; + height: 100%; +} +.owl-timer-wrapper .owl-timer-control { + display: flex; + justify-content: center; + align-items: center; + height: 30%; + width: 100%; + cursor: pointer; +} +.owl-timer-wrapper .owl-timer-control .icon:before { + margin: 0; +} +.owl-timer-wrapper .owl-timer-input { + width: 60%; + height: 100%; +} +/*# sourceMappingURL=picker.component.css.map */ +.font-face { + font-weight: normal; + font-style: normal; +} +[class^="paletx-datepicker-icon-"]:before, +[class*="paletx-datepicker-icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.paletx-datepicker-icon-cancel:before { + content: '\e802'; +} +/* '' */ +.paletx-datepicker-icon-up-open:before { + content: '\e805'; +} +/* '' */ +.paletx-datepicker-icon-down-open:before { + content: '\e80b'; +} +/* '' */ +.paletx-datepicker-icon-left-open:before { + content: '\e817'; +} +/* '' */ +.paletx-datepicker-icon-right-open:before { + content: '\e818'; +} +/* '' */ +.owl-widget, +.owl-widget * { + box-sizing: border-box; +} +.owl-widget { + font-size: 1em; +} +.owl-padding { + padding: 0px; +} +.owl-corner-all { + border-radius: 3px; +} +.owl-corner-top { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.owl-state-default { + border: 1px solid #d9d9d9; + background: #fff; + color: #595959; +} +.owl-inputtext { + margin: 0; + outline: medium none; + transition: .2s; +} +.owl-dateTime.owl-dateTime-inline { + width: auto; +} +.owl-dateTime.owl-dateTime-inline .owl-dateTime-dialog { + position: relative; + z-index: auto; +} +.owl-dateTime-dialog { + width: 300px; + user-select: none; + z-index: 99999; +} +.owl-dateTime-dialogHeader { + height: 2.5em; + padding: .25em; + background-color: #fff; + overflow-y: auto; +} +.owl-calendar-control .owl-calendar-controlNav .nav-prev, +.owl-calendar-control .owl-calendar-controlNav .nav-next { + position: absolute; + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +.owl-cal-header { + background: #f5f5f5; + height: 35px; +} +.owl-calendar-control .owl-calendar-controlNav .nav-prev:before, +.owl-calendar-control .owl-calendar-controlNav .nav-next:before { + border-top: .5em solid transparent; + border-bottom: .5em solid transparent; + border-right: 0.75em solid #000000; + width: 0; + height: 0; + display: block; + margin: 0 auto; +} +.owl-calendar-control .owl-calendar-controlNav .nav-next:before { + border-right: 0; + border-left: 0.75em solid #000000; +} +.owl-calendar-control .owl-calendar-controlContent .month-control, +.owl-calendar-control .owl-calendar-controlContent .year-control { + color: #999; + display: inline-block; + cursor: pointer; + transition: transform 200ms ease; +} +.owl-calendar-control .owl-calendar-controlContent .month-control:hover, +.owl-calendar-control .owl-calendar-controlContent .year-control:hover { + color: #5cb85c; +} +.owl-calendar-control .owl-calendar-controlContent .month-control { + font-size: 16px; + margin-right: .8rem; +} +.owl-calendar-control .owl-calendar-controlContent .year-control { + font-size: 16px; +} +.owl-calendar tbody td.owl-calendar-selected { + background-color: #5cb85c; + color: #fff; +} +.owl-calendar tbody td.owl-calendar-invalid { + color: #bfbfbf; +} +.owl-calendar tbody td.owl-calendar-outFocus { + color: #999; +} +.owl-calendar tbody td.owl-calendar-hidden { + visibility: hidden; +} +/** +.owl-calendar tbody td:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: @hover-bg-color; + color: @shadow-color } +**/ +.owl-years td.owl-year, +.owl-years td.owl-month, +.owl-months td.owl-year, +.owl-months td.owl-month { + font-size: 1.2em; + height: 2.5em; + width: 33.33%; + line-height: 2.5em; + border-radius: 60px; +} +.owl-weekdays th.owl-weekday { + height: 1em; + line-height: 2em; + text-align: center; + font-weight: normal; + font-size: 14px; + /**color: @unselected-text-color; **/ +} +.owl-days td.owl-day { + border-radius: 30px; + height: 2em; + width: calc(14.28571429%); + line-height: 2em; +} +.owl-days td.owl-day.owl-day-today:before { + content: ''; + display: block; + position: absolute; + right: 2px; + top: 2px; + color: #108EE9; + border-top: 0.5em solid #0D75BF; + border-left: .5em solid transparent; +} +.owl-timer-wrapper { + height: 5.4em; + background-color: rgba(0, 0, 0, 0.2); +} +.owl-timer-wrapper .owl-timer-text { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 40%; + font-size: 1.5em; +} +.owl-timer-wrapper .owl-meridian-btn { + font-size: .8em; + color: #5cb85c; + background-image: none; + background-color: transparent; + border-color: #5cb85c; +} +.owl-timer-wrapper .owl-meridian-btn:hover { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} +.owl-timer-divider { + display: inline-block; + align-self: flex-end; + position: absolute; + width: .6em; + height: 100%; + left: -0.3em; +} +.owl-timer-divider .owl-timer-dot { + display: block; + width: .3em; + height: .3em; + position: absolute; + left: 50%; + border-radius: 50%; + transform: translateX(-50%); +} +.owl-timer-divider .owl-timer-dot.dot-top { + top: 38%; +} +.owl-timer-divider .owl-timer-dot.dot-bottom { + bottom: 38%; +} +.owl-icon { + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: #8e8e8e; +} +.oes-time-control { + color: #595959 !important; +} +.owl-calendar-selected { + background-color: #5cb85c; + color: #fff; + border-radius: 50%; +} +.owl-calendar tbody td div.day:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: #E7F4FD; + color: #000; + border-radius: 50%; +} +.oes-time-control { + font-size: 14px; +} +.owl-calendar-year-part { + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-year-part:hover { + background-color: #E7F4FD; + color: #000; + border-radius: 50%; +} +.owl-calendar-year-selected { + background-color: #5cb85c; + color: #fff; + border-radius: 50%; +} +.owl-calendar-year-selected:hover { + background-color: #5cb85c; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-part { + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-month-part:hover { + background-color: #E7F4FD; + color: #000; + border-radius: 50%; +} +.owl-calendar-month-selected { + background-color: #5cb85c; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-selected:hover { + background-color: #5cb85c; + color: #fff; + border-radius: 50%; +} +/*# sourceMappingURL=picker.css.map */ +.oes-time-table .chevron::before { + border-style: solid; + border-width: 0.29em 0.29em 0 0; + content: ''; + display: inline-block; + height: 0.69em; + left: 0.05em; + position: relative; + top: 0.15em; + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + vertical-align: middle; + width: 0.71em; +} +.oes-time-table .chevron.bottom:before { + top: -0.3em; + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); +} +.oes-time-table .btn-link { + border: none!important; + cursor: pointer; + outline: 0; + display: block; +} +.oes-time-table .btn-link.disabled { + cursor: not-allowed; + opacity: .65; +} +.oes-time-control { + text-align: center; +} +.datapicker-form-control { + width: auto !important; + display: inline-block; +} +.oes-time-table .ict-stretch { + font-size: 8px; +} +.oes-time-table .ict-shrink { + font-size: 8px; +} +.time-pick-bk { + background-color: #fff; +} +.btn-link:focus, +.btn-link:hover { + text-decoration: none; +} +.oes-time-control { + border: 0; + width: 30px !important; + padding: 3px 0; + margin: 0; + font-size: 14px; +} +.oes-time-control:hover { + background-color: #e6e6e6; + color: #000; + cursor: pointer; +} +.oes-time-control-foucs-bk { + background-color: #00abff !important; + color: #fff!important; +} +.oes-time-separator { + margin: 0 -5px; +} +.oes-time-group, +.oes-time-group:hover { + border-bottom: 1px solid #ccc; + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; +} +.oes-time-btns, +.oes-time-btns:hover { + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; + padding: 0 0 7px 0 !important; +} +.oes-time-btns-wrapper { + margin-top: -3px; + transform: scale(0.6, 0.6); +} +.i18nTimeDes, +.i18nTimeDes:hover { + padding: 0 5px 0px 0; +} +.oes-time-btn { + height: 5px; +} +.oes-time-table { + margin-bottom: 10px; +} +.hour-table { + font-size: 12px; +} +.hour-table td { + padding: 5px; + padding-top: 3px; + padding-bottom: 3px; + cursor: pointer; +} +.oes-time-btn-shrink { + position: relative; + top: -5px; + left: 0px; + color: #CCC; +} +.oes-time-btn-stretch { + position: relative; + left: 0px; + color: #CCC; +} +.owl-calendar-timer-invalid { + color: #acacac; +} +.owl-calendar-timer-selected { + background-color: #00abff; + color: #FFFFFF; + border-radius: 1.2em; +} +.hour-table td:not(.owl-calendar-timer-selected):not(.owl-calendar-timer-invalid):hover { + background-color: #ebf6fd; + color: #000000; + border-radius: 1.2em; +} +.icon { + color: #8e8e8e; + vertical-align: text-bottom; + margin-left: 5px; + font-size: 20px; +} +.plx-input-password { + display: inline-block; + line-height: 30px; + width: 40px; + text-align: center; + vertical-align: middle; + margin-top: -2px; + background-color: #fff; + border-top: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + border-bottom: 1px solid #d9d9d9; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + cursor: pointer; +} +.plx-input-password:focus, +.plx-input-password:hover { + background-color: #fff; +} +.plx-input-password:active { + background-color: #108ee9; +} +.plx-input-password.ict-eye-closed, +.plx-input-password.ict-eye { + color: #8e8e8e; +} +.plx-input-password-disabled { + cursor: not-allowed; +} +.plx-input-password-disabled:focus, +.plx-input-password-disabled:hover, +.plx-input-password-disabled:active { + background-color: #fff; +} +.plx-input-password-sm { + line-height: 26px; +} +@-moz-keyframes three-quarters-loader { + 0% { + -moz-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes three-quarters-loader { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes three-quarters-loader { + 0% { + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.plx-loading-max:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 72px; + height: 72px; + border: 5px solid #108EE9; + border-right-color: #fff; + border-radius: 36px; +} +.plx-loading-medium:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 36px; + height: 36px; + border: 4px solid #108EE9; + border-right-color: #fff; + border-radius: 18px; +} +.plx-loading-min:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 18px; + height: 18px; + border: 2px solid #108EE9; + border-right-color: #fff; + border-radius: 9px; +} +.plx-loading-default:not(:required) { + margin-left: 100px; + margin-top: 100px; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 36px; + height: 36px; + border: 4px solid #108EE9; + border-right-color: #fff; + border-radius: 18px; +} +.plx-loading-xs:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 12px; + height: 12px; + border: 2px solid #108EE9; + border-right-color: #fff; + border-radius: 6px; +} +.plx-loading { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; +} +.plx-loading-white:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 12px; + height: 12px; + border: 2px solid #fff; + border-right-color: #108EE9; + border-radius: 6px; +} +.plx-loading-gray:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 12px; + height: 12px; + border: 2px solid #bfbfbf; + border-right-color: #fff; + border-radius: 6px; +} +.message { + width: 400px; + right: 10px; + position: fixed; + z-index: 99999; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-weight: 400; + font-style: normal; + font-size: 14px; + color: #404040; +} +.message > p { + width: 100%; + margin: 10px 0 16px; + padding: 0 25px ; + border: 1px solid #e9e9e9; + box-shadow: 1px 3px 9px rgba(0, 0, 0, 0.2); + line-height: 36px; + background: #fff; + font-size: 14px !important; + color: #595959; +} +.message > p > span { + float: right; + cursor: pointer; + font-weight: 400; + font-style: normal; + color: #108EE9; + text-align: center; +} +.message > p > span:hover { + text-decoration: underline; +} +.message > div { + width: 100%; + margin-bottom: 16px; + border: 1px solid ; + line-height: 62px; + border: 1px solid #e9e9e9; + box-shadow: 1px 4px 9px rgba(0, 0, 0, 0.2); + border-radius: 5px; + background: #fff; + position: relative; +} +.message > div > span { + display: inline-block; + font-size: 24px !important; + margin-left: 12px; + margin-right: 3px; + vertical-align: middle; +} +.message > div.success { + border-left: 4px solid #00A854; +} +.message > div.success > span { + color: #00A854; +} +.message > div.error { + border-left: 4px solid #EA4335; +} +.message > div.error > span { + color: #EA4335; +} +.message > div.warning { + border-left: 4px solid #F3B709; +} +.message > div.warning > span { + color: #F3B709; +} +.message > div.info { + border-left: 4px solid #108EE9; +} +.message > div.info > span { + color: #108EE9; +} +.message > div > i { + float: right; + width: 20px; + height: 20px; + margin-top: 21px; + line-height: 20px; + border-radius: 50%; + margin-right: 20px; + cursor: pointer; + text-align: center; + font-size: 16px; +} +.message > div > i:hover { + background: #E7F4FD; +} +.message > div > p { + top: -3px; + margin: 0; + padding: 0 20px 16px 43px; + font-size: 14px !important; + color: #595959; + line-height: 18px; + position: relative; +} +.message > div > p > span { + color: #108EE9; + cursor: pointer; +} +.message > div > p > span:hover { + text-decoration: underline; +} +.message > div > div { + padding-left: 45px ; + padding-bottom: 19px; + font-size: 14px; + color: #108EE9; + line-height: 18px; + cursor: pointer; +} +.message > div > div:hover { + text-decoration: underline; +} +#plxMessageMeasure { + position: fixed; + top: -12px; + opacity: 0; + white-space: nowrap; + margin: 0; + padding: 0; + font-size: 14px !important; + line-height: 14px; + z-index: -9999; +} +.stack > span { + display: inline-block; + position: absolute; + bottom: 16px; + right: 25px; +} +plx-modal-window .modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + outline: 0; + z-index: 10000; +} +plx-modal-window .modal-dialog { + position: relative; + max-width: 600px; + margin: 30px auto; +} +plx-modal-window .modal-dialog.modal-sm { + max-width: 600px; +} +plx-modal-window .modal-dialog.modal-lg { + max-width: 1000px; +} +plx-modal-window .modal-content { + position: relative; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + background-clip: padding-box; + border-radius: 3px; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); + outline: 0; +} +plx-modal-window .modal-content .modal-header { + border-bottom: 0; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; +} +plx-modal-window .modal-content .modal-body .form-group:last-child, +plx-modal-window .modal-content .modal-body form:last-child { + margin-bottom: 0; +} +plx-modal-window .modal-content .modal-footer { + display: block; + border-top: 0; + margin-top: 0; + padding: 0 15px 15px 15px; +} +plx-modal-window .modal-content .modal-title { + font-size: 20px; + margin-bottom: 0; + line-height: 1.5; +} +plx-modal-window .modal-content .modal-btn { + text-align: center; + font-size: 0; +} +plx-modal-window .close { + color: #8e8e8e; + font-size: 16px; + text-shadow: none; + width: 24px; + height: 24px; + background: #fff; + border-radius: 20px; + padding-bottom: 2px; + outline: none; +} +plx-modal-window .close:hover { + color: #8e8e8e; + background: #E7F4FD; +} +plx-modal-window .alert-modal.row { + margin-left: 100px; + margin-bottom: 30px; + text-align: left; +} +plx-modal-window .alert-modal.row .tip-img { + display: inline-block; + width: 52px; + height: 52px; + border-radius: 50px; + font-size: 45px; + text-align: center; + line-height: 1; + margin-top: -5px; + margin-right: 15px; +} +plx-modal-window .alert-modal.row .tip-img::before { + content: "!"; +} +plx-modal-window .alert-modal.row .tip-info { + width: 300px; +} +plx-modal-window .alert-modal.row .tip-info .alert-title { + font-size: 16px; + color: #404040; +} +plx-modal-window .alert-modal.row .tip-info .alert-result { + margin-top: 5px; + font-size: 14px; + color: #999; +} +plx-modal-window .alert-modal.row .warning { + border: 3px solid #F3B709; + color: #F3B709; +} +plx-modal-window .alert-modal.row .error { + border: 3px solid #EA4335; + color: #EA4335; +} +ngb-popover-window.plx-popover.show { + color: #333; + border: 1px solid #d9d9d9; +} +.plx-popover { + position: absolute; + top: 0; + left: 0; + z-index: 10001; + display: block; + padding: 1px; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: break-word; + -webkit-background-clip: padding-box; + background-clip: padding-box; + max-width: 400px; + min-width: 200px; + background-color: #fff; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + border: 1px solid #d9d9d9; + border-radius: 3px; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-popover::before, +.plx-popover::after { + content: ""; + position: absolute; + display: block; + width: 0; + height: 0; + border: solid transparent; +} +.plx-popover::before { + border-width: 7px; +} +.plx-popover::after { + border-width: 6px; +} +.plx-popover-top-common { + margin-top: -9px; +} +.plx-popover-top-common::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover-top-common::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover-top { + margin-top: -9px; +} +.plx-popover-top::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover-top::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover-top::before { + left: 50%; + margin-left: -7px; +} +.plx-popover-top::after { + left: 50%; + margin-left: -6px; +} +.plx-popover.plx-popover-top-left { + margin-top: -9px; +} +.plx-popover.plx-popover-top-left::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover.plx-popover-top-left::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover.plx-popover-top-left::before { + left: 10px; +} +.plx-popover.plx-popover-top-left::after { + left: 11px; +} +.plx-popover.plx-popover-top-right { + margin-top: -9px; +} +.plx-popover.plx-popover-top-right::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover.plx-popover-top-right::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover.plx-popover-top-right::before { + right: 10px; +} +.plx-popover.plx-popover-top-right::after { + right: 11px; +} +.plx-popover-right-common { + margin-left: 9px; +} +.plx-popover-right-common::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover-right-common::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right { + margin-left: 9px; +} +.plx-popover.plx-popover-right::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover.plx-popover-right::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right::before { + top: 50%; + margin-top: -7px; +} +.plx-popover.plx-popover-right::after { + top: 50%; + margin-top: -6px; +} +.plx-popover.plx-popover-right-top { + margin-left: 9px; +} +.plx-popover.plx-popover-right-top::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover.plx-popover-right-top::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right-top::before { + top: 10px; +} +.plx-popover.plx-popover-right-top::after { + top: 11px; +} +.plx-popover.plx-popover-right-bottom { + margin-left: 9px; +} +.plx-popover.plx-popover-right-bottom::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover.plx-popover-right-bottom::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right-bottom::before { + bottom: 10px; +} +.plx-popover.plx-popover-right-bottom::after { + bottom: 11px; +} +.plx-popover-bottom-common { + margin-top: 9px; +} +.plx-popover-bottom-common::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover-bottom-common::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom { + margin-top: 9px; +} +.plx-popover.plx-popover-bottom::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover.plx-popover-bottom::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom::before { + left: 50%; + margin-left: -7px; +} +.plx-popover.plx-popover-bottom::after { + left: 50%; + margin-left: -6px; +} +.plx-popover.plx-popover-bottom-left { + margin-top: 9px; +} +.plx-popover.plx-popover-bottom-left::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover.plx-popover-bottom-left::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom-left::before { + left: 10px; +} +.plx-popover.plx-popover-bottom-left::after { + left: 11px; +} +.plx-popover.plx-popover-bottom-right { + margin-top: 9px; +} +.plx-popover.plx-popover-bottom-right::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover.plx-popover-bottom-right::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom-right::before { + right: 10px; +} +.plx-popover.plx-popover-bottom-right::after { + right: 11px; +} +.plx-popover-left-common { + margin-left: -9px; +} +.plx-popover-left-common::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover-left-common::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left { + margin-left: -9px; +} +.plx-popover.plx-popover-left::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover.plx-popover-left::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left::before { + top: 50%; + margin-top: -7px; +} +.plx-popover.plx-popover-left::after { + top: 50%; + margin-top: -6px; +} +.plx-popover.plx-popover-left-top { + margin-left: -9px; +} +.plx-popover.plx-popover-left-top::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover.plx-popover-left-top::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left-top::before { + top: 10px; +} +.plx-popover.plx-popover-left-top::after { + top: 11px; +} +.plx-popover.plx-popover-left-bottom { + margin-left: -9px; +} +.plx-popover.plx-popover-left-bottom::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover.plx-popover-left-bottom::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left-bottom::before { + bottom: 10px; +} +.plx-popover.plx-popover-left-bottom::after { + bottom: 11px; +} +.plx-popover .plx-popover-title { + padding: 8px 14px; + margin-bottom: 0; + font-size: 16px; + background-color: #fff; + border-bottom: 1px solid #d9d9d9; +} +.plx-popover .plx-popover-title:empty { + display: none; +} +.plx-popover .plx-popover-content { + padding: 9px 14px; + background-color: #fff; +} +.plx-popover .ict-warning { + color: #EA4335; + font-size: 24px; + margin-right: 5px; +} +.popover-template { + padding: 10px 0px; + min-width: 220px; +} +.popover-template .popover-template-content { + padding: 10px 10px; +} +.popover-template .popover-template-footer { + padding: 10px 10px 5px 10px; + text-align: center; +} +.popover-template .popover-template-icon { + display: inline-block; + max-width: 30px; + float: left; +} +.popover-template .popover-template-icon-area { + display: inline-block; + height: 100%; + vertical-align: middle; +} +.popover-template .popover-template-msg { + display: inline-block; + max-width: 300px; + margin-left: 10px; + margin-top: 1px; +} +.plx-progress { + display: inline-block; + margin: 0 10px 1px 0; + border-radius: 20px; + overflow: hidden; + background-color: #eee; +} +.plx-progress .plx-progress-bar { + width: 0; + height: 8px; + transition: width 0.8s ease-in-out; + opacity: 1; +} +.plx-progress .plx-progress-bar-info { + position: relative; + background-color: #3aa5f2; +} +.plx-progress .plx-progress-bar-info::before { + background-color: #108EE9; + content: ''; + position: absolute; + top: 0; + left: 0; + width: 0; + height: 8px; + animation: plx-progress-bar-stripes 0.5s cubic-bezier(0.23, 1, 0.32, 1) infinite; +} +.plx-progress .plx-progress-bar-info.plx-progress-bar-reset { + transition: none; +} +.plx-progress .plx-progress-bar-warning { + background-color: #EA4335; +} +.plx-progress .plx-progress-bar-success, +.plx-progress .plx-progress-bar-info.plx-progress-bar-success { + background-color: #108EE9; +} +.plx-progress-info { + display: inline-block; +} +.plx-progress-info .fp-exclamation-circle { + color: #EA4335; +} +@keyframes plx-progress-bar-stripes { + from { + width: 0; + } + to { + width: 100%; + } +} +:host(.plx-progressbar-sm) { + font-size: 12px; +} +:host(.plx-progressbar-sm) .plx-progress-bar { + height: 2px; +} +:host(.plx-progressbar-sm) .fp-exclamation-circle { + vertical-align: middle; + font-size: 12px; +} +:host(.plx-progressbar-sm) .plx-progress-info span { + vertical-align: middle; +} +.plx-progressbar-sm { + font-size: 12px; +} +.plx-progressbar-sm .plx-progress-bar { + height: 2px; +} +.plx-progressbar-sm .fp-exclamation-circle { + vertical-align: middle; + font-size: 12px; +} +.plx-progressbar-sm .plx-progress-info span { + vertical-align: middle; +} +.plx-progressbar-sm-common { + font-size: 12px; +} +.plx-progressbar-sm-common .plx-progress-bar { + height: 2px; +} +.plx-progressbar-sm-common .fp-exclamation-circle { + vertical-align: middle; + font-size: 12px; +} +.plx-progressbar-sm-common .plx-progress-info span { + vertical-align: middle; +} +.search-input { + position: relative; + background: #fff; + color: #595959; +} +.search-input input { + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; + width: 100%; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + color: #595959; +} +.short-text-input .search-input input { + width: 120px; +} +.text-input-with-unit .search-input input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .search-input input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .search-input input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .search-input input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .search-input input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .search-input input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .search-input input { + width: 246px; +} +.short-text-input.text-input-with-prefix .search-input input { + width: 80px; +} +.short-text-input.text-input-with-unit .search-input input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .search-input input { + width: 40px; +} +.search-input input:focus { + border: 1px solid #108EE9; +} +.search-input input:disabled, +.search-input input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.search-input-sm { + height: 28px !important; +} +.search-img { + color: #bfbfbf; + position: absolute; + right: 8px; + top: 8px; + list-style: none; + font-size: 16px; +} +.search-img-confirm { + color: #0C66A7; + cursor: pointer; +} +::-webkit-input-placeholder { + color: #999 !important; +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #999 !important; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #999 !important; +} +input:-ms-input-placeholder { + color: #999 !important; +} +input::-webkit-input-placeholder { + color: #999 !important; +} +select-dropdown { + box-sizing: border-box; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + outline: none; +} +select-dropdown > div { + background-color: #fff; + position: absolute; + z-index: 9999; +} +select-dropdown > div.select-sm .filter input { + height: 30px; +} +select-dropdown > div.select-sm .filter .toggle { + top: 13px; +} +select-dropdown > div .filter { + width: 100%; +} +select-dropdown > div .filter input { + border: 1px solid #108EE9; + border-radius: 3px; + padding: 0 10px; + width: 100%; + height: 34px; +} +select-dropdown > div .filter .toggle { + display: block; + position: absolute; + top: 15px; + right: 10px; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #9b9b9b; +} +select-dropdown > div .options { + border: 1px solid #d9d9d9; + border-top: none; + border-radius: 3px; + max-height: 160px; + overflow-y: auto; +} +select-dropdown > div .options ul { + list-style: none; + margin: 0; + padding: 0; +} +select-dropdown > div .options ul li { + color: #595959; + height: 30px; + line-height: 18px; + padding: 6px 20px 6px 8px; + position: relative; + cursor: pointer; + user-select: none; +} +select-dropdown > div .options ul li.single-selected { + background-color: #f5f5f5; +} +select-dropdown > div .options ul li.highlighted { + background-color: #E7F4FD; + color: #595959; +} +select-dropdown > div .options ul li.disabled { + background-color: #fff; + color: #bfbfbf; + cursor: default; + pointer-events: none; +} +select-dropdown > div .options ul li.plx-select-message { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +select-dropdown > div .options ul li .option-label { + display: inline-block; + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +select-dropdown > div .options ul li .option-tick { + display: inline-block; + position: absolute; + right: 5px; + top: 5px; +} +select-dropdown > div .options ul li .tick { + fill: none; + stroke: #00A854; + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + stroke-miterlimit: 10; +} +plx-select { + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; + width: 100%; +} +plx-select.ng-untouched:not(form).ng-untouched:not(fieldset) { + border: 0; +} +plx-select * { + box-sizing: border-box; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + outline: none; +} +plx-select > div { + border: 1px solid #d9d9d9; + border-radius: 3px; + cursor: pointer; + user-select: none; + width: 100%; +} +plx-select > div.disabled { + background-color: #f5f5f5; + color: #bfbfbf; + cursor: not-allowed; +} +plx-select > div.focus-border { + border: 1px solid #108EE9 !important; +} +plx-select > div.select-sm .value, +plx-select > div.select-sm .placeholder { + height: 28px !important; + line-height: 28px !important; +} +plx-select > div.select-sm .toggle { + top: 13px; +} +plx-select > div.select-sm div.option { + height: 20px !important; + line-height: 14px !important; +} +plx-select > div.select-sm input { + height: 28px; + line-height: 28px; +} +plx-select > div input { + background-color: transparent; + border: none; + border-radius: 3px; + cursor: pointer; + height: 32px; + line-height: 32px; +} +plx-select > div .toggle { + display: block; + position: absolute; + top: 15px; + right: 10px; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #9b9b9b; +} +plx-select > div .single { + display: flex; + width: 100%; +} +plx-select > div .single .value, +plx-select > div .single .placeholder { + color: #595959; + flex: 1; + height: 32px; + line-height: 32px; + overflow: hidden; + padding: 0 10px; + white-space: nowrap; +} +plx-select > div .single .value span, +plx-select > div .single .placeholder span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; +} +plx-select > div .single .placeholder { + color: #999; +} +plx-select > div .single input { + flex: 1; + padding: 1px 10px 0 10px; +} +plx-select > div .multiple { + display: flex; + flex-flow: row wrap; + padding: 0 10px; + width: 100%; +} +plx-select > div .multiple .placeholder { + flex: 1; + color: #999; + height: 32px; + line-height: 32px; + overflow: hidden; + white-space: nowrap; +} +plx-select > div .multiple input { + padding: 0; + margin-right: 10px; +} +plx-select > div .multiple div.option { + background-color: #f8f8f8; + border: 1px solid #e6e6e6; + border-radius: 2px; + color: #595959; + cursor: default; + display: inline-block; + flex-shrink: 0; + height: 24px; + line-height: 18px; + margin: 4px 10px 4px 0; + padding: 2px 30px 2px 10px; + max-width: 100%; + position: relative; +} +plx-select > div .multiple div.option span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; +} +plx-select > div .multiple div.option .deselect-option { + color: #c0c0c0; + cursor: pointer; + font-size: 8px; + position: absolute; + top: 2px; + right: 8px; +} +plx-select > div .multiple div.option .deselect-option:hover { + color: #555; +} +.plx-ui-steps { + height: 40px; +} +.plx-ui-horizon-ul-horizon { + display: flex; + box-orient: horizontal; + padding: 0; + font-size: 14px; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; +} +.plx-ui-steps-li { + list-style: none; + position: relative; + height: 24px; + line-height: 24px; + float: left; + margin-right: 0; +} +.plx-ui-steps-number-active { + color: #fff; + background-color: #108EE9; + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + text-align: center; +} +.plx-ui-steps-number-passive { + background-color: #D7D7D7; + color: #fff; + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + text-align: center; +} +.plx-rapire-steps { + position: relative; +} +.plx-ui-steps-number-visited { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + position: relative; + color: #108EE9; + background-color: #fff; + border: 2px solid #108EE9; +} +.plx-ui-menuitem-div-passive { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-menuitem-div-active { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-menuitem-div-passive { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-menuitem-div-visited { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-underline { + width: 386px; + height: 2px; + margin-top: 49px; + position: absolute; + background-color: #108EE9; +} +.passive .plx-ui-underline { + background-color: #D7D7D7; +} +.plx-ui-steps-title-active { + white-space: nowrap; +} +.plx-ui-steps-title-passive { + white-space: nowrap; +} +.plx-ui-steps-title-visited { + white-space: nowrap; +} +.plx-ui-steps-number-visited-tick { + position: absolute; + background-color: transparent; + height: 12px; + width: 7px; + transform: rotate(45deg); + transform-origin: 50% 120%; + transition: all 0.2s; + border-right: 2px solid #108EE9; + border-bottom: 2px solid #108EE9; +} +/**********************************************************************************************************/ +.plx-ui-steps-display-vertical { + display: inline-block; +} +.plx-ui-steps-vertical { + height: auto; + width: auto; + min-width: 180px; + display: inline-block; + font-size: 14px; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; +} +.plx-ui-horizon-ul-vertical { + display: inline-block; + box-orient: vertical; + width: auto; + padding: 0; +} +.plx-ui-underline-active-vertical { + margin-left: 3px; + width: 10px; + display: table-caption; + min-height: 30px; + border-right: 2px solid #D7D7D7; +} +.plx-ui-underline-visited-vertical { + margin-left: 3px; + width: 10px; + display: table-caption; + height: 30px; +} +.plx-ui-underline-passive-vertical { + height: 30px; + margin-left: 3px; + width: 10px; + display: table-caption; + border-right: 2px solid #D7D7D7; +} +.plx-ui-steps-li-vertical { + list-style: none; + width: auto; +} +.plx-ui-steps-title-active-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 1px; + white-space: nowrap; +} +.plx-ui-steps-title-visited-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 3px; + white-space: nowrap; +} +.plx-ui-steps-title-passive-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 1px; + white-space: nowrap; +} +.plx-ui-steps-number-visited-tick-vertical { + position: absolute; + background-color: transparent; + height: 12px; + width: 7px; + transform: rotate(45deg); + transform-origin: 50% 120%; + transition: all 0.2s; +} +.plx-ui-steps-number-active-vertical { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + text-align: left; + position: relative; + line-height: 24px; +} +.plx-ui-steps-number-passive-vertical { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + text-align: left; + position: relative; + padding-top: 2px; + line-height: 24px; +} +.plx-ui-steps-number-visited-vertical { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + position: relative; + line-height: 24px; +} +.plx-tabset { + display: flex; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.plx-tabset.plx-nav-tabs { + border-bottom: 1px solid #d9d9d9; + font-size: 16px; +} +.plx-tabset.plx-nav-tabs .plx-nav-item { + margin-bottom: -1px; +} +.plx-tabset.plx-nav-tabs .plx-nav-link { + display: block; + border-radius: 0; + border: 1px solid transparent; + border-top: 2px solid transparent; + color: #999; + min-width: 100px; + text-align: center; + padding: 6px 16px; +} +.plx-tabset.plx-nav-tabs .plx-nav-link:hover, +.plx-tabset.plx-nav-tabs .plx-nav-link:focus { + text-decoration: none; + background-color: #E7F4FD; + border-bottom: 0; + border-left: 0; + border-right: 0; +} +.plx-tabset.plx-nav-tabs .plx-nav-link.active { + color: #595959; + border-top: 2px solid #108EE9; + border-left: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + background-color: #fff; +} +.plx-tabset.plx-nav-tabs .plx-nav-link.active:hover, +.plx-tabset.plx-nav-tabs .plx-nav-link.active:focus { + border-left: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + border-bottom: 1px solid transparent; +} +.plx-tabset.plx-nav-tabs.bottom .plx-nav-link { + border: 0; + border-bottom: 2px solid transparent; +} +.plx-tabset.plx-nav-tabs.bottom .plx-nav-link:hover { + border-bottom: 1px solid transparent; +} +.plx-tabset.plx-nav-tabs.bottom .plx-nav-link.active { + border: 0; + border-bottom: 2px solid #108EE9; +} +.plx-tabset.plx-nav-pills .plx-nav-link { + border: 1px solid #d9d9d9; + border-radius: 0.25em; + color: #999; + display: block; + padding: 6px 10px; + min-width: 100px; + text-align: center; +} +.plx-tabset.plx-nav-pills .plx-nav-link:hover, +.plx-tabset.plx-nav-pills .plx-nav-link:focus { + text-decoration: none; + color: #108ee9; + border-color: #108ee9; + background-color: #fff; +} +.plx-tabset.plx-nav-pills .plx-nav-link:active { + color: #fff; + border-color: #108ee9; + background-color: #108ee9; +} +.plx-tabset.plx-nav-pills .plx-nav-link.active { + color: #fff; + cursor: default; + background-color: #108EE9; + border-color: #108EE9; +} +.plx-tabset.plx-nav-pills .plx-nav-item:hover, +.plx-tabset.plx-nav-pills .plx-nav-item:focus, +.plx-tabset.plx-nav-pills .plx-nav-item:active { + z-index: 2; +} +.plx-tabset.plx-nav-pills .plx-nav-item:first-child:not(:last-child) .plx-nav-link { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.plx-tabset.plx-nav-pills .plx-nav-item:not(:first-child):not(:last-child) .plx-nav-link { + border-radius: 0; +} +.plx-tabset.plx-nav-pills .plx-nav-item:last-child:not(:first-child) .plx-nav-link { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.plx-tabset.plx-nav-pills .plx-nav-item + .plx-nav-item .plx-nav-link { + margin-left: -1px; +} +.plx-tab-content .plx-tab-pane { + display: none; +} +.plx-tab-content .plx-tab-pane.active { + display: block; +} +.plx-table-wrapper { + position: relative; + width: 100%; +} +.plx-table-blur { + opacity: .7; + filter: blur(0.5px); +} +.plx-table-loading { + position: absolute; + width: 100%; + height: 100%; + opacity: 1; + z-index: 9999; +} +.plx-table-loading-content { + position: absolute; + width: 36px; + height: 36px; + border: 5px solid #108EE9; + border-right-color: transparent; + top: calc(50% - 36px); + left: calc(50% - 18px); + animation: plx-table-loading-animation 1s infinite ease-in-out; + border-radius: 50%; +} +.plx-table-loading-placeholder { + position: absolute; + top: calc(50% + 10px); + left: calc(50% - 18px); +} +/* 加载中动画 */ +@-moz-keyframes plx-table-loading-animation { + 0% { + -moz-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes plx-table-loading-animation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes plx-table-loading-animation { + 0% { + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +/*表格样式*/ +.plx-table { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + line-height: 1.5; + color: #595959; + border-collapse: collapse; + width: 100%; + display: table; + table-layout: fixed; + max-width: 100%; + min-width: 100%; + word-break: break-all; +} +.plx-table .plx-table-subHead th { + background-color: #fff; + line-height: 1; + border-bottom: 1px solid #d9d9d9; +} +.plx-table tr.plx-table-hlt { + background-color: #e2f2fc; +} +.plx-table tr:hover { + background-color: #E7F4FD; +} +.plx-table.plx-table-normal th { + box-sizing: border-box; + height: 40px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 14px; + border: 1px solid #d9d9d9; + background-color: #f5f5f5; +} +.plx-table.plx-table-normal td { + border: 1px solid #d9d9d9; + vertical-align: middle; + height: 40px; + padding: 2px 10px 0px 10px; +} +.plx-table.plx-table-large th { + box-sizing: border-box; + height: 50px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 14px; + border: none; + background-color: #f5f5f5; +} +.plx-table.plx-table-large td { + border-bottom: 1px solid #d9d9d9; + vertical-align: middle; + height: 50px; + padding: 2px 10px 0px 10px; +} +.plx-table.plx-table-card th { + box-sizing: border-box; + height: 64px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 14px; + border: none; + background-color: #f5f5f5; +} +.plx-table.plx-table-card td { + border-bottom: 1px solid #d9d9d9; + vertical-align: middle; + height: 64px; + padding: 2px 10px 0px 10px; +} +.plx-table.plx-table-sm th { + box-sizing: border-box; + height: 30px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 14px; + border: 1px solid #d9d9d9; + background-color: #f5f5f5; +} +.plx-table.plx-table-sm td { + border: 1px solid #d9d9d9; + vertical-align: middle; + height: 30px; + padding: 2px 10px 0px 10px; +} +.plx-table tbody tr:first-child td { + border-top: none; +} +.plx-table-fix { + table-layout: fixed; +} +/*防止分页区域高度塌陷*/ +.plx-table-pagnation-content { + overflow: auto; +} +/*搜索区域*/ +.plx-table-opretions-wrapper:after { + content: ''; + display: block; + clear: both; + height: 0; + visibility: hidden; +} +.plx-table-align-center { + text-align: center; +} +.plx-table-align-left { + text-align: left; +} +.plx-table-align-right { + text-align: right; +} +.plx-table-head-checkbox label { + margin-bottom: 0px; + vertical-align: top; +} +.plx-table td.plx-table-no-data { + height: 60px; + text-align: center; + font-size: 14px; + color: #595959; +} +.font { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; +} +.text-input { + display: inline-block; +} +.text-input .caret-down { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #9b9b9b; + margin-top: 4px; + margin-bottom: 10px; +} +.text-input .caret-down.caret-down-hover:hover, +.text-input .caret-down.caret-down-hover:active { + border-top: 4px solid #108EE9; +} +.text-input .caret-up { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid #9b9b9b; + margin-top: 10px; +} +.text-input .caret-up.caret-up-hover:hover, +.text-input .caret-up.caret-up-hover:active { + border-bottom: 4px solid #108EE9; +} +.text-input .toggle { + float: right; + margin-right: 10px; + margin-top: 14px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #9b9b9b; +} +.text-input .text-input-dataList { + margin-top: 2px; + position: absolute; + z-index: 1050; + border: 1px solid #d9d9d9; + background: #fff; + cursor: pointer; + border-radius: 3px; +} +.text-input .text-input-dataList li { + list-style: none; + height: 32px; + width: 400px; + padding-left: 10px; +} +.text-input .text-input-dataList li:hover { + background-color: #E7F4FD; +} +.input-span { + display: inline-block; + overflow: visible; + padding: 0; + position: relative; +} +.text-input-with-hint { + margin-bottom: -8px; +} +:host(.ng-touched.ng-invalid.input-blur) .text-input-with-hint { + height: auto; + margin-bottom: 0; +} +.plx-text-input-unit-group, +.plx-text-input-prefix-group { + position: absolute; + margin-top: 5px; + width: 84px; + z-index: 1050; + border-radius: 3px; + background: #fff; + border: 1px solid #d9d9d9; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + cursor: pointer; +} +.plx-text-input-unit-group li, +.plx-text-input-prefix-group li { + padding-left: 10px; + height: 32px; + list-style: none; + line-height: 32px; + font-size: 14px; +} +.plx-text-input-unit-group li:hover, +.plx-text-input-prefix-group li:hover { + background-color: #E7F4FD; +} +.plx-text-input-unit-group li.group-selected, +.plx-text-input-prefix-group li.group-selected, +.plx-text-input-unit-group li.group-selected:hover, +.plx-text-input-prefix-group li.group-selected:hover { + background-color: #f5f5f5; + color: #595959; +} +.text-input-optional { + display: inline-block; + margin-right: 6px; + padding-left: 5px; +} +.input-right-border .plx-input { + border-right: 1px solid #108EE9; +} +.input-left-border .plx-input { + border-left: 1px solid #108EE9; +} +.text-input-hint { + top: 42px; + left: 10px; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + color: #bfbfbf; +} +:host(.ng-touched.ng-invalid.input-blur) .text-input-hint { + display: none; +} +.text-input-prefix { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + width: 70px; + height: 32px; + text-align: center; + line-height: 32px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + color: #bfbfbf; + border: 1px solid #d9d9d9; + border-right: 0; + vertical-align: middle; +} +.short-text-input .text-input-prefix { + width: 40px; +} +.input-span-focus .text-input-prefix { + border-color: #108EE9; +} +.input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur .text-input-prefix, +.input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur .input-span-focus:focus .text-input-prefix { + border-color: #EA4335; +} +.input-unit, +.text-input-unit-option { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + height: 32px; + text-align: center; + line-height: 32px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.text-input-unit { + border: 1px solid #d9d9d9; + border-left: 0; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + height: 32px; + line-height: 32px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + color: #bfbfbf; + width: 45px; + text-align: center; + vertical-align: middle; +} +.short-text-input .text-input-unit { + width: 40px; +} +.input-span-focus .text-input-unit { + border-color: #108EE9; +} +.text-input-prefix-option { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + height: 32px; + text-align: center; + line-height: 32px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + width: 84px; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid #d9d9d9; + border-right: 0; + vertical-align: middle; +} +.text-input-prefix-option.prefix-focus { + border-color: #108EE9; +} +.text-input-unit-option { + width: 84px; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid #d9d9d9; + border-left: 0; + vertical-align: middle; +} +.input-span-focus .text-input-unit-option { + border-color: #108EE9; +} +.text-input-with-unitOption div.unit-focus { + border-color: #108EE9; +} +.short-text-input .plx-input { + width: 120px; +} +.text-input-with-unit .plx-input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .plx-input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .plx-input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .plx-input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .plx-input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .plx-input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .plx-input { + width: 246px; +} +.short-text-input.text-input-with-prefix .plx-input { + width: 80px; +} +.short-text-input.text-input-with-unit .plx-input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .plx-input { + width: 40px; +} +.input-spinner-up { + cursor: pointer; + display: block; + font-size: 12px; + position: absolute; + margin: 0; + right: 0; + overflow: hidden; + border: none; + padding: 0; + text-align: center; + vertical-align: middle; + width: 18px; + top: 0; +} +.input-spinner-down { + cursor: pointer; + display: block; + font-size: 12px; + position: absolute; + margin: 0; + right: 0; + overflow: hidden; + border: none; + padding: 0; + text-align: center; + vertical-align: middle; + width: 18px; + bottom: 0; +} +:host(.plx-input-sm) .plx-input { + height: 28px; + line-height: 28px; +} +:host(.plx-input-sm) .text-input-prefix, +:host(.plx-input-sm) .text-input-unit, +:host(.plx-input-sm) .text-input-unit-option, +:host(.plx-input-sm) .text-input-prefix-option { + height: 28px; + line-height: 28px; +} +:host(.plx-input-sm) div.text-input-dataList { + height: 28px; +} +:host(.plx-input-sm) .toggle { + margin-top: 11px; +} +:host(.plx-input-sm) .caret-down { + margin-bottom: 8px; +} +:host(.plx-input-sm) .caret-up { + margin-top: 8px; +} +:host(.plx-input-sm) .plx-input-passwordSwitch { + line-height: 26px; +} +.plx-input-sm .plx-input { + height: 28px; + line-height: 28px; +} +.plx-input-sm .text-input-prefix, +.plx-input-sm .text-input-unit, +.plx-input-sm .text-input-unit-option, +.plx-input-sm .text-input-prefix-option { + height: 28px; + line-height: 28px; +} +.plx-input-sm div.text-input-dataList { + height: 28px; +} +.plx-input-sm .toggle { + margin-top: 11px; +} +.plx-input-sm .caret-down { + margin-bottom: 8px; +} +.plx-input-sm .caret-up { + margin-top: 8px; +} +.plx-input-sm .plx-input-passwordSwitch { + line-height: 26px; +} +.plx-input-sm-common .plx-input { + height: 28px; + line-height: 28px; +} +.plx-input-sm-common .text-input-prefix, +.plx-input-sm-common .text-input-unit, +.plx-input-sm-common .text-input-unit-option, +.plx-input-sm-common .text-input-prefix-option { + height: 28px; + line-height: 28px; +} +.plx-input-sm-common div.text-input-dataList { + height: 28px; +} +.plx-input-sm-common .toggle { + margin-top: 11px; +} +.plx-input-sm-common .caret-down { + margin-bottom: 8px; +} +.plx-input-sm-common .caret-up { + margin-top: 8px; +} +.plx-input-sm-common .plx-input-passwordSwitch { + line-height: 26px; +} +.plx-input-passwordSwitch { + display: inline-block; + line-height: 30px; + width: 40px; + text-align: center; + vertical-align: middle; + background-color: #fff; + border: 1px solid #d9d9d9; + border-left: 0; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + cursor: pointer; +} +.plx-input-passwordSwitch:focus, +.plx-input-passwordSwitch:hover { + border-color: #108ee9; + background-color: #fff; +} +.plx-input-passwordSwitch:focus.ict-eye-closed, +.plx-input-passwordSwitch:hover.ict-eye-closed, +.plx-input-passwordSwitch:focus.ict-eye, +.plx-input-passwordSwitch:hover.ict-eye { + color: #108ee9; +} +.plx-input-passwordSwitch:active { + background-color: #108ee9; + border-color: #108ee9; +} +.plx-input-passwordSwitch:active.ict-eye-closed, +.plx-input-passwordSwitch:active.ict-eye { + color: #fff; +} +.plx-input-passwordSwitch.ict-eye-closed, +.plx-input-passwordSwitch.ict-eye { + color: #8e8e8e; + font-size: 16px; +} +.input-right-border-pwdswith-hover .plx-input { + border-right-color: #108ee9; +} +.input-right-border-pwdswith-click .plx-input { + border-right-color: #108ee9; +} +.plx-text-input-ip-dot { + display: inline-block; + vertical-align: bottom; + color: #999; +} +.plx-text-input-error { + font-size: 12px; + color: #EA4335; + margin-top: 5px; +} +:host(.plx-text-input-ip-invalid) .plx-input { + border-color: #EA4335; +} +:host(.plx-text-input-ip-invalid) .input-span-focus .plx-input { + border-color: #108EE9; +} +.plx-text-input-ip-invalid .plx-input { + border-color: #EA4335; +} +.plx-text-input-ip-invalid .input-span-focus .plx-input { + border-color: #108EE9; +} +.plx-text-input-ip-invalid-common .plx-input { + border-color: #EA4335; +} +.plx-text-input-ip-invalid-common .input-span-focus .plx-input { + border-color: #108EE9; +} +.plx-textarea-container { + display: inline-block; +} +.plx-textarea-class { + width: 100%; + font-size: 14px; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + line-height: 1.5; + resize: none; + padding: 7px; + border: 1px solid #d9d9d9; + border-radius: 3px; + box-shadow: none; + outline: none; + overflow-y: auto; +} +.plx-textarea-class:focus { + border-color: #108EE9; +} +.plx-textarea-class::-webkit-input-placeholder { + text-shadow: none; + -webkit-text-fill-color: initial; +} +.plx-align-tip { + vertical-align: top; + font-size: 14px; + font-weight: normal; + color: #bfbfbf; +} +.plx-align-number { + font-size: 14px; + font-weight: normal; + line-height: 1; + text-align: right; + width: 100%; + color: #bfbfbf; + margin-top: -3px; +} +.plx-toggle-switch { + display: inline-block; + height: 22px; + width: 44px; + position: relative; + vertical-align: middle; + text-align: left; + font-size: 0; +} +.plx-toggle-switch input[type='checkbox'] { + display: none; + -webkit-appearance: none; + -moz-appearance: none; + -ms-progress-appearance: none; +} +.plx-toggle-switch input[type='checkbox'] + label { + display: inline-block; + height: 22px; + position: relative; + cursor: pointer; +} +.plx-toggle-switch input[type='checkbox'] + label::before { + position: absolute; + display: inline-block; + content: ''; + height: 22px; + width: 44px; + border-radius: 11px; + transition: 0.15s ease-in; + transition-property: background-color; + background-color: #DDDDDD; +} +.plx-toggle-switch input[type='checkbox'] + label::after { + position: absolute; + display: inline-block; + content: ''; + height: 18px; + width: 18px; + border-radius: 50%; + top: 2px; + left: 2px; + transition: left 0.15s ease-in; + background-color: #fff; +} +.plx-toggle-switch input[type='checkbox']:checked + label::before { + background-color: #108EE9; + transition: background-color 0.15s ease-in; +} +.plx-toggle-switch input[type='checkbox']:checked + label::after { + left: 24px; + transition: left 0.15s ease-in; +} +.plx-toggle-switch input[type='checkbox']:disabled + label, +.plx-toggle-switch input[type='checkbox']:checked:disabled + label { + cursor: not-allowed; +} +.plx-toggle-switch input[type='checkbox']:disabled + label::before, +.plx-toggle-switch input[type='checkbox']:checked:disabled + label::before { + opacity: 0.5; +} +:host(.plx-toggle-sm) .plx-toggle-switch { + height: 18px; + width: 34px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox'] + label { + height: 18px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox'] + label::before { + height: 18px; + width: 34px; + border-radius: 9px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox'] + label::after { + height: 14px; + width: 14px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox']:checked + label::after { + left: 18px; + transition: left 0.15s ease-in; +} +.plx-toggle-sm .plx-toggle-switch { + height: 18px; + width: 34px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox'] + label { + height: 18px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox'] + label::before { + height: 18px; + width: 34px; + border-radius: 9px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox'] + label::after { + height: 14px; + width: 14px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox']:checked + label::after { + left: 18px; + transition: left 0.15s ease-in; +} +.plx-toggle-sm-switch-common { + height: 18px; + width: 34px; +} +.plx-toggle-sm-switch-common input[type='checkbox'] + label { + height: 18px; +} +.plx-toggle-sm-switch-common input[type='checkbox'] + label::before { + height: 18px; + width: 34px; + border-radius: 9px; +} +.plx-toggle-sm-switch-common input[type='checkbox'] + label::after { + height: 14px; + width: 14px; +} +.plx-toggle-sm-switch-common input[type='checkbox']:checked + label::after { + left: 18px; + transition: left 0.15s ease-in; +} +.toolbar i.seperate-vertical { + margin-right: 10px; + margin-left: 0; + border-right: 1px solid #e9e9e9; +} +.toolbar span { + color: #595959; + cursor: pointer; + margin-right: 10px; + font-size: 16px; + display: inline-block; + width: 28px; + height: 28px; + border: 1px solid transparent; + padding: 5px; +} +.toolbar span:hover { + background-color: #E7F4FD; + border-radius: 2px; +} +.toolbar span:last-child { + margin-right: 0px; +} +.plx-tooltip { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + opacity: 1; + position: absolute; + z-index: 10001; + display: block; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: break-word; +} +.plx-tooltip::before, +.plx-tooltip::after { + content: ""; + position: absolute; + display: block; + width: 0; + height: 0; + border: solid transparent; +} +.plx-tooltip::before { + border-width: 5px; +} +.plx-tooltip::after { + border-width: 4px; +} +.plx-tooltip-inner { + min-width: 60px; + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; +} +.plx-tooltip.show { + font-size: 14px; + opacity: 1; +} +.plx-tooltip.show .plx-tooltip-inner { + background-color: #595959; + border-radius: 3px; + padding: 0px 12px; + height: 30px; + line-height: 30px; +} +.plx-tooltip-top-common { + margin-top: -7px; +} +.plx-tooltip-top-common::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip-top-common::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip-top { + margin-top: -7px; +} +.plx-tooltip-top::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip-top::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip-top::before { + left: 50%; + margin-left: -5px; +} +.plx-tooltip-top::after { + left: 50%; + margin-left: -4px; +} +.plx-tooltip.plx-tooltip-top-left { + margin-top: -7px; +} +.plx-tooltip.plx-tooltip-top-left::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip.plx-tooltip-top-left::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip.plx-tooltip-top-left::before { + left: 5px; +} +.plx-tooltip.plx-tooltip-top-left::after { + left: 6px; +} +.plx-tooltip.plx-tooltip-top-right { + margin-top: -7px; +} +.plx-tooltip.plx-tooltip-top-right::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip.plx-tooltip-top-right::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip.plx-tooltip-top-right::before { + right: 5px; +} +.plx-tooltip.plx-tooltip-top-right::after { + right: 6px; +} +.plx-tooltip-right-common { + margin-left: 7px; +} +.plx-tooltip-right-common::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip-right-common::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right { + margin-left: 7px; +} +.plx-tooltip.plx-tooltip-right::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip.plx-tooltip-right::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right::before { + top: 50%; + margin-top: -5px; +} +.plx-tooltip.plx-tooltip-right::after { + top: 50%; + margin-top: -4px; +} +.plx-tooltip.plx-tooltip-right-top { + margin-left: 7px; +} +.plx-tooltip.plx-tooltip-right-top::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip.plx-tooltip-right-top::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right-top::before { + top: 5px; +} +.plx-tooltip.plx-tooltip-right-top::after { + top: 6px; +} +.plx-tooltip.plx-tooltip-right-bottom { + margin-left: 7px; +} +.plx-tooltip.plx-tooltip-right-bottom::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip.plx-tooltip-right-bottom::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right-bottom::before { + bottom: 5px; +} +.plx-tooltip.plx-tooltip-right-bottom::after { + bottom: 6px; +} +.plx-tooltip-bottom-common { + margin-top: 7px; +} +.plx-tooltip-bottom-common::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip-bottom-common::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom { + margin-top: 7px; +} +.plx-tooltip.plx-tooltip-bottom::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip.plx-tooltip-bottom::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom::before { + left: 50%; + margin-left: -5px; +} +.plx-tooltip.plx-tooltip-bottom::after { + left: 50%; + margin-left: -4px; +} +.plx-tooltip.plx-tooltip-bottom-left { + margin-top: 7px; +} +.plx-tooltip.plx-tooltip-bottom-left::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip.plx-tooltip-bottom-left::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom-left::before { + left: 5px; +} +.plx-tooltip.plx-tooltip-bottom-left::after { + left: 6px; +} +.plx-tooltip.plx-tooltip-bottom-right { + margin-top: 7px; +} +.plx-tooltip.plx-tooltip-bottom-right::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip.plx-tooltip-bottom-right::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom-right::before { + right: 5px; +} +.plx-tooltip.plx-tooltip-bottom-right::after { + right: 6px; +} +.plx-tooltip-left-common { + margin-left: -7px; +} +.plx-tooltip-left-common::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip-left-common::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left { + margin-left: -7px; +} +.plx-tooltip.plx-tooltip-left::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip.plx-tooltip-left::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left::before { + top: 50%; + margin-top: -5px; +} +.plx-tooltip.plx-tooltip-left::after { + top: 50%; + margin-top: -4px; +} +.plx-tooltip.plx-tooltip-left-top { + margin-left: -7px; +} +.plx-tooltip.plx-tooltip-left-top::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip.plx-tooltip-left-top::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left-top::before { + top: 5px; +} +.plx-tooltip.plx-tooltip-left-top::after { + top: 6px; +} +.plx-tooltip.plx-tooltip-left-bottom { + margin-left: -7px; +} +.plx-tooltip.plx-tooltip-left-bottom::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip.plx-tooltip-left-bottom::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left-bottom::before { + bottom: 5px; +} +.plx-tooltip.plx-tooltip-left-bottom::after { + bottom: 6px; +} +.plx-checkbox-container { + font-size: 0; + position: relative; +} +.plx-checkbox { + position: absolute; + z-index: -1; + opacity: 0; +} +.plx-checkbox + .checkbox-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 16px; + width: 16px; + border: 1px solid #d9d9d9; + border-radius: 2px; + vertical-align: middle; +} +.plx-checkbox + .checkbox-substitute + span { + font-weight: normal; + font-size: 14px; + cursor: pointer; + vertical-align: middle; + padding-left: 10px; +} +.plx-checkbox:hover + .checkbox-substitute { + border-color: #108EE9; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-checkbox:checked + .checkbox-substitute { + border-color: #108EE9; + background-color: #108EE9; +} +.plx-checkbox:checked + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 4px; + top: 0; +} +.plx-checkbox:checked.portion + .checkbox-substitute { + background-color: #108EE9; + border-color: #108EE9; + opacity: 0.5; +} +.plx-checkbox:disabled + .checkbox-substitute, +.plx-checkbox[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #f5f5f5; + cursor: not-allowed; +} +.plx-checkbox:disabled + .checkbox-substitute + span, +.plx-checkbox[disabled] + .checkbox-substitute + span { + cursor: not-allowed; +} +.plx-checkbox:checked.portion[disabled] + .checkbox-substitute { + background-color: #d9d9d9; + border-color: #d9d9d9; +} +.plx-checkbox:checked.portion[disabled] + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #8e8e8e; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 4px; + top: 0; +} +.plx-checkbox:checked[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #d9d9d9; +} +.plx-treenode { + cursor: pointer; + background-attachment: scroll; + background-color: transparent; + background-image: none; + background-position: 0 0; + background-repeat: repeat-y; + list-style: none outside none; + margin: 0; + padding: 0; + white-space: nowrap; + font-size: 14px; +} +.plx-treenode .plx-treenode-content { + margin-top: 10px; +} +.plx-treenode .plx-treenode-content.light { + margin-top: 15px; +} +.plx-treenode ul.plx-treenode-children { + display: block; + -webkit-padding-start: 21px; +} +.plx-treenode-toggler { + font-size: 16px; + color: #108EE9; + display: inline-block; + margin-right: 7px; + margin-top: 2px; + vertical-align: bottom; + float: left; +} +.plx-treenode-ckbox { + float: left; + margin-right: 10px; + margin-top: 2px; +} +.plx-treenode-icon { + color: #8e8e8e; + margin-right: 10px; + float: left; + font-size: 16px; + vertical-align: bottom; + margin-top: 2px; +} +.plx-treenode-label-container { + overflow: visible; +} +.plx-treenode-label-container.plx-treenode-label-ellipsis { + overflow: hidden; +} +.plx-treenode-label-container:hover { + background-color: #E7F4FD; +} +.plx-treenode-active > div .plx-treenode-label-container { + background-color: #def0fc; +} +.plx-treenode-active > div .plx-treenode-label-container:hover { + background-color: #E7F4FD; +} +.plx-treenode-label-container span:last-child { + margin-right: 5px; +} +.plx-treenode-lable { + display: inline-block; + vertical-align: 0; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + color: #595959; +} +.plx-treenode-lable span { + display: inline-block; + overflow: hidden; + max-width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: bottom; +} +.plx-treenode-operations { + margin-left: 20px; + display: none; + vertical-align: bottom; + width: fit-content; + line-height: 1; + margin-bottom: 2px; +} +.plx-treenode-operation { + display: inline-block; + margin-right: 10px; + color: #8e8e8e; + font-size: 16px; + vertical-align: text-bottom; +} +.plx-treenode-operation:hover { + color: #108EE9; +} +.plx-treenode-label-container:hover .plx-treenode-operations { + display: inline-block; +} +*:focus { + outline: none; + box-shadow: none !important; +} +input[type="checkbox"]:focus { + border: 0 !important; +} +.plx-treenode-hide-tree-toggle { + visibility: hidden; +} +.plx-treenode-droppoint { + height: 4px; + list-style-type: none; +} +.plx-treenode-droppoint-active { + background-color: #186ba0; + border: 0 none; +} +.upload-wrapper { + font-size: 14px; + position: relative; + display: inline-block; +} +.upload-wrapper .item-text { + max-width: 280px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + margin-bottom: 2px; + font-size: 14px; +} +.upload-wrapper .item-text.no-progressbar { + vertical-align: middle; +} +.upload-wrapper .plx-upload-progressbar { + margin-top: -13px; +} +.upload-wrapper .list-group-item { + border: 0; + padding: 0; +} +.upload-wrapper .list-group-item .item { + width: 335px; + padding: 0 0 5px 0px; +} +.upload-wrapper .list-group-item .item .item-text-wrapper { + position: relative; + display: inline-block; + width: 100%; + box-sizing: border-box; + height: 40px; + padding: 2px 3px 2px 10px; + border: 1px solid transparent; +} +.upload-wrapper .list-group-item .item .item-text-wrapper .text-red { + color: #EA4335 !important; +} +.upload-wrapper .list-group-item .item .item-text-wrapper:hover { + background-color: #E7F4FD; + cursor: default; +} +.upload-wrapper .list-group-item .item .item-text-wrapper:hover .plx-ico-close-16 { + display: block; + transform: scale(0.8); +} +.upload-wrapper .list-group-item .item .item-text-wrapper.no-progressbar { + height: 28px; +} +.upload-wrapper .list-group-item .item .item-delete { + height: 14px; + width: 16px; + text-align: center; + line-height: 14px; + position: absolute; + right: 2%; + color: #999999; + display: none; + top: 3px; +} +.upload-wrapper .list-group-item .item .item-delete:hover { + cursor: pointer; + color: #666666; +} +.upload-wrapper .list-group-item .item .item-delete.no-progressbar { + top: 6px; +} +.upload-wrapper .plx-ico-close-16 { + font-size: 16px; + float: right; + cursor: pointer; +} +.upload-wrapper ul.list-group { + margin-top: 15px; +} +.upload-wrapper .url-form-control { + display: inline-block; +} +.upload-wrapper .item-detail { + color: #aaa; + position: relative; + padding: 0 10px; + font-size: 12px; +} +.upload-wrapper .item-detail div { + margin: 0px 0px 15px 0; +} +.upload-wrapper .item-detail .detail { + margin: 5px 0 10px 0; +} +.upload-wrapper .item-detail-des { + display: inline-block; + width: 170px; + word-wrap: break-word; + margin-left: 15px; + vertical-align: top; +} +.upload-wrapper .item-detail-time { + display: inline-block; + width: 119px; + word-break: break-all; + vertical-align: top; +} +.upload-wrapper .selectFile { + display: inline-block; + min-width: 50px; + margin-right: 10px; + text-align: right; +} +.upload-wrapper label.raw-container { + margin: 0 10px; +} +.upload-wrapper .item-lists { + font-size: 14px; +} +.upload-wrapper .list-container { + padding-right: 15px; +} +.upload-wrapper .list-container.plx-upload-Manual-showdetail { + margin-left: -22px; +} +.upload-wrapper .list-container.plx-upload-auto-showdetail { + margin-left: -10px; +} +.upload-wrapper .list-footer .upload-btn { + margin-top: 10px; +} +.upload-wrapper .upload-btn { + display: inline-block; +} +.upload-wrapper .loader-container { + position: absolute; + display: inline-block; + top: 8px; + left: 12px; +} +.upload-wrapper .list-group-item-pdleft-s { + padding: 0px 0px 0px 12px; +} +.upload-wrapper .list-group-item-pdleft { + padding: 0px 0px 0px 12px !important; +} +.upload-wrapper .upload-btn-wrapper { + display: inline-block; +} +.upload-wrapper .plx-red.left { + margin-left: 75px; +} +.upload-wrapper .expand-wrapper { + position: absolute; + left: 20px; + top: 4px; + display: inline-block; + font-size: 14px; +} +.upload-wrapper .expand-wrapper.open .ict-go { + display: none; +} +.upload-wrapper .expand-wrapper.open .ict-fold { + display: block; +} +.upload-wrapper .expand-wrapper i { + height: 18px; + width: 20px; + text-align: left; + line-height: 19px; + cursor: pointer; +} +.upload-wrapper .ict-fold { + display: none; + color: #108EE9; + font-weight: bold; + transform: scale(0.7); +} +.upload-wrapper .ict-go { + display: block; + color: #108EE9; + font-weight: bold; + transform: scale(0.7); +} +.upload-wrapper .no-customparm-extend-wrapper { + left: -2px !important; +} +/* loding动画效果*/ +.upload-wrapper .loader { + font-size: 14px; + width: 14px; + height: 14px; + display: inline-block; + border-radius: 50%; + background: #108EE9; + background: -moz-linear-gradient(left, #108EE9 10%, rgba(255, 255, 255, 0) 85%); + background: -webkit-linear-gradient(left, #108EE9 10%, rgba(255, 255, 255, 0) 85%); + background: -o-linear-gradient(left, #108EE9 10%, rgba(255, 255, 255, 0) 85%); + background: -ms-linear-gradient(left, #108EE9 10%, rgba(255, 255, 255, 0) 85%); + background: linear-gradient(to right, #108EE9 10%, rgba(255, 255, 255, 0) 85%); + position: relative; + -webkit-animation: load3 1.4s infinite linear; + animation: load3 1.4s infinite linear; +} +.upload-wrapper .loader:before { + width: 50%; + height: 50%; + background: #108EE9; + border-radius: 100% 0 0 0; + position: absolute; + top: 0; + left: 0; + content: ''; +} +.upload-wrapper .loader:after { + background: #fff; + width: 75%; + height: 75%; + border-radius: 50%; + content: ''; + margin: auto; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} +@-webkit-keyframes load3 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes load3 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.plx-table-customCols { + height: 40px; + float: right; +} +.plx-table-customCols-toggle { + display: inline-block; + border-radius: 3px; + width: 30px; + height: 23px; + border: 1px solid #d9d9d9; + vertical-align: top; + text-align: center; + padding-top: 7px; + margin-left: 6px; + cursor: pointer; + box-sizing: content-box; +} +.plx-table-customCols-toggle .ict-col:before { + vertical-align: top; +} +.plx-table-customCols-toggle:hover { + background-color: #fff; +} +.plx-table-customCols-toggle:active { + background-color: #108ee9; +} +.toggle-icon { + display: inline-block; + height: 14px; + border-right: 1px solid #595959; + vertical-align: top; + padding-left: 4px; +} +.toggle-icon:first-child { + padding-left: 0; +} +.plx-table-customCols-pannel { + margin-top: 5px; + margin-right: 5px; + border: 1px solid #d9d9d9; + background-color: #fff; + z-index: 1010; + position: absolute; + right: 0px; + border-radius: 5px; + font-size: 14px; + color: #595959; + overflow: auto; + min-width: 300px; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar { + display: flex; + justify-content: space-between; + padding: 16px; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper { + display: flex; + flex: auto; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper input { + border-radius: 3px; + flex: auto; + padding-left: 28px; + border: 1px solid #d9d9d9; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper input:focus { + border: 1px solid #108EE9; + outline: none; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper span { + color: #bfbfbf; + line-height: 28px; + position: relative; + left: 20px; +} +.plx-table-customCols-pannel .plx-table-customCols-items { + cursor: pointer; + border-bottom: 1px solid #e9e9e9; + border-top: 1px solid #e9e9e9; +} +.plx-table-customCols-pannel .plx-table-customCols-items > div:hover { + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-table-customCols-pannel .plx-table-customCols-items label { + margin-bottom: 0px; + vertical-align: -moz-middle-with-baseline; + vertical-align: -webkit-baseline-middle; + vertical-align: 25%; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-item > span { + padding: 0px 6px; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-operations { + visibility: hidden; + float: right; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-operations div { + box-sizing: content-box; + padding: 0px 8px; + display: inline-block; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight { + background-color: #e2f2fc; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight .plx-table-customCols-operations .plx-table-goup-show { + visibility: visible; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight .plx-table-customCols-operations .plx-table-godown-show { + visibility: visible; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight .plx-table-customCols-operations span { + color: #108EE9; +} +.plx-table-customCols-pannel .plx-table-customCols-items .dragging { + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); +} +.plx-table-customCols-pannel .plx-table-customCols-items .dragEnter { + background-color: #00abff; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-dropArea { + height: 10px; + border-bottom: 1px solid #e9e9e9; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-dropArea-before { + height: 10px; + border-bottom: none; +} +.plx-table-customCols-pannel .plx-table-customCols-items > div:last-child .plx-table-customCols-dropArea { + border-bottom: none; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-item { + line-height: 20px; + height: 20px; + padding: 0px 16px; +} +.plx-table-customCols-pannel .plx-table-customCols-confirm { + display: flex; + align-items: center; + justify-content: center; + padding: 16px 16px; +} +.plx-table-col-filter { + border: 1px solid #d9d9d9; + margin: 5px; + box-sizing: border-box; + height: 30px; +} +.plx-table-col-filter input { + width: calc(100% - 25px); + line-height: normal; + font-weight: normal; + border: none; + height: 26px; + font-size: 14px; + box-sizing: border-box; +} +.plx-table-col-filter input:focus { + outline: none; +} +.plx-table-col-filter .filterIcon { + /*position: absolute;*/ + top: 6px; + left: 3px; + fill: #dedede; + width: 14px; +} +.plx-filter-focused { + outline: none; + border: 1px solid #108EE9; +} +.plx-table-col-icon-wrapper { + padding-left: 5px; + display: inline-block; + line-height: 30px; +} +.plx-table-col-icon-wrapper span { + vertical-align: sub; +} +::-webkit-input-placeholder { + /* WebKit browsers */ + color: #c1c1c1; +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #c1c1c1; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #c1c1c1; +} +:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: #c1c1c1; +} +.plx-table-selectFilter-wrapper { + display: inline-block; + vertical-align: middle; + height: 28px; + cursor: pointer; + /*此处 若不为absolute则被td遮挡*/ + position: absolute; +} +.plx-table-selectFilter-icon { + vertical-align: middle; + height: 28px; + fill: #8e8e8e; +} +.icon-selectFilter-activtied { + fill: #108EE9; +} +.plx-table-selectFilter-panel { + margin-top: -5px; + border: 1px solid #d9d9d9; + background-color: #fff; + padding: 10px; + right: 0px; + border-radius: 5px; + /*此处若为absolute则文本要换行,恩,玄学*/ + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-table-selectFilter-panel span { + vertical-align: -25%; + font-size: 14px; +} +.plx-table-selectFilter-panel label { + line-height: normal; +} +.plx-table-selectFilter-panel div { + line-height: normal; +} +.plx-table-filter { + height: 40px; + float: right; +} +.plx-table-filter input { + border-radius: 3px; + line-height: normal; + padding: 0px 6px; + font-weight: normal; + border: 1px solid #d9d9d9; + margin-bottom: 10px; + height: 32px; + width: 200px; + box-sizing: border-box; + font-size: 14px; + color: #595959; +} +.plx-table-filter input:focus { + outline: none; + border: 1px solid #108EE9; +} +.plx-table-filterToggle { + display: inline-block; + width: 30px; + height: 30px; + border-radius: 3px; + border: 1px solid #d9d9d9; + vertical-align: top; + text-align: center; + margin-left: 6px; + cursor: pointer; + box-sizing: content-box; +} +.plx-table-filterToggle.ict-filter:before { + line-height: 30px; +} +.plx-table-filterToggle.ict-filter-f:before { + line-height: 30px; + color: #108EE9; +} +.plx-table-filter-icon-wrapper { + vertical-align: middle; + display: inline-block; + padding-top: 5px; +} +.plx-table-filterIcon { + fill: #595959; +} +.plx-table-pagination { + float: right; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + color: #595959; + margin-top: 10px; + margin-bottom: 10px; +} +.plx-table-pagination-content { + display: inline-block; + text-decoration: none; +} +.plx-table-pagination-item { + list-style-type: none; + display: inline-block; +} +.plx-table-pagination-item span { + vertical-align: middle; +} +.plx-table-pagination-item select { + vertical-align: middle; + height: 26px; + width: 45px; + border: 1px solid #d9d9d9; +} +.plx-table-pagination-input { + padding: 1px; + height: 26px; + width: 45px; + margin-left: 1px; + margin-right: 1px; + font-size: 12px; + color: #595959; + box-sizing: border-box; + border: 1px solid #d9d9d9; + text-align: center; + vertical-align: middle; +} +.plx-table-pagination-nav { + display: inline-block; + height: 26px; + border: 1px solid #d9d9d9; + font-size: 14px; + text-decoration: none; + color: #595959; + padding-left: 6px; + padding-right: 6px; + cursor: pointer; + text-align: center; + vertical-align: middle; + box-sizing: border-box; +} +a:not([href]):not([tabindex]).plx-table-pagination-disabled { + color: #bfbfbf; + cursor: not-allowed; +} +.plx-table-dropdown-wrapper { + cursor: pointer; +} +.plx-table-dropdown-icon-shared { + font-size: 20px; + line-height: 2.2 !important; + cursor: pointer; +} +.plx-table-dropdown-icon-polyline-shared { + height: 16px; + width: 16px; + stroke: #00abff ; +} +.ict-down, +.ict-up { + font-size: 20px; + line-height: 2.2 !important; + cursor: pointer; +} +.ict-down polyline, +.ict-up polyline { + height: 16px; + width: 16px; + stroke: #00abff ; +} +.ict-down polyline:hover, +.ict-up polyline:hover { + stroke: #2d91c4; +} +.plx-table-innerTr { + border: 1px solid #d9d9d9; +} +.plx-table-innerTr #plx-table-innerTd { + padding: 0px; +} +.plx-table-innerTable { + width: 100%; +} +.plx-table-innerTable tr { + color: #595959; + font-size: 14px; +} +.plx-table-innerTable tr td#plx-inner-table-title, +.plx-table-innerTable tr td#plx-inner-table-content { + padding: 8px; + height: 40px; + border: none; + border-bottom: 1px solid #d9d9d9; +} +.plx-table-innerTable tr td:first-child { + text-align: right; +} +.plx-table-innerTable tr td:last-child { + text-align: left; +} +.plx-table-innerTable tr:last-child td#plx-inner-table-title, +.plx-table-innerTable tr:last-child td#plx-inner-table-content { + border-bottom: none; +} +/* 排序图标 */ +.plx-table-sort-icon-shared { + display: block; + cursor: pointer; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + margin-bottom: 2px; +} +.plx-table-sortIconWrapper { + display: inline-block; + vertical-align: middle; + margin-left: 3px; +} +/* 排序图标:箭头向上 */ +.plx-table-sortAsc { + display: block; + cursor: pointer; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + margin-bottom: 2px; + border-bottom: 5px solid #8e8e8e; +} +.plx-table-ascActived { + border-bottom: 5px solid #108EE9; +} +/* 排序图标:箭头向下 */ +.plx-table-sortDesc { + display: block; + cursor: pointer; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + margin-bottom: 2px; + border-top: 5px solid #8e8e8e; +} +.plx-table-descActived { + border-top: 5px solid #108EE9; +} +.plx-color-picker-border-radius { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.plx-color-picker * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + font-size: 12px; + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; +} +.plx-color-picker { + cursor: default; + width: 246px; + height: auto; + left: 30px; + top: 250px; + position: absolute; + z-index: 1000; + background-color: #fff; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + border-radius: 3px; + border: 1px solid #d9d9d9; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.plx-color-picker i { + cursor: default; + position: relative; +} +.plx-color-picker input { + font-size: 14px; + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; + text-align: center; + height: 24px; + -moz-appearance: textfield; +} +.short-text-input .plx-color-picker input { + width: 120px; +} +.text-input-with-unit .plx-color-picker input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .plx-color-picker input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .plx-color-picker input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .plx-color-picker input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .plx-color-picker input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .plx-color-picker input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .plx-color-picker input { + width: 246px; +} +.short-text-input.text-input-with-prefix .plx-color-picker input { + width: 80px; +} +.short-text-input.text-input-with-unit .plx-color-picker input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .plx-color-picker input { + width: 40px; +} +.plx-color-picker input:focus { + border: 1px solid #108EE9; +} +.plx-color-picker input:disabled, +.plx-color-picker input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.plx-color-picker input:invalid { + box-shadow: none; +} +.plx-color-picker input:-moz-submit-invalid { + box-shadow: none; +} +.plx-color-picker input:-moz-ui-invalid { + box-shadow: none; +} +.plx-color-picker input::-webkit-outer-spin-button, +.plx-color-picker input::-webkit-outer-spin-button { + -webkit-appearance: textfield; + margin: 0; +} +.plx-color-picker .color-picker-overlay1 { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + position: absolute; + left: 0; + top: 0; + width: 244px; + height: 118px; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')"; + /* IE8 */ + background: -moz-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, right top, color-stop(0%, #ffffff), color-stop(100%, rgba(255, 255, 255, 0))); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* IE10+ */ + background: linear-gradient(to right, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff'); + /* IE6 & IE7 */ +} +.plx-color-picker .color-picker-overlay2 { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + position: absolute; + left: 0; + top: 0; + width: 244px; + height: 118px; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')"; + /* IE8 */ + background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, #000000)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* IE10+ */ + background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#000000', GradientType=0); + /* IE6-9 */ +} +.plx-color-picker .color-picker-saturation-lightness { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + cursor: pointer; + width: 244px; + height: 118px; + border: none; + background-size: 100% 100%; +} +.plx-color-picker .color-picker-hue { + cursor: pointer; + border-radius: 3px; + width: 168px; + height: 10px; + border: none; + margin-bottom: 10px; + background-size: 100% 100%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwkUFWbCCAAAAFxJREFUaN7t0kEKg0AQAME2x83/n2qu5qCgD1iDhCoYdpnbQC9bbY1qVO/jvc6k3ad91s7/7F1/csgPrujuQ17BDYSFsBAWwgJhISyEBcJCWAgLhIWwEBYIi2f7Ar/1TCgFH2X9AAAAAElFTkSuQmCC'); +} +.plx-color-picker .color-picker-alpha { + cursor: pointer; + border-radius: 3px; + width: 168px; + height: 10px; + border: none; + background-size: 100% 100%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAKCAYAAAAgnxVRAAAC9klEQVRYhdVYPc7bMAylku7WViCrfJ2cocfoGXqLHslbDhAvHjNkCBBRHSoZzwQpKW7T7yuBwAn9+CtKIuOu1+vXy+UyPx6PL5QphEDee0KKMdI0TRveP8KlaZoSEZUPhxCS9z4RERd+jJEzbuWFEKL3nlEWcDHzYgiBQR//Nht5miZGXrbLWbaGY+99RBuAK3zOuGfBZP+iwJU4ItgtuAiyaJdBH2fc6iPoY9CH/jH4xyKOJHAJcEnRlwxcWY8k1o3KepxOp3Rg5h9YnJ+UkvjtxNPCO8Ak4MunxevxRXun6UVCn1ynXyhb5Mp7Tc4Z3y0e6pG2tXw7quuQWI0v/ZGx0cEAfzaygtUWBAPVClXqRblaErX3cgPU/C4Y/Gi+1+TRTllI/FjUKvjy1OxLf60NodmUG9GSQRuY5/+mQAtpye0pEKvwrELRsGhPW/CWrNwsTnnXc8rgUxaPptOi3huj6NVyJ3NR2yS9mI0/rxRoTyDvJmvhe65U7QrT9LRO0pYti2oLYxW9/F07/WqbbY9Pmm/ajSR9kLH0knoLuPv9/vN2u31D5rIsNM/zBjgMA43jSB+AS+M4rk11xvE8z8hLwzDwOI6bpnxZljTPc+FFIuKsrwwHiYhixm2GhoxDnoaLYHflZ/82w9QwDNHAbYaajJN2o6KPM24dksDuE+KIEC8DbiML8a65UnCc7SbwJYHdNf+AY4FLAifXt6xbOp/Pae8V/xGnKfYxrUZbXu2J7GtK6rbIuuIsn1q9Xk9faMnW9PTEIm1ofTgZPDwpe6/r3TfR3gLtScDfplrPRuKdFryVBOu6avmh9b6vDCqtReuRlba1KdvqS63caTwrLq2t0NqTVs9u0juGpHecrr2TYyFtuu0pnt7pVPtuye8d3jQ8vu8psNqJ+sohgydmq0+3NkmtMM1/Eg7Oue/H4/H5grMtqk3Vf6Lz1SRbxWPh5ADQc5q0pm38bk3emtyeHMoC0ApCa3/2tAOtjSWLWDv1rc204f8CQvGUIhalBqwAAAAASUVORK5CYII='); +} +.plx-color-picker .color-picker-alpha-ba { + position: absolute; + background: linear-gradient(90deg, rgba(255, 255, 255, 0), #000); +} +.plx-color-picker .selected-color { + width: 30px; + height: 30px; + top: 0px; + left: 0px; + position: absolute; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; +} +.plx-color-picker .selected-color-background { + width: 30px; + height: 30px; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVRYR+2W0QlAMQgD60zdfwOdqa8TmI/wQMr5K0I5bZLIzLOa2nt37VVVbd+dDx5obgCC3KBLwJ2ff4PnVidkf+ucIhw80HQaCLo3DMH3CRK3iFsmAWVl6hPNDwt8EvNE5q+YuEXcMgkonVM6SdyCoEvAnZ8v1Hjx817MilmxSUB5rdLJDycZgUAZUch/AAAAAElFTkSuQmCC'); +} +.plx-color-picker .color-picker-cursor { + cursor: default; + position: relative; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + width: 10px; + height: 10px; + border: #ffffff solid 1px; +} +.plx-color-picker .color-picker-cursor-selector { + cursor: default; + position: relative; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + width: 10px; + height: 10px; + border: #ffffff solid 1px; + width: 12px; + height: 12px; + top: -1px; + background-color: #ffffff; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-color-picker .type-policy { + float: right; + position: absolute; + top: 198px; + right: 12px; + width: 16px; + height: 16px; +} +.plx-color-picker .type-policy:hover { + background-color: #E7F4FD; + cursor: pointer; +} +.plx-color-picker .arrow-down { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #9b9b9b; + margin-top: 4px; + margin-left: 4px; +} +.plx-color-picker .arrow-up { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid #9b9b9b; + margin-top: 2px; + margin-left: 4px; +} +.plx-color-picker .box { + width: 100%; + height: 100%; + display: flex; +} +.plx-color-picker .box .left { + position: relative; + margin-right: 16px; +} +.plx-color-picker .box .right { + flex: 1 1 auto; +} +.plx-color-picker .button-area { + padding: 0 16px 16px 16px; + text-align: right; +} +.plx-color-picker .preset-area { + padding: 4px 15px; +} +.plx-color-picker .preset-area .preset-label { + width: 100%; + padding: 4px; + text-align: left; + color: #555; +} +.plx-color-picker .preset-area .preset-color { + cursor: pointer; + display: inline-block; + width: 18px; + height: 18px; + margin: 4px 6px 8px 6px; + -moz-border-radius: 25%; + -webkit-border-radius: 25%; + border-radius: 25%; + -khtml-border-radius: 25%; + border: #a9a9a9 solid 1px; +} +.plx-color-picker .hsla-text, +.plx-color-picker .rgba-text { + width: 196px; +} +.plx-color-picker .hsla-text input, +.plx-color-picker .rgba-text input { + color: #595959; + min-width: 0; + flex: 1; + margin: 0; + float: left; + padding: 1px; +} +.plx-color-picker .hsla-text input:last-child, +.plx-color-picker .rgba-text input:last-child { + margin-right: 0; +} +.plx-color-picker .hsla-text .hsla-text-div, +.plx-color-picker .rgba-text .hsla-text-div, +.plx-color-picker .hsla-text .rgba-text-div, +.plx-color-picker .rgba-text .rgba-text-div { + margin-top: 2px; + flex: 1; + text-align: center; + color: #999999; + height: 18px; + padding-right: 8px; +} +.plx-color-picker .hsla-text .hsla-text-div:last-child, +.plx-color-picker .rgba-text .hsla-text-div:last-child, +.plx-color-picker .hsla-text .rgba-text-div:last-child, +.plx-color-picker .rgba-text .rgba-text-div:last-child { + margin-right: 0; + padding-right: 0; +} +.plx-color-picker .hsla-text .hsla-text-degree, +.plx-color-picker .rgba-text .hsla-text-degree { + padding-right: 16px; +} +.plx-color-picker .hsla-text .hsla-text-percent, +.plx-color-picker .rgba-text .hsla-text-percent { + padding-right: 22px; +} +.plx-color-picker .hsla-text .hsla-degree, +.plx-color-picker .rgba-text .hsla-degree { + display: inline-block; + width: 6px; + margin-left: 2px; + margin-right: 8px; + margin-top: 2px; +} +.plx-color-picker .hsla-text .hsla-percent, +.plx-color-picker .rgba-text .hsla-percent { + display: inline-block; + width: 12px; + margin-left: 2px; + margin-right: 8px; + margin-top: 3px; +} +.plx-color-picker .hsla-text .rgba-text-input, +.plx-color-picker .rgba-text .rgba-text-input { + margin-right: 8px; +} +.plx-color-picker .hex-text { + width: 196px; +} +.plx-color-picker .hex-text .box input { + color: #595959; + flex: 1 1 auto; + padding: 1px; +} +.plx-color-picker .hex-text .box div { + margin-top: 2px; + flex: 1 1 auto; + text-align: center; + height: 18px; + color: #999999; + float: left; + clear: left; +} +.plx-color-picker .bacis-color-alpha-select-area { + padding: 20px 16px 16px 16px; +} +.plx-color-picker .color-format-content-area { + padding: 0px 16px 16px 16px; +} +.plx-color-picker .arrow::after, +.plx-color-picker .arrow::before { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + content: ""; + border-width: 7px 7px; +} +.plx-color-picker .arrow.arrow-bottom::after { + left: 20px; + border-top-width: 0; + top: -7px; + border-bottom-color: #ffffff; +} +.plx-color-picker .arrow.arrow-bottom::before { + left: 20px; + border-top-width: 0; + top: -8px; + border-bottom-color: #999999; +} +body { + font-size: 14px; +} +.shadow { + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #bfbfbf; +} +input:-ms-input-placeholder { + color: #bfbfbf; +} +input::-webkit-input-placeholder { + color: #bfbfbf; +} +.plx-btn { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + color: #108EE9; + min-width: 88px; + letter-spacing: 1px; + padding: 0px 16px; + height: 32px; + font-size: 14px; + cursor: pointer; + text-align: center; + white-space: nowrap; + margin-right: 10px; + vertical-align: middle; + border: 1px solid #d9d9d9; + background-color: #fff; + border-radius: 3px; + line-height: 30px; +} +.plx-btn:hover, +.plx-btn:disabled, +.plx-btn[disabled], +.plx-btn:focus, +.plx-btn:active { + outline: none; + background-image: none; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-btn:hover, +.plx-btn:focus { + color: #108ee9; + border-color: #108ee9; + background-color: #fff; +} +.plx-btn:active { + color: #fff; + border-color: #108ee9; + background-color: #108ee9; +} +.plx-btn:disabled, +.plx-btn[disabled] { + color: #bfbfbf; + background-color: #fff; + border-color: #e9e9e9; +} +.plx-btn:disabled:hover, +.plx-btn[disabled]:hover, +.plx-btn:disabled:focus, +.plx-btn[disabled]:focus { + color: #bfbfbf; + background-color: #fff; + border-color: #e9e9e9; + cursor: not-allowed; +} +.plx-btn .plx-btn-icon { + font-size: 16px; + vertical-align: text-top; + margin-right: 3px; +} +.plx-btn-primary { + background-color: #108EE9; + color: #fff; + border-color: #108EE9; +} +.plx-btn-primary:hover, +.plx-btn-primary:focus { + color: #fff; + background-color: #0D75BF; + border-color: #0D75BF; +} +.plx-btn-primary:active { + color: #fff; + background-color: #0C66A7; + border-color: #0C66A7; +} +.plx-btn-primary:disabled, +.plx-btn-primary[disabled], +.plx-btn-primary:disabled:hover, +.plx-btn-primary[disabled]:hover, +.plx-btn-primary:disabled:focus, +.plx-btn-primary[disabled]:focus { + color: #fff; + border-color: #108EE9; + background-color: #108EE9; + opacity: 0.5; +} +.plx-btn-guide { + background-color: #5cb85c; + color: #fff; + border-color: #5cb85c; +} +.plx-btn-guide:hover, +.plx-btn-guide:focus { + color: #fff; + background-color: #00994d; + border-color: #00994d; +} +.plx-btn-guide:active { + color: #fff; + background-color: #008040; + border-color: #008040; +} +.plx-btn-guide:disabled, +.plx-btn-guide[disabled], +.plx-btn-guide:disabled:hover, +.plx-btn-guide[disabled]:hover, +.plx-btn-guide:disabled:focus, +.plx-btn-guide[disabled]:focus { + color: #fff; + border-color: #5cb85c; + background-color: #5cb85c; + opacity: 0.5; +} +.plx-btn-table { + color: #595959; +} +.plx-btn-error { + background-color: #EA4335; + color: #fff; + border-color: #EA4335; +} +.plx-btn-error:hover, +.plx-btn-error:focus { + color: #fff; + background-color: #DD1B0A; + border-color: #DD1B0A; +} +.plx-btn-error:active { + color: #fff; + background-color: #B92113; + border-color: #B92113; +} +.plx-btn-error:disabled, +.plx-btn-error[disabled], +.plx-btn-error:disabled:hover, +.plx-btn-error[disabled]:hover, +.plx-btn-error:disabled:focus, +.plx-btn-error[disabled]:focus { + color: #fff; + border-color: #EA4335; + background-color: #EA4335; + opacity: 0.5; +} +.plx-btn-sm { + height: 28px; + padding: 0px 14px; + min-width: 68px; + margin-right: 5px; + line-height: 26px; +} +.plx-btn-xs { + height: 24px; + padding: 0px 12px; + min-width: 68px; + margin-right: 5px; + line-height: 22px; +} +.plx-btn.dropdown-toggle { + margin-right: 0; + outline: none !important; + background-image: none !important; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-btn.dropdown-toggle::after { + margin-left: 16px; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + color: #c0c0c0; + margin-bottom: 1px; +} +.plx-btn-sm.dropdown-toggle::after { + margin-left: 14px; +} +.plx-btn-xs.dropdown-toggle::after { + margin-left: 12px; +} +.plx-btn + .dropdown-menu { + margin: 0; + padding: 0; + border: 0; + min-width: 100%; + font-size: 14px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-btn + .dropdown-menu .dropdown-item { + background-color: #fff; + color: #595959; + font-size: 14px; + padding: 0px 16px; + height: 30px; + cursor: pointer; +} +.plx-btn + .dropdown-menu .dropdown-item:hover, +.plx-btn + .dropdown-menu .dropdown-item:focus, +.plx-btn + .dropdown-menu .dropdown-item:active { + outline: none; + background-color: #E7F4FD; +} +.plx-btn + .dropdown-menu .dropdown-item:disabled, +.plx-btn + .dropdown-menu .dropdown-item[disabled] { + color: #bfbfbf; +} +.plx-btn + .dropdown-menu .dropdown-item:disabled:hover, +.plx-btn + .dropdown-menu .dropdown-item[disabled]:hover, +.plx-btn + .dropdown-menu .dropdown-item:disabled:focus, +.plx-btn + .dropdown-menu .dropdown-item[disabled]:focus { + cursor: not-allowed; + background-color: #fff; +} +.plx-btn-sm + .dropdown-menu .dropdown-item { + padding: 0px 14px; +} +.plx-btn-xs + .dropdown-menu .dropdown-item { + padding: 0px 12px; +} +.plx-btn-more { + display: inline-block; + margin-right: 10px; +} +.plx-btn-more-sm { + margin-right: 5px; +} +.plx-btn-more-xs { + margin-right: 5px; +} +.plx-checkbox-container { + font-size: 0; + position: relative; +} +.plx-checkbox { + position: absolute; + z-index: -1; + opacity: 0; +} +.plx-checkbox + .checkbox-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 16px; + width: 16px; + border: 1px solid #d9d9d9; + border-radius: 2px; + vertical-align: middle; +} +.plx-checkbox + .checkbox-substitute + span { + font-weight: normal; + font-size: 14px; + cursor: pointer; + vertical-align: middle; + padding-left: 10px; +} +.plx-checkbox:hover + .checkbox-substitute { + border-color: #108EE9; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-checkbox:checked + .checkbox-substitute { + border-color: #108EE9; + background-color: #108EE9; +} +.plx-checkbox:checked + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 4px; + top: 0; +} +.plx-checkbox.portion + .checkbox-substitute { + background-color: #108EE9; + border-color: #108EE9; + opacity: 0.5; +} +.plx-checkbox.portion + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 4px; + top: 0; +} +.plx-checkbox:disabled + .checkbox-substitute, +.plx-checkbox[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #f5f5f5; + cursor: not-allowed; +} +.plx-checkbox:disabled + .checkbox-substitute + span, +.plx-checkbox[disabled] + .checkbox-substitute + span { + cursor: not-allowed; +} +.plx-checkbox.portion[disabled] + .checkbox-substitute { + background-color: #d9d9d9; + border-color: #d9d9d9; +} +.plx-checkbox.portion[disabled] + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #8e8e8e; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 4px; + top: 0; +} +.plx-checkbox:checked[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #d9d9d9; +} +.plx-form { + font-family: 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei'; + font-size: 14px; + background: #fff; + color: #595959; +} +.plx-form .ng-invalid:not(form).ng-invalid:not(fieldset).ng-invalid:not(plx-select) { + border: 1px solid #EA4335; + /* red */ +} +.plx-form .ng-untouched:not(form).ng-untouched:not(fieldset).ng-untouched:not(plx-select) { + border: 1px solid #d9d9d9; +} +.plx-form label { + font-size: 14px; + text-align: right; + color: #737373; + background: #fff; +} +.plx-form label .label-span { + color: #595959; +} +.plx-form .text-autocut { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: block; +} +.plx-form .forms-group-pointer { + margin-bottom: 10px; + padding-left: 15px; + color: #404040; + font-size: 16px; + height: 32px; + line-height: 32px; + cursor: pointer; +} +.plx-form .forms-group-pointer:hover { + background: #E7F4FD; +} +.plx-form .forms-group-pointer span { + margin-left: 24px; + border-left: 3px solid #108EE9; + padding-left: 5px; +} +.plx-form .forms-group-pointer .group-icon { + float: left; + font-size: 16px; + color: #108EE9 !important; + line-height: 32px; + margin-right: 8px; + transform: scale(0.7, 0.7); + font-weight: bold; +} +.plx-form .forms-group-default { + margin-bottom: 10px; + padding-left: 15px; + color: #404040; + font-size: 16px; + height: 32px; + line-height: 32px; + cursor: default; + line-height: 16px; +} +.plx-form .forms-group-default:hover { + background: #fff; +} +.plx-form .forms-group-default span { + margin-left: 24px; + border-left: 3px solid #108EE9; + padding-left: 5px; +} +.plx-form .forms-group-default .group-icon { + float: left; + font-size: 16px; + color: #108EE9 !important; + line-height: 32px; + margin-right: 8px; + transform: scale(0.7, 0.7); + font-weight: bold; +} +.plx-form .input-sm { + height: 28px !important; +} +.plx-form .px-red { + color: #EA4335; +} +.plx-form input:focus { + border: 1px solid #108EE9 !important; +} +.plx-form .error-div { + height: 14px; + margin-top: -4px; + margin-bottom: 5px; +} +.plx-form .error-div .error-msg { + color: #EA4335; +} +.plx-form .help-div { + color: #bfbfbf; + height: 14px; + margin-top: -5px; + margin-bottom: 6px; +} +.plx-form .forms-header { + margin-left: 15px; + margin-bottom: 25px; + padding-bottom: 5px; + border-bottom: 1px solid #e9e9e9; +} +.plx-form .forms-header span { + font-size: 16px; + color: #404040; +} +.plx-form .plx-input { + width: 100%; + color: #595959; + background: #fff; + text-align: left; +} +.plx-form .field-radio { + padding-right: 10px; + line-height: 27px; +} +.plx-form .field-radio.field-radio-tight { + line-height: 23px; +} +.plx-form .field-tail { + padding-right: 10px; + line-height: 32px; +} +.plx-form .field-tail.field-tail-tight { + line-height: 28px; +} +.plx-form .field-tail .tip { + color: #8e8e8e; + font-size: 16px; +} +.plx-form .field-info { + font-size: 14px; + color: #108EE9; + margin-left: -15px; +} +.plx-form .field-info.field-info-group { + margin-left: 15px; +} +.plx-form .form-field:not(select-dropdown) { + color: #595959; + font-size: 14px; + line-height: 32px; +} +.plx-form .form-field:not(select-dropdown).form-field-tight { + line-height: 28px; +} +.plx-form .form-field:not(select-dropdown).form-filed-hint { + margin-bottom: 15px; +} +.plx-form .field-div { + margin-bottom: 15px; + padding-left: 0; +} +.plx-form .field-div.field-div-tight { + margin-bottom: 10px; +} +.plx-form .field-div.inputchanged > input { + font-weight: bold; +} +.plx-form .field-div.inputchanged > select { + font-weight: bold; +} +.plx-form .button-div { + padding: 15px 0 0 0; + color: #595959; + font-size: 16px; + text-align: left; +} +.plx-form .button-div button { + margin-right: 10px; +} +.plx-form .button-r-submit { + float: right; + margin-right: -20px !important; +} +.plx-form .button-r-cancel { + float: right; +} +.plx-form .content { + overflow-y: auto; + overflow-x: hidden; +} +.plx-form .plx-scrollbar::-webkit-scrollbar { + width: 4px; + height: 6px; +} +.plx-form .plx-scrollbar::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2); + border-radius: 2em; + min-height: 50px; + max-height: 100px; +} +.plx-form .plx-scrollbar::-webkit-scrollbar-corner { + background-color: transparent; +} +.plx-form input:-ms-input-placeholder { + color: #999 !important; +} +.plx-form input::-webkit-input-placeholder { + color: #999 !important; +} +.plx-form plx-info .icon { + margin-left: -10px; + line-height: 28px !important; +} +.para-content .icon-active { + fill: #108EE9; +} +.para-content .icon-disactive { + fill: #bfbfbf; + cursor: default; +} +.plx-input { + font-size: 14px; + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; +} +.plx-input:focus { + border: 1px solid #108EE9; +} +.plx-input:disabled, +.plx-input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.plx-input-sm { + height: 28px; +} +.plx-input-right-no-radius { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.plx-radio-container { + font-size: 0; + position: relative; +} +.plx-radio { + position: absolute; + z-index: -1; + opacity: 0; +} +.plx-radio + .radio-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 16px; + width: 16px; + border: 1px solid #d9d9d9; + border-radius: 16px; + vertical-align: middle; +} +.plx-radio:hover + .radio-substitute, +.plx-radio:focus + .radio-substitute { + border-color: #108EE9; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-radio:checked + .radio-substitute { + border: 5px solid #108EE9; +} +.plx-radio:disabled + .radio-substitute, +.plx-radio[disabled] + .radio-substitute { + border-color: #d9d9d9; + background-color: #f5f5f5; + cursor: not-allowed; +} +.plx-radio:checked [disabled] + .radio-substitute { + border-color: #e9e9e9; + background-color: #e9e9e9; + cursor: not-allowed; +} +.plx-radio + .radio-substitute + span { + font-weight: normal; + font-size: 14px; + cursor: pointer; + vertical-align: middle; + padding-left: 10px; +} +.plx-radio:disabled + .radio-substitute + span, +.plx-radio[disabled] + .radio-substitute + span { + cursor: not-allowed; +} +/*radio-group*/ +.btn.dropdown-toggle, +.btn-group .btn.dropdown-toggle, +.btn:hover, +.btn:disabled, +.btn[disabled], +.btn:focus, +.btn:active, +.btn.active { + outline: none !important; + background-image: none !important; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-radio-group { + cursor: pointer; + font-size: 14px; + height: 32px; + background-color: #fff; + border: 1px solid #d9d9d9; + color: #595959; + border-radius: 3px; + padding: 0px 16px; + min-width: 88px; + transition: none; +} +.plx-radio-group:hover, +.plx-radio-group:focus, +.plx-radio-group:active { + outline: none; + background-image: none; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-radio-group:hover, +.plx-radio-group:focus { + color: #108ee9; + border-color: #108ee9; + background-color: #fff; +} +.plx-radio-group:active { + color: #fff; + border-color: #108ee9; + background-color: #108ee9; +} +.plx-radio-group.active { + background-color: #108EE9; + color: #fff; + border-color: #108EE9; +} +.plx-radio-group > span { + line-height: 30px; +} +.plx-radio-group-sm { + height: 28px; + padding: 0px 14px; + min-width: 68px; +} +.plx-radio-group-sm > span { + line-height: 26px; +} +.plx-ui-steps-number-active { + background: #108ee9; + color: #ffffff; +} +.plx-ui-steps-number-passive { + background: #d9d9d9; + color: #ffffff; +} +.plx-ui-steps-number-visited { + color: #ffffff; + border: 2px #108ee9 solid; +} +.plx-ui-underline-active { + background: #108ee9; +} +.plx-ui-underline-passive { + background: #e9e9e9; +} +.plx-ui-steps-title-active { + color: #595959; +} +.plx-ui-steps-title-passive { + color: #999999; +} +.plx-ui-steps-title-visited { + color: #999999; +} +.plx-ui-steps-number-visited-tick { + border-bottom: 2px solid #108ee9; + border-right: 2px solid #108ee9; +} +.plx-ui-underline-active-vertical { + border-right: 2px solid #d9d9d9; +} +.plx-ui-underline-visited-vertical { + border-right: 2px solid #108ee9; +} +.plx-ui-underline-passive-vertical { + border-right: 2px solid #d9d9d9; +} +.plx-ui-steps-title-active-vertical { + color: #595959; +} +.plx-ui-steps-title-visited-vertical { + color: #999999; +} +.plx-ui-steps-title-passive-vertical { + color: #999999; +} +.plx-ui-steps-number-active-vertical { + background: #108ee9; + color: #ffffff; +} +.plx-ui-steps-number-passive-vertical { + background: #d9d9d9; + color: #ffffff; +} +.plx-ui-steps-number-visited-vertical { + color: #ffffff; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.less new file mode 100644 index 00000000..a145f3fa --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/NIV/theme.less @@ -0,0 +1,89 @@ +//-------------------common start------------------------ +// -------- Colors start----------- +//配置说明:通常primary-color和primary-color-guide相同,某些产品需要有特别引导用户操作的按钮时,可以单独定义primary-color-guide +@primary-color: #108EE9; //主色,用于重点按钮底色,普通按钮文字色、tab页的选中横条色、进度条色、分组标题竖线等, 应用开发需要关注搭配class plx-btn-primary t +@guide-color: #5cb85c; //引导色,搭配class plx-btn-guide +@success-color: #00A854; //搭配class plx-btn-success +@warning-color: #F3B709; //搭配class plx-btn-warning +@error-color: #EA4335; //搭配class plx-btn-error +@common-color: #fff; //搭配class plx-btn + +//Colors-hover +@primary-color-hover: #0D75BF; +@primary-color-guide-hover: #00994d; +@success-color-hover: #00994D; +@warning-color-hover: #C99703; +@error-color-hover: #DD1B0A; +@common-color-hover: #fff; +@btn-common-color-text-hover: #108ee9; +@btn-common-color-border-hover: #108ee9; + + +//colors-click +@primary-color-click: #0C66A7; +@primary-color-guide-click: #008040; +@success-color-click: #008040; +@warning-color-click: #977202; +@error-color-click: #B92113; +@common-color-click: #108ee9; +@btn-common-color-text-click: #fff; +@btn-common-color-border-click: #108ee9; + +//opacity-disable +@opacity-disable: 0.5; +//text-color-scenes,在按钮或tab上的文字色 +@scene-textcolor: #fff; //用于有底色时的文字颜色,搭配class plx-btn-primary,plx-btn-* +@common-textcolor: @primary-color; //用于普通按钮和链接上的文字颜色,应用关注搭配 class plx-btn +//text color +@text-color: #595959; //普通文字颜色,不需要专用class +@title-text-color: #404040; //用于标题文字颜色 +@disabled-text-color: #bfbfbf; //用于禁用状态文字、placeholder文字颜色 +@light-text-color: #737373; //较浅色 +@unselected-text-color: #999; //用于未选中文字颜色 +@form-label:#737373;//用于表单标签颜色 +// Background color for `` +@body-bg: #fff; +// Base background color for most components +@component-bg: #fff; +@hover-bg-color: #E7F4FD; //用于菜单 、列表项、树项、表格行的hover背景色 +@selected-bg-color: #f5f5f5; //用于菜单 、列表项、树项、表格行的选中背景色 +@input-bg-color-disabled: #f5f5f5; //用于输入框禁用状态背景色 +//边框 +@border-color-base: #d9d9d9; // base border outline a component 搭配class: plx-border +@border-color-split: #e9e9e9; // split border inside a component 搭配class: plx-split +//字体图标 +@fonticon-color: #8e8e8e; //字体图标颜色,搭配class: plx-icon-* +@fonticon-bg-color-hover: @hover-bg-color; //一般字体图标hover时背景色变化 +@fonticon-color-hover: @primary-color; //当字体图标本身有背景色的时候,使用图标颜色本身加深的hover颜色。 +// Shadow +@shadow-color: rgba(0, 0, 0, .2); //阴影颜色,个别组件需要,无需搭配固定class + +// -------- Colors end------------- +// -------- font start------------- +@font-family: PingFang SC, Hiragino Sans GB, Microsoft YaHei, Segoe UI, Helvetica, Arial, "san-serif"; +@font-size-spacing:20px; //用于间距定义 +@font-size: 14px; //正文文字 +@font-size-title-level1: @font-size + 6px; //一级标题 +@font-size-title-level2: @font-size + 2px; //二级标题 +@font-size-title-group: @font-size + 2px; +// -------- font end--------------- +// -------- radius start------------- +@radius: 3px; //圆角 +@radius-sm: 2px; //小按钮圆角,用于下拉多选框的已选项的圆角 +@radius-lg: 20px; //用于标签,搭配class:plx-tag +// -------- radius start------------- +//size +//checkbos +@checkbox-size: @font-size+2px; //复选框高度 +//btn +@btn-height: 32px; //按钮高度 +@btn-height-sm: 28px; //小尺寸按钮,搭配class:plx-btn-sm +@btn-height-xs: 24px; //加小尺寸按钮,搭配class:plx-btn-xs +// Input +@input-height: 32px; //输入框高度 +@input-height-sm: 28px; //小尺寸输入框,搭配class:plx-input-sm + + + +@import "../common.less"; +@import "./NIV-theme.less"; \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/common.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/common.less new file mode 100644 index 00000000..693a8424 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/common.less @@ -0,0 +1,5577 @@ +/////// + +.plx-breadcrumb { + margin: 0; + padding: 5px 10px; + font-size: 12px; + li { + display: inline-block; + } + a { + color: @light-text-color; + text-decoration: none; + &:hover { + color: @primary-color; + } + } + .plx-breadcrumb-separator { + color: @unselected-text-color; + padding: 0 5px; + vertical-align: 1px; + } + .plx-breadcrumb-collapse { + padding-left: 6px; + padding-right: 6px; + cursor: pointer; + circle { + fill: @fonticon-color; + } + &:hover circle { + fill: @primary-color; + } + } + .plx-breadcrumb-active { + vertical-align: 1px; + a { + font-size: 20px; + color: @title-text-color; + cursor: text; + } + } +} +/////// +/////// +/////// + +.owl-dateTime { + display: inline-block; + position: relative; + width: 100%; + font-family: @font-family; + font-size: @font-size; + background: @component-bg; + color: @text-color; +} + +.owl-dateTime input { + .plx-input; +} + +.owl-dateTime input:-ms-input-placeholder { + color: @unselected-text-color !important; +} +.owl-dateTime input::-webkit-input-placeholder { + color: @unselected-text-color !important; +} + +.owl-dateTime-input { + width: 100%; + padding-right: 1.5em; } + +.owl-dateTime-cancel { + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + transform: translateY(-50%); + cursor: pointer; + color: inherit; } + +.owl-dateTime-inputWrapper { + position: relative; } + +.owl-dateTime-customTemp { + display: inline-block; + position: relative; } + +.owl-dateTime-dialog { + padding: 0px; + position: absolute; } + +.owl-dateTime-dialogHeader { + display: flex; + justify-content: center; + align-items: center; + width: 100%; } + +.owl-calendar-wrapper, +.owl-timer-wrapper { + position: relative; + width: 100%; + padding: .2em .5em; } + +.owl-calendar-control { + display: flex; + justify-content: space-around; + width: 100%; + height: 2em; } + .owl-calendar-control .owl-calendar-controlNav { + position: relative; + cursor: pointer; + width: 12.5%; } + .owl-calendar-control .owl-calendar-controlContent { + display: flex; + justify-content: center; + align-items: center; + width: 75%; + height: 100%; } + +.owl-calendar { + position: relative; + min-height: 13.7em; } + .owl-calendar table { + width: 100%; + border-collapse: collapse; } + .owl-calendar tbody td { + position: relative; + text-align: center; } + .owl-calendar tbody td a { + display: block; + width: 100%; + height: 100%; + text-decoration: none; + color: inherit; + font-size:12px; + } + .owl-calendar .owl-calendar-yearArrow { + position: absolute; + top: 50%; + width: 1.5em; + height: 1.5em; + transform: translateY(-50%); + cursor: pointer; } + .owl-calendar .owl-calendar-yearArrow.left { + left: -.5em; } + .owl-calendar .owl-calendar-yearArrow.right { + right: -.5em; } + +.owl-timer-wrapper { + position: relative; + display: flex; + justify-content: center; } + .owl-timer-wrapper .owl-timer { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 25%; + height: 100%; } + .owl-timer-wrapper .owl-timer-control { + display: flex; + justify-content: center; + align-items: center; + height: 30%; + width: 100%; + cursor: pointer; } + .owl-timer-wrapper .owl-timer-control .icon:before { + margin: 0; } + .owl-timer-wrapper .owl-timer-input { + width: 60%; + height: 100%; } + +/*# sourceMappingURL=picker.component.css.map */ +.font-face { + font-weight: normal; + font-style: normal; } + +[class^="paletx-datepicker-icon-"]:before, [class*="paletx-datepicker-icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } + +.paletx-datepicker-icon-cancel:before { + content: '\e802'; } + +/* '' */ +.paletx-datepicker-icon-up-open:before { + content: '\e805'; } + +/* '' */ +.paletx-datepicker-icon-down-open:before { + content: '\e80b'; } + +/* '' */ +.paletx-datepicker-icon-left-open:before { + content: '\e817'; } + +/* '' */ +.paletx-datepicker-icon-right-open:before { + content: '\e818'; } + +/* '' */ +.owl-widget, +.owl-widget * { + box-sizing: border-box; } + +.owl-widget { + font-size: 1em; } +.owl-padding{ + padding: 0px; +} +.owl-corner-all { + border-radius: 3px; } + +.owl-corner-top { + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + +.owl-state-default { + border: 1px solid @border-color-base; + background: @component-bg; + color: @text-color; } + +.owl-inputtext { + margin: 0; + outline: medium none; + transition: .2s; } + + + .owl-dateTime.owl-dateTime-inline { + width: auto; } + .owl-dateTime.owl-dateTime-inline .owl-dateTime-dialog { + position: relative; + z-index: auto; } + +.owl-dateTime-dialog { + width: 300px; + user-select: none; + z-index: 99999; } + +.owl-dateTime-dialogHeader { + height: 2.5em; + padding: .25em; + background-color: @component-bg; + overflow-y: auto; } + +.owl-calendar-control .owl-calendar-controlNav .nav-prev, +.owl-calendar-control .owl-calendar-controlNav .nav-next { + position: absolute; + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} + +.owl-cal-header{ + background: @selected-bg-color; + //color: @form-label; + height: 35px; + //width: 105%; + //margin-left: -7px; +} + .owl-calendar-control .owl-calendar-controlNav .nav-prev:before, + .owl-calendar-control .owl-calendar-controlNav .nav-next:before { + //content: ""; + border-top: .5em solid transparent; + border-bottom: .5em solid transparent; + border-right: 0.75em solid #000000; + width: 0; + height: 0; + display: block; + margin: 0 auto; } +.owl-calendar-control .owl-calendar-controlNav .nav-next:before { + border-right: 0; + border-left: 0.75em solid #000000; } +.owl-calendar-control .owl-calendar-controlContent .month-control, +.owl-calendar-control .owl-calendar-controlContent .year-control { + color: @unselected-text-color; + display: inline-block; + cursor: pointer; + transition: transform 200ms ease; } + .owl-calendar-control .owl-calendar-controlContent .month-control:hover, + .owl-calendar-control .owl-calendar-controlContent .year-control:hover { + // transform: scale(1.2); } + color: @guide-color; } +.owl-calendar-control .owl-calendar-controlContent .month-control { + font-size: @font-size-title-group; + margin-right: .8rem; +} +.owl-calendar-control .owl-calendar-controlContent .year-control { + font-size: @font-size-title-group; +} + +.owl-calendar tbody td.owl-calendar-selected { + background-color: @guide-color; + color: @component-bg } +.owl-calendar tbody td.owl-calendar-invalid { + color: @disabled-text-color } +.owl-calendar tbody td.owl-calendar-outFocus { + color: @unselected-text-color; } +.owl-calendar tbody td.owl-calendar-hidden { + visibility: hidden; } + /** +.owl-calendar tbody td:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: @hover-bg-color; + color: @shadow-color } +**/ +.owl-years td.owl-year, +.owl-years td.owl-month, +.owl-months td.owl-year, +.owl-months td.owl-month { + font-size: 1.2em; + height: 2.5em; + width: 33.33%; + line-height: 2.5em; + border-radius: 60px; + } + +.owl-weekdays th.owl-weekday { + height: 1em; + line-height: 2em; + text-align: center; + font-weight: normal; + font-size: @font-size; + /**color: @unselected-text-color; **/ + } + +.owl-days td.owl-day { + border-radius: 30px; + height: 2em; + width: calc(100% / 7); + line-height: 2em; } + .owl-days td.owl-day.owl-day-today:before { + content: ''; + display: block; + position: absolute; + right: 2px; + top: 2px; + color: @primary-color; + border-top: 0.5em solid @primary-color-hover; + border-left: .5em solid transparent; + } + +.owl-timer-wrapper { + height: 5.4em; + background-color: @shadow-color; } + .owl-timer-wrapper .owl-timer-text { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 40%; + font-size: 1.5em; } + .owl-timer-wrapper .owl-meridian-btn { + font-size: .8em; + color: @guide-color; + background-image: none; + background-color: transparent; + border-color: @guide-color; } + .owl-timer-wrapper .owl-meridian-btn:hover { + color: @scene-textcolor; + background-color: @guide-color; + border-color: @guide-color; } + +.owl-timer-divider { + display: inline-block; + align-self: flex-end; + position: absolute; + width: .6em; + height: 100%; + left: -.3em; } + .owl-timer-divider .owl-timer-dot { + display: block; + width: .3em; + height: .3em; + position: absolute; + left: 50%; + border-radius: 50%; + transform: translateX(-50%); } + .owl-timer-divider .owl-timer-dot.dot-top { + top: 38%; } + .owl-timer-divider .owl-timer-dot.dot-bottom { + bottom: 38%; } +.owl-icon{ + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: @fonticon-color; +} + +.oes-time-control{ + color: @text-color !important; +} +.owl-calendar-selected { + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar tbody td div.day:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: @hover-bg-color; + color:#000; + border-radius: 50%; } +.oes-time-control{ + font-size: @font-size; +} +.owl-calendar-year-part{ + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-year-part:hover{ + background-color: @hover-bg-color; + color:#000; + border-radius: 50%; +} +.owl-calendar-year-selected{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar-year-selected:hover{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-part{ + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-month-part:hover{ + background-color: @hover-bg-color; + color:#000; + border-radius: 50%; +} +.owl-calendar-month-selected{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-selected:hover{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} + +/*# sourceMappingURL=picker.css.map */ + + +/////// +/////// +/////// +.oes-time-table .chevron::before { + border-style: solid; + border-width: 0.29em 0.29em 0 0; + content: ''; + display: inline-block; + height: 0.69em; + left: 0.05em; + position: relative; + top: 0.15em; + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + vertical-align: middle; + width: 0.71em; +} + +.oes-time-table .chevron.bottom:before { + top: -.3em; + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); +} + +.oes-time-table .btn-link { + border: none!important; + cursor: pointer; + outline: 0; + display: block; +} + +.oes-time-table .btn-link.disabled { + cursor: not-allowed; + opacity: .65; +} + +.oes-time-control { + text-align: center; +} + +.datapicker-form-control { + width: auto !important; + display: inline-block; +} + +.oes-time-table .ict-stretch{ + + font-size: 8px; +} + +.oes-time-table .ict-shrink{ + font-size: 8px; +} +.time-pick-bk{ + background-color: #fff; +} + +.btn-link:focus, .btn-link:hover{ + text-decoration: none; +} +.oes-time-control{ + border: 0; + width: 30px !important; + padding: 3px 0; + margin: 0; + font-size: @font-size; +} + +.oes-time-control:hover{ + background-color: #e6e6e6; + color:#000; + cursor: pointer; +} + + +.oes-time-control-foucs-bk{ + background-color: #00abff !important; + color:#fff!important; + +} + +.oes-time-separator{ + margin: 0 -5px; +} +.oes-time-group,.oes-time-group:hover{ + + border-bottom: 1px solid #ccc; + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; + } + .oes-time-btns,.oes-time-btns:hover{ + + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; + padding: 0 0 7px 0 !important; + + } + + .oes-time-btns-wrapper { + margin-top:-3px; + transform:scale(0.6,0.6); + } + + .i18nTimeDes,.i18nTimeDes:hover{ + + padding: 0 5px 0px 0; + + } + + .oes-time-btn{ + + height: 5px; + } + + + .oes-time-table{ + margin-bottom: 10px; + } + +.hour-table{ + + font-size:12px; +} + +.hour-table td{ + + padding: 5px; + padding-top: 3px; + padding-bottom: 3px; + cursor: pointer; +} +.oes-time-btn-shrink{ + position: relative; + top:-5px; + left:0px; + color:#CCC; +} + +.oes-time-btn-stretch{ + position: relative; + left:0px; + color:#CCC; +} +.owl-calendar-timer-invalid{ + color: #acacac; +} +.owl-calendar-timer-selected{ + background-color: #00abff; + color: #FFFFFF; + border-radius: 1.2em; +} +.hour-table td:not(.owl-calendar-timer-selected):not(.owl-calendar-timer-invalid):hover { + background-color: #ebf6fd; + color: #000000; + border-radius: 1.2em; +} + + + + +/////// + +.icon { + color: @fonticon-color; + vertical-align: text-bottom; + margin-left:5px; + font-size: 20px; +} + +/////// + + +.plx-input-password { + display: inline-block; + line-height: @input-height - 2px; + width: 40px; + text-align: center; + vertical-align: middle; + margin-top: -2px; + background-color: @common-color; + border-top: 1px solid @border-color-base; + border-right: 1px solid @border-color-base; + border-bottom: 1px solid @border-color-base; + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; + cursor: pointer; + &:focus, + &:hover { + background-color: @common-color-hover; + } + &:active { + background-color: @common-color-click; + } + &.ict-eye-closed, &.ict-eye { + color: @fonticon-color; + } +} + + +.plx-input-password-disabled { + cursor: not-allowed; + &:focus, + &:hover, + &:active{ + background-color: @common-color; + } +} + +.plx-input-password-sm { + line-height: @input-height-sm - 2px; +} +/////// + +@-moz-keyframes three-quarters-loader { + 0% { + -moz-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@-webkit-keyframes three-quarters-loader { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes three-quarters-loader { + 0% { + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +.plx-loading-max:not(:required) { + .plx-loading; + width: 72px; + height: 72px; + border: 5px solid @primary-color; + border-right-color: @component-bg; + border-radius: 36px; +} + +.plx-loading-medium:not(:required) { + .plx-loading; + width: 36px; + height: 36px; + border: 4px solid @primary-color; + border-right-color: @component-bg; + border-radius: 18px; +} + +.plx-loading-min:not(:required) { + .plx-loading; + width: 18px; + height: 18px; + border: 2px solid @primary-color; + border-right-color: @component-bg; + border-radius: 9px; +} + +.plx-loading-default:not(:required) { + margin-left: 100px; + margin-top: 100px; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 36px; + height: 36px; + border: 4px solid @primary-color; + border-right-color: @component-bg; + border-radius: 18px; +} + +.plx-loading-xs:not(:required) { + .plx-loading; + width: 12px; + height: 12px; + border: 2px solid @primary-color; + border-right-color: @component-bg; + border-radius: 6px; +} + +.plx-loading { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; +} + +.plx-loading-white:not(:required) { + .plx-loading; + width: 12px; + height: 12px; + border: 2px solid @component-bg; + border-right-color: @primary-color; + border-radius: 6px; +} + +.plx-loading-gray:not(:required) { + .plx-loading; + width: 12px; + height: 12px; + border: 2px solid @disabled-text-color; + border-right-color: @component-bg; + border-radius: 6px; +} + +/////// +.message{ + width: 400px; + right:10px; + position: fixed; + z-index: 99999; + font-family: @font-family; + font-weight: 400; + font-style: normal; + font-size:14px; + color: @title-text-color; +} +.message>p{ + width: 100%; + margin: 10px 0 16px; + padding: 0 25px ; + border:1px solid @border-color-split; + box-shadow: 1px 3px 9px @shadow-color; + line-height: 36px; + background: @component-bg; + font-size: @font-size !important; + color: @text-color; +} +.message>p>span{ + float: right; + cursor: pointer; + font-weight: 400; + font-style: normal; + color: #108EE9; + text-align: center; + &:hover{ + text-decoration: underline; + } +} +.message>div{ + width: 100%; + margin-bottom: 16px; + border:1px solid ; + line-height: 62px; + border:1px solid @border-color-split; + box-shadow: 1px 4px 9px @shadow-color; + border-radius: 5px; + background: @component-bg; + position: relative; +} +.message>div>span{ + display: inline-block; + font-size:24px !important; + margin-left:12px; + margin-right: 3px; + vertical-align: middle; +} +.message>div.success{ + border-left:4px solid @success-color; +} +.message>div.success>span{ + color: @success-color; +} +.message>div.error{ + border-left:4px solid @error-color; +} +.message>div.error>span{ + color: @error-color; +} + +.message>div.warning{ + border-left:4px solid @warning-color; +} +.message>div.warning>span{ + color: @warning-color; +} +.message>div.info{ + border-left:4px solid @primary-color; +} +.message>div.info>span{ + color:@primary-color; +} +// .message>div.info>span{ +// color: @info-color; +// } +.message>div>i{ + float:right; + width: 20px; + height: 20px; + margin-top:21px; + line-height: 20px; + border-radius: 50%; + margin-right: 20px; + cursor: pointer; + text-align: center; + font-size: 16px; + &:hover{ + background: @hover-bg-color; + } +} + +.message>div>p{ + position: relative; + top:-3px; + margin: 0; + padding: 0 20px 16px 43px; + font-size: @font-size !important; + color: @text-color; + line-height: 18px; + position: relative; +} +.message>div>p>span{ + color: @primary-color; + cursor:pointer; + &:hover{ + text-decoration: underline; + } +} +.message>div>div{ + padding-left:45px ; + padding-bottom:19px; + font-size: @font-size; + color: @primary-color; + line-height: 18px; + cursor: pointer; + &:hover{ + text-decoration: underline; + } +} +#plxMessageMeasure{ + position: fixed; + top:-12px; + opacity: 0; + white-space: nowrap; + margin: 0; + padding:0; + // background: red; + font-size: @font-size !important; + line-height: @font-size; + z-index:-9999; +} +.stack>span{ + display: inline-block; + position: absolute; + bottom:16px; + right:25px; +} +/////// + +plx-modal-window { + .modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + outline: 0; + z-index: 10000; + } + .modal-dialog { + position: relative; + max-width: 600px; + margin: 30px auto; + &.modal-sm { + max-width: 600px; + } + &.modal-lg { + max-width: 1000px; + } + } + .modal-content { + position: relative; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + background-color: @component-bg; + background-clip: padding-box; + border-radius: @radius; + box-shadow: 0 5px 15px @shadow-color; + outline: 0; + .modal-header { + border-bottom: 0; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; + } + .modal-body { + .form-group:last-child, form:last-child { + margin-bottom: 0; + } + } + .modal-footer { + display: block; + border-top: 0; + margin-top: 0; + padding: 0 15px 15px 15px; + } + .modal-title { + font-size: @font-size-title-level1; + margin-bottom: 0; + line-height: 1.5; + } + .modal-btn { + text-align: center; + font-size: 0; + } + } + .close { + color: @fonticon-color; + font-size: @font-size-title-level2; + text-shadow: none; + width: 24px; + height: 24px; + background: @scene-textcolor; + border-radius: 20px; + padding-bottom: 2px; + outline: none; + &:hover { + color: @fonticon-color; + background: @fonticon-bg-color-hover; + } + } + .alert-modal { + &.row { + margin-left: 100px; + margin-bottom: 30px; + text-align: left; + .tip-img { + display: inline-block; + width: 52px; + height: 52px; + border-radius: 50px; + font-size: 45px; + text-align: center; + line-height: 1; + margin-top: -5px; + margin-right: 15px; + &::before { + content: "!"; + } + } + .tip-info { + width: 300px; + .alert-title { + font-size: @font-size-title-level2; + color: @title-text-color; + } + .alert-result { + margin-top: 5px; + font-size: @font-size; + color: @unselected-text-color; + } + } + .warning { + border: 3px solid @warning-color; + color: @warning-color; + } + .error { + border: 3px solid @error-color; + color: @error-color; + } + } + } +} +/////// + + +@popover-arrow-border-width: 6px; +@popover-arrow-border-width-before: 7px; +@popover-arrow-border-height: @popover-arrow-border-width-before - @popover-arrow-border-width; +@popover-arrow-away: 10px; +@popover-arrow-background-color: #fff; +@popover-arrow-border-color: #ccc; +@popover-away-host: 3px; + +ngb-popover-window.plx-popover.show { + color: #333; + border: 1px solid @border-color-base; +} + +.plx-popover { + position: absolute; + top: 0; + left: 0; + z-index: 10001; + display: block; + padding: 1px; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: break-word; + -webkit-background-clip: padding-box; + background-clip: padding-box; + max-width: 400px; + min-width: 200px; + background-color: @component-bg; + font-family: @font-family; + font-size: @font-size; + border: 1px solid @border-color-base; + border-radius: @radius; + .shadow; + &::before, + &::after { + content: ""; + position: absolute; + display: block; + width: 0; + height: 0; + border: solid transparent; + } + &::before { + border-width: @popover-arrow-border-width-before; + } + &::after { + border-width: @popover-arrow-border-width; + } +} + +.plx-popover-top-common { + margin-top: -(@popover-arrow-border-width + @popover-away-host); + &::before { + border-top-color: @popover-arrow-border-color; + border-bottom-width: 0; + bottom: -@popover-arrow-border-width-before; + } + &::after { + border-top-color: @popover-arrow-background-color; + border-bottom-width: 0; + bottom: -@popover-arrow-border-width; + } +} +.plx-popover-top { + .plx-popover-top-common; + &::before { + left: 50%; + margin-left: -@popover-arrow-border-width-before; + } + &::after { + left: 50%; + margin-left: -@popover-arrow-border-width; + } +} +.plx-popover.plx-popover-top-left { + .plx-popover-top-common; + &::before { + left: @popover-arrow-away; + } + &::after { + left: @popover-arrow-away + @popover-arrow-border-height; + } +} +.plx-popover.plx-popover-top-right { + .plx-popover-top-common; + &::before { + right: @popover-arrow-away; + } + &::after { + right: @popover-arrow-away + @popover-arrow-border-height; + } +} + +.plx-popover-right-common { + margin-left: @popover-arrow-border-width + @popover-away-host; + &::before { + border-right-color: @popover-arrow-border-color; + border-left-width: 0; + left: -@popover-arrow-border-width-before; + } + &::after { + border-right-color: @popover-arrow-background-color; + border-left-width: 0; + left: -@popover-arrow-border-width; + } +} +.plx-popover.plx-popover-right { + .plx-popover-right-common; + &::before { + top: 50%; + margin-top: -@popover-arrow-border-width-before; + } + &::after { + top: 50%; + margin-top: -@popover-arrow-border-width; + } +} +.plx-popover.plx-popover-right-top { + .plx-popover-right-common; + &::before { + top: @popover-arrow-away; + } + &::after { + top: @popover-arrow-away + @popover-arrow-border-height; + } +} +.plx-popover.plx-popover-right-bottom { + .plx-popover-right-common; + &::before { + bottom: @popover-arrow-away; + } + &::after { + bottom: @popover-arrow-away + @popover-arrow-border-height; + } +} + +.plx-popover-bottom-common { + margin-top: @popover-arrow-border-width + @popover-away-host; + &::before { + border-bottom-color: @popover-arrow-border-color; + border-top-width: 0; + top: -@popover-arrow-border-width-before; + } + &::after { + border-bottom-color: @popover-arrow-background-color; + border-top-width: 0; + top: -@popover-arrow-border-width; + } +} +.plx-popover.plx-popover-bottom { + .plx-popover-bottom-common; + &::before { + left: 50%; + margin-left: -@popover-arrow-border-width-before; + } + &::after { + left: 50%; + margin-left: -@popover-arrow-border-width; + } +} +.plx-popover.plx-popover-bottom-left { + .plx-popover-bottom-common; + &::before { + left: @popover-arrow-away; + } + &::after { + left: @popover-arrow-away + @popover-arrow-border-height; + } +} +.plx-popover.plx-popover-bottom-right { + .plx-popover-bottom-common; + &::before { + right: @popover-arrow-away; + } + &::after { + right: @popover-arrow-away + @popover-arrow-border-height; + } +} + +.plx-popover-left-common { + margin-left: -(@popover-arrow-border-width + @popover-away-host); + &::before { + border-left-color: @popover-arrow-border-color; + border-right-width: 0; + right: -@popover-arrow-border-width-before; + } + &::after { + border-left-color: @popover-arrow-background-color; + border-right-width: 0; + right: -@popover-arrow-border-width; + } +} + +.plx-popover.plx-popover-left { + .plx-popover-left-common; + &::before { + top: 50%; + margin-top: -@popover-arrow-border-width-before; + } + &::after { + top: 50%; + margin-top: -@popover-arrow-border-width; + } +} + +.plx-popover.plx-popover-left-top { + .plx-popover-left-common; + &::before { + top: @popover-arrow-away; + } + &::after { + top: @popover-arrow-away + @popover-arrow-border-height; + } +} +.plx-popover.plx-popover-left-bottom { + .plx-popover-left-common; + &::before { + bottom: @popover-arrow-away; + } + &::after { + bottom: @popover-arrow-away + @popover-arrow-border-height; + } +} + +.plx-popover .plx-popover-title { + padding: 8px 14px; + margin-bottom: 0; + font-size: @font-size-title-level2; + background-color: @component-bg; + border-bottom: 1px solid @border-color-base; + &:empty { + display: none; + } +} + +.plx-popover .plx-popover-content { + padding: 9px 14px; + background-color: @component-bg; +} + +.plx-popover .ict-warning { + color: @error-color; + font-size: 24px; + margin-right: 5px; +} + +//.popover .popo { +// text-align: center; +//} +// +//.popover .pop-btn { +// float: right; +// margin-top: 10px; +// margin-bottom: 10px; +// font-size: 0; +//} +// +//.popover .pop-btn .btn-s { +// margin-left: 10px; +//} +// +//.popover .tip-info span { +// vertical-align: middle; +//} +// +//.popover .tip-info .content { +// font-size: 14px; +//} + +.popover-template { + padding: 10px 0px; + min-width: 220px; + .popover-template-content { + padding: 10px 10px; + } + .popover-template-footer { + padding: 10px 10px 5px 10px; + text-align: center; + } + .popover-template-icon { + display: inline-block; + max-width: 30px; + float: left; + } + .popover-template-icon-area { + display: inline-block; + height: 100%; + vertical-align: middle; + } + .popover-template-msg { + display: inline-block; + max-width: 300px; + margin-left: 10px; + margin-top: 1px; + } +} +/////// + + +.plx-progress { + display: inline-block; + margin: 0 10px 1px 0; + border-radius: @radius-lg; + overflow: hidden; + background-color: #eee; + + .plx-progress-bar { + width: 0; + height: 8px; + transition: width 0.8s ease-in-out; + opacity: 1; + } + + .plx-progress-bar-info { + position: relative; + background-color: lighten(@primary-color, 10%); + &::before { + background-color: @primary-color; + content: ''; + position: absolute; + top: 0; + left: 0; + width: 0; + height: 8px; + animation: plx-progress-bar-stripes 0.5s cubic-bezier(0.23, 1, 0.32, 1) infinite; + } + } + + .plx-progress-bar-info.plx-progress-bar-reset { + transition: none; + } + + .plx-progress-bar-warning { + background-color: @error-color; + } + + .plx-progress-bar-success, + .plx-progress-bar-info.plx-progress-bar-success { + background-color: @primary-color; + } +} + +.plx-progress-info { + display: inline-block; + .fp-exclamation-circle { + color: @error-color; + } +} + +@keyframes plx-progress-bar-stripes { + from {width: 0;} + to {width: 100%;} +} + +:host(.plx-progressbar-sm) { + .plx-progressbar-sm-common; +} + +.plx-progressbar-sm { + .plx-progressbar-sm-common; + } + +.plx-progressbar-sm-common { + font-size: 12px; + .plx-progress-bar { + height: 2px; + } + .fp-exclamation-circle { + vertical-align: middle; + font-size: 12px; + } + .plx-progress-info span { + vertical-align: middle; + } +} + +/////// +/////// + +.search-input { + position: relative; + background: @component-bg; + color: @text-color; + } + + .search-input input { + .plx-input; + width: 100%; + font-family: @font-family; + font-size: @font-size; + color: @text-color; + } + + .search-input-sm { + height: @input-height-sm !important; + } + + .search-img { + color: @disabled-text-color; + position: absolute; + right: 8px; + top: 8px; + list-style: none; + font-size: 16px; + } + + .search-img-confirm { + color: @primary-color-click; + cursor: pointer; + } + + + // placeholder +::-webkit-input-placeholder { + color: @unselected-text-color !important; +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: @unselected-text-color !important; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color:@unselected-text-color !important; +} +input:-ms-input-placeholder { + color: @unselected-text-color !important; +} +input::-webkit-input-placeholder { + color:@unselected-text-color !important; +} +/////// + +select-dropdown { + box-sizing: border-box; + font-family: @font-family; + font-size: @font-size; + outline: none; + & > div { + background-color: @component-bg; + position: absolute; + z-index: 9999; + &.select-sm .filter { + input { + height: @input-height-sm + 2; + } + .toggle { + top: 13px; + } + } + .filter { + width: 100%; + input { + border: 1px solid @primary-color; + border-radius: @radius; + padding: 0 10px; + width: 100%; + height: @input-height + 2; + } + .toggle { + display: block; + position: absolute; + top: 15px; + right: 10px; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid lighten(@fonticon-color, 5%); + } + } + .options { + border: 1px solid @border-color-base; + border-top: none; + border-radius: @radius; + max-height: 160px; + overflow-y: auto; + ul { + list-style: none; + margin: 0; + padding: 0; + li { + color: @text-color; + height: 30px; + line-height: 18px; + padding: 6px 20px 6px 8px; + position: relative; + cursor: pointer; + user-select: none; + &.single-selected { + background-color: @selected-bg-color; + } + &.highlighted { + background-color: @hover-bg-color; + color: @text-color; + } + &.disabled { + background-color: @component-bg; + color: @disabled-text-color; + cursor: default; + pointer-events: none; + } + &.plx-select-message { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .option-label { + display: inline-block; + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .option-tick { + display: inline-block; + position: absolute; + right: 5px; + top: 5px; + } + .tick { + fill: none; + stroke: @success-color; + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + stroke-miterlimit: 10; + } + } + } + } + } +} + +/////// + +@option-bg-color: #f8f8f8; +@option-border-color: #e6e6e6; +@deselect-option-color-hover: #555; + +plx-select { + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; + width: 100%; + &.ng-untouched:not(form).ng-untouched:not(fieldset) { + border: 0; + } + & * { + box-sizing: border-box; + font-family: @font-family; + font-size: @font-size; + outline: none; + } + & > div { + border: 1px solid @border-color-base; + border-radius: @radius; + cursor: pointer; + user-select: none; + width: 100%; + &.disabled { + background-color: @input-bg-color-disabled; + color: @disabled-text-color; + cursor: not-allowed; + //pointer-events: none; + } + &.focus-border { + border: 1px solid @primary-color !important; + } + &.select-sm { + .value, .placeholder { + height: @input-height-sm !important; + line-height: @input-height-sm !important; + } + .toggle { + top: 13px; + } + div.option { + height: 20px !important; + line-height: 14px !important; + } + input { + height: @input-height-sm; + line-height: @input-height-sm; + } + } + input { + background-color: transparent; + border: none; + border-radius: @radius; + cursor: pointer; + height: @input-height; + line-height: @input-height; + } + .toggle { + display: block; + position: absolute; + top: 15px; + right: 10px; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid lighten(@fonticon-color, 5%); + } + .single { + display: flex; + width: 100%; + .value, .placeholder { + color: @text-color; + flex: 1; + height: @input-height; + line-height: @input-height; + overflow: hidden; + padding: 0 10px; + white-space: nowrap; + span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + } + } + .placeholder { + color: @unselected-text-color; + } + input { + flex: 1; + padding: 1px 10px 0 10px; + } + } + .multiple { + display: flex; + flex-flow: row wrap; + //min-height: @input-height; + padding: 0 10px; + width: 100%; + .placeholder { + flex: 1; + color: @unselected-text-color; + height: @input-height; + line-height: @input-height; + overflow: hidden; + white-space: nowrap; + } + input { + padding: 0; + margin-right: 10px; + } + div.option { + background-color: @option-bg-color; + border: 1px solid @option-border-color; + border-radius: @radius-sm; + color: @text-color; + cursor: default; + display: inline-block; + flex-shrink: 0; + height: 24px; + line-height: 18px; + margin: 4px 10px 4px 0; + padding: 2px 30px 2px 10px; + max-width: 100%; + position: relative; + span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + } + .deselect-option { + color: darken(@border-color-base, 10%); + cursor: pointer; + font-size: 8px; + position: absolute; + top: 2px; + right: 8px; + &:hover { + color: @deselect-option-color-hover; + } + } + } + } + } +} +/////// + +@plx-steps-circle-width: 24px; +@plx-steps-height: 40px; + +.plx-ui-steps { + height: @plx-steps-height; +} + +.plx-ui-horizon-ul-horizon { + display:flex; + box-orient: horizontal; + padding: 0; + font-size: @font-size; + font-family: @font-family; +} + +.plx-ui-steps-li { + list-style: none; + position: relative; + height: 24px; + line-height: 24px; + float: left; + margin-right: 0; +} + +.plx-ui-steps-number-active { + color: @component-bg; + background-color: @primary-color; + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + text-align: center; +} +.plx-ui-steps-number-passive { + background-color: #D7D7D7; + color: @component-bg; + width: @plx-steps-circle-width; + height: @plx-steps-circle-width; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + text-align: center; +} +.plx-rapire-steps { + position: relative; +} +.plx-ui-steps-number-visited { + width: @plx-steps-circle-width; + height: @plx-steps-circle-width; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + position: relative; + color: @primary-color; + background-color: @body-bg; + border: 2px solid @primary-color; +} +.plx-ui-menuitem-div-passive { + position: absolute; + top:50%; + left:50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.plx-ui-menuitem-div-active { + position: absolute; + top:50%; + left:50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.plx-ui-menuitem-div-passive { + position: absolute; + top:50%; + left:50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-menuitem-div-visited { + position: absolute; + top:50%; + left:50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} + +.plx-ui-underline { + width: 386px; + height: 2px; + margin-top: @plx-steps-height - 1px + 10px; + position: absolute; + background-color: @primary-color; +} + +.passive .plx-ui-underline { + background-color: #D7D7D7; +} + +.plx-ui-steps-title-active { + white-space:nowrap; +} +.plx-ui-steps-title-passive { + white-space:nowrap; +} +.plx-ui-steps-title-visited { + white-space:nowrap; +} +.plx-ui-steps-number-visited-tick { + position: absolute; + background-color: transparent; + height: 12px; + width: 7px; + transform: rotate(45deg); + transform-origin: 50% 120%; + transition: all 0.2s; + border-right: 2px solid @primary-color; + border-bottom: 2px solid @primary-color; +} +/**********************************************************************************************************/ +.plx-ui-steps-display-vertical { + display:inline-block; +} +.plx-ui-steps-vertical { + height: auto; + width: auto; + min-width: 180px; + display:inline-block; + font-size: @font-size; + font-family: @font-family; +} +.plx-ui-horizon-ul-vertical { + display:inline-block; + box-orient:vertical; + width: auto; + padding: 0; +} +.plx-ui-underline-active-vertical { + margin-left:3px; + width: 10px; + display: table-caption; + min-height: 30px; + border-right: 2px solid #D7D7D7; +} +.plx-ui-underline-visited-vertical { + margin-left:3px; + width: 10px; + display: table-caption; + height: 30px; +} +.plx-ui-underline-passive-vertical { + height: 30px; + margin-left:3px; + width: 10px; + display: table-caption; + border-right: 2px solid #D7D7D7; +} +.plx-ui-steps-li-vertical { + list-style: none; + width: auto; +} + +.plx-ui-menuitem-div-active-vertical { + +} +.plx-ui-steps-title-active-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 1px; + white-space:nowrap; +} +.plx-ui-steps-title-visited-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 3px; + white-space:nowrap; +} +.plx-ui-steps-title-passive-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 1px; + white-space:nowrap; +} +.plx-ui-steps-number-visited-tick-vertical { + position: absolute; + background-color: transparent; + height: 12px; + width: 7px; + transform: rotate(45deg); + transform-origin: 50% 120%; + transition: all 0.2s; +} +.plx-ui-steps-number-active-vertical { + width: @plx-steps-circle-width; + height: @plx-steps-circle-width; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + text-align: left; + position: relative; + line-height: @plx-steps-circle-width; +} + +.plx-ui-steps-number-passive-vertical { + width: @plx-steps-circle-width; + height: @plx-steps-circle-width; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + text-align: left; + position: relative; + padding-top: 2px; + line-height: @plx-steps-circle-width; +} + +.plx-ui-steps-number-visited-vertical { + width: @plx-steps-circle-width; + height: @plx-steps-circle-width; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + position: relative; + line-height: @plx-steps-circle-width; +} + +/////// + +.plx-tabset { + display: flex; + padding-left: 0; + margin-bottom: 0; + list-style: none; + + &.plx-nav-tabs { + border-bottom: 1px solid @border-color-base; + font-size: @font-size + 2px; + .plx-nav-item { + margin-bottom: -1px; + } + .plx-nav-link { + display: block; + border-radius: 0; + border: 1px solid transparent; + border-top: 2px solid transparent; + color: @unselected-text-color; + min-width: 100px; + text-align: center; + padding: 6px 16px; + &:hover, &:focus { + text-decoration: none; + background-color: @hover-bg-color; + border-bottom: 0; + border-left: 0; + border-right: 0; + } + &.active { + color: @text-color; + border-top: 2px solid @primary-color; + border-left: 1px solid @border-color-base; + border-right: 1px solid @border-color-base; + background-color: @component-bg; + &:hover, &:focus { + border-left: 1px solid @border-color-base; + border-right: 1px solid @border-color-base; + border-bottom: 1px solid transparent; + } + } + } + &.bottom { + .plx-nav-link { + border: 0; + border-bottom: 2px solid transparent; + &:hover { + border-bottom: 1px solid transparent; + } + &.active { + border: 0; + border-bottom: 2px solid @primary-color; + } + } + } + } + + &.plx-nav-pills { + .plx-nav-link { + border: 1px solid @border-color-base; + border-radius: 0.25em; + color: @unselected-text-color; + display: block; + padding: 6px 10px; + min-width: 100px; + text-align: center; + &:hover, &:focus { + text-decoration: none; + color: @btn-common-color-text-hover; + border-color: @btn-common-color-border-hover; + background-color: @common-color-hover; + } + &:active { + color: @btn-common-color-text-click; + border-color: @btn-common-color-border-click; + background-color: @common-color-click; + } + &.active { + color: @scene-textcolor; + cursor: default; + background-color: @primary-color; + border-color: @primary-color; + } + } + .plx-nav-item { + &:hover, &:focus, &:active { + z-index: 2; + } + &:first-child:not(:last-child) { + .plx-nav-link { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + } + &:not(:first-child):not(:last-child) { + .plx-nav-link { + border-radius: 0; + } + } + &:last-child:not(:first-child) { + .plx-nav-link { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + } + & + .plx-nav-item { + .plx-nav-link { + margin-left: -1px; + } + } + } + } +} + +.plx-tab-content { + .plx-tab-pane { + display: none; + &.active { + display: block; + } + } +} +/////// +/////// + +.plx-table-wrapper{ + position: relative; + width: 100%; +} +.plx-table-blur{ + opacity: .7; + filter: blur(.5px); +} +.plx-table-loading{ + position: absolute; + width: 100%; + height: 100%; + opacity: 1; + + z-index: 9999; +} +.plx-table-loading-content{ + position: absolute; + width: 36px; + height: 36px; + border: 5px solid @primary-color; + border-right-color: transparent; + top: calc(~"50% - 36px"); + left: calc(~"50% - 18px"); + animation: plx-table-loading-animation 1s infinite ease-in-out; + border-radius: 50%; +} +.plx-table-loading-placeholder{ + position: absolute; + top: calc(~"50% + 10px"); + left: calc(~"50% - 18px"); +} +/* 加载中动画 */ +@-moz-keyframes plx-table-loading-animation { + 0% { + -moz-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + @-webkit-keyframes plx-table-loading-animation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + @keyframes plx-table-loading-animation { + 0% { + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + /*表格样式*/ + + .plx-table{ + font-family: @font-family; + font-size: @font-size; + line-height: 1.5; + color: @text-color; + border-collapse: collapse; + width: 100%; + display: table; + table-layout: fixed; + max-width: 100%; + min-width: 100%; + word-break: break-all; + + .plx-table-subHead th{ + background-color: @component-bg; + line-height: 1; + border-bottom: 1px solid @border-color-base; + } + tr.plx-table-hlt { + background-color: #e2f2fc; + } + tr:hover{ + background-color: @hover-bg-color; + } + &.plx-table-normal th{ + box-sizing: border-box; + height: 40px; + padding: 0px 10px ; + color: @text-color; + text-decoration: none; + font-weight: normal; + font-size: @font-size; + border: 1px solid @border-color-base; + background-color: #f5f5f5; + } + &.plx-table-normal td{ + border: 1px solid @border-color-base; + vertical-align: middle; + height: 40px; + padding: 2px 10px 0px 10px; + } + &.plx-table-large th{ + box-sizing: border-box; + height: 50px; + padding: 0px 10px ; + color: @text-color; + text-decoration: none; + font-weight: normal; + font-size: @font-size; + border: none; + background-color: #f5f5f5; + } + &.plx-table-large td{ + border-bottom: 1px solid @border-color-base; + vertical-align: middle; + height: 50px; + padding: 2px 10px 0px 10px; + } + &.plx-table-card th{ + box-sizing: border-box; + height: 64px; + padding: 0px 10px ; + color: @text-color; + text-decoration: none; + font-weight: normal; + font-size: @font-size; + border: none; + background-color: #f5f5f5; + } + &.plx-table-card td{ + border-bottom: 1px solid @border-color-base; + vertical-align: middle; + height: 64px; + padding: 2px 10px 0px 10px; + } + &.plx-table-sm th{ + box-sizing: border-box; + height: 30px; + padding: 0px 10px ; + color: @text-color; + text-decoration: none; + font-weight: normal; + font-size: @font-size; + border: 1px solid @border-color-base; + background-color: #f5f5f5; + } + &.plx-table-sm td{ + border: 1px solid @border-color-base; + vertical-align: middle; + height: 30px; + padding: 2px 10px 0px 10px; + } + + & tbody tr:first-child td{ + border-top: none; + } + + } + + .plx-table-fix{ + table-layout: fixed; + } + + /*防止分页区域高度塌陷*/ +.plx-table-pagnation-content{ + overflow: auto; +} +/*搜索区域*/ +.plx-table-opretions-wrapper:after{ + content: ''; + display: block; + clear: both; + height: 0; + visibility: hidden; + +} + +.plx-table-align-center{ + text-align: center; +} +.plx-table-align-left{ + text-align: left; +} +.plx-table-align-right{ + text-align: right; +} +.plx-table-head-checkbox label{ + margin-bottom: 0px; + vertical-align: top; +} +.plx-table td.plx-table-no-data{ + height: 60px; + text-align:center; + font-size: @font-size; + color: @text-color; +} + +/////// +/////// + +@input-short-width: 120px; +@padding-left: 10px; +@padding: 10px; +@border-width: 1px; +@unit-span-width: 45px; +@unit-option-width: 84px; +@short-unit-span-width: 40px; +@prefix-span-width: 70px; +@prefix-option-width: 84px; +@short-prefix-span-width: 40px; +@password-switch: 40px; + +.font { + font-family: @font-family; + font-size: @font-size; +} + +.text-input { + //height: @input-height; + //position: relative; + //margin-bottom: 0; + display: inline-block; + + .caret-down { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid lighten(@fonticon-color, 5%); + margin-top: 4px; + margin-bottom: 10px; + + &.caret-down-hover:hover, &.caret-down-hover:active { + border-top: 4px solid @primary-color; + } + } + .caret-up { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid lighten(@fonticon-color, 5%); + margin-top: 10px; + + &.caret-up-hover:hover, &.caret-up-hover:active { + border-bottom: 4px solid @primary-color; + } + } + .toggle { + float: right; + margin-right: 10px; + margin-top: 14px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid lighten(@fonticon-color, 5%); + } + .text-input-dataList { + margin-top: 2px; + position: absolute; + z-index: @z-index-dropdown; + border: 1px solid @gray-grade-7; + background: #fff; + cursor: pointer; + border-radius: @radius; + li { + list-style: none; + height: @input-height; + width: @input-width; + padding-left: @padding-left; + &:hover { + background-color: @hover-bg-color; + } + } + } +} + +.input-span { + display: inline-block; + overflow: visible; + padding: 0; + position: relative; +} + +.text-input-with-hint { + margin-bottom: -8px; + :host(.ng-touched.ng-invalid.input-blur) & { + height: auto; + margin-bottom: 0; + } +} + +.plx-text-input-unit-group, .plx-text-input-prefix-group { + position: absolute; + margin-top: @overlay-margin-top; + width: @unit-option-width; + z-index: @z-index-dropdown; + border-radius: @radius; + background: @component-bg; + border: 1px solid @border-color-base; + .shadow; + cursor: pointer; + li { + padding-left: 10px; + height: @input-height; + list-style: none; + line-height: @input-height; + font-size: @font-size; + &:hover { + background-color: @hover-bg-color; + } + &.group-selected, &.group-selected:hover { + background-color: @selected-bg-color; + color: @text-color; + } + } +} + +.text-input-optional { + display: inline-block; + margin-right: 6px; + padding-left:5px; +} + +.input-right-border .plx-input { + border-right: 1px solid @primary-color; +} + +.input-left-border .plx-input { + border-left: 1px solid @primary-color; +} + +.text-input-hint { + top: 42px; + left: 10px; + font-family: @font-family; + font-size: @font-size; + color: @disabled-text-color; + :host(.ng-touched.ng-invalid.input-blur) & { + display: none; + } +} + +.text-input-prefix { + .font; + display: inline-block; + width: @prefix-span-width; + height: @input-height; + text-align: center; + line-height: @input-height; + border-top-left-radius: @radius; + border-bottom-left-radius: @radius; + color: @disabled-text-color; + border: 1px solid @border-color-base; + border-right: 0; + vertical-align: middle; + .short-text-input & { + width: @short-prefix-span-width; + } + .input-span-focus & { + border-color: @primary-color; + } + .input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur &, + .input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur .input-span-focus:focus & { + border-color: @error-color; + } +} + +.input-unit { + .font; + display: inline-block; + height: @input-height; + text-align: center; + line-height: @input-height; + border-top-right-radius: @radius; + border-bottom-right-radius: @radius; +} + +.text-input-unit { + border: 1px solid @border-color-base; + border-left: 0; + .input-unit; + color: @disabled-text-color; + width: @unit-span-width; + text-align: center; + vertical-align: middle; + .short-text-input & { + width: @short-unit-span-width; + } + .input-span-focus & { + border-color: @primary-color; + } +} + +.text-input-prefix-option { + .font; + display: inline-block; + height: @input-height; + text-align: center; + line-height: @input-height; + border-top-left-radius: @radius; + border-bottom-left-radius: @radius; + width: @prefix-option-width; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid @border-color-base;; + border-right: 0; + vertical-align: middle; + &.prefix-focus { + border-color: @primary-color; + } +} + +.text-input-unit-option { + &:extend(.input-unit); + width: @unit-option-width; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid @border-color-base;; + border-left: 0; + vertical-align: middle; + .input-span-focus & { + border-color: @primary-color; + } +} + +.text-input-with-unitOption { + div.unit-focus { + border-color: @primary-color; + } +} + +.plx-input { + .short-text-input & { + width: @input-short-width; + } + + .text-input-with-unit & { + width: @input-width - @unit-span-width; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .text-input-with-unitOption & { + width: @input-width - @unit-option-width; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .text-input-with-prefix & { + width: @input-width - @prefix-span-width; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .text-input-with-prefixOption & { + width: @input-width - @prefix-option-width; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .text-input-with-passwordSwith & { + width: @input-width - @password-switch; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .text-input-with-prefix.text-input-with-unit & { + width: @input-width - @prefix-span-width - @unit-span-width; + } + + .text-input-with-prefix.text-input-with-unitOption & { + width: @input-width - @prefix-span-width - @unit-option-width; + } + + .short-text-input.text-input-with-prefix & { + width: @input-short-width - @short-prefix-span-width; + } + + .short-text-input.text-input-with-unit & { + width: @input-short-width - @short-unit-span-width; + } + + .short-text-input.text-input-with-prefix.text-input-with-unit & { + width: @input-short-width - @short-prefix-span-width - @short-unit-span-width; + } +} + +.input-spinner() { + cursor: pointer; + display: block; + font-size: 12px; + position: absolute; + margin: 0; + right: 0; + overflow: hidden; + border: none; + padding: 0; + text-align: center; + vertical-align: middle; + width: 18px; +} + +.input-spinner-up { + .input-spinner(); + top: 0; +} + +.input-spinner-down { + .input-spinner(); + bottom: 0; +} + +:host(.plx-input-sm) { + .plx-input-sm-common; +} + +.plx-input-sm { + .plx-input-sm-common; +} + +.plx-input-sm-common { + .plx-input { + height: @input-height-sm; + line-height: @input-height-sm; + } + .text-input-prefix, + .text-input-unit, + .text-input-unit-option, + .text-input-prefix-option { + height: @input-height-sm; + line-height: @input-height-sm; + } + div.text-input-dataList { + height: @input-height-sm; + } + .toggle { + margin-top: 11px; + } + .caret-down { + margin-bottom: 8px; + } + .caret-up { + margin-top: 8px; + } + .plx-input-passwordSwitch { + line-height: @input-height-sm - 2px; + } +} + +.plx-input-passwordSwitch { + display: inline-block; + line-height: @input-height - 2px; + width: @password-switch; + text-align: center; + vertical-align: middle; + background-color: @common-color; + border: 1px solid @border-color-base; + border-left: 0; + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; + cursor: pointer; + &:focus, + &:hover { + border-color: @btn-common-color-border-hover; + background-color: @common-color-hover; + &.ict-eye-closed, &.ict-eye { + color: @btn-common-color-text-hover; + } + } + &:active { + background-color: @common-color-click; + border-color: @btn-common-color-border-click; + &.ict-eye-closed, &.ict-eye { + color: @btn-common-color-text-click; + } + } + &.ict-eye-closed, &.ict-eye { + color: @fonticon-color; + font-size: 16px; + } + } +.input-right-border-pwdswith-hover .plx-input { + border-right-color: @btn-common-color-border-hover; +} +.input-right-border-pwdswith-click .plx-input { + border-right-color: @btn-common-color-border-click; +} + +.plx-text-input-ip-dot { + display: inline-block; + vertical-align: bottom; + color: #999; +} + +.plx-text-input-error { + font-size: 12px; + color: @error-color; + margin-top: 5px; +} + +:host(.plx-text-input-ip-invalid) { + .plx-text-input-ip-invalid-common; +} + +.plx-text-input-ip-invalid { + .plx-text-input-ip-invalid-common; +} + +.plx-text-input-ip-invalid-common { + .plx-input { + border-color: @error-color; + } + .input-span-focus .plx-input { + border-color: @primary-color; + } +} + +/////// + +.plx-textarea-container { + display: inline-block; + } + +.plx-textarea-class { +// height: 90px; + width: 100%; + font-size: @font-size; + font-family: @font-family; + line-height: 1.5; + resize: none; + padding: 7px; + border: 1px solid @border-color-base; + border-radius: @border-radius-base; + box-shadow: none; + outline: none; + overflow-y: auto; + &:focus { + border-color: @primary-color; + } + &::-webkit-input-placeholder { + text-shadow: none; + -webkit-text-fill-color: initial; + } +} + +.plx-align-tip { + vertical-align: top; + font-size: @font-size; + font-weight: normal; + color: @disabled-text-color; +} + +.plx-align-number { + font-size: @font-size; + font-weight: normal; + line-height: 1; + text-align: right; + width: 100%; + color: @disabled-text-color; + .plx-align-number-margin-top(@font-size); +} + +.plx-align-number-margin-top(14px) { + margin-top: -3px; +} + +.plx-align-number-margin-top(12px) { + margin-top: -2px; +} + +/////// + +@toggle-width: 44px; +@toggle-height: 22px; +@toggle-circle-size: 18px; + +@toggle-sm-width: 34px; +@toggle-sm-height: 18px; +@toggle-sm-circle-size: 14px; +.plx-toggle-switch { + display: inline-block; + height: @toggle-height; + width: @toggle-width; + position: relative; + vertical-align: middle; + text-align: left; + font-size: 0; + input[type='checkbox'] { + display: none; + -webkit-appearance: none; + -moz-appearance: none; + -ms-progress-appearance: none; + } + input[type='checkbox'] + label { + display: inline-block; + height: @toggle-height; + position: relative; + cursor: pointer; + &::before { + position: absolute; + display: inline-block; + content: ''; + height: @toggle-height; + width: @toggle-width; + border-radius: @toggle-height/2; + transition: 0.15s ease-in; + transition-property: background-color; + background-color: #DDDDDD; + } + &::after { + position: absolute; + display: inline-block; + content: ''; + height: @toggle-circle-size; + width: @toggle-circle-size; + border-radius: 50%; + top: 2px; + left: 2px; + transition: left 0.15s ease-in; + background-color: @component-bg; + } + } + input[type='checkbox']:checked + label { + &::before { + background-color: @primary-color; + transition: background-color 0.15s ease-in; + transition: background-color 0.15s ease-in; + } + &::after { + left: @toggle-width - @toggle-circle-size - 2px; + transition: left 0.15s ease-in; + } + } + input[type='checkbox']:disabled + label, + input[type='checkbox']:checked:disabled + label { + cursor: not-allowed; + &::before { + opacity: 0.5; + } + } +} + +:host(.plx-toggle-sm) .plx-toggle-switch { + .plx-toggle-sm-switch-common; +} + +.plx-toggle-sm .plx-toggle-switch { + .plx-toggle-sm-switch-common; +} + +.plx-toggle-sm-switch-common { + height: @toggle-sm-height; + width: @toggle-sm-width; + input[type='checkbox'] + label { + height: @toggle-sm-height; + &::before { + height: @toggle-sm-height; + width: @toggle-sm-width; + border-radius: @toggle-sm-height/2; + } + &::after { + height: @toggle-sm-circle-size; + width: @toggle-sm-circle-size; + } + } + input[type='checkbox']:checked + label { + &::after { + left: @toggle-sm-width - @toggle-sm-circle-size - 2px; + transition: left 0.15s ease-in; + } + } +} + +/////// +.toolbar { + + i.seperate-vertical { + margin-right: 10px; + margin-left: 0; + border-right: 1px solid @border-color-split; + } + + span { + color: @text-color; + cursor: pointer; + margin-right: 10px; + font-size: 16px; + display: inline-block; + width: 28px; + height: 28px; + border: 1px solid transparent; + padding: 5px; + + &:hover { + background-color: @hover-bg-color; + border-radius: @radius-sm; + } + + &:last-child { + margin-right: 0px; + } + } +} + +/////// + +@tooltip-arrow-border-width: 4px; +@tooltip-arrow-border-width-before: 5px; +@tooltip-arrow-border-height: @tooltip-arrow-border-width-before - @tooltip-arrow-border-width; +@tooltip-arrow-away: 5px; +@tooltip-arrow-background-color: #595959; +@tooltip-arrow-border-color: #595959; +@tooltip-away-host: 3px; + +.plx-tooltip { + font-family: @font-family; + font-size: @font-size; + opacity: 1; + position: absolute; + z-index: 10001; + display: block; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: break-word; + &::before, + &::after { + content: ""; + position: absolute; + display: block; + width: 0; + height: 0; + border: solid transparent; + } + &::before { + border-width: @tooltip-arrow-border-width-before; + } + &::after { + border-width: @tooltip-arrow-border-width; + } +} + +.plx-tooltip-inner { + min-width: 60px; + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; +} + +.plx-tooltip.show { + font-size: @font-size; + opacity: 1; +} +.plx-tooltip.show .plx-tooltip-inner { + background-color: #595959; + border-radius: @radius; + padding: 0px 12px; + height: 30px; + line-height: 30px; +} + +.plx-tooltip-top-common { + margin-top: -(@tooltip-arrow-border-width + @tooltip-away-host); + &::before { + border-top-color: @tooltip-arrow-border-color; + border-bottom-width: 0; + bottom: -@tooltip-arrow-border-width-before; + } + &::after { + border-top-color: @tooltip-arrow-background-color; + border-bottom-width: 0; + bottom: -@tooltip-arrow-border-width; + } +} +.plx-tooltip-top { + .plx-tooltip-top-common; + &::before { + left: 50%; + margin-left: -@tooltip-arrow-border-width-before; + } + &::after { + left: 50%; + margin-left: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-top-left { + .plx-tooltip-top-common; + &::before { + left: @tooltip-arrow-away; + } + &::after { + left: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-top-right { + .plx-tooltip-top-common; + &::before { + right: @tooltip-arrow-away; + } + &::after { + right: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} + +.plx-tooltip-right-common { + margin-left: @tooltip-arrow-border-width + @tooltip-away-host; + &::before { + border-right-color: @tooltip-arrow-border-color; + border-left-width: 0; + left: -@tooltip-arrow-border-width-before; + } + &::after { + border-right-color: @tooltip-arrow-background-color; + border-left-width: 0; + left: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-right { + .plx-tooltip-right-common; + &::before { + top: 50%; + margin-top: -@tooltip-arrow-border-width-before; + } + &::after { + top: 50%; + margin-top: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-right-top { + .plx-tooltip-right-common; + &::before { + top: @tooltip-arrow-away; + } + &::after { + top: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-right-bottom { + .plx-tooltip-right-common; + &::before { + bottom: @tooltip-arrow-away; + } + &::after { + bottom: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} + +.plx-tooltip-bottom-common { + margin-top: @tooltip-arrow-border-width + @tooltip-away-host; + &::before { + border-bottom-color: @tooltip-arrow-border-color; + border-top-width: 0; + top: -@tooltip-arrow-border-width-before; + } + &::after { + border-bottom-color: @tooltip-arrow-background-color; + border-top-width: 0; + top: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-bottom { + .plx-tooltip-bottom-common; + &::before { + left: 50%; + margin-left: -@tooltip-arrow-border-width-before; + } + &::after { + left: 50%; + margin-left: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-bottom-left { + .plx-tooltip-bottom-common; + &::before { + left: @tooltip-arrow-away; + } + &::after { + left: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-bottom-right { + .plx-tooltip-bottom-common; + &::before { + right: @tooltip-arrow-away; + } + &::after { + right: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} + +.plx-tooltip-left-common { + margin-left: -(@tooltip-arrow-border-width + @tooltip-away-host); + &::before { + border-left-color: @tooltip-arrow-border-color; + border-right-width: 0; + right: -@tooltip-arrow-border-width-before; + } + &::after { + border-left-color: @tooltip-arrow-background-color; + border-right-width: 0; + right: -@tooltip-arrow-border-width; + } +} + +.plx-tooltip.plx-tooltip-left { + .plx-tooltip-left-common; + &::before { + top: 50%; + margin-top: -@tooltip-arrow-border-width-before; + } + &::after { + top: 50%; + margin-top: -@tooltip-arrow-border-width; + } +} + +.plx-tooltip.plx-tooltip-left-top { + .plx-tooltip-left-common; + &::before { + top: @tooltip-arrow-away; + } + &::after { + top: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-left-bottom { + .plx-tooltip-left-common; + &::before { + bottom: @tooltip-arrow-away; + } + &::after { + bottom: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +@checkbox-border-size: 1px; + +.plx-checkbox-container { + font-size: 0; + position: relative; +} + +.plx-checkbox { + position: absolute; + z-index: -1; + opacity: 0; + & + .checkbox-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: @checkbox-size; + width: @checkbox-size; + border: @checkbox-border-size solid @border-color-base; + border-radius: @radius-sm; + vertical-align: middle; + } + & + .checkbox-substitute + span { + font-weight: normal; + font-size: @font-size; + cursor: pointer; + vertical-align: middle; + .font-padding(@font-size); + } + &:hover + .checkbox-substitute { + border-color: @primary-color; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; + } + &:checked + .checkbox-substitute { + border-color: @primary-color; + background-color: @primary-color; + &::after { + .checkbox-check(@component-bg); + } + } + &:checked.portion + .checkbox-substitute { + background-color: @primary-color; + border-color: @primary-color; + opacity: 0.5; + } + &:disabled + .checkbox-substitute, + &[disabled] + .checkbox-substitute { + border-color: @border-color-base; + background-color: @input-bg-color-disabled; + cursor: not-allowed; + } + &:disabled + .checkbox-substitute + span, + &[disabled] + .checkbox-substitute + span { + cursor: not-allowed; + } + &:checked.portion[disabled] + .checkbox-substitute { + background-color: @border-color-base; + border-color: @border-color-base; + &::after { + .checkbox-check(@fonticon-color); + } + } + &:checked[disabled] + .checkbox-substitute { + border-color: @border-color-base; + background-color: @border-color-base; + } +} + +.checkbox-check(@color) { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid @color; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + .checkbox-check-left(@font-size); + top: 0; +} + +.checkbox-check-left(12px) { + left: 3px; +} + +.checkbox-check-left(14px) { + left: 4px; +} + +.font-padding(12px) { + padding-left: 6px; +} + +.font-padding(14px) { + padding-left: 10px; +} + +/////// +/////// + +@tree-node-ul-padding: 21px; +@margin-right: 10px; + +.plx-treenode{ + cursor: pointer; + background-attachment: scroll; + background-color: transparent; + background-image: none; + background-position: 0 0; + background-repeat: repeat-y; + list-style: none outside none; + margin: 0; + padding:0; + white-space: nowrap; + font-size: @font-size; + + .plx-treenode-content{ + margin-top:10px; + + &.light{ + margin-top:15px; + } + } +} + +.plx-treenode ul.plx-treenode-children { + display: block; + -webkit-padding-start: @tree-node-ul-padding; +} + +.plx-treenode-toggler{ + font-size: 16px; + color: @primary-color; + display: inline-block; + margin-right: 7px; + margin-top:2px; + vertical-align: bottom; + float: left; +} + +// .plx-treenode-toggler{ +// display: inline-block; +// margin-right: @margin-right; +// vertical-align: bottom; +// } + +// .plx-treenode-toggler svg { +// .plx-treenode-vertical-bottom(@font-size); +// } + +// .plx-treenode-toggler svg .st0 { +// fill: @primary-color; +// } + +// .plx-treenode-toggler svg .st1 { +// stroke: @primary-color; +// } + +.plx-treenode-ckbox{ + float: left; + margin-right: @margin-right; + margin-top:2px; + // .plx-treenode-vertical-bottom(@font-size); + +} + +.plx-treenode-vertical-bottom(@font-size) when (@font-size = 12px) { + vertical-align: bottom; + margin-bottom: 3px; +} + +.plx-treenode-vertical-bottom(@font-size) when (@font-size = 14px) { + vertical-align: bottom; + margin-bottom: 4px; +} + +.plx-treenode-icon{ + color:@fonticon-color; + margin-right: @margin-right; + float: left; + font-size: 16px; + vertical-align: bottom; + // .plx-treenode-icon-margin-bottom(@font-size); + margin-top: 2px; +} + +.plx-treenode-icon-margin-bottom(@font-size) when (@font-size = 12px) { + margin-bottom: 1px; +} + +.plx-treenode-icon-margin-bottom(@font-size) when (@font-size = 14px) { + margin-bottom: 2px; +} + +.plx-treenode-label-container{ + overflow: visible; +} + +.plx-treenode-label-container.plx-treenode-label-ellipsis{ + overflow:hidden; +} + +.plx-treenode-label-container:hover { + background-color: @hover-bg-color; +} + +.plx-treenode-active>div .plx-treenode-label-container { + background-color: darken(@hover-bg-color, 2%); +} + +.plx-treenode-active>div .plx-treenode-label-container:hover { + background-color: @hover-bg-color; +} + +.plx-treenode-label-container span:last-child{ + margin-right:5px; +} + + +.plx-treenode-lable{ + display: inline-block; + vertical-align:0; + font-family: @font-family; + color:@text-color; + + span { + display: inline-block; + overflow: hidden; + max-width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: bottom; + } +} + +.plx-treenode-operations{ + margin-left: 20px; + display: none; + vertical-align: bottom; + width: fit-content; + line-height: 1; + .plx-treenode-operations-margin-bottom(@font-size); +} + + +.plx-treenode-operations-margin-bottom(@font-size) when (@font-size = 12px) { + margin-bottom: 1px; +} + +.plx-treenode-operations-margin-bottom(@font-size) when (@font-size = 14px) { + margin-bottom: 2px; +} + +.plx-treenode-operation{ + display: inline-block; + margin-right: 10px; + color:@fonticon-color; + font-size: 16px; + vertical-align: text-bottom; + + &:hover{ + color: @primary-color; + } +} + +.plx-treenode-label-container:hover .plx-treenode-operations{ + display:inline-block; +} + +*:focus{ + outline:none; + box-shadow:none !important; +} +input[type="checkbox"]:focus{ + border:0 !important; +} +.plx-treenode-hide-tree-toggle{ + visibility: hidden; +} + +.plx-treenode-droppoint{ + height: 4px; + list-style-type: none; +} +.plx-treenode-droppoint-active{ + background-color: #186ba0; + border: 0 none; +} + + +/////// + +@item-padding-left: 12px; + +.upload-wrapper { + font-size: @font-size; + position: relative; + display: inline-block; +} + +.upload-wrapper .item-text { + max-width: 280px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + margin-bottom: 2px; + font-size: @font-size; + &.no-progressbar { + vertical-align: middle; + } +} + +.upload-wrapper .plx-upload-progressbar { + margin-top: -13px; +} + +.upload-wrapper .list-group-item { + border: 0; + padding: 0; + & .item { + width: 335px; + padding: 0 0 5px 0px; + & .item-text-wrapper { + position: relative; + display: inline-block; + width: 100%; + box-sizing: border-box; + height: 40px; + padding: 2px 3px 2px 10px; + border: 1px solid transparent; + & .text-red { + color: @error-color !important; + } + &:hover { + background-color: @hover-bg-color; + cursor: default; + } + &:hover .plx-ico-close-16{ + display: block; + transform: scale(0.8); + } + &.no-progressbar { + height: 28px; + } + } + & .item-delete { + height: 14px; + width: 16px; + text-align: center; + line-height: 14px; + position: absolute; + right: 2%; + color: #999999; + display: none; + top: 3px; + &:hover { + cursor: pointer; + color: darken(#999999, 20%); + } + &.no-progressbar { + top: 6px; + } + } + } +} + +.upload-wrapper .plx-ico-close-16 { + font-size: 16px; + float: right; + cursor: pointer; +} + +.upload-wrapper ul.list-group { + margin-top: 15px; +} + +.upload-wrapper .url-form-control { + display: inline-block; +} + +.upload-wrapper .item-detail { + color: #aaa; + position: relative; + padding: 0 10px; + font-size: 12px; + & div { + margin: 0px 0px 15px 0; + } + & .detail { + margin: 5px 0 10px 0; + } +} + +.upload-wrapper .item-detail-des { + display: inline-block; + width: 170px; + word-wrap: break-word; + margin-left: 15px; + vertical-align: top; +} + +.upload-wrapper .item-detail-time { + display: inline-block; + width: 119px; + word-break: break-all; + vertical-align: top; +} + +.upload-wrapper .selectFile { + display: inline-block; + min-width: 50px; + margin-right: 10px; + text-align: right; +} + +.upload-wrapper label.raw-container{ + margin: 0 10px; +} + +.upload-wrapper .item-lists{ + font-size: @font-size; +} + +.upload-wrapper .list-container { + padding-right: 15px; + + &.plx-upload-Manual-showdetail { + margin-left: -10px - @item-padding-left; + } + + &.plx-upload-auto-showdetail { + margin-left: -10px; + } +} + +.upload-wrapper .list-footer .upload-btn { + margin-top: 10px; +} + +.upload-wrapper .upload-btn { + display: inline-block; +} + +.upload-wrapper .loader-container { + position: absolute; + display: inline-block; + top: 8px; + left: 12px; +} + +.upload-wrapper .list-group-item-pdleft-s{ + padding: 0px 0px 0px @item-padding-left; +} + +.upload-wrapper .list-group-item-pdleft { + padding: 0px 0px 0px @item-padding-left !important; +} + +.upload-wrapper .upload-btn-wrapper { + display: inline-block; +} +.upload-wrapper .plx-red.left { + margin-left: 75px; +} + +.upload-wrapper .expand-wrapper { + position: absolute; + left: 20px; + top: 4px; + display: inline-block; + font-size: @font-size; + &.open .ict-go { + display: none + } + &.open .ict-fold { + display: block; + } + & i { + height: 18px; + width: 20px; + text-align: left; + line-height: 19px; + cursor: pointer; + } +} + +.upload-wrapper .ict-fold { + display: none; + color: @primary-color; + font-weight: bold; + transform: scale(0.7); +} + +.upload-wrapper .ict-go { + display: block; + color: @primary-color; + font-weight: bold; + transform: scale(0.7); +} + +.upload-wrapper .no-customparm-extend-wrapper { + left: -2px !important; +} + +/* loding动画效果*/ +.upload-wrapper .loader { + font-size: @font-size; + width: @font-size; + height: @font-size; + display: inline-block; + border-radius: 50%; + background: @primary-color; + background: -moz-linear-gradient(left, @primary-color 10%, rgba(255, 255, 255, 0) 85%); + background: -webkit-linear-gradient(left, @primary-color 10%, rgba(255, 255, 255, 0) 85%); + background: -o-linear-gradient(left, @primary-color 10%, rgba(255, 255, 255, 0) 85%); + background: -ms-linear-gradient(left, @primary-color 10%, rgba(255, 255, 255, 0) 85%); + background: linear-gradient(to right, @primary-color 10%, rgba(255, 255, 255, 0) 85%); + position: relative; + -webkit-animation: load3 1.4s infinite linear; + animation: load3 1.4s infinite linear; + &:before { + width: 50%; + height: 50%; + background: @primary-color; + border-radius: 100% 0 0 0; + position: absolute; + top: 0; + left: 0; + content: ''; + } + &:after { + background: @component-bg; + width: 75%; + height: 75%; + border-radius: 50%; + content: ''; + margin: auto; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + } +} + +@-webkit-keyframes load3 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes load3 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +/////// +.plx-table-customCols{ + height: 40px; + float: right; +} + +.plx-table-customCols-toggle{ + display:inline-block; + border-radius: @radius; + width: 30px; + height: 23px; + border:1px solid @border-color-base; + vertical-align:top; + text-align: center; + padding-top: 7px; + margin-left:6px; + cursor:pointer; + box-sizing: content-box; + .ict-col:before{ + vertical-align: top; + } +} +.plx-table-customCols-toggle:hover{ + background-color:@common-color-hover; +} +.plx-table-customCols-toggle:active{ + background-color:@common-color-click; +} +.toggle-icon{ + display:inline-block; + height: 14px; + border-right:1px solid @text-color; + vertical-align:top; + padding-left: 4px; +} +.toggle-icon:first-child{ + padding-left: 0; +} +.plx-table-customCols-pannel{ + margin-top: 5px; + margin-right: 5px; + border:1px solid @border-color-base; + background-color: @component-bg; + z-index: 1010; + position: absolute; + right:0px; + border-radius: 5px; + font-size: @font-size; + color: @text-color; + overflow: auto; + min-width: 300px; + .shadow; + + .plx-table-customCols-toolbar{ + display: flex; + justify-content:space-between; + padding: 16px; + .plx-table-customCols-toolbar-ckbox{ + + } + .plx-table-filter-wrapper{ + display: flex; + flex:auto; + input{ + border-radius: @radius; + flex: auto; + padding-left: 28px; + border: 1px solid @border-color-base; + &:focus{ + border: 1px solid @primary-color; + outline:none; + } + } + span{ + color: @disabled-text-color ; + line-height: 28px; + position: relative; + left: 20px; + } + } + } + .plx-table-customCols-items { + & > div:hover{ + .shadow; + } + cursor: pointer; + border-bottom: 1px solid @border-color-split; + border-top:1px solid @border-color-split ; + label{ + margin-bottom: 0px; + vertical-align: -moz-middle-with-baseline; + vertical-align: -webkit-baseline-middle; + vertical-align: 25%; + } + .plx-table-customCols-item { + & > span{ + padding: 0px 6px; + } + } + .plx-table-customCols-operations{ + + div { + box-sizing: content-box; + + padding: 0px 8px; + display: inline-block; + } + visibility: hidden; + float: right; + } + .heighLight{ + background-color: #e2f2fc; + .plx-table-customCols-operations{ + .plx-table-goup-show{ + visibility: visible; + } + .plx-table-godown-show{ + visibility: visible; + } + span{ + color: @primary-color; + } + } + + } + .dragging{ + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); + } + .dragEnter { + background-color: #00abff; + } + + .plx-table-customCols-dropArea { + height: 10px; + border-bottom: 1px solid @border-color-split; + + } + .plx-table-customCols-dropArea-before { + height: 10px; + border-bottom: none; + + } + &>div:last-child .plx-table-customCols-dropArea { + border-bottom: none; + } + .plx-table-customCols-item{ + line-height: 20px; + height: 20px; + padding: 0px 16px; + + } + + } + .plx-table-customCols-confirm{ + display: flex; + align-items: center; + justify-content: center; + padding: 16px 16px; + } + + +} + +/////// +.plx-table-col-filter{ + border: 1px solid @border-color-base; + margin:5px; + box-sizing: border-box; + height: 30px; + & input{ + width: calc(~"100% - 25px"); + line-height: normal; + font-weight: normal; + border: none; + height:26px; + font-size: @font-size; + box-sizing: border-box; + &:focus{ + outline:none; + } + } + & .filterIcon{ + /*position: absolute;*/ + top: 6px; + left: 3px; + fill: #dedede; + width: 14px; + } +} + +.plx-filter-focused{ + outline:none; + border:1px solid @primary-color; + +} +.plx-table-col-icon-wrapper{ + padding-left: 5px; + display: inline-block; + line-height: 30px; + span{ + vertical-align: sub; + } + +} + +::-webkit-input-placeholder { /* WebKit browsers */ + color: #c1c1c1; +} +:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: #c1c1c1; +} +::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: #c1c1c1; +} +:-ms-input-placeholder { /* Internet Explorer 10+ */ + color: #c1c1c1; +} + +/////// + +.plx-table-selectFilter-wrapper{ + display: inline-block; + vertical-align: middle; + height: 28px; + cursor: pointer; + /*此处 若不为absolute则被td遮挡*/ + position: absolute; +} +.plx-table-selectFilter-icon{ + vertical-align: middle; + height: 28px; + fill: @fonticon-color; +} +.icon-selectFilter-activtied{ + fill:@primary-color; +} + +.plx-table-selectFilter-panel{ + margin-top: -5px; + border: 1px solid @border-color-base; + background-color: #fff; + padding: 10px; + right: 0px; + border-radius: 5px; + /*此处若为absolute则文本要换行,恩,玄学*/ + //position: absolute; + .shadow; + span{ + vertical-align: -25%; + font-size: @font-size; + } + label{ + + line-height: normal; + } + div{ + line-height: normal; + } + +} + + + + +/////// + +.plx-table-filter{ + height: 40px; + float: right; + & input{ + border-radius:@radius ; + line-height: normal; + padding: 0px 6px; + font-weight: normal; + border: 1px solid @border-color-base; + margin-bottom: 10px; + height: 32px; + width: 200px; + box-sizing: border-box; + font-size: @font-size; + color: @text-color; + &:focus{ + outline:none; + border:1px solid @primary-color ; + + } + } +} + + +.plx-table-filterToggle{ + display:inline-block; + width:30px; + height:30px; + border-radius: @radius; + border:1px solid @border-color-base; + vertical-align:top; + text-align: center; + margin-left:6px; + cursor:pointer; + box-sizing: content-box; + &.ict-filter:before{ + line-height: 30px; + + } + &.ict-filter-f:before{ + line-height: 30px; + color:@primary-color; + } + +} +.plx-table-filter-icon-wrapper{ + vertical-align: middle; + display: inline-block; + padding-top: 5px; +} + +.plx-table-filterIcon{ + fill: @text-color; +} + +/////// +.plx-table-pagination{ + float: right; + font-family: @font-family ; + font-size: @font-size; + color:@text-color; + margin-top:10px; + margin-bottom:10px; +} +.plx-table-pagination-content{ + display: inline-block; + text-decoration:none; +} +.plx-table-pagination-item{ + list-style-type: none; + display: inline-block; + & span{ + vertical-align: middle; + } + & select{ + vertical-align: middle; + height: 26px; + width: 45px; + border: 1px solid @border-color-base; + } +} + +.plx-table-pagination-input{ + padding: 1px; + height: 26px; + width: 45px; + margin-left:1px; + margin-right:1px; + font-size: 12px; + color: @text-color; + box-sizing:border-box; + border: 1px solid @border-color-base; + text-align: center; + vertical-align: middle; +} +.plx-table-pagination-nav{ + display: inline-block; + height: 26px; + border: 1px solid @border-color-base; + font-size:14px; + text-decoration:none; + color:@text-color; + padding-left:6px; + padding-right:6px; + cursor: pointer; + text-align: center; + vertical-align: middle; + box-sizing:border-box; +} +a:not([href]):not([tabindex]).plx-table-pagination-disabled{ + + color: @disabled-text-color; + cursor: not-allowed; + +} + +/////// +.plx-table-dropdown-wrapper { + cursor: pointer; +} +.plx-table-dropdown-icon-shared{ + font-size:20px; + line-height: 2.2 !important; + cursor:pointer; +} +.plx-table-dropdown-icon-polyline-shared{ + height:16px; + width:16px; + stroke: #00abff ; +} +.ict-down,.ict-up{ + .plx-table-dropdown-icon-shared; + & polyline{ + .plx-table-dropdown-icon-polyline-shared; + &:hover{ + stroke: #2d91c4; + } + } +} + +.plx-table-innerTr{ + border: 1px solid @border-color-base; + & #plx-table-innerTd { + padding: 0px; + } +} + +.plx-table-innerTable{ + width:100%; + & tr{ + color:@text-color; + font-size:@font-size; + & td#plx-inner-table-title,td#plx-inner-table-content{ + padding: 8px; + height: 40px; + border: none; + border-bottom: 1px solid @border-color-base; + } + & td:first-child{ + text-align: right; + } + & td:last-child{ + text-align: left; + } + } + & tr:last-child { + & td#plx-inner-table-title,td#plx-inner-table-content { + border-bottom: none; + } + } +} + +/////// + /* 排序图标 */ + .plx-table-sort-icon-shared{ + display: block; + cursor: pointer; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + margin-bottom: 2px; + } + .plx-table-sortIconWrapper{ + display:inline-block; + vertical-align:middle; + margin-left:3px; + } + /* 排序图标:箭头向上 */ + .plx-table-sortAsc{ + .plx-table-sort-icon-shared; + border-bottom: 5px solid @fonticon-color; + + + } + .plx-table-ascActived{ + border-bottom: 5px solid @primary-color; + } + /* 排序图标:箭头向下 */ + .plx-table-sortDesc{ + .plx-table-sort-icon-shared; + border-top: 5px solid @fonticon-color; + } + .plx-table-descActived{ + border-top: 5px solid @primary-color; + } +/////// + +@plx-color-picker-width: 246px; +@plx-color-picker-height: 118px; +@plx-color-picker-hue-height: 10px; +@plx-color-picker-hue-width: 168px; +@selected-color-diameter: 30px; +@plx-color-picker-input-width: 196px; +@plx-color-picker-type-policy-width: 16px; +@plx-color-picker-type-policy-height: 16px; +@plx-color-picker-box-padding-left-right: 16px; +@plx-color-picker-arrow-width: 8px; //模式切换箭头 +@plx-color-picker-arrow-height: 4px; //模式切换箭头 +@plx-color-picker-arrow-space: 4px; //模式切换箭头 +@plx-color-picker-border-arrow-width: 7px; //选择器边框箭头 +@plx-color-picker-border-arrow-height: 7px; //选择器边框箭头 +@plx-color-picker-hsla-unit-margin-left: 2px; +@plx-color-picker-hsla-unit-margin-right: 8px; +@plx-color-picker-hsla-unit-degree-width: 6px; +@plx-color-picker-hsla-unit-percent-width: 12px; + +.plx-color-picker-border-radius { + border-top-left-radius: @radius; + border-top-right-radius: @radius; +} + +.plx-color-picker * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + font-size: 12px; + font-family: @font-family; +} + +.plx-color-picker { + cursor: default; + width: @plx-color-picker-width; + height: auto; + left: 30px; + top: 250px; + position: absolute; + z-index: 1000; + background-color: #fff; + .shadow; + border-radius: @radius; + border: 1px solid @border-color-base; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + i { + cursor: default; + position: relative; + } + input { + .plx-input; + text-align: center; + height: 24px; + -moz-appearance: textfield; + &:invalid { + box-shadow: none; + } + &:-moz-submit-invalid { + box-shadow: none; + } + &:-moz-ui-invalid { + box-shadow: none; + } + &::-webkit-outer-spin-button, + &::-webkit-outer-spin-button { + -webkit-appearance: textfield; + margin: 0; + } + } + .color-picker-overlay1 { + .plx-color-picker-border-radius; + position: absolute; + left: 0; + top: 0; + width: @plx-color-picker-width - 2px; + height: @plx-color-picker-height; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')"; /* IE8 */ + background: -moz-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 1)), color-stop(100%, rgba(255, 255, 255, 0))); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(left, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); /* IE10+ */ + background: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff'); /* IE6 & IE7 */ + } + .color-picker-overlay2 { + .plx-color-picker-border-radius; + position: absolute; + left: 0; + top: 0; + width: @plx-color-picker-width - 2px; + height: @plx-color-picker-height; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')"; /* IE8 */ + background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, rgba(0, 0, 0, 1))); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%); /* IE10+ */ + background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 1) 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#000000', GradientType=0); /* IE6-9 */ + } + .color-picker-saturation-lightness { + .plx-color-picker-border-radius; + cursor: pointer; + width: @plx-color-picker-width - 2px; + height: @plx-color-picker-height; + border: none; + background-size: 100% 100%; + } + .color-picker-hue { + cursor: pointer; + border-radius: 3px; + width: @plx-color-picker-hue-width; + height: @plx-color-picker-hue-height; + border: none; + margin-bottom: 10px; + background-size: 100% 100%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwkUFWbCCAAAAFxJREFUaN7t0kEKg0AQAME2x83/n2qu5qCgD1iDhCoYdpnbQC9bbY1qVO/jvc6k3ad91s7/7F1/csgPrujuQ17BDYSFsBAWwgJhISyEBcJCWAgLhIWwEBYIi2f7Ar/1TCgFH2X9AAAAAElFTkSuQmCC'); + } + .color-picker-alpha { + cursor: pointer; + border-radius: 3px; + width: @plx-color-picker-hue-width; + height: @plx-color-picker-hue-height; + border: none; + background-size: 100% 100%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAKCAYAAAAgnxVRAAAC9klEQVRYhdVYPc7bMAylku7WViCrfJ2cocfoGXqLHslbDhAvHjNkCBBRHSoZzwQpKW7T7yuBwAn9+CtKIuOu1+vXy+UyPx6PL5QphEDee0KKMdI0TRveP8KlaZoSEZUPhxCS9z4RERd+jJEzbuWFEKL3nlEWcDHzYgiBQR//Nht5miZGXrbLWbaGY+99RBuAK3zOuGfBZP+iwJU4ItgtuAiyaJdBH2fc6iPoY9CH/jH4xyKOJHAJcEnRlwxcWY8k1o3KepxOp3Rg5h9YnJ+UkvjtxNPCO8Ak4MunxevxRXun6UVCn1ynXyhb5Mp7Tc4Z3y0e6pG2tXw7quuQWI0v/ZGx0cEAfzaygtUWBAPVClXqRblaErX3cgPU/C4Y/Gi+1+TRTllI/FjUKvjy1OxLf60NodmUG9GSQRuY5/+mQAtpye0pEKvwrELRsGhPW/CWrNwsTnnXc8rgUxaPptOi3huj6NVyJ3NR2yS9mI0/rxRoTyDvJmvhe65U7QrT9LRO0pYti2oLYxW9/F07/WqbbY9Pmm/ajSR9kLH0knoLuPv9/vN2u31D5rIsNM/zBjgMA43jSB+AS+M4rk11xvE8z8hLwzDwOI6bpnxZljTPc+FFIuKsrwwHiYhixm2GhoxDnoaLYHflZ/82w9QwDNHAbYaajJN2o6KPM24dksDuE+KIEC8DbiML8a65UnCc7SbwJYHdNf+AY4FLAifXt6xbOp/Pae8V/xGnKfYxrUZbXu2J7GtK6rbIuuIsn1q9Xk9faMnW9PTEIm1ofTgZPDwpe6/r3TfR3gLtScDfplrPRuKdFryVBOu6avmh9b6vDCqtReuRlba1KdvqS63caTwrLq2t0NqTVs9u0juGpHecrr2TYyFtuu0pnt7pVPtuye8d3jQ8vu8psNqJ+sohgydmq0+3NkmtMM1/Eg7Oue/H4/H5grMtqk3Vf6Lz1SRbxWPh5ADQc5q0pm38bk3emtyeHMoC0ApCa3/2tAOtjSWLWDv1rc204f8CQvGUIhalBqwAAAAASUVORK5CYII='); + } + .color-picker-alpha-ba { + position: absolute; + background: linear-gradient(90deg, rgba(255, 255, 255, 0), #000); // 颜色渐变 + } + .selected-color { + width: @selected-color-diameter; + height: @selected-color-diameter; + top: 0px; + left: 0px; + position: absolute; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + } + .selected-color-background { + width: @selected-color-diameter; + height: @selected-color-diameter; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVRYR+2W0QlAMQgD60zdfwOdqa8TmI/wQMr5K0I5bZLIzLOa2nt37VVVbd+dDx5obgCC3KBLwJ2ff4PnVidkf+ucIhw80HQaCLo3DMH3CRK3iFsmAWVl6hPNDwt8EvNE5q+YuEXcMgkonVM6SdyCoEvAnZ8v1Hjx817MilmxSUB5rdLJDycZgUAZUch/AAAAAElFTkSuQmCC'); + } + .color-picker-cursor { + cursor: default; + position: relative; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + width: 10px; + height: 10px; + border: #ffffff solid 1px; + } + .color-picker-cursor-selector { + .color-picker-cursor; + width: 12px; + height: 12px; + top: -1px; + background-color: #ffffff; + .shadow; + } + .type-policy { + float: right; + position: absolute; + top: 198px; + right: @plx-color-picker-box-padding-left-right - (@plx-color-picker-type-policy-width - @plx-color-picker-arrow-width)/2; + width: @plx-color-picker-type-policy-width; + height: @plx-color-picker-type-policy-height; + &:hover { + background-color: @hover-bg-color; + cursor: pointer; + } + } + .arrow-down { + display: block; + width: 0; + height: 0; + border-left: @plx-color-picker-arrow-width/2 solid transparent; + border-right: @plx-color-picker-arrow-width/2 solid transparent; + border-top: @plx-color-picker-arrow-height solid lighten(@fonticon-color, 5%); + margin-top: @plx-color-picker-arrow-space; + margin-left: (@plx-color-picker-type-policy-width - @plx-color-picker-arrow-width)/2; + } + .arrow-up { + display: block; + width: 0; + height: 0; + border-left: @plx-color-picker-arrow-width/2 solid transparent; + border-right: @plx-color-picker-arrow-width/2 solid transparent; + border-bottom: @plx-color-picker-arrow-height solid lighten(@fonticon-color, 5%); + margin-top: (@plx-color-picker-type-policy-height - @plx-color-picker-arrow-height*2 - @plx-color-picker-arrow-space)/2; + margin-left: (@plx-color-picker-type-policy-width - @plx-color-picker-arrow-width)/2; + } + .box { + width: 100%; + height: 100%; + display: flex; + .left { + position: relative; + margin-right: 16px; + } + .right { + flex: 1 1 auto; + } + } + + .button-area { + padding: 0 16px 16px 16px; + text-align: right; + } + + .preset-area { + padding: 4px 15px; + .preset-label { + width: 100%; + padding: 4px; + text-align: left; + color: #555; + } + .preset-color { + cursor: pointer; + display: inline-block; + width: 18px; + height: 18px; + margin: 4px 6px 8px 6px; + -moz-border-radius: 25%; + -webkit-border-radius: 25%; + border-radius: 25%; + -khtml-border-radius: 25%; + border: #a9a9a9 solid 1px; + } + } + + .hsla-text, .rgba-text { + width: @plx-color-picker-input-width; + input { + color: #595959; + min-width: 0; + flex: 1; + margin: 0; + float: left; + padding: 1px; + &:last-child { + margin-right: 0; + } + } + .hsla-text-div, .rgba-text-div { + margin-top: 2px; + flex: 1; + text-align: center; + color: #999999; + height: 18px; + padding-right: 8px; + &:last-child { + margin-right: 0; + padding-right: 0; + } + } + .hsla-text-degree { + padding-right: @plx-color-picker-hsla-unit-margin-left + @plx-color-picker-hsla-unit-margin-right + @plx-color-picker-hsla-unit-degree-width; + } + .hsla-text-percent { + padding-right: @plx-color-picker-hsla-unit-margin-left + @plx-color-picker-hsla-unit-margin-right + @plx-color-picker-hsla-unit-percent-width; + } + .hsla-degree { + display: inline-block; + width: @plx-color-picker-hsla-unit-degree-width; + margin-left: @plx-color-picker-hsla-unit-margin-left; + margin-right: @plx-color-picker-hsla-unit-margin-right; + margin-top: 2px; + } + .hsla-percent { + display: inline-block; + width: @plx-color-picker-hsla-unit-percent-width; + margin-left: @plx-color-picker-hsla-unit-margin-left; + margin-right: @plx-color-picker-hsla-unit-margin-right; + margin-top: 3px; + } + .rgba-text-input { + margin-right: 8px; + } + } + + .hex-text { + width: @plx-color-picker-input-width; + .box { + input { + color: #595959; + flex: 1 1 auto; + padding: 1px; + } + div { + margin-top: 2px; + flex: 1 1 auto; + text-align: center; + height: 18px; + color: #999999; + float: left; + clear: left; + } + } + } + + .bacis-color-alpha-select-area { + padding: 20px @plx-color-picker-box-padding-left-right 16px @plx-color-picker-box-padding-left-right; + } + .color-format-content-area { + padding: 0px @plx-color-picker-box-padding-left-right 16px @plx-color-picker-box-padding-left-right; + } + .arrow::after, + .arrow::before { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + content: ""; + border-width: @plx-color-picker-border-arrow-width @plx-color-picker-border-arrow-width; + } + + .arrow.arrow-bottom::after { + left: 20px; + border-top-width: 0; + top: -@plx-color-picker-border-arrow-width; + border-bottom-color: #ffffff; + } + .arrow.arrow-bottom::before { + left: 20px; + border-top-width: 0; + top: -(@plx-color-picker-border-arrow-width + 1); + border-bottom-color: #999999; + } +} +html{ + //font-size:@font-size-spacing; +}// 定义间距使用 +body{ + font-size:@font-size; +} +.shadow { +-webkit-box-shadow: 0 1px 6px @shadow-color; +-moz-box-shadow: 0 1px 6px @shadow-color; +box-shadow: 0 1px 6px @shadow-color; +} //阴影样式(包含跨浏览器),可以直接引用.shadow + +:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: @disabled-text-color; +} + +::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: @disabled-text-color; +} + +input:-ms-input-placeholder{ + color: @disabled-text-color; +} + +input::-webkit-input-placeholder{ + color: @disabled-text-color; +} + +/////// + +@padding-normal: 0px 16px; +@padding-sm: 0px 14px; +@padding-xs: 0px 12px; +@min-width-normal: 80px; +@min-width-sm: 60px; +@min-width-xs: 60px; +@btn-margin-right: 10px; +@btn-margin-right-sm: 5px; +@btn-margin-right-xs: 5px; +@btn-border-height: 1px; + +.border-min-width(@min-width, 14px) { + min-width: @min-width + 8px; +} + +.border-min-width(@min-width, 12px) { + min-width: @min-width; +} + +.background-color-white-color-disabled (@color) when (@color = #fff) { + color: @disabled-text-color; + background-color: @common-color; + border-color: #e9e9e9; +} + +.background-color-white-color-disabled (@color) when not (@color = #fff) { + border-color: @color; + background-color: @color; + opacity: @opacity-disable; +} + +.plx-btn { + font-family: @font-family; + color: @common-textcolor; + .border-min-width(@min-width-normal, @font-size); + letter-spacing: 1px; + padding: @padding-normal; + height: @btn-height; + font-size: @font-size; + cursor: pointer; + text-align: center; + white-space: nowrap; + margin-right: @btn-margin-right; + vertical-align: middle; + border: @btn-border-height solid @border-color-base; + background-color: @common-color; + border-radius: @radius; + line-height: @btn-height - @btn-border-height * 2; + &:hover, + &:disabled, + &[disabled], + &:focus, + &:active { + outline: none; + background-image: none; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; + } + &:hover, + &:focus { + color: @btn-common-color-text-hover; + border-color: @btn-common-color-border-hover; + background-color: @common-color-hover; + } + &:active { + color: @btn-common-color-text-click; + border-color: @btn-common-color-border-click; + background-color: @common-color-click; + } + &:disabled, + &[disabled] { + .background-color-white-color-disabled(@common-color); + } + &:disabled:hover, + &[disabled]:hover, + &:disabled:focus, + &[disabled]:focus { + .background-color-white-color-disabled(@common-color); + cursor: not-allowed; + } + & .plx-btn-icon { + font-size: 16px; + vertical-align: text-top; + margin-right: 3px; + } +} + +.plx-btn-primary { + background-color: @primary-color; + color: @scene-textcolor; + border-color: @primary-color; + &:hover, + &:focus { + color: @scene-textcolor; + background-color: @primary-color-hover; + border-color: @primary-color-hover; + } + &:active { + color: @scene-textcolor; + background-color: @primary-color-click; + border-color: @primary-color-click; + } + &:disabled, + &[disabled], + &:disabled:hover, + &[disabled]:hover, + &:disabled:focus, + &[disabled]:focus { + color: @scene-textcolor; + .background-color-white-color-disabled(@primary-color); + } +} + +.plx-btn-guide { + background-color: @guide-color; + color: @scene-textcolor; + border-color: @guide-color; + &:hover, + &:focus { + color: @scene-textcolor; + background-color: @primary-color-guide-hover; + border-color: @primary-color-guide-hover; + } + &:active { + color: @scene-textcolor; + background-color: @primary-color-guide-click; + border-color: @primary-color-guide-click; + } + &:disabled, + &[disabled], + &:disabled:hover, + &[disabled]:hover, + &:disabled:focus, + &[disabled]:focus { + color: @scene-textcolor; + .background-color-white-color-disabled(@guide-color); + } +} + +.plx-btn-table { + color: @text-color; +} + +.plx-btn-error { + background-color: @error-color; + color: @scene-textcolor; + border-color: @error-color; + &:hover, + &:focus { + color: @scene-textcolor; + background-color: @error-color-hover; + border-color: @error-color-hover; + } + &:active { + color: @scene-textcolor; + background-color: @error-color-click; + border-color: @error-color-click; + } + &:disabled, + &[disabled], + &:disabled:hover, + &[disabled]:hover, + &:disabled:focus, + &[disabled]:focus { + color: @scene-textcolor; + .background-color-white-color-disabled(@error-color); + } +} + +.plx-btn-sm { + height: @btn-height-sm; + padding: @padding-sm; + .border-min-width(@min-width-sm, @font-size); + margin-right: @btn-margin-right-sm; + line-height: @btn-height-sm - @btn-border-height * 2; +} + +.plx-btn-xs{ + height: @btn-height-xs; + padding: @padding-xs; + .border-min-width(@min-width-xs, @font-size); + margin-right: @btn-margin-right-xs; + line-height: @btn-height-xs - @btn-border-height * 2; +} + +.plx-btn.dropdown-toggle { + margin-right: 0; + outline: none !important; + background-image: none !important; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} + +.plx-btn.dropdown-toggle::after { + margin-left: 16px; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + color: darken(@border-color-base, 10%); + margin-bottom: 1px; +} + +.plx-btn-sm.dropdown-toggle::after { + margin-left: 14px; +} + +.plx-btn-xs.dropdown-toggle::after { + margin-left: 12px; +} + +.plx-btn+.dropdown-menu { + margin: 0; + padding: 0; + border: 0; + min-width: 100%; + font-size: @font-size; + border-radius: @radius; + .shadow; + & .dropdown-item { + background-color: @component-bg; + color: @text-color; + font-size: @font-size; + padding: @padding-normal; + height: 30px; + cursor: pointer; + &:hover, + &:focus, + &:active{ + outline: none; + background-color: @hover-bg-color; + } + &:disabled, + &[disabled] { + color: @disabled-text-color; + } + &:disabled:hover, + &[disabled]:hover, + &:disabled:focus, + &[disabled]:focus { + cursor: not-allowed; + background-color: @component-bg; + } + } +} + +.plx-btn-sm+.dropdown-menu .dropdown-item { + padding: @padding-sm; +} +.plx-btn-xs+.dropdown-menu .dropdown-item { + padding: @padding-xs; +} + +.plx-btn-more { + display: inline-block; + margin-right: @btn-margin-right; +} + +.plx-btn-more-sm { + margin-right: @btn-margin-right-sm; +} + +.plx-btn-more-xs { + margin-right: @btn-margin-right-xs; +} +/////// + +@checkbox-border-size: 1px; + +.plx-checkbox-container { + font-size: 0; + position: relative; +} + +.plx-checkbox { + position: absolute; + z-index: -1; + opacity: 0; + & + .checkbox-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: @checkbox-size; + width: @checkbox-size; + border: @checkbox-border-size solid @border-color-base; + border-radius: @radius-sm; + vertical-align: middle; + } + & + .checkbox-substitute + span { + font-weight: normal; + font-size: @font-size; + cursor: pointer; + vertical-align: middle; + .font-padding(@font-size); + } + &:hover + .checkbox-substitute { + border-color: @primary-color; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; + } + &:checked + .checkbox-substitute { + border-color: @primary-color; + background-color: @primary-color; + &::after { + .checkbox-check(@component-bg); + } + } + &.portion + .checkbox-substitute { + background-color: @primary-color; + border-color: @primary-color; + opacity: 0.5; + &::after { + .checkbox-check(@component-bg); + } + } + &:disabled + .checkbox-substitute, + &[disabled] + .checkbox-substitute { + border-color: @border-color-base; + background-color: @input-bg-color-disabled; + cursor: not-allowed; + } + &:disabled + .checkbox-substitute + span, + &[disabled] + .checkbox-substitute + span { + cursor: not-allowed; + } + &.portion[disabled] + .checkbox-substitute { + background-color: @border-color-base; + border-color: @border-color-base; + &::after { + .checkbox-check(@fonticon-color); + } + } + &:checked[disabled] + .checkbox-substitute { + border-color: @border-color-base; + background-color: @border-color-base; + } +} + +.checkbox-check(@color) { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid @color; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + .checkbox-check-left(@font-size); + top: 0; +} + +.checkbox-check-left(12px) { + left: 3px; +} + +.checkbox-check-left(14px) { + left: 4px; +} + +.font-padding(12px) { + padding-left: 6px; +} + +.font-padding(14px) { + padding-left: 10px; +} + +/////// +/////// +/////// +/////// +/////// + +.plx-form { + font-family: @font-family; + font-size: @font-size; + background: @component-bg; + color: @text-color; + .ng-invalid:not(form).ng-invalid:not(fieldset).ng-invalid:not(plx-select) { + border: 1px solid @error-color; /* red */ + } + .ng-untouched:not(form).ng-untouched:not(fieldset).ng-untouched:not(plx-select) { + border: 1px solid @border-color-base ; + } + // 标签和通用组件样式 + label { + font-size: @font-size; + text-align: right; + color: @form-label; + background: @component-bg; + .label-span { + color: @text-color; + } + } + + //分组的样式 + .forms-group(@cursor, @bgcolor) { + margin-bottom: 10px; + padding-left: 15px; + color: @title-text-color; + font-size: @font-size-title-group; + height: @input-height; + line-height: @input-height; + cursor: @cursor; + &:hover { + background: @bgcolor; + } + span { + margin-left: 24px; + border-left: 3px solid @primary-color; + padding-left: 5px; + } + // 分组的展开和隐藏 + .group-icon { + float:left; + font-size: @font-size-title-group; + color: @primary-color !important; + line-height:@input-height; + margin-right:8px; + transform: scale(0.7,0.7); + font-weight: bold; + } + } + + .text-autocut { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: block; + } + + .forms-group-pointer { + .forms-group(pointer, @hover-bg-color); + } + + .forms-group-default { + .forms-group(default, @component-bg); + line-height: @input-height / 2; + } + // 紧凑型表单input高度 + .input-sm { + height: @input-height-sm !important; + } + // 必选的*号颜色 + .px-red { + color: @error-color; + } + + input:focus { + border: 1px solid @primary-color !important; + } + // 错误信息 + .error-div { + height: @font-size; + margin-top: -4px; + margin-bottom: 5px; + .error-msg { + color: @error-color; + } + } + // 输入提示信息的样式 + .help-div { + color: @disabled-text-color; + height: @font-size; + margin-top: -5px; + margin-bottom: 6px; + } + // 标题样式 + .forms-header { + margin-left: 15px; + margin-bottom: 25px; + padding-bottom: 5px; + border-bottom:1px solid @border-color-split; + span { + font-size: @font-size-title-level2; + color: @title-text-color; + } + } + + .plx-input{ + width: 100%; + color: @text-color; + background: @component-bg; + text-align: left; + } + //radio、checkbox、tail的样式 + .field-radio { + padding-right:10px; + line-height:@input-height - 5px; + &.field-radio-tight { + line-height:@input-height-sm - 5px; + } + } + .field-tail { + padding-right:10px; + line-height:@input-height; + &.field-tail-tight { + line-height:@input-height-sm; + } + .tip { + color: @fonticon-color; + font-size: 16px; + } + } + .field-info { + font-size: @font-size; + color: @primary-color; + margin-left: -15px; + &.field-info-group { + margin-left: 15px; + } + } + //field的样式 + .form-field:not(select-dropdown) { + color: @text-color; + font-size: @font-size; + line-height: @input-height; + &.form-field-tight { + line-height:@input-height-sm; + } + &.form-filed-hint { + margin-bottom: 15px; + } + } + .field-div { + margin-bottom: 15px; + padding-left: 0; + &.field-div-tight { + margin-bottom: 10px; + } + // 输入值改变后的样式变化 + &.inputchanged > input{ + font-weight:bold; + } + &.inputchanged > select{ + font-weight:bold; + } + } + + .button-div { + padding: 15px 0 0 0; + color: @text-color; + font-size: @font-size-title-group; + text-align: left; + button { + margin-right: 10px; + } + } + + .button-r-submit { + float: right; + margin-right: -20px !important; + } + + .button-r-cancel { + float: right; + } + + .content { + overflow-y: auto; + overflow-x: hidden; + } + + //滚动条 + .plx-scrollbar::-webkit-scrollbar { + width: 4px; + height: 6px; + } + .plx-scrollbar::-webkit-scrollbar-thumb { + background-color: rgba(0,0,0,.2); + border-radius: 2em; + min-height: 50px; + max-height: 100px; + } + .plx-scrollbar::-webkit-scrollbar-corner{ + background-color: transparent; + } + // placeholder + input:-ms-input-placeholder { + color: @unselected-text-color !important; + } + input::-webkit-input-placeholder { + color: @unselected-text-color !important; + } + plx-info .icon { + margin-left: -10px; + line-height: 28px !important; + } + +} +.para-content { + .icon-active { + fill:@primary-color; + } + .icon-disactive { + fill: @disabled-text-color; + cursor: default; + } +} + + +/////// + +.plx-input { + font-size: @font-size; + height: @input-height; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid @border-color-base; + border-radius: @radius; + vertical-align: middle; + &:focus { + border: 1px solid @primary-color; + } + &:disabled, + &[disabled] { + cursor: not-allowed; + background-color: @input-bg-color-disabled; + } +} + +.plx-input-sm { + height: @input-height-sm; +} + +.plx-input-right-no-radius { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +/////// + +.plx-radio-container { + font-size: 0; + position: relative; +} + +.plx-radio { + position: absolute; + z-index: -1; + opacity: 0; + & + .radio-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: @checkbox-size; + width: @checkbox-size; + border: 1px solid @border-color-base; + border-radius: @checkbox-size; + vertical-align: middle; + } + &:hover + .radio-substitute, + &:focus + .radio-substitute { + border-color: @primary-color; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; + } + &:checked + .radio-substitute { + .radio-boder-checked-width(@font-size); + } + &:disabled + .radio-substitute, + &[disabled] + .radio-substitute { + border-color: @border-color-base; + background-color: @input-bg-color-disabled; + cursor: not-allowed; + } + &:checked [disabled] + .radio-substitute { + border-color: @border-color-split; + background-color: @border-color-split; + cursor: not-allowed; + } + & + .radio-substitute + span { + font-weight: normal; + font-size: @font-size; + cursor: pointer; + vertical-align: middle; + .font-padding(@font-size); + } + &:disabled + .radio-substitute + span, + &[disabled] + .radio-substitute + span { + cursor: not-allowed; + } +} + +.radio-boder-checked-width(12px) { + border: 4px solid @primary-color; +} + +.radio-boder-checked-width(14px) { + border: 5px solid @primary-color; +} + +.font-padding(12px) { + padding-left: 6px; +} + +.font-padding(14px) { + padding-left: 10px; +} + +/*radio-group*/ + +@radio-group-border-height: 1px; +@padding-normal: 0px 16px; +@padding-sm: 0px 14px; +@min-width-normal: 80px; +@min-width-sm: 60px; + +.border-min-width(@min-width, 14px) { + min-width: @min-width + 8px; +} + +.border-min-width(@min-width, 12px) { + min-width: @min-width; +} + +.btn.dropdown-toggle, +.btn-group .btn.dropdown-toggle, +.btn:hover, +.btn:disabled, +.btn[disabled], +.btn:focus, +.btn:active, +.btn.active { + outline: none !important; + background-image: none !important; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} + +.plx-radio-group { + cursor: pointer; + font-size: @font-size; + height: @btn-height; + background-color: @common-color; + border: @radio-group-border-height solid @border-color-base; + color: @text-color; + border-radius: @radius; + padding: @padding-normal; + .border-min-width(@min-width-normal, @font-size); + transition: none; + &:hover, + &:focus, + &:active { + outline: none; + background-image: none; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; + } + + &:hover, + &:focus { + color: @btn-common-color-text-hover; + border-color: @btn-common-color-border-hover; + background-color: @common-color-hover; + } + &:active { + color: @btn-common-color-text-click; + border-color: @btn-common-color-border-click; + background-color: @common-color-click; + } + &.active { + background-color: @primary-color; + color: @scene-textcolor; + border-color: @primary-color; + } + & > span { + line-height: @btn-height - @radio-group-border-height * 2; + } +} + +.plx-radio-group-sm { + height: @btn-height-sm; + padding: @padding-sm; + .border-min-width(@min-width-sm, @font-size); + & > span { + line-height: @btn-height-sm - @radio-group-border-height * 2; + } +} + +/////// + +.plx-ui-steps-number-active { + background: @default-blue; + color: @default-white; +} + +.plx-ui-steps-number-passive { + background: @gray-grade-7; + color: @default-white; +} + +.plx-ui-steps-number-visited { + color: @default-white; + border: 2px @default-blue solid; +} + +.plx-ui-underline-active { + background: @default-blue; +} + +.plx-ui-underline-passive { + background: @gray-grade-8; +} + +.plx-ui-steps-title-active { + color: @font-gray-normal; +} + +.plx-ui-steps-title-passive { + color: @font-gray-light; +} + +.plx-ui-steps-title-visited { + color: @font-gray-light; +} + +.plx-ui-steps-number-visited-tick { + border-bottom: 2px solid @default-blue; + border-right: 2px solid @default-blue; +} + +.plx-ui-underline-active-vertical { + border-right: 2px solid @gray-grade-7; +} + +.plx-ui-underline-visited-vertical { + border-right: 2px solid @default-blue; +} + +.plx-ui-underline-passive-vertical { + border-right: 2px solid @gray-grade-7; +} + +.plx-ui-steps-title-active-vertical { + color: @font-gray-normal; +} + +.plx-ui-steps-title-visited-vertical { + color: @font-gray-light; +} + +.plx-ui-steps-title-passive-vertical { + color: @font-gray-light; +} + +.plx-ui-steps-number-active-vertical { + background: @default-blue; + color: @default-white; +} + +.plx-ui-steps-number-passive-vertical { + background: @gray-grade-7; + color: @default-white; +} + +.plx-ui-steps-number-visited-vertical { + color: @default-white; +} + +/////// + +//input[type='text'], +//input[type='password'], +//input[type='email'], +//input[type='tel'] { +// color: @font-gray-normal !important; +// font-weight: @font-weight-bold !important; +// border: @border-base; +// &:focus { +// border-color: @default-blue !important; +// } +//} +// +//@media screen and (-webkit-min-device-pixel-ratio: 0) { +// input[type='text'], +// input[type='password'], +// input[type='email'], +// input[type='tel'] { +// &:focus { +// border-color: @default-blue; +// color: @default-blue; +// text-shadow: 0 0 0 @font-gray-normal; +// -webkit-text-fill-color: transparent; +// } +// &::-webkit-input-placeholder { +// font-weight: @font-weight-normal; +// text-shadow: none; +// -webkit-text-fill-color: @font-gray-lightest; +// } +// } +//} +// +//input[disabled] { +// background: @gray-grade-9; +// color: @font-gray-lightest !important; +// border-color: rgba(191, 191, 191, 0.5) !important; +// cursor: not-allowed; +//} +// +// +//input[type='text'], +//input[type='password'], +//input[type='email'], +//input[type='tel'] { +// .input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur &, +// &.ng-dirty.ng-invalid.ng-touched.input-blur { +// border-color: @default-red; +// } +//} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/NIV-theme.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/NIV-theme.less new file mode 100644 index 00000000..607c7174 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/NIV-theme.less @@ -0,0 +1,271 @@ +//color +@blue-1: #e7f4fd; +@blue-2: #cfe9fc; +@blue-3: #a0d3f8; +@blue-4: #70bef5; +@blue-5: #40a8f2; +@blue-6: #108ee9; +@blue-7: #0d75bf; +@blue-8: #0c66a7; +@blue-9: #084977; +@blue-10: #073a5f; + +@green-1: #e5f6ee; +@green-2: #cceedd; +@green-3: #99dcbb; +@green-4: #66cb98; +@green-5: #33b976; +@green-6: #00a854; +@green-7: #00994d; +@green-8: #008040; +@green-9: #006633; +@green-10: #004d26; + +@red-1: #fdeae8; +@red-2: #fad4d1; +@red-3: #f8bfba; +@red-4: #f5aaa3; +@red-5: #ee6a5d; +@red-6: #ea4335; +@red-7: #e72918; +@red-8: #b92113; +@red-9: #a21d11; +@red-10: #8a190f; + +@yellow-1: #fff8e6; +@yellow-2: #fef2cd; +@yellow-3: #fde59b; +@yellow-4: #fdde81; +@yellow-5: #fcca36; +@yellow-6: #f3b709; +@yellow-7: #c99703; +@yellow-8: #977202; +@yellow-9: #7e5f02; +@yellow-10: #644c02; + +@orange-1: #fff1e6; +@orange-2: #ffe2cc; +@orange-3: #ffd4b3; +@orange-4: #ffb780; +@orange-5: #ff8b33; +@orange-6: #f56a30; +@orange-7: #cc5800; +@orange-8: #994200; +@orange-9: #803700; +@orange-10: #662c00; + +@purple-1: #f5e9f7; +@purple-2: #ebd4ef; +@purple-3: #d7a9df; +@purple-4: #c47cd0; +@purple-5: #ad49be; +@purple-6: #9c27b0; +@purple-7: #862097; +@purple-8: #6f1c7d; +@purple-9: #60166d; +@purple-10: #51145c; + +@pink-1: #fde8ef; +@pink-2: #fad1df; +@pink-3: #f8bace; +@pink-4: #ff84af; +@pink-5: #ee5d8e; +@pink-6: #e81e63; +@pink-7: #d01654; +@pink-8: #b9134a; +@pink-9: #a21141; +@pink-10: #8a0f38; + +@cyan-1: #ebf8f9; +@cyan-2: #cfedf0; +@cyan-3: #a7dfe3; +@cyan-4: #76cdd3; +@cyan-5: #3db8c1; +@cyan-6: #00a2ae; +@cyan-7: #008997; +@cyan-8: #00707f; +@cyan-9: #005667; +@cyan-10: #003c4e; + +@lemon-1: #fffdeb; +@lemon-2: #ffface; +@lemon-3: #fff7b1; +@lemon-4: #fff59d; +@lemon-5: #fff175; +@lemon-6: #ffeb3b; +@lemon-7: #f7e225; +@lemon-8: #e8d211; +@lemon-9: #d3bf0b; +@lemon-10: #c3b003; + +@brown-1: #f5f1ef; +@brown-2: #ece3df; +@brown-3: #d9c6bf; +@brown-4: #c6aa9f; +@brown-5: #9f7160; +@brown-6: #795548; +@brown-7: #604439; +@brown-8: #503830; +@brown-9: #402d26; +@brown-10: #30221d; + +@indigo-1: #eceef8; +@indigo-2: #d9ddf2; +@indigo-3: #c6cceb; +@indigo-4: #a1aade; +@indigo-5: #6877ca; +@indigo-6: #3f51b5; +@indigo-7: #354497; +@indigo-8: #2e3b84; +@indigo-9: #212a5e; +@indigo-10: #1b224b; + +@lime-1: #f3f9ec; +@lime-2: #e6f2d9; +@lime-3: #daecc6; +@lime-4: #b5d98c; +@lime-5: #9ccc66; +@lime-6: #8bc24a; +@lime-7: #77ac39; +@lime-8: #699933; +@lime-9: #4f7326; +@lime-10: #426020; + +@bluegray-1: #f0f3f5; +@bluegray-2: #d2dbe0; +@bluegray-3: #b4c3cb; +@bluegray-4: #96abb6; +@bluegray-5: #7893a1; +@bluegray-6: #607d8b; +@bluegray-7: #546c78; +@bluegray-8: #495f69; +@bluegray-9: #34444b; +@bluegray-10: #2a363c; + +@default-white: #ffffff; +@default-black: #000000; + +@default-blue: @blue-6; +@hover-blue: @blue-7; +@active-blue: @blue-8; + +@nav-default-blue: @default-blue; +@nav-hover-blue: @hover-blue; +@nav-active-blue: @active-blue; + +@default-green: @green-6; +@hover-green: @green-7; +@active-green: @green-8; + +@default-red: @red-6; +@hover-red: @red-7; +@active-red: @red-8; + +@default-yellow: @yellow-6; +@hover-yellow: @yellow-7; +@active-yellow: @yellow-8; + +@gray-grade-1: #212121; +@gray-grade-2: #404040; +@gray-grade-3: #595959; +@gray-grade-4: #737373; +@gray-grade-5: #999999; +@gray-grade-6: #bfbfbf; +@gray-grade-7: #d9d9d9; +@gray-grade-8: #e9e9e9; +@gray-grade-9: #f5f5f5; + +//font +@font-family: "Helvetica Neue","PingFang SC",Tahoma,"Microsoft Yahei"; + +@font-size-normal: 14px; +@font-size-xl: 24px; +@font-size-lg: 20px; +@font-size-sm: 12px; + +@font-gray-normal: @gray-grade-3; +@font-gray-light: @gray-grade-5; +@font-gray-lightest: @gray-grade-6; +@font-gray-dark: @gray-grade-2; + +@font-weight-normal: 400; +@font-weight-bold: 500; +@title-font-weight: 500; + +.font(@font-size: @font-size-normal, @color:@font-gray-normal, @font-weight: @font-weight-normal) { + font-family: @font-family; + font-weight: @font-weight; + font-size: @font-size; + line-height: @font-size; + color: @color; +} + +.input-font(@font-size: @font-size-normal, @color:@font-gray-normal) { + .font(@font-size, @color, @font-weight-bold); +} + +//disabled +@disabled-font: @font-gray-lightest; +@disabled-background: @gray-grade-9; +@disabled-border-color: rgba(191, 191, 191, 0.5); + +//hover +@hover-background: @blue-1; +@hover-border-color: @default-blue; + +//active +@active-background: @gray-grade-9; + +//highlight +@highlight-background: @gray-grade-6; + +//border +@border-color: @gray-grade-7; +@border-base: 1px solid @border-color; +@border-radius-base: 3px; +@box-shadow-base: 0 2px 4px 0 rgba(0, 0, 0, 0.2); + +//height +@component-height-lg: 32px; +@component-height-md: 28px; +@component-height-sm: 24px; +@line-height-base: 1.5; + +//spacing +@spacing-within-item: 10px; +@spacing-between-item: 20px; + +//z-index +@z-index-affix : 10; +@z-index-back-top : 10; +@z-index-modal-mask : 1000; +@z-index-modal : 1000; +@z-index-notification : 1010; +@z-index-message : 1010; +@z-index-popover : 1030; +@z-index-picker : 1050; +@z-index-dropdown : 1050; +@z-index-tooltip : 1060; + +//input +@input-padding-both-side: 10px; +@input-width: 400px; + +//overlay +@overlay-margin-top: 5px; +@overlay-item-padding-left: 10px; + +//clear icon +@hover-clear-icon-bg: @gray-grade-9; +@clear-icon-color: @gray-grade-5; + +//button +@button-width: 88px; +@button-border: 0; +@button-border-color: @border-base; + +//tab +@tab-height: 36px; +@tab-active-line-height: 2px; +@tab-line-height: @tab-height - @tab-active-line-height; +@icon-menu-active-bg: @blue-2; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.css new file mode 100644 index 00000000..6347a525 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.css @@ -0,0 +1,5552 @@ +.plx-breadcrumb { + margin: 0; + padding: 5px 10px; + font-size: 12px; +} +.plx-breadcrumb li { + display: inline-block; +} +.plx-breadcrumb a { + color: #737373; + text-decoration: none; +} +.plx-breadcrumb a:hover { + color: #00abff; +} +.plx-breadcrumb .plx-breadcrumb-separator { + color: #999; + padding: 0 5px; + vertical-align: 1px; +} +.plx-breadcrumb .plx-breadcrumb-collapse { + padding-left: 6px; + padding-right: 6px; + cursor: pointer; +} +.plx-breadcrumb .plx-breadcrumb-collapse circle { + fill: #999; +} +.plx-breadcrumb .plx-breadcrumb-collapse:hover circle { + fill: #00abff; +} +.plx-breadcrumb .plx-breadcrumb-active { + vertical-align: 1px; +} +.plx-breadcrumb .plx-breadcrumb-active a { + font-size: 20px; + color: #404040; + cursor: text; +} +.owl-dateTime { + display: inline-block; + position: relative; + width: 100%; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + background: #fff; + color: #595959; +} +.owl-dateTime input { + font-size: 12px; + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; +} +.short-text-input .owl-dateTime input { + width: 120px; +} +.text-input-with-unit .owl-dateTime input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .owl-dateTime input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .owl-dateTime input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .owl-dateTime input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .owl-dateTime input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .owl-dateTime input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .owl-dateTime input { + width: 246px; +} +.short-text-input.text-input-with-prefix .owl-dateTime input { + width: 80px; +} +.short-text-input.text-input-with-unit .owl-dateTime input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .owl-dateTime input { + width: 40px; +} +.owl-dateTime input:focus { + border: 1px solid #00abff; +} +.owl-dateTime input:disabled, +.owl-dateTime input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.owl-dateTime input:-ms-input-placeholder { + color: #999 !important; +} +.owl-dateTime input::-webkit-input-placeholder { + color: #999 !important; +} +.owl-dateTime-input { + width: 100%; + padding-right: 1.5em; +} +.owl-dateTime-cancel { + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + transform: translateY(-50%); + cursor: pointer; + color: inherit; +} +.owl-dateTime-inputWrapper { + position: relative; +} +.owl-dateTime-customTemp { + display: inline-block; + position: relative; +} +.owl-dateTime-dialog { + padding: 0px; + position: absolute; +} +.owl-dateTime-dialogHeader { + display: flex; + justify-content: center; + align-items: center; + width: 100%; +} +.owl-calendar-wrapper, +.owl-timer-wrapper { + position: relative; + width: 100%; + padding: .2em .5em; +} +.owl-calendar-control { + display: flex; + justify-content: space-around; + width: 100%; + height: 2em; +} +.owl-calendar-control .owl-calendar-controlNav { + position: relative; + cursor: pointer; + width: 12.5%; +} +.owl-calendar-control .owl-calendar-controlContent { + display: flex; + justify-content: center; + align-items: center; + width: 75%; + height: 100%; +} +.owl-calendar { + position: relative; + min-height: 13.7em; +} +.owl-calendar table { + width: 100%; + border-collapse: collapse; +} +.owl-calendar tbody td { + position: relative; + text-align: center; +} +.owl-calendar tbody td a { + display: block; + width: 100%; + height: 100%; + text-decoration: none; + color: inherit; + font-size: 12px; +} +.owl-calendar .owl-calendar-yearArrow { + position: absolute; + top: 50%; + width: 1.5em; + height: 1.5em; + transform: translateY(-50%); + cursor: pointer; +} +.owl-calendar .owl-calendar-yearArrow.left { + left: -0.5em; +} +.owl-calendar .owl-calendar-yearArrow.right { + right: -0.5em; +} +.owl-timer-wrapper { + position: relative; + display: flex; + justify-content: center; +} +.owl-timer-wrapper .owl-timer { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 25%; + height: 100%; +} +.owl-timer-wrapper .owl-timer-control { + display: flex; + justify-content: center; + align-items: center; + height: 30%; + width: 100%; + cursor: pointer; +} +.owl-timer-wrapper .owl-timer-control .icon:before { + margin: 0; +} +.owl-timer-wrapper .owl-timer-input { + width: 60%; + height: 100%; +} +/*# sourceMappingURL=picker.component.css.map */ +.font-face { + font-weight: normal; + font-style: normal; +} +[class^="paletx-datepicker-icon-"]:before, +[class*="paletx-datepicker-icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.paletx-datepicker-icon-cancel:before { + content: '\e802'; +} +/* '' */ +.paletx-datepicker-icon-up-open:before { + content: '\e805'; +} +/* '' */ +.paletx-datepicker-icon-down-open:before { + content: '\e80b'; +} +/* '' */ +.paletx-datepicker-icon-left-open:before { + content: '\e817'; +} +/* '' */ +.paletx-datepicker-icon-right-open:before { + content: '\e818'; +} +/* '' */ +.owl-widget, +.owl-widget * { + box-sizing: border-box; +} +.owl-widget { + font-size: 1em; +} +.owl-padding { + padding: 0px; +} +.owl-corner-all { + border-radius: 3px; +} +.owl-corner-top { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.owl-state-default { + border: 1px solid #d9d9d9; + background: #fff; + color: #595959; +} +.owl-inputtext { + margin: 0; + outline: medium none; + transition: .2s; +} +.owl-dateTime.owl-dateTime-inline { + width: auto; +} +.owl-dateTime.owl-dateTime-inline .owl-dateTime-dialog { + position: relative; + z-index: auto; +} +.owl-dateTime-dialog { + width: 300px; + user-select: none; + z-index: 99999; +} +.owl-dateTime-dialogHeader { + height: 2.5em; + padding: .25em; + background-color: #fff; + overflow-y: auto; +} +.owl-calendar-control .owl-calendar-controlNav .nav-prev, +.owl-calendar-control .owl-calendar-controlNav .nav-next { + position: absolute; + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} +.owl-cal-header { + background: #f5f5f5; + height: 35px; +} +.owl-calendar-control .owl-calendar-controlNav .nav-prev:before, +.owl-calendar-control .owl-calendar-controlNav .nav-next:before { + border-top: .5em solid transparent; + border-bottom: .5em solid transparent; + border-right: 0.75em solid #000000; + width: 0; + height: 0; + display: block; + margin: 0 auto; +} +.owl-calendar-control .owl-calendar-controlNav .nav-next:before { + border-right: 0; + border-left: 0.75em solid #000000; +} +.owl-calendar-control .owl-calendar-controlContent .month-control, +.owl-calendar-control .owl-calendar-controlContent .year-control { + color: #999; + display: inline-block; + cursor: pointer; + transition: transform 200ms ease; +} +.owl-calendar-control .owl-calendar-controlContent .month-control:hover, +.owl-calendar-control .owl-calendar-controlContent .year-control:hover { + color: #00abff; +} +.owl-calendar-control .owl-calendar-controlContent .month-control { + font-size: 14px; + margin-right: .8rem; +} +.owl-calendar-control .owl-calendar-controlContent .year-control { + font-size: 14px; +} +.owl-calendar tbody td.owl-calendar-selected { + background-color: #00abff; + color: #fff; +} +.owl-calendar tbody td.owl-calendar-invalid { + color: #bfbfbf; +} +.owl-calendar tbody td.owl-calendar-outFocus { + color: #999; +} +.owl-calendar tbody td.owl-calendar-hidden { + visibility: hidden; +} +/** +.owl-calendar tbody td:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: @hover-bg-color; + color: @shadow-color } +**/ +.owl-years td.owl-year, +.owl-years td.owl-month, +.owl-months td.owl-year, +.owl-months td.owl-month { + font-size: 1.2em; + height: 2.5em; + width: 33.33%; + line-height: 2.5em; + border-radius: 60px; +} +.owl-weekdays th.owl-weekday { + height: 1em; + line-height: 2em; + text-align: center; + font-weight: normal; + font-size: 12px; + /**color: @unselected-text-color; **/ +} +.owl-days td.owl-day { + border-radius: 30px; + height: 2em; + width: calc(14.28571429%); + line-height: 2em; +} +.owl-days td.owl-day.owl-day-today:before { + content: ''; + display: block; + position: absolute; + right: 2px; + top: 2px; + color: #00abff; + border-top: 0.5em solid #009dea; + border-left: .5em solid transparent; +} +.owl-timer-wrapper { + height: 5.4em; + background-color: rgba(0, 0, 0, 0.2); +} +.owl-timer-wrapper .owl-timer-text { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 40%; + font-size: 1.5em; +} +.owl-timer-wrapper .owl-meridian-btn { + font-size: .8em; + color: #00abff; + background-image: none; + background-color: transparent; + border-color: #00abff; +} +.owl-timer-wrapper .owl-meridian-btn:hover { + color: #fff; + background-color: #00abff; + border-color: #00abff; +} +.owl-timer-divider { + display: inline-block; + align-self: flex-end; + position: absolute; + width: .6em; + height: 100%; + left: -0.3em; +} +.owl-timer-divider .owl-timer-dot { + display: block; + width: .3em; + height: .3em; + position: absolute; + left: 50%; + border-radius: 50%; + transform: translateX(-50%); +} +.owl-timer-divider .owl-timer-dot.dot-top { + top: 38%; +} +.owl-timer-divider .owl-timer-dot.dot-bottom { + bottom: 38%; +} +.owl-icon { + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: #999; +} +.oes-time-control { + color: #595959 !important; +} +.owl-calendar-selected { + background-color: #00abff; + color: #fff; + border-radius: 50%; +} +.owl-calendar tbody td div.day:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: #ebf6fd; + color: #000; + border-radius: 50%; +} +.oes-time-control { + font-size: 12px; +} +.owl-calendar-year-part { + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-year-part:hover { + background-color: #ebf6fd; + color: #000; + border-radius: 50%; +} +.owl-calendar-year-selected { + background-color: #00abff; + color: #fff; + border-radius: 50%; +} +.owl-calendar-year-selected:hover { + background-color: #00abff; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-part { + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-month-part:hover { + background-color: #ebf6fd; + color: #000; + border-radius: 50%; +} +.owl-calendar-month-selected { + background-color: #00abff; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-selected:hover { + background-color: #00abff; + color: #fff; + border-radius: 50%; +} +/*# sourceMappingURL=picker.css.map */ +.oes-time-table .chevron::before { + border-style: solid; + border-width: 0.29em 0.29em 0 0; + content: ''; + display: inline-block; + height: 0.69em; + left: 0.05em; + position: relative; + top: 0.15em; + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + vertical-align: middle; + width: 0.71em; +} +.oes-time-table .chevron.bottom:before { + top: -0.3em; + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); +} +.oes-time-table .btn-link { + border: none!important; + cursor: pointer; + outline: 0; + display: block; +} +.oes-time-table .btn-link.disabled { + cursor: not-allowed; + opacity: .65; +} +.oes-time-control { + text-align: center; +} +.datapicker-form-control { + width: auto !important; + display: inline-block; +} +.oes-time-table .ict-stretch { + font-size: 8px; +} +.oes-time-table .ict-shrink { + font-size: 8px; +} +.time-pick-bk { + background-color: #fff; +} +.btn-link:focus, +.btn-link:hover { + text-decoration: none; +} +.oes-time-control { + border: 0; + width: 30px !important; + padding: 3px 0; + margin: 0; + font-size: 12px; +} +.oes-time-control:hover { + background-color: #e6e6e6; + color: #000; + cursor: pointer; +} +.oes-time-control-foucs-bk { + background-color: #00abff !important; + color: #fff!important; +} +.oes-time-separator { + margin: 0 -5px; +} +.oes-time-group, +.oes-time-group:hover { + border-bottom: 1px solid #ccc; + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; +} +.oes-time-btns, +.oes-time-btns:hover { + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; + padding: 0 0 7px 0 !important; +} +.oes-time-btns-wrapper { + margin-top: -3px; + transform: scale(0.6, 0.6); +} +.i18nTimeDes, +.i18nTimeDes:hover { + padding: 0 5px 0px 0; +} +.oes-time-btn { + height: 5px; +} +.oes-time-table { + margin-bottom: 10px; +} +.hour-table { + font-size: 12px; +} +.hour-table td { + padding: 5px; + padding-top: 3px; + padding-bottom: 3px; + cursor: pointer; +} +.oes-time-btn-shrink { + position: relative; + top: -5px; + left: 0px; + color: #CCC; +} +.oes-time-btn-stretch { + position: relative; + left: 0px; + color: #CCC; +} +.owl-calendar-timer-invalid { + color: #acacac; +} +.owl-calendar-timer-selected { + background-color: #00abff; + color: #FFFFFF; + border-radius: 1.2em; +} +.hour-table td:not(.owl-calendar-timer-selected):not(.owl-calendar-timer-invalid):hover { + background-color: #ebf6fd; + color: #000000; + border-radius: 1.2em; +} +.icon { + color: #999; + vertical-align: text-bottom; + margin-left: 5px; + font-size: 20px; +} +.plx-input-password { + display: inline-block; + line-height: 30px; + width: 40px; + text-align: center; + vertical-align: middle; + margin-top: -2px; + background-color: #fff; + border-top: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + border-bottom: 1px solid #d9d9d9; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + cursor: pointer; +} +.plx-input-password:focus, +.plx-input-password:hover { + background-color: #fff; +} +.plx-input-password:active { + background-color: #fff; +} +.plx-input-password.ict-eye-closed, +.plx-input-password.ict-eye { + color: #999; +} +.plx-input-password-disabled { + cursor: not-allowed; +} +.plx-input-password-disabled:focus, +.plx-input-password-disabled:hover, +.plx-input-password-disabled:active { + background-color: #fff; +} +.plx-input-password-sm { + line-height: 26px; +} +@-moz-keyframes three-quarters-loader { + 0% { + -moz-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes three-quarters-loader { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes three-quarters-loader { + 0% { + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.plx-loading-max:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 72px; + height: 72px; + border: 5px solid #00abff; + border-right-color: #fff; + border-radius: 36px; +} +.plx-loading-medium:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 36px; + height: 36px; + border: 4px solid #00abff; + border-right-color: #fff; + border-radius: 18px; +} +.plx-loading-min:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 18px; + height: 18px; + border: 2px solid #00abff; + border-right-color: #fff; + border-radius: 9px; +} +.plx-loading-default:not(:required) { + margin-left: 100px; + margin-top: 100px; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 36px; + height: 36px; + border: 4px solid #00abff; + border-right-color: #fff; + border-radius: 18px; +} +.plx-loading-xs:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 12px; + height: 12px; + border: 2px solid #00abff; + border-right-color: #fff; + border-radius: 6px; +} +.plx-loading { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; +} +.plx-loading-white:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 12px; + height: 12px; + border: 2px solid #fff; + border-right-color: #00abff; + border-radius: 6px; +} +.plx-loading-gray:not(:required) { + -moz-animation: three-quarters-loader 1500ms infinite linear; + -webkit-animation: three-quarters-loader 1500ms infinite linear; + animation: three-quarters-loader 1500ms infinite linear; + box-sizing: border-box; + display: inline-block; + position: relative; + overflow: hidden; + text-indent: -9999px; + width: 12px; + height: 12px; + border: 2px solid #bfbfbf; + border-right-color: #fff; + border-radius: 6px; +} +.message { + width: 400px; + right: 10px; + position: fixed; + z-index: 99999; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-weight: 400; + font-style: normal; + font-size: 14px; + color: #404040; +} +.message > p { + width: 100%; + margin: 10px 0 16px; + padding: 0 25px ; + border: 1px solid #e9e9e9; + box-shadow: 1px 3px 9px rgba(0, 0, 0, 0.2); + line-height: 36px; + background: #fff; + font-size: 12px !important; + color: #595959; +} +.message > p > span { + float: right; + cursor: pointer; + font-weight: 400; + font-style: normal; + color: #108EE9; + text-align: center; +} +.message > p > span:hover { + text-decoration: underline; +} +.message > div { + width: 100%; + margin-bottom: 16px; + border: 1px solid ; + line-height: 62px; + border: 1px solid #e9e9e9; + box-shadow: 1px 4px 9px rgba(0, 0, 0, 0.2); + border-radius: 5px; + background: #fff; + position: relative; +} +.message > div > span { + display: inline-block; + font-size: 24px !important; + margin-left: 12px; + margin-right: 3px; + vertical-align: middle; +} +.message > div.success { + border-left: 4px solid #73cf22; +} +.message > div.success > span { + color: #73cf22; +} +.message > div.error { + border-left: 4px solid #ff5b55; +} +.message > div.error > span { + color: #ff5b55; +} +.message > div.warning { + border-left: 4px solid #f7c515; +} +.message > div.warning > span { + color: #f7c515; +} +.message > div.info { + border-left: 4px solid #00abff; +} +.message > div.info > span { + color: #00abff; +} +.message > div > i { + float: right; + width: 20px; + height: 20px; + margin-top: 21px; + line-height: 20px; + border-radius: 50%; + margin-right: 20px; + cursor: pointer; + text-align: center; + font-size: 16px; +} +.message > div > i:hover { + background: #ebf6fd; +} +.message > div > p { + top: -3px; + margin: 0; + padding: 0 20px 16px 43px; + font-size: 12px !important; + color: #595959; + line-height: 18px; + position: relative; +} +.message > div > p > span { + color: #00abff; + cursor: pointer; +} +.message > div > p > span:hover { + text-decoration: underline; +} +.message > div > div { + padding-left: 45px ; + padding-bottom: 19px; + font-size: 12px; + color: #00abff; + line-height: 18px; + cursor: pointer; +} +.message > div > div:hover { + text-decoration: underline; +} +#plxMessageMeasure { + position: fixed; + top: -12px; + opacity: 0; + white-space: nowrap; + margin: 0; + padding: 0; + font-size: 12px !important; + line-height: 12px; + z-index: -9999; +} +.stack > span { + display: inline-block; + position: absolute; + bottom: 16px; + right: 25px; +} +plx-modal-window .modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + outline: 0; + z-index: 10000; +} +plx-modal-window .modal-dialog { + position: relative; + max-width: 600px; + margin: 30px auto; +} +plx-modal-window .modal-dialog.modal-sm { + max-width: 600px; +} +plx-modal-window .modal-dialog.modal-lg { + max-width: 1000px; +} +plx-modal-window .modal-content { + position: relative; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + background-color: #fff; + background-clip: padding-box; + border-radius: 3px; + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); + outline: 0; +} +plx-modal-window .modal-content .modal-header { + border-bottom: 0; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; +} +plx-modal-window .modal-content .modal-body .form-group:last-child, +plx-modal-window .modal-content .modal-body form:last-child { + margin-bottom: 0; +} +plx-modal-window .modal-content .modal-footer { + display: block; + border-top: 0; + margin-top: 0; + padding: 0 15px 15px 15px; +} +plx-modal-window .modal-content .modal-title { + font-size: 20px; + margin-bottom: 0; + line-height: 1.5; +} +plx-modal-window .modal-content .modal-btn { + text-align: center; + font-size: 0; +} +plx-modal-window .close { + color: #999; + font-size: 16px; + text-shadow: none; + width: 24px; + height: 24px; + background: #fff; + border-radius: 20px; + padding-bottom: 2px; + outline: none; +} +plx-modal-window .close:hover { + color: #999; + background: #ebf6fd; +} +plx-modal-window .alert-modal.row { + margin-left: 100px; + margin-bottom: 30px; + text-align: left; +} +plx-modal-window .alert-modal.row .tip-img { + display: inline-block; + width: 52px; + height: 52px; + border-radius: 50px; + font-size: 45px; + text-align: center; + line-height: 1; + margin-top: -5px; + margin-right: 15px; +} +plx-modal-window .alert-modal.row .tip-img::before { + content: "!"; +} +plx-modal-window .alert-modal.row .tip-info { + width: 300px; +} +plx-modal-window .alert-modal.row .tip-info .alert-title { + font-size: 16px; + color: #404040; +} +plx-modal-window .alert-modal.row .tip-info .alert-result { + margin-top: 5px; + font-size: 12px; + color: #999; +} +plx-modal-window .alert-modal.row .warning { + border: 3px solid #f7c515; + color: #f7c515; +} +plx-modal-window .alert-modal.row .error { + border: 3px solid #ff5b55; + color: #ff5b55; +} +ngb-popover-window.plx-popover.show { + color: #333; + border: 1px solid #d9d9d9; +} +.plx-popover { + position: absolute; + top: 0; + left: 0; + z-index: 10001; + display: block; + padding: 1px; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: break-word; + -webkit-background-clip: padding-box; + background-clip: padding-box; + max-width: 400px; + min-width: 200px; + background-color: #fff; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + border: 1px solid #d9d9d9; + border-radius: 3px; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-popover::before, +.plx-popover::after { + content: ""; + position: absolute; + display: block; + width: 0; + height: 0; + border: solid transparent; +} +.plx-popover::before { + border-width: 7px; +} +.plx-popover::after { + border-width: 6px; +} +.plx-popover-top-common { + margin-top: -9px; +} +.plx-popover-top-common::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover-top-common::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover-top { + margin-top: -9px; +} +.plx-popover-top::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover-top::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover-top::before { + left: 50%; + margin-left: -7px; +} +.plx-popover-top::after { + left: 50%; + margin-left: -6px; +} +.plx-popover.plx-popover-top-left { + margin-top: -9px; +} +.plx-popover.plx-popover-top-left::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover.plx-popover-top-left::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover.plx-popover-top-left::before { + left: 10px; +} +.plx-popover.plx-popover-top-left::after { + left: 11px; +} +.plx-popover.plx-popover-top-right { + margin-top: -9px; +} +.plx-popover.plx-popover-top-right::before { + border-top-color: #ccc; + border-bottom-width: 0; + bottom: -7px; +} +.plx-popover.plx-popover-top-right::after { + border-top-color: #fff; + border-bottom-width: 0; + bottom: -6px; +} +.plx-popover.plx-popover-top-right::before { + right: 10px; +} +.plx-popover.plx-popover-top-right::after { + right: 11px; +} +.plx-popover-right-common { + margin-left: 9px; +} +.plx-popover-right-common::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover-right-common::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right { + margin-left: 9px; +} +.plx-popover.plx-popover-right::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover.plx-popover-right::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right::before { + top: 50%; + margin-top: -7px; +} +.plx-popover.plx-popover-right::after { + top: 50%; + margin-top: -6px; +} +.plx-popover.plx-popover-right-top { + margin-left: 9px; +} +.plx-popover.plx-popover-right-top::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover.plx-popover-right-top::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right-top::before { + top: 10px; +} +.plx-popover.plx-popover-right-top::after { + top: 11px; +} +.plx-popover.plx-popover-right-bottom { + margin-left: 9px; +} +.plx-popover.plx-popover-right-bottom::before { + border-right-color: #ccc; + border-left-width: 0; + left: -7px; +} +.plx-popover.plx-popover-right-bottom::after { + border-right-color: #fff; + border-left-width: 0; + left: -6px; +} +.plx-popover.plx-popover-right-bottom::before { + bottom: 10px; +} +.plx-popover.plx-popover-right-bottom::after { + bottom: 11px; +} +.plx-popover-bottom-common { + margin-top: 9px; +} +.plx-popover-bottom-common::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover-bottom-common::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom { + margin-top: 9px; +} +.plx-popover.plx-popover-bottom::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover.plx-popover-bottom::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom::before { + left: 50%; + margin-left: -7px; +} +.plx-popover.plx-popover-bottom::after { + left: 50%; + margin-left: -6px; +} +.plx-popover.plx-popover-bottom-left { + margin-top: 9px; +} +.plx-popover.plx-popover-bottom-left::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover.plx-popover-bottom-left::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom-left::before { + left: 10px; +} +.plx-popover.plx-popover-bottom-left::after { + left: 11px; +} +.plx-popover.plx-popover-bottom-right { + margin-top: 9px; +} +.plx-popover.plx-popover-bottom-right::before { + border-bottom-color: #ccc; + border-top-width: 0; + top: -7px; +} +.plx-popover.plx-popover-bottom-right::after { + border-bottom-color: #fff; + border-top-width: 0; + top: -6px; +} +.plx-popover.plx-popover-bottom-right::before { + right: 10px; +} +.plx-popover.plx-popover-bottom-right::after { + right: 11px; +} +.plx-popover-left-common { + margin-left: -9px; +} +.plx-popover-left-common::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover-left-common::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left { + margin-left: -9px; +} +.plx-popover.plx-popover-left::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover.plx-popover-left::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left::before { + top: 50%; + margin-top: -7px; +} +.plx-popover.plx-popover-left::after { + top: 50%; + margin-top: -6px; +} +.plx-popover.plx-popover-left-top { + margin-left: -9px; +} +.plx-popover.plx-popover-left-top::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover.plx-popover-left-top::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left-top::before { + top: 10px; +} +.plx-popover.plx-popover-left-top::after { + top: 11px; +} +.plx-popover.plx-popover-left-bottom { + margin-left: -9px; +} +.plx-popover.plx-popover-left-bottom::before { + border-left-color: #ccc; + border-right-width: 0; + right: -7px; +} +.plx-popover.plx-popover-left-bottom::after { + border-left-color: #fff; + border-right-width: 0; + right: -6px; +} +.plx-popover.plx-popover-left-bottom::before { + bottom: 10px; +} +.plx-popover.plx-popover-left-bottom::after { + bottom: 11px; +} +.plx-popover .plx-popover-title { + padding: 8px 14px; + margin-bottom: 0; + font-size: 16px; + background-color: #fff; + border-bottom: 1px solid #d9d9d9; +} +.plx-popover .plx-popover-title:empty { + display: none; +} +.plx-popover .plx-popover-content { + padding: 9px 14px; + background-color: #fff; +} +.plx-popover .ict-warning { + color: #ff5b55; + font-size: 24px; + margin-right: 5px; +} +.popover-template { + padding: 10px 0px; + min-width: 220px; +} +.popover-template .popover-template-content { + padding: 10px 10px; +} +.popover-template .popover-template-footer { + padding: 10px 10px 5px 10px; + text-align: center; +} +.popover-template .popover-template-icon { + display: inline-block; + max-width: 30px; + float: left; +} +.popover-template .popover-template-icon-area { + display: inline-block; + height: 100%; + vertical-align: middle; +} +.popover-template .popover-template-msg { + display: inline-block; + max-width: 300px; + margin-left: 10px; + margin-top: 1px; +} +.plx-progress { + display: inline-block; + margin: 0 10px 1px 0; + border-radius: 20px; + overflow: hidden; + background-color: #eee; +} +.plx-progress .plx-progress-bar { + width: 0; + height: 8px; + transition: width 0.8s ease-in-out; + opacity: 1; +} +.plx-progress .plx-progress-bar-info { + position: relative; + background-color: #33bcff; +} +.plx-progress .plx-progress-bar-info::before { + background-color: #00abff; + content: ''; + position: absolute; + top: 0; + left: 0; + width: 0; + height: 8px; + animation: plx-progress-bar-stripes 0.5s cubic-bezier(0.23, 1, 0.32, 1) infinite; +} +.plx-progress .plx-progress-bar-info.plx-progress-bar-reset { + transition: none; +} +.plx-progress .plx-progress-bar-warning { + background-color: #ff5b55; +} +.plx-progress .plx-progress-bar-success, +.plx-progress .plx-progress-bar-info.plx-progress-bar-success { + background-color: #00abff; +} +.plx-progress-info { + display: inline-block; +} +.plx-progress-info .fp-exclamation-circle { + color: #ff5b55; +} +@keyframes plx-progress-bar-stripes { + from { + width: 0; + } + to { + width: 100%; + } +} +:host(.plx-progressbar-sm) { + font-size: 12px; +} +:host(.plx-progressbar-sm) .plx-progress-bar { + height: 2px; +} +:host(.plx-progressbar-sm) .fp-exclamation-circle { + vertical-align: middle; + font-size: 12px; +} +:host(.plx-progressbar-sm) .plx-progress-info span { + vertical-align: middle; +} +.plx-progressbar-sm { + font-size: 12px; +} +.plx-progressbar-sm .plx-progress-bar { + height: 2px; +} +.plx-progressbar-sm .fp-exclamation-circle { + vertical-align: middle; + font-size: 12px; +} +.plx-progressbar-sm .plx-progress-info span { + vertical-align: middle; +} +.plx-progressbar-sm-common { + font-size: 12px; +} +.plx-progressbar-sm-common .plx-progress-bar { + height: 2px; +} +.plx-progressbar-sm-common .fp-exclamation-circle { + vertical-align: middle; + font-size: 12px; +} +.plx-progressbar-sm-common .plx-progress-info span { + vertical-align: middle; +} +.search-input { + position: relative; + background: #fff; + color: #595959; +} +.search-input input { + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; + width: 100%; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + color: #595959; +} +.short-text-input .search-input input { + width: 120px; +} +.text-input-with-unit .search-input input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .search-input input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .search-input input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .search-input input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .search-input input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .search-input input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .search-input input { + width: 246px; +} +.short-text-input.text-input-with-prefix .search-input input { + width: 80px; +} +.short-text-input.text-input-with-unit .search-input input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .search-input input { + width: 40px; +} +.search-input input:focus { + border: 1px solid #00abff; +} +.search-input input:disabled, +.search-input input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.search-input-sm { + height: 28px !important; +} +.search-img { + color: #bfbfbf; + position: absolute; + right: 8px; + top: 8px; + list-style: none; + font-size: 16px; +} +.search-img-confirm { + color: #008fd5; + cursor: pointer; +} +::-webkit-input-placeholder { + color: #999 !important; +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #999 !important; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #999 !important; +} +input:-ms-input-placeholder { + color: #999 !important; +} +input::-webkit-input-placeholder { + color: #999 !important; +} +select-dropdown { + box-sizing: border-box; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + outline: none; +} +select-dropdown > div { + background-color: #fff; + position: absolute; + z-index: 9999; +} +select-dropdown > div.select-sm .filter input { + height: 30px; +} +select-dropdown > div.select-sm .filter .toggle { + top: 13px; +} +select-dropdown > div .filter { + width: 100%; +} +select-dropdown > div .filter input { + border: 1px solid #00abff; + border-radius: 3px; + padding: 0 10px; + width: 100%; + height: 34px; +} +select-dropdown > div .filter .toggle { + display: block; + position: absolute; + top: 15px; + right: 10px; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #a6a6a6; +} +select-dropdown > div .options { + border: 1px solid #d9d9d9; + border-top: none; + border-radius: 3px; + max-height: 160px; + overflow-y: auto; +} +select-dropdown > div .options ul { + list-style: none; + margin: 0; + padding: 0; +} +select-dropdown > div .options ul li { + color: #595959; + height: 30px; + line-height: 18px; + padding: 6px 20px 6px 8px; + position: relative; + cursor: pointer; + user-select: none; +} +select-dropdown > div .options ul li.single-selected { + background-color: #f5f5f5; +} +select-dropdown > div .options ul li.highlighted { + background-color: #ebf6fd; + color: #595959; +} +select-dropdown > div .options ul li.disabled { + background-color: #fff; + color: #bfbfbf; + cursor: default; + pointer-events: none; +} +select-dropdown > div .options ul li.plx-select-message { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +select-dropdown > div .options ul li .option-label { + display: inline-block; + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +select-dropdown > div .options ul li .option-tick { + display: inline-block; + position: absolute; + right: 5px; + top: 5px; +} +select-dropdown > div .options ul li .tick { + fill: none; + stroke: #73cf22; + stroke-width: 2; + stroke-linecap: round; + stroke-linejoin: round; + stroke-miterlimit: 10; +} +plx-select { + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; + width: 100%; +} +plx-select.ng-untouched:not(form).ng-untouched:not(fieldset) { + border: 0; +} +plx-select * { + box-sizing: border-box; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + outline: none; +} +plx-select > div { + border: 1px solid #d9d9d9; + border-radius: 3px; + cursor: pointer; + user-select: none; + width: 100%; +} +plx-select > div.disabled { + background-color: #f5f5f5; + color: #bfbfbf; + cursor: not-allowed; +} +plx-select > div.focus-border { + border: 1px solid #00abff !important; +} +plx-select > div.select-sm .value, +plx-select > div.select-sm .placeholder { + height: 28px !important; + line-height: 28px !important; +} +plx-select > div.select-sm .toggle { + top: 13px; +} +plx-select > div.select-sm div.option { + height: 20px !important; + line-height: 14px !important; +} +plx-select > div.select-sm input { + height: 28px; + line-height: 28px; +} +plx-select > div input { + background-color: transparent; + border: none; + border-radius: 3px; + cursor: pointer; + height: 32px; + line-height: 32px; +} +plx-select > div .toggle { + display: block; + position: absolute; + top: 15px; + right: 10px; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #a6a6a6; +} +plx-select > div .single { + display: flex; + width: 100%; +} +plx-select > div .single .value, +plx-select > div .single .placeholder { + color: #595959; + flex: 1; + height: 32px; + line-height: 32px; + overflow: hidden; + padding: 0 10px; + white-space: nowrap; +} +plx-select > div .single .value span, +plx-select > div .single .placeholder span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; +} +plx-select > div .single .placeholder { + color: #999; +} +plx-select > div .single input { + flex: 1; + padding: 1px 10px 0 10px; +} +plx-select > div .multiple { + display: flex; + flex-flow: row wrap; + padding: 0 10px; + width: 100%; +} +plx-select > div .multiple .placeholder { + flex: 1; + color: #999; + height: 32px; + line-height: 32px; + overflow: hidden; + white-space: nowrap; +} +plx-select > div .multiple input { + padding: 0; + margin-right: 10px; +} +plx-select > div .multiple div.option { + background-color: #f8f8f8; + border: 1px solid #e6e6e6; + border-radius: 2px; + color: #595959; + cursor: default; + display: inline-block; + flex-shrink: 0; + height: 24px; + line-height: 18px; + margin: 4px 10px 4px 0; + padding: 2px 30px 2px 10px; + max-width: 100%; + position: relative; +} +plx-select > div .multiple div.option span { + display: inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; +} +plx-select > div .multiple div.option .deselect-option { + color: #c0c0c0; + cursor: pointer; + font-size: 8px; + position: absolute; + top: 2px; + right: 8px; +} +plx-select > div .multiple div.option .deselect-option:hover { + color: #555; +} +.plx-ui-steps { + height: 40px; +} +.plx-ui-horizon-ul-horizon { + display: flex; + box-orient: horizontal; + padding: 0; + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; +} +.plx-ui-steps-li { + list-style: none; + position: relative; + height: 24px; + line-height: 24px; + float: left; + margin-right: 0; +} +.plx-ui-steps-number-active { + color: #fff; + background-color: #00abff; + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + text-align: center; +} +.plx-ui-steps-number-passive { + background-color: #D7D7D7; + color: #fff; + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + text-align: center; +} +.plx-rapire-steps { + position: relative; +} +.plx-ui-steps-number-visited { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 10px; + float: left; + position: relative; + color: #00abff; + background-color: #fff; + border: 2px solid #00abff; +} +.plx-ui-menuitem-div-passive { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-menuitem-div-active { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-menuitem-div-passive { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-menuitem-div-visited { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.plx-ui-underline { + width: 386px; + height: 2px; + margin-top: 49px; + position: absolute; + background-color: #00abff; +} +.passive .plx-ui-underline { + background-color: #D7D7D7; +} +.plx-ui-steps-title-active { + white-space: nowrap; +} +.plx-ui-steps-title-passive { + white-space: nowrap; +} +.plx-ui-steps-title-visited { + white-space: nowrap; +} +.plx-ui-steps-number-visited-tick { + position: absolute; + background-color: transparent; + height: 12px; + width: 7px; + transform: rotate(45deg); + transform-origin: 50% 120%; + transition: all 0.2s; + border-right: 2px solid #00abff; + border-bottom: 2px solid #00abff; +} +/**********************************************************************************************************/ +.plx-ui-steps-display-vertical { + display: inline-block; +} +.plx-ui-steps-vertical { + height: auto; + width: auto; + min-width: 180px; + display: inline-block; + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; +} +.plx-ui-horizon-ul-vertical { + display: inline-block; + box-orient: vertical; + width: auto; + padding: 0; +} +.plx-ui-underline-active-vertical { + margin-left: 3px; + width: 10px; + display: table-caption; + min-height: 30px; + border-right: 2px solid #D7D7D7; +} +.plx-ui-underline-visited-vertical { + margin-left: 3px; + width: 10px; + display: table-caption; + height: 30px; +} +.plx-ui-underline-passive-vertical { + height: 30px; + margin-left: 3px; + width: 10px; + display: table-caption; + border-right: 2px solid #D7D7D7; +} +.plx-ui-steps-li-vertical { + list-style: none; + width: auto; +} +.plx-ui-steps-title-active-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 1px; + white-space: nowrap; +} +.plx-ui-steps-title-visited-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 3px; + white-space: nowrap; +} +.plx-ui-steps-title-passive-vertical { + margin-left: 10px; + position: absolute; + width: auto; + height: 24px; + min-width: 64px; + margin-top: 1px; + white-space: nowrap; +} +.plx-ui-steps-number-visited-tick-vertical { + position: absolute; + background-color: transparent; + height: 12px; + width: 7px; + transform: rotate(45deg); + transform-origin: 50% 120%; + transition: all 0.2s; +} +.plx-ui-steps-number-active-vertical { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + text-align: left; + position: relative; + line-height: 24px; +} +.plx-ui-steps-number-passive-vertical { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + text-align: left; + position: relative; + padding-top: 2px; + line-height: 24px; +} +.plx-ui-steps-number-visited-vertical { + width: 24px; + height: 24px; + border-radius: 50%; + display: inline-block; + margin-right: 0; + float: left; + position: relative; + line-height: 24px; +} +.plx-tabset { + display: flex; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.plx-tabset.plx-nav-tabs { + border-bottom: 1px solid #d9d9d9; + font-size: 14px; +} +.plx-tabset.plx-nav-tabs .plx-nav-item { + margin-bottom: -1px; +} +.plx-tabset.plx-nav-tabs .plx-nav-link { + display: block; + border-radius: 0; + border: 1px solid transparent; + border-top: 2px solid transparent; + color: #999; + min-width: 100px; + text-align: center; + padding: 6px 16px; +} +.plx-tabset.plx-nav-tabs .plx-nav-link:hover, +.plx-tabset.plx-nav-tabs .plx-nav-link:focus { + text-decoration: none; + background-color: #ebf6fd; + border-bottom: 0; + border-left: 0; + border-right: 0; +} +.plx-tabset.plx-nav-tabs .plx-nav-link.active { + color: #595959; + border-top: 2px solid #00abff; + border-left: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + background-color: #fff; +} +.plx-tabset.plx-nav-tabs .plx-nav-link.active:hover, +.plx-tabset.plx-nav-tabs .plx-nav-link.active:focus { + border-left: 1px solid #d9d9d9; + border-right: 1px solid #d9d9d9; + border-bottom: 1px solid transparent; +} +.plx-tabset.plx-nav-tabs.bottom .plx-nav-link { + border: 0; + border-bottom: 2px solid transparent; +} +.plx-tabset.plx-nav-tabs.bottom .plx-nav-link:hover { + border-bottom: 1px solid transparent; +} +.plx-tabset.plx-nav-tabs.bottom .plx-nav-link.active { + border: 0; + border-bottom: 2px solid #00abff; +} +.plx-tabset.plx-nav-pills .plx-nav-link { + border: 1px solid #d9d9d9; + border-radius: 0.25em; + color: #999; + display: block; + padding: 6px 10px; + min-width: 100px; + text-align: center; +} +.plx-tabset.plx-nav-pills .plx-nav-link:hover, +.plx-tabset.plx-nav-pills .plx-nav-link:focus { + text-decoration: none; + color: #00abff; + border-color: #00abff; + background-color: #fff; +} +.plx-tabset.plx-nav-pills .plx-nav-link:active { + color: #008fd5; + border-color: #008fd5; + background-color: #fff; +} +.plx-tabset.plx-nav-pills .plx-nav-link.active { + color: #fff; + cursor: default; + background-color: #00abff; + border-color: #00abff; +} +.plx-tabset.plx-nav-pills .plx-nav-item:hover, +.plx-tabset.plx-nav-pills .plx-nav-item:focus, +.plx-tabset.plx-nav-pills .plx-nav-item:active { + z-index: 2; +} +.plx-tabset.plx-nav-pills .plx-nav-item:first-child:not(:last-child) .plx-nav-link { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.plx-tabset.plx-nav-pills .plx-nav-item:not(:first-child):not(:last-child) .plx-nav-link { + border-radius: 0; +} +.plx-tabset.plx-nav-pills .plx-nav-item:last-child:not(:first-child) .plx-nav-link { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.plx-tabset.plx-nav-pills .plx-nav-item + .plx-nav-item .plx-nav-link { + margin-left: -1px; +} +.plx-tab-content .plx-tab-pane { + display: none; +} +.plx-tab-content .plx-tab-pane.active { + display: block; +} +.plx-table-wrapper { + position: relative; + width: 100%; +} +.plx-table-blur { + opacity: .7; + filter: blur(0.5px); +} +.plx-table-loading { + position: absolute; + width: 100%; + height: 100%; + opacity: 1; + z-index: 9999; +} +.plx-table-loading-content { + position: absolute; + width: 36px; + height: 36px; + border: 5px solid #00abff; + border-right-color: transparent; + top: calc(50% - 36px); + left: calc(50% - 18px); + animation: plx-table-loading-animation 1s infinite ease-in-out; + border-radius: 50%; +} +.plx-table-loading-placeholder { + position: absolute; + top: calc(50% + 10px); + left: calc(50% - 18px); +} +/* 加载中动画 */ +@-moz-keyframes plx-table-loading-animation { + 0% { + -moz-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes plx-table-loading-animation { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes plx-table-loading-animation { + 0% { + -moz-transform: rotate(0deg); + -ms-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -moz-transform: rotate(360deg); + -ms-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +/*表格样式*/ +.plx-table { + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + line-height: 1.5; + color: #595959; + border-collapse: collapse; + width: 100%; + display: table; + table-layout: fixed; + max-width: 100%; + min-width: 100%; + word-break: break-all; +} +.plx-table .plx-table-subHead th { + background-color: #fff; + line-height: 1; + border-bottom: 1px solid #d9d9d9; +} +.plx-table tr.plx-table-hlt { + background-color: #e2f2fc; +} +.plx-table tr:hover { + background-color: #ebf6fd; +} +.plx-table.plx-table-normal th { + box-sizing: border-box; + height: 40px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 12px; + border: 1px solid #d9d9d9; + background-color: #f5f5f5; +} +.plx-table.plx-table-normal td { + border: 1px solid #d9d9d9; + vertical-align: middle; + height: 40px; + padding: 2px 10px 0px 10px; +} +.plx-table.plx-table-large th { + box-sizing: border-box; + height: 50px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 12px; + border: none; + background-color: #f5f5f5; +} +.plx-table.plx-table-large td { + border-bottom: 1px solid #d9d9d9; + vertical-align: middle; + height: 50px; + padding: 2px 10px 0px 10px; +} +.plx-table.plx-table-card th { + box-sizing: border-box; + height: 64px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 12px; + border: none; + background-color: #f5f5f5; +} +.plx-table.plx-table-card td { + border-bottom: 1px solid #d9d9d9; + vertical-align: middle; + height: 64px; + padding: 2px 10px 0px 10px; +} +.plx-table.plx-table-sm th { + box-sizing: border-box; + height: 30px; + padding: 0px 10px ; + color: #595959; + text-decoration: none; + font-weight: normal; + font-size: 12px; + border: 1px solid #d9d9d9; + background-color: #f5f5f5; +} +.plx-table.plx-table-sm td { + border: 1px solid #d9d9d9; + vertical-align: middle; + height: 30px; + padding: 2px 10px 0px 10px; +} +.plx-table tbody tr:first-child td { + border-top: none; +} +.plx-table-fix { + table-layout: fixed; +} +/*防止分页区域高度塌陷*/ +.plx-table-pagnation-content { + overflow: auto; +} +/*搜索区域*/ +.plx-table-opretions-wrapper:after { + content: ''; + display: block; + clear: both; + height: 0; + visibility: hidden; +} +.plx-table-align-center { + text-align: center; +} +.plx-table-align-left { + text-align: left; +} +.plx-table-align-right { + text-align: right; +} +.plx-table-head-checkbox label { + margin-bottom: 0px; + vertical-align: top; +} +.plx-table td.plx-table-no-data { + height: 60px; + text-align: center; + font-size: 12px; + color: #595959; +} +.font { + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; +} +.text-input { + display: inline-block; +} +.text-input .caret-down { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #a6a6a6; + margin-top: 4px; + margin-bottom: 10px; +} +.text-input .caret-down.caret-down-hover:hover, +.text-input .caret-down.caret-down-hover:active { + border-top: 4px solid #00abff; +} +.text-input .caret-up { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid #a6a6a6; + margin-top: 10px; +} +.text-input .caret-up.caret-up-hover:hover, +.text-input .caret-up.caret-up-hover:active { + border-bottom: 4px solid #00abff; +} +.text-input .toggle { + float: right; + margin-right: 10px; + margin-top: 14px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #a6a6a6; +} +.text-input .text-input-dataList { + margin-top: 2px; + position: absolute; + z-index: 1050; + border: 1px solid #d9d9d9; + background: #fff; + cursor: pointer; + border-radius: 3px; +} +.text-input .text-input-dataList li { + list-style: none; + height: 32px; + width: 400px; + padding-left: 10px; +} +.text-input .text-input-dataList li:hover { + background-color: #ebf6fd; +} +.input-span { + display: inline-block; + overflow: visible; + padding: 0; + position: relative; +} +.text-input-with-hint { + margin-bottom: -8px; +} +:host(.ng-touched.ng-invalid.input-blur) .text-input-with-hint { + height: auto; + margin-bottom: 0; +} +.plx-text-input-unit-group, +.plx-text-input-prefix-group { + position: absolute; + margin-top: 5px; + width: 84px; + z-index: 1050; + border-radius: 3px; + background: #fff; + border: 1px solid #d9d9d9; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + cursor: pointer; +} +.plx-text-input-unit-group li, +.plx-text-input-prefix-group li { + padding-left: 10px; + height: 32px; + list-style: none; + line-height: 32px; + font-size: 12px; +} +.plx-text-input-unit-group li:hover, +.plx-text-input-prefix-group li:hover { + background-color: #ebf6fd; +} +.plx-text-input-unit-group li.group-selected, +.plx-text-input-prefix-group li.group-selected, +.plx-text-input-unit-group li.group-selected:hover, +.plx-text-input-prefix-group li.group-selected:hover { + background-color: #f5f5f5; + color: #595959; +} +.text-input-optional { + display: inline-block; + margin-right: 6px; + padding-left: 5px; +} +.input-right-border .plx-input { + border-right: 1px solid #00abff; +} +.input-left-border .plx-input { + border-left: 1px solid #00abff; +} +.text-input-hint { + top: 42px; + left: 10px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + color: #bfbfbf; +} +:host(.ng-touched.ng-invalid.input-blur) .text-input-hint { + display: none; +} +.text-input-prefix { + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + width: 70px; + height: 32px; + text-align: center; + line-height: 32px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + color: #bfbfbf; + border: 1px solid #d9d9d9; + border-right: 0; + vertical-align: middle; +} +.short-text-input .text-input-prefix { + width: 40px; +} +.input-span-focus .text-input-prefix { + border-color: #00abff; +} +.input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur .text-input-prefix, +.input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur .input-span-focus:focus .text-input-prefix { + border-color: #ff5b55; +} +.input-unit, +.text-input-unit-option { + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + height: 32px; + text-align: center; + line-height: 32px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.text-input-unit { + border: 1px solid #d9d9d9; + border-left: 0; + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + height: 32px; + line-height: 32px; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + color: #bfbfbf; + width: 45px; + text-align: center; + vertical-align: middle; +} +.short-text-input .text-input-unit { + width: 40px; +} +.input-span-focus .text-input-unit { + border-color: #00abff; +} +.text-input-prefix-option { + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-weight: 400; + font-size: 14px; + line-height: 14px; + color: #595959; + display: inline-block; + height: 32px; + text-align: center; + line-height: 32px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + width: 84px; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid #d9d9d9; + border-right: 0; + vertical-align: middle; +} +.text-input-prefix-option.prefix-focus { + border-color: #00abff; +} +.text-input-unit-option { + width: 84px; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid #d9d9d9; + border-left: 0; + vertical-align: middle; +} +.input-span-focus .text-input-unit-option { + border-color: #00abff; +} +.text-input-with-unitOption div.unit-focus { + border-color: #00abff; +} +.short-text-input .plx-input { + width: 120px; +} +.text-input-with-unit .plx-input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .plx-input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .plx-input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .plx-input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .plx-input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .plx-input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .plx-input { + width: 246px; +} +.short-text-input.text-input-with-prefix .plx-input { + width: 80px; +} +.short-text-input.text-input-with-unit .plx-input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .plx-input { + width: 40px; +} +.input-spinner-up { + cursor: pointer; + display: block; + font-size: 12px; + position: absolute; + margin: 0; + right: 0; + overflow: hidden; + border: none; + padding: 0; + text-align: center; + vertical-align: middle; + width: 18px; + top: 0; +} +.input-spinner-down { + cursor: pointer; + display: block; + font-size: 12px; + position: absolute; + margin: 0; + right: 0; + overflow: hidden; + border: none; + padding: 0; + text-align: center; + vertical-align: middle; + width: 18px; + bottom: 0; +} +:host(.plx-input-sm) .plx-input { + height: 28px; + line-height: 28px; +} +:host(.plx-input-sm) .text-input-prefix, +:host(.plx-input-sm) .text-input-unit, +:host(.plx-input-sm) .text-input-unit-option, +:host(.plx-input-sm) .text-input-prefix-option { + height: 28px; + line-height: 28px; +} +:host(.plx-input-sm) div.text-input-dataList { + height: 28px; +} +:host(.plx-input-sm) .toggle { + margin-top: 11px; +} +:host(.plx-input-sm) .caret-down { + margin-bottom: 8px; +} +:host(.plx-input-sm) .caret-up { + margin-top: 8px; +} +:host(.plx-input-sm) .plx-input-passwordSwitch { + line-height: 26px; +} +.plx-input-sm .plx-input { + height: 28px; + line-height: 28px; +} +.plx-input-sm .text-input-prefix, +.plx-input-sm .text-input-unit, +.plx-input-sm .text-input-unit-option, +.plx-input-sm .text-input-prefix-option { + height: 28px; + line-height: 28px; +} +.plx-input-sm div.text-input-dataList { + height: 28px; +} +.plx-input-sm .toggle { + margin-top: 11px; +} +.plx-input-sm .caret-down { + margin-bottom: 8px; +} +.plx-input-sm .caret-up { + margin-top: 8px; +} +.plx-input-sm .plx-input-passwordSwitch { + line-height: 26px; +} +.plx-input-sm-common .plx-input { + height: 28px; + line-height: 28px; +} +.plx-input-sm-common .text-input-prefix, +.plx-input-sm-common .text-input-unit, +.plx-input-sm-common .text-input-unit-option, +.plx-input-sm-common .text-input-prefix-option { + height: 28px; + line-height: 28px; +} +.plx-input-sm-common div.text-input-dataList { + height: 28px; +} +.plx-input-sm-common .toggle { + margin-top: 11px; +} +.plx-input-sm-common .caret-down { + margin-bottom: 8px; +} +.plx-input-sm-common .caret-up { + margin-top: 8px; +} +.plx-input-sm-common .plx-input-passwordSwitch { + line-height: 26px; +} +.plx-input-passwordSwitch { + display: inline-block; + line-height: 30px; + width: 40px; + text-align: center; + vertical-align: middle; + background-color: #fff; + border: 1px solid #d9d9d9; + border-left: 0; + border-bottom-right-radius: 3px; + border-top-right-radius: 3px; + cursor: pointer; +} +.plx-input-passwordSwitch:focus, +.plx-input-passwordSwitch:hover { + border-color: #00abff; + background-color: #fff; +} +.plx-input-passwordSwitch:focus.ict-eye-closed, +.plx-input-passwordSwitch:hover.ict-eye-closed, +.plx-input-passwordSwitch:focus.ict-eye, +.plx-input-passwordSwitch:hover.ict-eye { + color: #00abff; +} +.plx-input-passwordSwitch:active { + background-color: #fff; + border-color: #008fd5; +} +.plx-input-passwordSwitch:active.ict-eye-closed, +.plx-input-passwordSwitch:active.ict-eye { + color: #008fd5; +} +.plx-input-passwordSwitch.ict-eye-closed, +.plx-input-passwordSwitch.ict-eye { + color: #999; + font-size: 16px; +} +.input-right-border-pwdswith-hover .plx-input { + border-right-color: #00abff; +} +.input-right-border-pwdswith-click .plx-input { + border-right-color: #008fd5; +} +.plx-text-input-ip-dot { + display: inline-block; + vertical-align: bottom; + color: #999; +} +.plx-text-input-error { + font-size: 12px; + color: #ff5b55; + margin-top: 5px; +} +:host(.plx-text-input-ip-invalid) .plx-input { + border-color: #ff5b55; +} +:host(.plx-text-input-ip-invalid) .input-span-focus .plx-input { + border-color: #00abff; +} +.plx-text-input-ip-invalid .plx-input { + border-color: #ff5b55; +} +.plx-text-input-ip-invalid .input-span-focus .plx-input { + border-color: #00abff; +} +.plx-text-input-ip-invalid-common .plx-input { + border-color: #ff5b55; +} +.plx-text-input-ip-invalid-common .input-span-focus .plx-input { + border-color: #00abff; +} +.plx-textarea-container { + display: inline-block; +} +.plx-textarea-class { + width: 100%; + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + line-height: 1.5; + resize: none; + padding: 7px; + border: 1px solid #d9d9d9; + border-radius: 3px; + box-shadow: none; + outline: none; + overflow-y: auto; +} +.plx-textarea-class:focus { + border-color: #00abff; +} +.plx-textarea-class::-webkit-input-placeholder { + text-shadow: none; + -webkit-text-fill-color: initial; +} +.plx-align-tip { + vertical-align: top; + font-size: 12px; + font-weight: normal; + color: #bfbfbf; +} +.plx-align-number { + font-size: 12px; + font-weight: normal; + line-height: 1; + text-align: right; + width: 100%; + color: #bfbfbf; + margin-top: -2px; +} +.plx-toggle-switch { + display: inline-block; + height: 22px; + width: 44px; + position: relative; + vertical-align: middle; + text-align: left; + font-size: 0; +} +.plx-toggle-switch input[type='checkbox'] { + display: none; + -webkit-appearance: none; + -moz-appearance: none; + -ms-progress-appearance: none; +} +.plx-toggle-switch input[type='checkbox'] + label { + display: inline-block; + height: 22px; + position: relative; + cursor: pointer; +} +.plx-toggle-switch input[type='checkbox'] + label::before { + position: absolute; + display: inline-block; + content: ''; + height: 22px; + width: 44px; + border-radius: 11px; + transition: 0.15s ease-in; + transition-property: background-color; + background-color: #DDDDDD; +} +.plx-toggle-switch input[type='checkbox'] + label::after { + position: absolute; + display: inline-block; + content: ''; + height: 18px; + width: 18px; + border-radius: 50%; + top: 2px; + left: 2px; + transition: left 0.15s ease-in; + background-color: #fff; +} +.plx-toggle-switch input[type='checkbox']:checked + label::before { + background-color: #00abff; + transition: background-color 0.15s ease-in; +} +.plx-toggle-switch input[type='checkbox']:checked + label::after { + left: 24px; + transition: left 0.15s ease-in; +} +.plx-toggle-switch input[type='checkbox']:disabled + label, +.plx-toggle-switch input[type='checkbox']:checked:disabled + label { + cursor: not-allowed; +} +.plx-toggle-switch input[type='checkbox']:disabled + label::before, +.plx-toggle-switch input[type='checkbox']:checked:disabled + label::before { + opacity: 0.5; +} +:host(.plx-toggle-sm) .plx-toggle-switch { + height: 18px; + width: 34px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox'] + label { + height: 18px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox'] + label::before { + height: 18px; + width: 34px; + border-radius: 9px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox'] + label::after { + height: 14px; + width: 14px; +} +:host(.plx-toggle-sm) .plx-toggle-switch input[type='checkbox']:checked + label::after { + left: 18px; + transition: left 0.15s ease-in; +} +.plx-toggle-sm .plx-toggle-switch { + height: 18px; + width: 34px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox'] + label { + height: 18px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox'] + label::before { + height: 18px; + width: 34px; + border-radius: 9px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox'] + label::after { + height: 14px; + width: 14px; +} +.plx-toggle-sm .plx-toggle-switch input[type='checkbox']:checked + label::after { + left: 18px; + transition: left 0.15s ease-in; +} +.plx-toggle-sm-switch-common { + height: 18px; + width: 34px; +} +.plx-toggle-sm-switch-common input[type='checkbox'] + label { + height: 18px; +} +.plx-toggle-sm-switch-common input[type='checkbox'] + label::before { + height: 18px; + width: 34px; + border-radius: 9px; +} +.plx-toggle-sm-switch-common input[type='checkbox'] + label::after { + height: 14px; + width: 14px; +} +.plx-toggle-sm-switch-common input[type='checkbox']:checked + label::after { + left: 18px; + transition: left 0.15s ease-in; +} +.toolbar i.seperate-vertical { + margin-right: 10px; + margin-left: 0; + border-right: 1px solid #e9e9e9; +} +.toolbar span { + color: #595959; + cursor: pointer; + margin-right: 10px; + font-size: 16px; + display: inline-block; + width: 28px; + height: 28px; + border: 1px solid transparent; + padding: 5px; +} +.toolbar span:hover { + background-color: #ebf6fd; + border-radius: 2px; +} +.toolbar span:last-child { + margin-right: 0px; +} +.plx-tooltip { + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + opacity: 1; + position: absolute; + z-index: 10001; + display: block; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: break-word; +} +.plx-tooltip::before, +.plx-tooltip::after { + content: ""; + position: absolute; + display: block; + width: 0; + height: 0; + border: solid transparent; +} +.plx-tooltip::before { + border-width: 5px; +} +.plx-tooltip::after { + border-width: 4px; +} +.plx-tooltip-inner { + min-width: 60px; + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; +} +.plx-tooltip.show { + font-size: 12px; + opacity: 1; +} +.plx-tooltip.show .plx-tooltip-inner { + background-color: #595959; + border-radius: 3px; + padding: 0px 12px; + height: 30px; + line-height: 30px; +} +.plx-tooltip-top-common { + margin-top: -7px; +} +.plx-tooltip-top-common::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip-top-common::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip-top { + margin-top: -7px; +} +.plx-tooltip-top::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip-top::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip-top::before { + left: 50%; + margin-left: -5px; +} +.plx-tooltip-top::after { + left: 50%; + margin-left: -4px; +} +.plx-tooltip.plx-tooltip-top-left { + margin-top: -7px; +} +.plx-tooltip.plx-tooltip-top-left::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip.plx-tooltip-top-left::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip.plx-tooltip-top-left::before { + left: 5px; +} +.plx-tooltip.plx-tooltip-top-left::after { + left: 6px; +} +.plx-tooltip.plx-tooltip-top-right { + margin-top: -7px; +} +.plx-tooltip.plx-tooltip-top-right::before { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -5px; +} +.plx-tooltip.plx-tooltip-top-right::after { + border-top-color: #595959; + border-bottom-width: 0; + bottom: -4px; +} +.plx-tooltip.plx-tooltip-top-right::before { + right: 5px; +} +.plx-tooltip.plx-tooltip-top-right::after { + right: 6px; +} +.plx-tooltip-right-common { + margin-left: 7px; +} +.plx-tooltip-right-common::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip-right-common::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right { + margin-left: 7px; +} +.plx-tooltip.plx-tooltip-right::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip.plx-tooltip-right::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right::before { + top: 50%; + margin-top: -5px; +} +.plx-tooltip.plx-tooltip-right::after { + top: 50%; + margin-top: -4px; +} +.plx-tooltip.plx-tooltip-right-top { + margin-left: 7px; +} +.plx-tooltip.plx-tooltip-right-top::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip.plx-tooltip-right-top::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right-top::before { + top: 5px; +} +.plx-tooltip.plx-tooltip-right-top::after { + top: 6px; +} +.plx-tooltip.plx-tooltip-right-bottom { + margin-left: 7px; +} +.plx-tooltip.plx-tooltip-right-bottom::before { + border-right-color: #595959; + border-left-width: 0; + left: -5px; +} +.plx-tooltip.plx-tooltip-right-bottom::after { + border-right-color: #595959; + border-left-width: 0; + left: -4px; +} +.plx-tooltip.plx-tooltip-right-bottom::before { + bottom: 5px; +} +.plx-tooltip.plx-tooltip-right-bottom::after { + bottom: 6px; +} +.plx-tooltip-bottom-common { + margin-top: 7px; +} +.plx-tooltip-bottom-common::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip-bottom-common::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom { + margin-top: 7px; +} +.plx-tooltip.plx-tooltip-bottom::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip.plx-tooltip-bottom::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom::before { + left: 50%; + margin-left: -5px; +} +.plx-tooltip.plx-tooltip-bottom::after { + left: 50%; + margin-left: -4px; +} +.plx-tooltip.plx-tooltip-bottom-left { + margin-top: 7px; +} +.plx-tooltip.plx-tooltip-bottom-left::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip.plx-tooltip-bottom-left::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom-left::before { + left: 5px; +} +.plx-tooltip.plx-tooltip-bottom-left::after { + left: 6px; +} +.plx-tooltip.plx-tooltip-bottom-right { + margin-top: 7px; +} +.plx-tooltip.plx-tooltip-bottom-right::before { + border-bottom-color: #595959; + border-top-width: 0; + top: -5px; +} +.plx-tooltip.plx-tooltip-bottom-right::after { + border-bottom-color: #595959; + border-top-width: 0; + top: -4px; +} +.plx-tooltip.plx-tooltip-bottom-right::before { + right: 5px; +} +.plx-tooltip.plx-tooltip-bottom-right::after { + right: 6px; +} +.plx-tooltip-left-common { + margin-left: -7px; +} +.plx-tooltip-left-common::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip-left-common::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left { + margin-left: -7px; +} +.plx-tooltip.plx-tooltip-left::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip.plx-tooltip-left::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left::before { + top: 50%; + margin-top: -5px; +} +.plx-tooltip.plx-tooltip-left::after { + top: 50%; + margin-top: -4px; +} +.plx-tooltip.plx-tooltip-left-top { + margin-left: -7px; +} +.plx-tooltip.plx-tooltip-left-top::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip.plx-tooltip-left-top::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left-top::before { + top: 5px; +} +.plx-tooltip.plx-tooltip-left-top::after { + top: 6px; +} +.plx-tooltip.plx-tooltip-left-bottom { + margin-left: -7px; +} +.plx-tooltip.plx-tooltip-left-bottom::before { + border-left-color: #595959; + border-right-width: 0; + right: -5px; +} +.plx-tooltip.plx-tooltip-left-bottom::after { + border-left-color: #595959; + border-right-width: 0; + right: -4px; +} +.plx-tooltip.plx-tooltip-left-bottom::before { + bottom: 5px; +} +.plx-tooltip.plx-tooltip-left-bottom::after { + bottom: 6px; +} +.plx-checkbox-container { + font-size: 0; + position: relative; +} +.plx-checkbox { + position: absolute; + z-index: -1; + opacity: 0; +} +.plx-checkbox + .checkbox-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 14px; + width: 14px; + border: 1px solid #d9d9d9; + border-radius: 2px; + vertical-align: middle; +} +.plx-checkbox + .checkbox-substitute + span { + font-weight: normal; + font-size: 12px; + cursor: pointer; + vertical-align: middle; + padding-left: 6px; +} +.plx-checkbox:hover + .checkbox-substitute { + border-color: #00abff; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-checkbox:checked + .checkbox-substitute { + border-color: #00abff; + background-color: #00abff; +} +.plx-checkbox:checked + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 3px; + top: 0; +} +.plx-checkbox:checked.portion + .checkbox-substitute { + background-color: #00abff; + border-color: #00abff; + opacity: 0.5; +} +.plx-checkbox:disabled + .checkbox-substitute, +.plx-checkbox[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #f5f5f5; + cursor: not-allowed; +} +.plx-checkbox:disabled + .checkbox-substitute + span, +.plx-checkbox[disabled] + .checkbox-substitute + span { + cursor: not-allowed; +} +.plx-checkbox:checked.portion[disabled] + .checkbox-substitute { + background-color: #d9d9d9; + border-color: #d9d9d9; +} +.plx-checkbox:checked.portion[disabled] + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #999; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 3px; + top: 0; +} +.plx-checkbox:checked[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #d9d9d9; +} +.plx-treenode { + cursor: pointer; + background-attachment: scroll; + background-color: transparent; + background-image: none; + background-position: 0 0; + background-repeat: repeat-y; + list-style: none outside none; + margin: 0; + padding: 0; + white-space: nowrap; + font-size: 12px; +} +.plx-treenode .plx-treenode-content { + margin-top: 10px; +} +.plx-treenode .plx-treenode-content.light { + margin-top: 15px; +} +.plx-treenode ul.plx-treenode-children { + display: block; + -webkit-padding-start: 21px; +} +.plx-treenode-toggler { + font-size: 16px; + color: #00abff; + display: inline-block; + margin-right: 7px; + margin-top: 2px; + vertical-align: bottom; + float: left; +} +.plx-treenode-ckbox { + float: left; + margin-right: 10px; + margin-top: 2px; +} +.plx-treenode-icon { + color: #999; + margin-right: 10px; + float: left; + font-size: 16px; + vertical-align: bottom; + margin-top: 2px; +} +.plx-treenode-label-container { + overflow: visible; +} +.plx-treenode-label-container.plx-treenode-label-ellipsis { + overflow: hidden; +} +.plx-treenode-label-container:hover { + background-color: #ebf6fd; +} +.plx-treenode-active > div .plx-treenode-label-container { + background-color: #e2f2fc; +} +.plx-treenode-active > div .plx-treenode-label-container:hover { + background-color: #ebf6fd; +} +.plx-treenode-label-container span:last-child { + margin-right: 5px; +} +.plx-treenode-lable { + display: inline-block; + vertical-align: 0; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + color: #595959; +} +.plx-treenode-lable span { + display: inline-block; + overflow: hidden; + max-width: 100%; + text-overflow: ellipsis; + white-space: nowrap; + vertical-align: bottom; +} +.plx-treenode-operations { + margin-left: 20px; + display: none; + vertical-align: bottom; + width: fit-content; + line-height: 1; + margin-bottom: 1px; +} +.plx-treenode-operation { + display: inline-block; + margin-right: 10px; + color: #999; + font-size: 16px; + vertical-align: text-bottom; +} +.plx-treenode-operation:hover { + color: #00abff; +} +.plx-treenode-label-container:hover .plx-treenode-operations { + display: inline-block; +} +*:focus { + outline: none; + box-shadow: none !important; +} +input[type="checkbox"]:focus { + border: 0 !important; +} +.plx-treenode-hide-tree-toggle { + visibility: hidden; +} +.plx-treenode-droppoint { + height: 4px; + list-style-type: none; +} +.plx-treenode-droppoint-active { + background-color: #186ba0; + border: 0 none; +} +.upload-wrapper { + font-size: 12px; + position: relative; + display: inline-block; +} +.upload-wrapper .item-text { + max-width: 280px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + margin-bottom: 2px; + font-size: 12px; +} +.upload-wrapper .item-text.no-progressbar { + vertical-align: middle; +} +.upload-wrapper .plx-upload-progressbar { + margin-top: -13px; +} +.upload-wrapper .list-group-item { + border: 0; + padding: 0; +} +.upload-wrapper .list-group-item .item { + width: 335px; + padding: 0 0 5px 0px; +} +.upload-wrapper .list-group-item .item .item-text-wrapper { + position: relative; + display: inline-block; + width: 100%; + box-sizing: border-box; + height: 40px; + padding: 2px 3px 2px 10px; + border: 1px solid transparent; +} +.upload-wrapper .list-group-item .item .item-text-wrapper .text-red { + color: #ff5b55 !important; +} +.upload-wrapper .list-group-item .item .item-text-wrapper:hover { + background-color: #ebf6fd; + cursor: default; +} +.upload-wrapper .list-group-item .item .item-text-wrapper:hover .plx-ico-close-16 { + display: block; + transform: scale(0.8); +} +.upload-wrapper .list-group-item .item .item-text-wrapper.no-progressbar { + height: 28px; +} +.upload-wrapper .list-group-item .item .item-delete { + height: 14px; + width: 16px; + text-align: center; + line-height: 14px; + position: absolute; + right: 2%; + color: #999999; + display: none; + top: 3px; +} +.upload-wrapper .list-group-item .item .item-delete:hover { + cursor: pointer; + color: #666666; +} +.upload-wrapper .list-group-item .item .item-delete.no-progressbar { + top: 6px; +} +.upload-wrapper .plx-ico-close-16 { + font-size: 16px; + float: right; + cursor: pointer; +} +.upload-wrapper ul.list-group { + margin-top: 15px; +} +.upload-wrapper .url-form-control { + display: inline-block; +} +.upload-wrapper .item-detail { + color: #aaa; + position: relative; + padding: 0 10px; + font-size: 12px; +} +.upload-wrapper .item-detail div { + margin: 0px 0px 15px 0; +} +.upload-wrapper .item-detail .detail { + margin: 5px 0 10px 0; +} +.upload-wrapper .item-detail-des { + display: inline-block; + width: 170px; + word-wrap: break-word; + margin-left: 15px; + vertical-align: top; +} +.upload-wrapper .item-detail-time { + display: inline-block; + width: 119px; + word-break: break-all; + vertical-align: top; +} +.upload-wrapper .selectFile { + display: inline-block; + min-width: 50px; + margin-right: 10px; + text-align: right; +} +.upload-wrapper label.raw-container { + margin: 0 10px; +} +.upload-wrapper .item-lists { + font-size: 12px; +} +.upload-wrapper .list-container { + padding-right: 15px; +} +.upload-wrapper .list-container.plx-upload-Manual-showdetail { + margin-left: -22px; +} +.upload-wrapper .list-container.plx-upload-auto-showdetail { + margin-left: -10px; +} +.upload-wrapper .list-footer .upload-btn { + margin-top: 10px; +} +.upload-wrapper .upload-btn { + display: inline-block; +} +.upload-wrapper .loader-container { + position: absolute; + display: inline-block; + top: 8px; + left: 12px; +} +.upload-wrapper .list-group-item-pdleft-s { + padding: 0px 0px 0px 12px; +} +.upload-wrapper .list-group-item-pdleft { + padding: 0px 0px 0px 12px !important; +} +.upload-wrapper .upload-btn-wrapper { + display: inline-block; +} +.upload-wrapper .plx-red.left { + margin-left: 75px; +} +.upload-wrapper .expand-wrapper { + position: absolute; + left: 20px; + top: 4px; + display: inline-block; + font-size: 12px; +} +.upload-wrapper .expand-wrapper.open .ict-go { + display: none; +} +.upload-wrapper .expand-wrapper.open .ict-fold { + display: block; +} +.upload-wrapper .expand-wrapper i { + height: 18px; + width: 20px; + text-align: left; + line-height: 19px; + cursor: pointer; +} +.upload-wrapper .ict-fold { + display: none; + color: #00abff; + font-weight: bold; + transform: scale(0.7); +} +.upload-wrapper .ict-go { + display: block; + color: #00abff; + font-weight: bold; + transform: scale(0.7); +} +.upload-wrapper .no-customparm-extend-wrapper { + left: -2px !important; +} +/* loding动画效果*/ +.upload-wrapper .loader { + font-size: 12px; + width: 12px; + height: 12px; + display: inline-block; + border-radius: 50%; + background: #00abff; + background: -moz-linear-gradient(left, #00abff 10%, rgba(255, 255, 255, 0) 85%); + background: -webkit-linear-gradient(left, #00abff 10%, rgba(255, 255, 255, 0) 85%); + background: -o-linear-gradient(left, #00abff 10%, rgba(255, 255, 255, 0) 85%); + background: -ms-linear-gradient(left, #00abff 10%, rgba(255, 255, 255, 0) 85%); + background: linear-gradient(to right, #00abff 10%, rgba(255, 255, 255, 0) 85%); + position: relative; + -webkit-animation: load3 1.4s infinite linear; + animation: load3 1.4s infinite linear; +} +.upload-wrapper .loader:before { + width: 50%; + height: 50%; + background: #00abff; + border-radius: 100% 0 0 0; + position: absolute; + top: 0; + left: 0; + content: ''; +} +.upload-wrapper .loader:after { + background: #fff; + width: 75%; + height: 75%; + border-radius: 50%; + content: ''; + margin: auto; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} +@-webkit-keyframes load3 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes load3 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +.plx-table-customCols { + height: 40px; + float: right; +} +.plx-table-customCols-toggle { + display: inline-block; + border-radius: 3px; + width: 30px; + height: 23px; + border: 1px solid #d9d9d9; + vertical-align: top; + text-align: center; + padding-top: 7px; + margin-left: 6px; + cursor: pointer; + box-sizing: content-box; +} +.plx-table-customCols-toggle .ict-col:before { + vertical-align: top; +} +.plx-table-customCols-toggle:hover { + background-color: #fff; +} +.plx-table-customCols-toggle:active { + background-color: #fff; +} +.toggle-icon { + display: inline-block; + height: 14px; + border-right: 1px solid #595959; + vertical-align: top; + padding-left: 4px; +} +.toggle-icon:first-child { + padding-left: 0; +} +.plx-table-customCols-pannel { + margin-top: 5px; + margin-right: 5px; + border: 1px solid #d9d9d9; + background-color: #fff; + z-index: 1010; + position: absolute; + right: 0px; + border-radius: 5px; + font-size: 12px; + color: #595959; + overflow: auto; + min-width: 300px; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar { + display: flex; + justify-content: space-between; + padding: 16px; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper { + display: flex; + flex: auto; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper input { + border-radius: 3px; + flex: auto; + padding-left: 28px; + border: 1px solid #d9d9d9; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper input:focus { + border: 1px solid #00abff; + outline: none; +} +.plx-table-customCols-pannel .plx-table-customCols-toolbar .plx-table-filter-wrapper span { + color: #bfbfbf; + line-height: 28px; + position: relative; + left: 20px; +} +.plx-table-customCols-pannel .plx-table-customCols-items { + cursor: pointer; + border-bottom: 1px solid #e9e9e9; + border-top: 1px solid #e9e9e9; +} +.plx-table-customCols-pannel .plx-table-customCols-items > div:hover { + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-table-customCols-pannel .plx-table-customCols-items label { + margin-bottom: 0px; + vertical-align: -moz-middle-with-baseline; + vertical-align: -webkit-baseline-middle; + vertical-align: 25%; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-item > span { + padding: 0px 6px; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-operations { + visibility: hidden; + float: right; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-operations div { + box-sizing: content-box; + padding: 0px 8px; + display: inline-block; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight { + background-color: #e2f2fc; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight .plx-table-customCols-operations .plx-table-goup-show { + visibility: visible; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight .plx-table-customCols-operations .plx-table-godown-show { + visibility: visible; +} +.plx-table-customCols-pannel .plx-table-customCols-items .heighLight .plx-table-customCols-operations span { + color: #00abff; +} +.plx-table-customCols-pannel .plx-table-customCols-items .dragging { + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2); +} +.plx-table-customCols-pannel .plx-table-customCols-items .dragEnter { + background-color: #00abff; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-dropArea { + height: 10px; + border-bottom: 1px solid #e9e9e9; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-dropArea-before { + height: 10px; + border-bottom: none; +} +.plx-table-customCols-pannel .plx-table-customCols-items > div:last-child .plx-table-customCols-dropArea { + border-bottom: none; +} +.plx-table-customCols-pannel .plx-table-customCols-items .plx-table-customCols-item { + line-height: 20px; + height: 20px; + padding: 0px 16px; +} +.plx-table-customCols-pannel .plx-table-customCols-confirm { + display: flex; + align-items: center; + justify-content: center; + padding: 16px 16px; +} +.plx-table-col-filter { + border: 1px solid #d9d9d9; + margin: 5px; + box-sizing: border-box; + height: 30px; +} +.plx-table-col-filter input { + width: calc(100% - 25px); + line-height: normal; + font-weight: normal; + border: none; + height: 26px; + font-size: 12px; + box-sizing: border-box; +} +.plx-table-col-filter input:focus { + outline: none; +} +.plx-table-col-filter .filterIcon { + /*position: absolute;*/ + top: 6px; + left: 3px; + fill: #dedede; + width: 14px; +} +.plx-filter-focused { + outline: none; + border: 1px solid #00abff; +} +.plx-table-col-icon-wrapper { + padding-left: 5px; + display: inline-block; + line-height: 30px; +} +.plx-table-col-icon-wrapper span { + vertical-align: sub; +} +::-webkit-input-placeholder { + /* WebKit browsers */ + color: #c1c1c1; +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #c1c1c1; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #c1c1c1; +} +:-ms-input-placeholder { + /* Internet Explorer 10+ */ + color: #c1c1c1; +} +.plx-table-selectFilter-wrapper { + display: inline-block; + vertical-align: middle; + height: 28px; + cursor: pointer; + /*此处 若不为absolute则被td遮挡*/ + position: absolute; +} +.plx-table-selectFilter-icon { + vertical-align: middle; + height: 28px; + fill: #999; +} +.icon-selectFilter-activtied { + fill: #00abff; +} +.plx-table-selectFilter-panel { + margin-top: -5px; + border: 1px solid #d9d9d9; + background-color: #fff; + padding: 10px; + right: 0px; + border-radius: 5px; + /*此处若为absolute则文本要换行,恩,玄学*/ + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-table-selectFilter-panel span { + vertical-align: -25%; + font-size: 12px; +} +.plx-table-selectFilter-panel label { + line-height: normal; +} +.plx-table-selectFilter-panel div { + line-height: normal; +} +.plx-table-filter { + height: 40px; + float: right; +} +.plx-table-filter input { + border-radius: 3px; + line-height: normal; + padding: 0px 6px; + font-weight: normal; + border: 1px solid #d9d9d9; + margin-bottom: 10px; + height: 32px; + width: 200px; + box-sizing: border-box; + font-size: 12px; + color: #595959; +} +.plx-table-filter input:focus { + outline: none; + border: 1px solid #00abff; +} +.plx-table-filterToggle { + display: inline-block; + width: 30px; + height: 30px; + border-radius: 3px; + border: 1px solid #d9d9d9; + vertical-align: top; + text-align: center; + margin-left: 6px; + cursor: pointer; + box-sizing: content-box; +} +.plx-table-filterToggle.ict-filter:before { + line-height: 30px; +} +.plx-table-filterToggle.ict-filter-f:before { + line-height: 30px; + color: #00abff; +} +.plx-table-filter-icon-wrapper { + vertical-align: middle; + display: inline-block; + padding-top: 5px; +} +.plx-table-filterIcon { + fill: #595959; +} +.plx-table-pagination { + float: right; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + color: #595959; + margin-top: 10px; + margin-bottom: 10px; +} +.plx-table-pagination-content { + display: inline-block; + text-decoration: none; +} +.plx-table-pagination-item { + list-style-type: none; + display: inline-block; +} +.plx-table-pagination-item span { + vertical-align: middle; +} +.plx-table-pagination-item select { + vertical-align: middle; + height: 26px; + width: 45px; + border: 1px solid #d9d9d9; +} +.plx-table-pagination-input { + padding: 1px; + height: 26px; + width: 45px; + margin-left: 1px; + margin-right: 1px; + font-size: 12px; + color: #595959; + box-sizing: border-box; + border: 1px solid #d9d9d9; + text-align: center; + vertical-align: middle; +} +.plx-table-pagination-nav { + display: inline-block; + height: 26px; + border: 1px solid #d9d9d9; + font-size: 14px; + text-decoration: none; + color: #595959; + padding-left: 6px; + padding-right: 6px; + cursor: pointer; + text-align: center; + vertical-align: middle; + box-sizing: border-box; +} +a:not([href]):not([tabindex]).plx-table-pagination-disabled { + color: #bfbfbf; + cursor: not-allowed; +} +.plx-table-dropdown-wrapper { + cursor: pointer; +} +.plx-table-dropdown-icon-shared { + font-size: 20px; + line-height: 2.2 !important; + cursor: pointer; +} +.plx-table-dropdown-icon-polyline-shared { + height: 16px; + width: 16px; + stroke: #00abff ; +} +.ict-down, +.ict-up { + font-size: 20px; + line-height: 2.2 !important; + cursor: pointer; +} +.ict-down polyline, +.ict-up polyline { + height: 16px; + width: 16px; + stroke: #00abff ; +} +.ict-down polyline:hover, +.ict-up polyline:hover { + stroke: #2d91c4; +} +.plx-table-innerTr { + border: 1px solid #d9d9d9; +} +.plx-table-innerTr #plx-table-innerTd { + padding: 0px; +} +.plx-table-innerTable { + width: 100%; +} +.plx-table-innerTable tr { + color: #595959; + font-size: 12px; +} +.plx-table-innerTable tr td#plx-inner-table-title, +.plx-table-innerTable tr td#plx-inner-table-content { + padding: 8px; + height: 40px; + border: none; + border-bottom: 1px solid #d9d9d9; +} +.plx-table-innerTable tr td:first-child { + text-align: right; +} +.plx-table-innerTable tr td:last-child { + text-align: left; +} +.plx-table-innerTable tr:last-child td#plx-inner-table-title, +.plx-table-innerTable tr:last-child td#plx-inner-table-content { + border-bottom: none; +} +/* 排序图标 */ +.plx-table-sort-icon-shared { + display: block; + cursor: pointer; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + margin-bottom: 2px; +} +.plx-table-sortIconWrapper { + display: inline-block; + vertical-align: middle; + margin-left: 3px; +} +/* 排序图标:箭头向上 */ +.plx-table-sortAsc { + display: block; + cursor: pointer; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + margin-bottom: 2px; + border-bottom: 5px solid #999; +} +.plx-table-ascActived { + border-bottom: 5px solid #00abff; +} +/* 排序图标:箭头向下 */ +.plx-table-sortDesc { + display: block; + cursor: pointer; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + margin-bottom: 2px; + border-top: 5px solid #999; +} +.plx-table-descActived { + border-top: 5px solid #00abff; +} +.plx-color-picker-border-radius { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.plx-color-picker * { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + margin: 0; + font-size: 12px; + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; +} +.plx-color-picker { + cursor: default; + width: 246px; + height: auto; + left: 30px; + top: 250px; + position: absolute; + z-index: 1000; + background-color: #fff; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + border-radius: 3px; + border: 1px solid #d9d9d9; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.plx-color-picker i { + cursor: default; + position: relative; +} +.plx-color-picker input { + font-size: 12px; + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; + text-align: center; + height: 24px; + -moz-appearance: textfield; +} +.short-text-input .plx-color-picker input { + width: 120px; +} +.text-input-with-unit .plx-color-picker input { + width: 355px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-unitOption .plx-color-picker input { + width: 316px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix .plx-color-picker input { + width: 330px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-prefixOption .plx-color-picker input { + width: 316px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.text-input-with-passwordSwith .plx-color-picker input { + width: 360px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.text-input-with-prefix.text-input-with-unit .plx-color-picker input { + width: 285px; +} +.text-input-with-prefix.text-input-with-unitOption .plx-color-picker input { + width: 246px; +} +.short-text-input.text-input-with-prefix .plx-color-picker input { + width: 80px; +} +.short-text-input.text-input-with-unit .plx-color-picker input { + width: 80px; +} +.short-text-input.text-input-with-prefix.text-input-with-unit .plx-color-picker input { + width: 40px; +} +.plx-color-picker input:focus { + border: 1px solid #00abff; +} +.plx-color-picker input:disabled, +.plx-color-picker input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.plx-color-picker input:invalid { + box-shadow: none; +} +.plx-color-picker input:-moz-submit-invalid { + box-shadow: none; +} +.plx-color-picker input:-moz-ui-invalid { + box-shadow: none; +} +.plx-color-picker input::-webkit-outer-spin-button, +.plx-color-picker input::-webkit-outer-spin-button { + -webkit-appearance: textfield; + margin: 0; +} +.plx-color-picker .color-picker-overlay1 { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + position: absolute; + left: 0; + top: 0; + width: 244px; + height: 118px; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')"; + /* IE8 */ + background: -moz-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, right top, color-stop(0%, #ffffff), color-stop(100%, rgba(255, 255, 255, 0))); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(left, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + /* IE10+ */ + background: linear-gradient(to right, #ffffff 0%, rgba(255, 255, 255, 0) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff'); + /* IE6 & IE7 */ +} +.plx-color-picker .color-picker-overlay2 { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + position: absolute; + left: 0; + top: 0; + width: 244px; + height: 118px; + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')"; + /* IE8 */ + background: -moz-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(0, 0, 0, 0)), color-stop(100%, #000000)); + /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* Opera 11.10+ */ + background: -ms-linear-gradient(top, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* IE10+ */ + background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, #000000 100%); + /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#000000', GradientType=0); + /* IE6-9 */ +} +.plx-color-picker .color-picker-saturation-lightness { + border-top-left-radius: 3px; + border-top-right-radius: 3px; + cursor: pointer; + width: 244px; + height: 118px; + border: none; + background-size: 100% 100%; +} +.plx-color-picker .color-picker-hue { + cursor: pointer; + border-radius: 3px; + width: 168px; + height: 10px; + border: none; + margin-bottom: 10px; + background-size: 100% 100%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAQCAYAAAD06IYnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIWDwkUFWbCCAAAAFxJREFUaN7t0kEKg0AQAME2x83/n2qu5qCgD1iDhCoYdpnbQC9bbY1qVO/jvc6k3ad91s7/7F1/csgPrujuQ17BDYSFsBAWwgJhISyEBcJCWAgLhIWwEBYIi2f7Ar/1TCgFH2X9AAAAAElFTkSuQmCC'); +} +.plx-color-picker .color-picker-alpha { + cursor: pointer; + border-radius: 3px; + width: 168px; + height: 10px; + border: none; + background-size: 100% 100%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAAKCAYAAAAgnxVRAAAC9klEQVRYhdVYPc7bMAylku7WViCrfJ2cocfoGXqLHslbDhAvHjNkCBBRHSoZzwQpKW7T7yuBwAn9+CtKIuOu1+vXy+UyPx6PL5QphEDee0KKMdI0TRveP8KlaZoSEZUPhxCS9z4RERd+jJEzbuWFEKL3nlEWcDHzYgiBQR//Nht5miZGXrbLWbaGY+99RBuAK3zOuGfBZP+iwJU4ItgtuAiyaJdBH2fc6iPoY9CH/jH4xyKOJHAJcEnRlwxcWY8k1o3KepxOp3Rg5h9YnJ+UkvjtxNPCO8Ak4MunxevxRXun6UVCn1ynXyhb5Mp7Tc4Z3y0e6pG2tXw7quuQWI0v/ZGx0cEAfzaygtUWBAPVClXqRblaErX3cgPU/C4Y/Gi+1+TRTllI/FjUKvjy1OxLf60NodmUG9GSQRuY5/+mQAtpye0pEKvwrELRsGhPW/CWrNwsTnnXc8rgUxaPptOi3huj6NVyJ3NR2yS9mI0/rxRoTyDvJmvhe65U7QrT9LRO0pYti2oLYxW9/F07/WqbbY9Pmm/ajSR9kLH0knoLuPv9/vN2u31D5rIsNM/zBjgMA43jSB+AS+M4rk11xvE8z8hLwzDwOI6bpnxZljTPc+FFIuKsrwwHiYhixm2GhoxDnoaLYHflZ/82w9QwDNHAbYaajJN2o6KPM24dksDuE+KIEC8DbiML8a65UnCc7SbwJYHdNf+AY4FLAifXt6xbOp/Pae8V/xGnKfYxrUZbXu2J7GtK6rbIuuIsn1q9Xk9faMnW9PTEIm1ofTgZPDwpe6/r3TfR3gLtScDfplrPRuKdFryVBOu6avmh9b6vDCqtReuRlba1KdvqS63caTwrLq2t0NqTVs9u0juGpHecrr2TYyFtuu0pnt7pVPtuye8d3jQ8vu8psNqJ+sohgydmq0+3NkmtMM1/Eg7Oue/H4/H5grMtqk3Vf6Lz1SRbxWPh5ADQc5q0pm38bk3emtyeHMoC0ApCa3/2tAOtjSWLWDv1rc204f8CQvGUIhalBqwAAAAASUVORK5CYII='); +} +.plx-color-picker .color-picker-alpha-ba { + position: absolute; + background: linear-gradient(90deg, rgba(255, 255, 255, 0), #000); +} +.plx-color-picker .selected-color { + width: 30px; + height: 30px; + top: 0px; + left: 0px; + position: absolute; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; +} +.plx-color-picker .selected-color-background { + width: 30px; + height: 30px; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAh0lEQVRYR+2W0QlAMQgD60zdfwOdqa8TmI/wQMr5K0I5bZLIzLOa2nt37VVVbd+dDx5obgCC3KBLwJ2ff4PnVidkf+ucIhw80HQaCLo3DMH3CRK3iFsmAWVl6hPNDwt8EvNE5q+YuEXcMgkonVM6SdyCoEvAnZ8v1Hjx817MilmxSUB5rdLJDycZgUAZUch/AAAAAElFTkSuQmCC'); +} +.plx-color-picker .color-picker-cursor { + cursor: default; + position: relative; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + width: 10px; + height: 10px; + border: #ffffff solid 1px; +} +.plx-color-picker .color-picker-cursor-selector { + cursor: default; + position: relative; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; + -khtml-border-radius: 50%; + width: 10px; + height: 10px; + border: #ffffff solid 1px; + width: 12px; + height: 12px; + top: -1px; + background-color: #ffffff; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-color-picker .type-policy { + float: right; + position: absolute; + top: 198px; + right: 12px; + width: 16px; + height: 16px; +} +.plx-color-picker .type-policy:hover { + background-color: #ebf6fd; + cursor: pointer; +} +.plx-color-picker .arrow-down { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #a6a6a6; + margin-top: 4px; + margin-left: 4px; +} +.plx-color-picker .arrow-up { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid #a6a6a6; + margin-top: 2px; + margin-left: 4px; +} +.plx-color-picker .box { + width: 100%; + height: 100%; + display: flex; +} +.plx-color-picker .box .left { + position: relative; + margin-right: 16px; +} +.plx-color-picker .box .right { + flex: 1 1 auto; +} +.plx-color-picker .button-area { + padding: 0 16px 16px 16px; + text-align: right; +} +.plx-color-picker .preset-area { + padding: 4px 15px; +} +.plx-color-picker .preset-area .preset-label { + width: 100%; + padding: 4px; + text-align: left; + color: #555; +} +.plx-color-picker .preset-area .preset-color { + cursor: pointer; + display: inline-block; + width: 18px; + height: 18px; + margin: 4px 6px 8px 6px; + -moz-border-radius: 25%; + -webkit-border-radius: 25%; + border-radius: 25%; + -khtml-border-radius: 25%; + border: #a9a9a9 solid 1px; +} +.plx-color-picker .hsla-text, +.plx-color-picker .rgba-text { + width: 196px; +} +.plx-color-picker .hsla-text input, +.plx-color-picker .rgba-text input { + color: #595959; + min-width: 0; + flex: 1; + margin: 0; + float: left; + padding: 1px; +} +.plx-color-picker .hsla-text input:last-child, +.plx-color-picker .rgba-text input:last-child { + margin-right: 0; +} +.plx-color-picker .hsla-text .hsla-text-div, +.plx-color-picker .rgba-text .hsla-text-div, +.plx-color-picker .hsla-text .rgba-text-div, +.plx-color-picker .rgba-text .rgba-text-div { + margin-top: 2px; + flex: 1; + text-align: center; + color: #999999; + height: 18px; + padding-right: 8px; +} +.plx-color-picker .hsla-text .hsla-text-div:last-child, +.plx-color-picker .rgba-text .hsla-text-div:last-child, +.plx-color-picker .hsla-text .rgba-text-div:last-child, +.plx-color-picker .rgba-text .rgba-text-div:last-child { + margin-right: 0; + padding-right: 0; +} +.plx-color-picker .hsla-text .hsla-text-degree, +.plx-color-picker .rgba-text .hsla-text-degree { + padding-right: 16px; +} +.plx-color-picker .hsla-text .hsla-text-percent, +.plx-color-picker .rgba-text .hsla-text-percent { + padding-right: 22px; +} +.plx-color-picker .hsla-text .hsla-degree, +.plx-color-picker .rgba-text .hsla-degree { + display: inline-block; + width: 6px; + margin-left: 2px; + margin-right: 8px; + margin-top: 2px; +} +.plx-color-picker .hsla-text .hsla-percent, +.plx-color-picker .rgba-text .hsla-percent { + display: inline-block; + width: 12px; + margin-left: 2px; + margin-right: 8px; + margin-top: 3px; +} +.plx-color-picker .hsla-text .rgba-text-input, +.plx-color-picker .rgba-text .rgba-text-input { + margin-right: 8px; +} +.plx-color-picker .hex-text { + width: 196px; +} +.plx-color-picker .hex-text .box input { + color: #595959; + flex: 1 1 auto; + padding: 1px; +} +.plx-color-picker .hex-text .box div { + margin-top: 2px; + flex: 1 1 auto; + text-align: center; + height: 18px; + color: #999999; + float: left; + clear: left; +} +.plx-color-picker .bacis-color-alpha-select-area { + padding: 20px 16px 16px 16px; +} +.plx-color-picker .color-format-content-area { + padding: 0px 16px 16px 16px; +} +.plx-color-picker .arrow::after, +.plx-color-picker .arrow::before { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + content: ""; + border-width: 7px 7px; +} +.plx-color-picker .arrow.arrow-bottom::after { + left: 20px; + border-top-width: 0; + top: -7px; + border-bottom-color: #ffffff; +} +.plx-color-picker .arrow.arrow-bottom::before { + left: 20px; + border-top-width: 0; + top: -8px; + border-bottom-color: #999999; +} +body { + font-size: 12px; +} +.shadow { + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +:-moz-placeholder { + /* Mozilla Firefox 4 to 18 */ + color: #bfbfbf; +} +::-moz-placeholder { + /* Mozilla Firefox 19+ */ + color: #bfbfbf; +} +input:-ms-input-placeholder { + color: #bfbfbf; +} +input::-webkit-input-placeholder { + color: #bfbfbf; +} +.plx-btn { + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + color: #00abff; + min-width: 80px; + letter-spacing: 1px; + padding: 0px 16px; + height: 32px; + font-size: 12px; + cursor: pointer; + text-align: center; + white-space: nowrap; + margin-right: 10px; + vertical-align: middle; + border: 1px solid #d9d9d9; + background-color: #fff; + border-radius: 3px; + line-height: 30px; +} +.plx-btn:hover, +.plx-btn:disabled, +.plx-btn[disabled], +.plx-btn:focus, +.plx-btn:active { + outline: none; + background-image: none; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-btn:hover, +.plx-btn:focus { + color: #00abff; + border-color: #00abff; + background-color: #fff; +} +.plx-btn:active { + color: #008fd5; + border-color: #008fd5; + background-color: #fff; +} +.plx-btn:disabled, +.plx-btn[disabled] { + color: #bfbfbf; + background-color: #fff; + border-color: #e9e9e9; +} +.plx-btn:disabled:hover, +.plx-btn[disabled]:hover, +.plx-btn:disabled:focus, +.plx-btn[disabled]:focus { + color: #bfbfbf; + background-color: #fff; + border-color: #e9e9e9; + cursor: not-allowed; +} +.plx-btn .plx-btn-icon { + font-size: 16px; + vertical-align: text-top; + margin-right: 3px; +} +.plx-btn-primary { + background-color: #00abff; + color: #fff; + border-color: #00abff; +} +.plx-btn-primary:hover, +.plx-btn-primary:focus { + color: #fff; + background-color: #009dea; + border-color: #009dea; +} +.plx-btn-primary:active { + color: #fff; + background-color: #008fd5; + border-color: #008fd5; +} +.plx-btn-primary:disabled, +.plx-btn-primary[disabled], +.plx-btn-primary:disabled:hover, +.plx-btn-primary[disabled]:hover, +.plx-btn-primary:disabled:focus, +.plx-btn-primary[disabled]:focus { + color: #fff; + border-color: #00abff; + background-color: #00abff; + opacity: 0.5; +} +.plx-btn-guide { + background-color: #00abff; + color: #fff; + border-color: #00abff; +} +.plx-btn-guide:hover, +.plx-btn-guide:focus { + color: #fff; + background-color: #009dea; + border-color: #009dea; +} +.plx-btn-guide:active { + color: #fff; + background-color: #008fd5; + border-color: #008fd5; +} +.plx-btn-guide:disabled, +.plx-btn-guide[disabled], +.plx-btn-guide:disabled:hover, +.plx-btn-guide[disabled]:hover, +.plx-btn-guide:disabled:focus, +.plx-btn-guide[disabled]:focus { + color: #fff; + border-color: #00abff; + background-color: #00abff; + opacity: 0.5; +} +.plx-btn-table { + color: #595959; +} +.plx-btn-error { + background-color: #ff5b55; + color: #fff; + border-color: #ff5b55; +} +.plx-btn-error:hover, +.plx-btn-error:focus { + color: #fff; + background-color: #ee403a; + border-color: #ee403a; +} +.plx-btn-error:active { + color: #fff; + background-color: #e02a23; + border-color: #e02a23; +} +.plx-btn-error:disabled, +.plx-btn-error[disabled], +.plx-btn-error:disabled:hover, +.plx-btn-error[disabled]:hover, +.plx-btn-error:disabled:focus, +.plx-btn-error[disabled]:focus { + color: #fff; + border-color: #ff5b55; + background-color: #ff5b55; + opacity: 0.5; +} +.plx-btn-sm { + height: 28px; + padding: 0px 14px; + min-width: 60px; + margin-right: 5px; + line-height: 26px; +} +.plx-btn-xs { + height: 24px; + padding: 0px 12px; + min-width: 60px; + margin-right: 5px; + line-height: 22px; +} +.plx-btn.dropdown-toggle { + margin-right: 0; + outline: none !important; + background-image: none !important; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-btn.dropdown-toggle::after { + margin-left: 16px; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + color: #c0c0c0; + margin-bottom: 1px; +} +.plx-btn-sm.dropdown-toggle::after { + margin-left: 14px; +} +.plx-btn-xs.dropdown-toggle::after { + margin-left: 12px; +} +.plx-btn + .dropdown-menu { + margin: 0; + padding: 0; + border: 0; + min-width: 100%; + font-size: 12px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2); +} +.plx-btn + .dropdown-menu .dropdown-item { + background-color: #fff; + color: #595959; + font-size: 12px; + padding: 0px 16px; + height: 30px; + cursor: pointer; +} +.plx-btn + .dropdown-menu .dropdown-item:hover, +.plx-btn + .dropdown-menu .dropdown-item:focus, +.plx-btn + .dropdown-menu .dropdown-item:active { + outline: none; + background-color: #ebf6fd; +} +.plx-btn + .dropdown-menu .dropdown-item:disabled, +.plx-btn + .dropdown-menu .dropdown-item[disabled] { + color: #bfbfbf; +} +.plx-btn + .dropdown-menu .dropdown-item:disabled:hover, +.plx-btn + .dropdown-menu .dropdown-item[disabled]:hover, +.plx-btn + .dropdown-menu .dropdown-item:disabled:focus, +.plx-btn + .dropdown-menu .dropdown-item[disabled]:focus { + cursor: not-allowed; + background-color: #fff; +} +.plx-btn-sm + .dropdown-menu .dropdown-item { + padding: 0px 14px; +} +.plx-btn-xs + .dropdown-menu .dropdown-item { + padding: 0px 12px; +} +.plx-btn-more { + display: inline-block; + margin-right: 10px; +} +.plx-btn-more-sm { + margin-right: 5px; +} +.plx-btn-more-xs { + margin-right: 5px; +} +.plx-checkbox-container { + font-size: 0; + position: relative; +} +.plx-checkbox { + position: absolute; + z-index: -1; + opacity: 0; +} +.plx-checkbox + .checkbox-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 14px; + width: 14px; + border: 1px solid #d9d9d9; + border-radius: 2px; + vertical-align: middle; +} +.plx-checkbox + .checkbox-substitute + span { + font-weight: normal; + font-size: 12px; + cursor: pointer; + vertical-align: middle; + padding-left: 6px; +} +.plx-checkbox:hover + .checkbox-substitute { + border-color: #00abff; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-checkbox:checked + .checkbox-substitute { + border-color: #00abff; + background-color: #00abff; +} +.plx-checkbox:checked + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 3px; + top: 0; +} +.plx-checkbox.portion + .checkbox-substitute { + background-color: #00abff; + border-color: #00abff; + opacity: 0.5; +} +.plx-checkbox.portion + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #fff; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 3px; + top: 0; +} +.plx-checkbox:disabled + .checkbox-substitute, +.plx-checkbox[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #f5f5f5; + cursor: not-allowed; +} +.plx-checkbox:disabled + .checkbox-substitute + span, +.plx-checkbox[disabled] + .checkbox-substitute + span { + cursor: not-allowed; +} +.plx-checkbox.portion[disabled] + .checkbox-substitute { + background-color: #d9d9d9; + border-color: #d9d9d9; +} +.plx-checkbox.portion[disabled] + .checkbox-substitute::after { + content: ''; + position: absolute; + display: block; + width: 6px; + height: 10px; + border: solid #999; + border-width: 0 2px 2px 0; + transform: rotate(45deg); + left: 3px; + top: 0; +} +.plx-checkbox:checked[disabled] + .checkbox-substitute { + border-color: #d9d9d9; + background-color: #d9d9d9; +} +.plx-form { + font-family: "Helvetica Neue", "PingFang SC", Tahoma, "Microsoft Yahei"; + font-size: 12px; + background: #fff; + color: #595959; +} +.plx-form .ng-invalid:not(form).ng-invalid:not(fieldset).ng-invalid:not(plx-select) { + border: 1px solid #ff5b55; + /* red */ +} +.plx-form .ng-untouched:not(form).ng-untouched:not(fieldset).ng-untouched:not(plx-select) { + border: 1px solid #d9d9d9; +} +.plx-form label { + font-size: 12px; + text-align: right; + color: #737373; + background: #fff; +} +.plx-form label .label-span { + color: #595959; +} +.plx-form .text-autocut { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: block; +} +.plx-form .forms-group-pointer { + margin-bottom: 10px; + padding-left: 15px; + color: #404040; + font-size: 14px; + height: 32px; + line-height: 32px; + cursor: pointer; +} +.plx-form .forms-group-pointer:hover { + background: #ebf6fd; +} +.plx-form .forms-group-pointer span { + margin-left: 24px; + border-left: 3px solid #00abff; + padding-left: 5px; +} +.plx-form .forms-group-pointer .group-icon { + float: left; + font-size: 14px; + color: #00abff !important; + line-height: 32px; + margin-right: 8px; + transform: scale(0.7, 0.7); + font-weight: bold; +} +.plx-form .forms-group-default { + margin-bottom: 10px; + padding-left: 15px; + color: #404040; + font-size: 14px; + height: 32px; + line-height: 32px; + cursor: default; + line-height: 16px; +} +.plx-form .forms-group-default:hover { + background: #fff; +} +.plx-form .forms-group-default span { + margin-left: 24px; + border-left: 3px solid #00abff; + padding-left: 5px; +} +.plx-form .forms-group-default .group-icon { + float: left; + font-size: 14px; + color: #00abff !important; + line-height: 32px; + margin-right: 8px; + transform: scale(0.7, 0.7); + font-weight: bold; +} +.plx-form .input-sm { + height: 28px !important; +} +.plx-form .px-red { + color: #ff5b55; +} +.plx-form input:focus { + border: 1px solid #00abff !important; +} +.plx-form .error-div { + height: 12px; + margin-top: -4px; + margin-bottom: 5px; +} +.plx-form .error-div .error-msg { + color: #ff5b55; +} +.plx-form .help-div { + color: #bfbfbf; + height: 12px; + margin-top: -5px; + margin-bottom: 6px; +} +.plx-form .forms-header { + margin-left: 15px; + margin-bottom: 25px; + padding-bottom: 5px; + border-bottom: 1px solid #e9e9e9; +} +.plx-form .forms-header span { + font-size: 16px; + color: #404040; +} +.plx-form .plx-input { + width: 100%; + color: #595959; + background: #fff; + text-align: left; +} +.plx-form .field-radio { + padding-right: 10px; + line-height: 27px; +} +.plx-form .field-radio.field-radio-tight { + line-height: 23px; +} +.plx-form .field-tail { + padding-right: 10px; + line-height: 32px; +} +.plx-form .field-tail.field-tail-tight { + line-height: 28px; +} +.plx-form .field-tail .tip { + color: #999; + font-size: 16px; +} +.plx-form .field-info { + font-size: 12px; + color: #00abff; + margin-left: -15px; +} +.plx-form .field-info.field-info-group { + margin-left: 15px; +} +.plx-form .form-field:not(select-dropdown) { + color: #595959; + font-size: 12px; + line-height: 32px; +} +.plx-form .form-field:not(select-dropdown).form-field-tight { + line-height: 28px; +} +.plx-form .form-field:not(select-dropdown).form-filed-hint { + margin-bottom: 15px; +} +.plx-form .field-div { + margin-bottom: 15px; + padding-left: 0; +} +.plx-form .field-div.field-div-tight { + margin-bottom: 10px; +} +.plx-form .field-div.inputchanged > input { + font-weight: bold; +} +.plx-form .field-div.inputchanged > select { + font-weight: bold; +} +.plx-form .button-div { + padding: 15px 0 0 0; + color: #595959; + font-size: 14px; + text-align: left; +} +.plx-form .button-div button { + margin-right: 10px; +} +.plx-form .button-r-submit { + float: right; + margin-right: -20px !important; +} +.plx-form .button-r-cancel { + float: right; +} +.plx-form .content { + overflow-y: auto; + overflow-x: hidden; +} +.plx-form .plx-scrollbar::-webkit-scrollbar { + width: 4px; + height: 6px; +} +.plx-form .plx-scrollbar::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.2); + border-radius: 2em; + min-height: 50px; + max-height: 100px; +} +.plx-form .plx-scrollbar::-webkit-scrollbar-corner { + background-color: transparent; +} +.plx-form input:-ms-input-placeholder { + color: #999 !important; +} +.plx-form input::-webkit-input-placeholder { + color: #999 !important; +} +.plx-form plx-info .icon { + margin-left: -10px; + line-height: 28px !important; +} +.para-content .icon-active { + fill: #00abff; +} +.para-content .icon-disactive { + fill: #bfbfbf; + cursor: default; +} +.plx-input { + font-size: 12px; + height: 32px; + padding-left: 10px; + padding-right: 10px; + outline: 0; + border: 1px solid #d9d9d9; + border-radius: 3px; + vertical-align: middle; +} +.plx-input:focus { + border: 1px solid #00abff; +} +.plx-input:disabled, +.plx-input[disabled] { + cursor: not-allowed; + background-color: #f5f5f5; +} +.plx-input-sm { + height: 28px; +} +.plx-input-right-no-radius { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.plx-radio-container { + font-size: 0; + position: relative; +} +.plx-radio { + position: absolute; + z-index: -1; + opacity: 0; +} +.plx-radio + .radio-substitute { + position: relative; + display: inline-block; + cursor: pointer; + height: 14px; + width: 14px; + border: 1px solid #d9d9d9; + border-radius: 14px; + vertical-align: middle; +} +.plx-radio:hover + .radio-substitute, +.plx-radio:focus + .radio-substitute { + border-color: #00abff; + outline: none; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-radio:checked + .radio-substitute { + border: 4px solid #00abff; +} +.plx-radio:disabled + .radio-substitute, +.plx-radio[disabled] + .radio-substitute { + border-color: #d9d9d9; + background-color: #f5f5f5; + cursor: not-allowed; +} +.plx-radio:checked [disabled] + .radio-substitute { + border-color: #e9e9e9; + background-color: #e9e9e9; + cursor: not-allowed; +} +.plx-radio + .radio-substitute + span { + font-weight: normal; + font-size: 12px; + cursor: pointer; + vertical-align: middle; + padding-left: 6px; +} +.plx-radio:disabled + .radio-substitute + span, +.plx-radio[disabled] + .radio-substitute + span { + cursor: not-allowed; +} +/*radio-group*/ +.btn.dropdown-toggle, +.btn-group .btn.dropdown-toggle, +.btn:hover, +.btn:disabled, +.btn[disabled], +.btn:focus, +.btn:active, +.btn.active { + outline: none !important; + background-image: none !important; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-radio-group { + cursor: pointer; + font-size: 12px; + height: 32px; + background-color: #fff; + border: 1px solid #d9d9d9; + color: #595959; + border-radius: 3px; + padding: 0px 16px; + min-width: 80px; + transition: none; +} +.plx-radio-group:hover, +.plx-radio-group:focus, +.plx-radio-group:active { + outline: none; + background-image: none; + filter: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + text-shadow: none; +} +.plx-radio-group:hover, +.plx-radio-group:focus { + color: #00abff; + border-color: #00abff; + background-color: #fff; +} +.plx-radio-group:active { + color: #008fd5; + border-color: #008fd5; + background-color: #fff; +} +.plx-radio-group.active { + background-color: #00abff; + color: #fff; + border-color: #00abff; +} +.plx-radio-group > span { + line-height: 30px; +} +.plx-radio-group-sm { + height: 28px; + padding: 0px 14px; + min-width: 60px; +} +.plx-radio-group-sm > span { + line-height: 26px; +} +.plx-ui-steps-number-active { + background: #108ee9; + color: #ffffff; +} +.plx-ui-steps-number-passive { + background: #d9d9d9; + color: #ffffff; +} +.plx-ui-steps-number-visited { + color: #ffffff; + border: 2px #108ee9 solid; +} +.plx-ui-underline-active { + background: #108ee9; +} +.plx-ui-underline-passive { + background: #e9e9e9; +} +.plx-ui-steps-title-active { + color: #595959; +} +.plx-ui-steps-title-passive { + color: #999999; +} +.plx-ui-steps-title-visited { + color: #999999; +} +.plx-ui-steps-number-visited-tick { + border-bottom: 2px solid #108ee9; + border-right: 2px solid #108ee9; +} +.plx-ui-underline-active-vertical { + border-right: 2px solid #d9d9d9; +} +.plx-ui-underline-visited-vertical { + border-right: 2px solid #108ee9; +} +.plx-ui-underline-passive-vertical { + border-right: 2px solid #d9d9d9; +} +.plx-ui-steps-title-active-vertical { + color: #595959; +} +.plx-ui-steps-title-visited-vertical { + color: #999999; +} +.plx-ui-steps-title-passive-vertical { + color: #999999; +} +.plx-ui-steps-number-active-vertical { + background: #108ee9; + color: #ffffff; +} +.plx-ui-steps-number-passive-vertical { + background: #d9d9d9; + color: #ffffff; +} +.plx-ui-steps-number-visited-vertical { + color: #ffffff; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.less new file mode 100644 index 00000000..b19e0907 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/assets/themes/default/theme.less @@ -0,0 +1,107 @@ +//-------------------common start------------------------ +// -------- Colors start----------- +//配置说明:通常primary-color和primary-color-guide相同,某些产品需要有特别引导用户操作的按钮时,可以单独定义primary-color-guide +@primary-color: #00abff; //主色,用于重点按钮底色,普通按钮文字色、tab页的选中横条色、进度条色、分组标题竖线等, 应用开发需要关注搭配class plx-btn-primary t +@guide-color: @primary-color; //引导色,搭配class plx-btn-guide +@success-color: #73cf22; //搭配class plx-btn-success +@warning-color: #f7c515; //搭配class plx-btn-warning +@error-color: #ff5b55; //搭配class plx-btn-error +@common-color: #fff; //搭配class plx-btn +//Colors-hover +@primary-color-hover: #009dea; +@primary-color-guide-hover: @primary-color-hover; +@success-color-hover: #65bf16; +@warning-color-hover: #e5b717; +@error-color-hover: #ee403a; +@common-color-hover: #fff; +@btn-common-color-text-hover: @primary-color; +@btn-common-color-border-hover: @primary-color; + +//colors-click +@primary-color-click: #008fd5; +@primary-color-guide-click: @primary-color-click; +@success-color-click: #59af0c; +@warning-color-click: #d4a606; +@error-color-click: #e02a23; +@common-color-click: #fff; +@btn-common-color-text-click: @primary-color-click; +@btn-common-color-border-click: @primary-color-click; + +//opacity-disable +@opacity-disable: 0.5; +//text-color-scenes,在按钮或tab上的文字色 +@scene-textcolor: #fff; //用于有底色时的文字颜色,搭配class plx-btn-primary,plx-btn-* +@common-textcolor: @primary-color; //用于普通按钮和链接上的文字颜色,应用关注搭配 class plx-btn +//text color +@text-color: #595959; //普通文字颜色,不需要专用class +@title-text-color: #404040; //用于标题文字颜色 +@disabled-text-color: #bfbfbf; //用于禁用状态文字 +@light-text-color: #737373; //较浅色 +@unselected-text-color: #999; //用于未选中文字颜色、placeholder文字颜色 +@form-label:#737373;//用于表单标签颜色 +// Background color for `` +@body-bg: #fff; +// Base background color for most components +@component-bg: #fff; +@hover-bg-color: #ebf6fd; //用于菜单 、列表项、树项、表格行的hover背景色 +@selected-bg-color: #f5f5f5; //用于菜单 、列表项、树项、表格行的选中背景色 +@input-bg-color-disabled: #f5f5f5; //用于输入框禁用状态背景色 +//边框 +@border-color-base: #d9d9d9; // base border outline a component 搭配class: plx-border +@border-color-split: #e9e9e9; // split border inside a component 搭配class: plx-split +//字体图标 +@fonticon-color: #999; //字体图标颜色,搭配class: plx-icon-* +@fonticon-bg-color-hover: @hover-bg-color; //一般字体图标hover时背景色变化 +@fonticon-color-hover: @primary-color; //当字体图标本身有背景色的时候,使用图标颜色本身加深的hover颜色。 +// Shadow +@shadow-color: rgba(0, 0, 0, .2); //阴影颜色,个别组件需要,无需搭配固定class + +// -------- Colors end------------- +// -------- font start------------- +@font-family: "Helvetica Neue","PingFang SC",Tahoma,"Microsoft Yahei"; +@font-size-spacing:20px; //用于间距定义 +@font-size: 12px; //正文文字 +@font-size-title-level1: @font-size + 8px; //一级标题 +@font-size-title-level2: @font-size + 4px; //二级标题 +@font-size-title-group: @font-size + 2px; //分组标题 +// -------- font end--------------- +// -------- radius start------------- +@radius: 3px; //圆角 +@radius-sm: 2px; //小按钮圆角,用于下拉多选框的已选项的圆角 +@radius-lg: 20px; //用于标签,搭配class:plx-tag +// -------- radius start------------- +//size +//checkbos +@checkbox-size: @font-size+2px; //复选框高度 +//btn +@btn-height: 32px; //按钮高度 +@btn-height-sm: 28px; //小尺寸按钮,搭配class:plx-btn-sm +@btn-height-xs: 24px; //加小尺寸按钮,搭配class:plx-btn-xs +// Input +@input-height: 32px; //输入框高度 +@input-height-sm: 28px; //小尺寸输入框,搭配class:plx-input-sm +//iuiframecolor +@iuiframe-head-bg-color: #2c3e50; //head背景色 +@iuiframe-sidebar-bg-color: #fff; //sidebar背景色 +@iuiframe-hor-menu-bg-color: #fff; //横向菜单背景色 +@iuiframe-head-bg-color-hover: #3d546b; //head菜单项hover背景色 +@iuiframe-sidebar-bg-color-hover: @hover-bg-color; //sidebar菜单项hover背景色 +@iuiframe-head-bg-color-active: #33495f; //head菜单项选中背景色 +@iuiframe-sidebar-bg-color-active: #f0f9fc; //sidebar一级菜单项选中背景色 +@iuiframe-head-font-color: #fff; //head菜单文字颜色 +@iuiframe-sidebar-font-color: @text-color; //sidebar文字颜色 +@iuiframe-sidebar-font-color-active: @primary-color; //sidebar选中文字颜色 +@iuiframe-hor-menu-font-color: @text-color; //横菜单文字颜色 +@iuiframe-hor-menu-font-color-hover: @primary-color; //横向菜单项hover文字颜色 +@iuiframe-hor-menu-font-color-active: @primary-color; //横菜单选中文字颜色 +@iuiframe-hor-menu-split-color: #e9e9e9; //横菜单分割线颜色 +@iuiframe-sidebar-split-color: #fff; //sidebar菜单分割线颜色 +@iuiframe-bg-color:#e9ecf3; //框架右侧的背景色 +@iuiframe-bg-img:none; //框架右侧的背景图 +//iframeColor +@iframe-bg-color: #e9ecf3; //iframe背景色 +@iframe-bg-img: none; //iframe背景图片 + + +@import "../common.less"; +@import "./NIV-theme.less"; \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/common/shared.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/common/shared.ts new file mode 100644 index 00000000..e0d9bdb5 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/common/shared.ts @@ -0,0 +1,283 @@ +import {CommonModule} from '@angular/common'; +import {AfterContentInit, ContentChild, ContentChildren, Directive, EmbeddedViewRef, EventEmitter, Input, NgModule} from '@angular/core'; +import {OnDestroy, OnInit, Output, QueryList, TemplateRef, ViewContainerRef} from '@angular/core'; +import {Component} from '@angular/core'; + +@Component({selector: 'plx-header', template: ''}) +export class PlxHeaderComponent { +} + +@Component({selector: 'plx-footer', template: ''}) +export class PlxFooterComponent { +} + +@Directive({selector: '[pTemplate]'}) +export class PlxPrimeTemplateDirective { + @Input() public type: string; + + @Input() public pxTemplate: string; + + constructor(public template: TemplateRef) {} + + getType(): string { + if (this.type) { + console.log( + 'Defining a pTemplate with type property is deprecated use pTemplate="type" instead.'); + return this.type; + } else { + return this.pxTemplate; + } + } +} + +@Directive({selector: '[pxTemplateWrapper]'}) +export class PlxTemplateWrapperDirective implements OnInit, OnDestroy { + @Input() public item: any; + + @Input() public index: number; + + @Input() public pxTemplateWrapper: TemplateRef; + + view: EmbeddedViewRef; + + constructor(public viewContainer: ViewContainerRef) {} + + ngOnInit() { + this.view = this.viewContainer.createEmbeddedView( + this.pxTemplateWrapper, {'\$implicit': this.item, 'index': this.index}); + } + + ngOnDestroy() { + this.view.destroy(); + } +} + +@Component({selector: 'plx-column', template: ``}) +export class PlxColumnComponent implements AfterContentInit { + @Input() public field: string; + @Input() public sortField: string; + @Input() public header: string; + @Input() public footer: string; + @Input() public sortable: any; + @Input() public editable: boolean; + @Input() public filter: boolean; + @Input() public filterMatchMode: string; + @Input() public rowspan: number; + @Input() public colspan: number; + @Input() public style: any; + @Input() public styleClass: string; + @Input() public hidden: boolean; + @Input() public expander: boolean; + @Input() public selectionMode: string; + @Input() public filterPlaceholder: string; + @Input() public frozen: boolean; + @Output() sortFunction: EventEmitter = new EventEmitter(); + @ContentChildren(PlxPrimeTemplateDirective) templates: QueryList; + @ContentChild(TemplateRef) template: TemplateRef; + + headerTemplate: TemplateRef; + bodyTemplate: TemplateRef; + footerTemplate: TemplateRef; + filterTemplate: TemplateRef; + editorTemplate: TemplateRef; + + ngAfterContentInit(): void { + this.templates.forEach((item) => { + switch (item.getType()) { + case 'header': + this.headerTemplate = item.template; + break; + + case 'body': + this.bodyTemplate = item.template; + break; + + case 'footer': + this.footerTemplate = item.template; + break; + + case 'filter': + this.filterTemplate = item.template; + break; + + case 'editor': + this.editorTemplate = item.template; + break; + + default: + this.bodyTemplate = item.template; + } + }); + } +} + +@Component({selector: 'plx-row', template: ``}) +export class PlxRowComponent { + @ContentChildren(PlxColumnComponent) columns: QueryList; +} + +@Component({selector: 'plx-header-column-group', template: ``}) +export class PlxHeaderColumnGroupComponent { + @ContentChildren(PlxRowComponent) rows: QueryList; +} + +@Component({selector: 'plx-footer-column-group', template: ``}) +export class PlxFooterColumnGroupComponent { + @ContentChildren(PlxRowComponent) rows: QueryList; +} + +@Component({selector: 'plx-column-body-template-loader', template: ``}) +export class PlxColumnBodyTemplateLoaderComponent implements OnInit, OnDestroy { + @Input() public column: any; + + @Input() public rowData: any; + + @Input() public rowIndex: number; + + view: EmbeddedViewRef; + + constructor(public viewContainer: ViewContainerRef) {} + + ngOnInit() { + this.view = + this.viewContainer.createEmbeddedView(this.column.bodyTemplate, { + '\$implicit': this.column, + 'rowData': this.rowData, + 'rowIndex': this.rowIndex + }); + } + + ngOnDestroy() { + this.view.destroy(); + } +} + +@Component({selector: 'plx-column-header-template-loader', template: ``}) +export class PlxColumnHeaderTemplateLoaderComponent implements OnInit, + OnDestroy { + @Input() public column: any; + + view: EmbeddedViewRef; + + constructor(public viewContainer: ViewContainerRef) {} + + ngOnInit() { + this.view = this.viewContainer.createEmbeddedView( + this.column.headerTemplate, {'\$implicit': this.column}); + } + + ngOnDestroy() { + this.view.destroy(); + } +} + +@Component({selector: 'plx-column--footer-template-loader', template: ``}) +export class PlxColumnFooterTemplateLoaderComponent implements OnInit, + OnDestroy { + @Input() public column: any; + + view: EmbeddedViewRef; + + constructor(public viewContainer: ViewContainerRef) {} + + ngOnInit() { + this.view = this.viewContainer.createEmbeddedView( + this.column.footerTemplate, {'\$implicit': this.column}); + } + + ngOnDestroy() { + this.view.destroy(); + } +} + +@Component({selector: 'plx-column-filter-template-loader', template: ``}) +export class PlxColumnFilterTemplateLoaderComponent implements OnInit, + OnDestroy { + @Input() public column: any; + + view: EmbeddedViewRef; + + constructor(public viewContainer: ViewContainerRef) {} + + ngOnInit() { + this.view = this.viewContainer.createEmbeddedView( + this.column.filterTemplate, {'\$implicit': this.column}); + } + + ngOnDestroy() { + this.view.destroy(); + } +} + +@Component({selector: 'plx-column-editor-template-loader', template: ``}) +export class PlxColumnEditorTemplateLoaderComponent implements OnInit, + OnDestroy { + @Input() public column: any; + + @Input() public rowData: any; + + @Input() public rowIndex: any; + + view: EmbeddedViewRef; + + constructor(public viewContainer: ViewContainerRef) {} + + ngOnInit() { + this.view = + this.viewContainer.createEmbeddedView(this.column.editorTemplate, { + '\$implicit': this.column, + 'rowData': this.rowData, + 'rowIndex': this.rowIndex + }); + } + + ngOnDestroy() { + this.view.destroy(); + } +} + +@Component({selector: 'plx-template-loader', template: ``}) +export class PlxTemplateLoaderComponent implements OnInit, OnDestroy { + @Input() public template: TemplateRef; + + @Input() public data: any; + + view: EmbeddedViewRef; + + constructor(public viewContainer: ViewContainerRef) {} + + ngOnInit() { + if (this.template) { + this.view = this.viewContainer.createEmbeddedView( + this.template, {'\$implicit': this.data}); + } + } + + ngOnDestroy() { + if (this.view) { + this.view.destroy(); + } + } +} + +@NgModule({ + imports: [CommonModule], + exports: [ + PlxHeaderComponent, PlxFooterComponent, PlxColumnComponent, + PlxTemplateWrapperDirective, PlxColumnHeaderTemplateLoaderComponent, + PlxColumnBodyTemplateLoaderComponent, PlxColumnFooterTemplateLoaderComponent, + PlxColumnFilterTemplateLoaderComponent, PlxPrimeTemplateDirective, + PlxTemplateLoaderComponent, PlxRowComponent, PlxHeaderColumnGroupComponent, + PlxFooterColumnGroupComponent, PlxColumnEditorTemplateLoaderComponent + ], + declarations: [ + PlxHeaderComponent, PlxFooterComponent, PlxColumnComponent, + PlxTemplateWrapperDirective, PlxColumnHeaderTemplateLoaderComponent, + PlxColumnBodyTemplateLoaderComponent, PlxColumnFooterTemplateLoaderComponent, + PlxColumnFilterTemplateLoaderComponent, PlxPrimeTemplateDirective, + PlxTemplateLoaderComponent, PlxRowComponent, PlxHeaderColumnGroupComponent, + PlxFooterColumnGroupComponent, PlxColumnEditorTemplateLoaderComponent + ] +}) +export class PlxSharedModule { +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/boolean-field-value.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/boolean-field-value.ts new file mode 100644 index 00000000..dc1f86e2 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/boolean-field-value.ts @@ -0,0 +1,19 @@ +/* tslint:disable:array-type member-access variable-name */ +function booleanFieldValueFactory() { + return function booleanFieldValueMetadata(target: any, key: string): void { + const defaultValue = target[key]; + const localKey = `__ky_private_symbol_${key}`; + target[localKey] = defaultValue; + + Object.defineProperty(target, key, { + get() { + return (this)[localKey]; + }, + set(value: boolean) { + (this)[localKey] = value !== null && `${value}` !== 'false'; + } + }); + }; +} + +export {booleanFieldValueFactory as BooleanFieldValue}; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/domhandler.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/domhandler.ts new file mode 100644 index 00000000..fd700a9b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/domhandler.ts @@ -0,0 +1,432 @@ +import {Injectable} from '@angular/core'; + +@Injectable() +export class DomHandler { + static zindex: number = 1000; + + public addClass(element: any, className: string): void { + if (element.classList) { + element.classList.add(className); + } else { + element.className += ' ' + className; + } + } + + public addMultipleClasses(element: any, className: string): void { + if (element.classList) { + let styles: string[] = className.split(' '); + // for (let i = 0; i < styles.length; i++) { + // element.classList.add(styles[i]); + // } + for (let style of styles) { + element.classList.add(style); + } + + } else { + let styles: string[] = className.split(' '); + // for (let i = 0; i < styles.length; i++) { + // element.className += ' ' + styles[i]; + // } + for (let style of styles) { + element.className += ' ' + style; + } + } + } + + public removeClass(element: any, className: string): void { + if (element.classList) { + element.classList.remove(className); + } else { + element.className = element.className.replace( + new RegExp( + '(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), + ' '); + } + } + + public hasClass(element: any, className: string): boolean { + if (element.classList) { + return element.classList.contains(className); + } else { + return new RegExp('(^| )' + className + '( |$)', 'gi') + .test(element.className); + } + } + + public siblings(element: any): any { + return Array.prototype.filter.call( + element.parentNode.children, (child: any) => { + return child !== element; + }); + } + + public find(element: any, selector: string): any[] { + return element.querySelectorAll(selector); + } + + public findSingle(element: any, selector: string): any { + return element.querySelector(selector); + } + + public index(element: any): number { + let children = element.parentNode.childNodes; + let num = 0; + // for (let i = 0; i < children.length; i++) { + // if (children[i] == element) { + // return num; + // } + // if (children[i].nodeType == 1) { + // num++; + // } + // } + for (let child of children) { + if (child === element) { + return num; + } + if (child.nodeType === 1) { + num++; + } + } + return -1; + } + + public relativePosition(element: any, target: any): void { + let elementDimensions = element.offsetParent ? + {width: element.outerWidth, height: element.outerHeight} : + this.getHiddenElementDimensions(element); + let targetHeight = target.offsetHeight; + let targetWidth = target.offsetWidth; + let targetOffset = target.getBoundingClientRect(); + let viewport = this.getViewport(); + let top; + let left; + + if ((targetOffset.top + targetHeight + elementDimensions.height) > + viewport.height) { + top = -1 * (elementDimensions.height); + } else { + top = targetHeight; + } + + if ((targetOffset.left + elementDimensions.width) > viewport.width) { + left = targetWidth - elementDimensions.width; + } else { + left = 0; + } + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + } + + public absolutePosition(element: any, target: any): void { + let elementDimensions = element.offsetParent ? + {width: element.offsetWidth, height: element.offsetHeight} : + this.getHiddenElementDimensions(element); + let elementOuterHeight = elementDimensions.height; + let elementOuterWidth = elementDimensions.width; + let targetOuterHeight = target.offsetHeight; + let targetOuterWidth = target.offsetWidth; + let targetOffset = target.getBoundingClientRect(); + let windowScrollTop = this.getWindowScrollTop(); + let windowScrollLeft = this.getWindowScrollLeft(); + let viewport = this.getViewport(); + let top; + let left; + + if (targetOffset.top + targetOuterHeight + elementOuterHeight > + viewport.height) { + top = targetOffset.top + windowScrollTop - elementOuterHeight; + if (top < 0) { + top = 0 + windowScrollTop; + } + } else { + top = targetOuterHeight + targetOffset.top + windowScrollTop; + } + + if (targetOffset.left + targetOuterWidth + elementOuterWidth > + viewport.width) { + left = targetOffset.left + windowScrollLeft + targetOuterWidth - + elementOuterWidth; + } else { + left = targetOffset.left + windowScrollLeft; + } + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + } + + public getHiddenElementOuterHeight(element: any): number { + element.style.visibility = 'hidden'; + element.style.display = 'block'; + let elementHeight = element.offsetHeight; + element.style.display = 'none'; + element.style.visibility = 'visible'; + + return elementHeight; + } + + public getHiddenElementOuterWidth(element: any): number { + element.style.visibility = 'hidden'; + element.style.display = 'block'; + let elementWidth = element.offsetWidth; + element.style.display = 'none'; + element.style.visibility = 'visible'; + + return elementWidth; + } + + public getHiddenElementDimensions(element: any): any { + let dimensions: any = {}; + element.style.visibility = 'hidden'; + element.style.display = 'block'; + dimensions.width = element.offsetWidth; + dimensions.height = element.offsetHeight; + element.style.display = 'none'; + element.style.visibility = 'visible'; + + return dimensions; + } + + public scrollInView(container: any, item: any) { + let borderTopValue: string = + getComputedStyle(container).getPropertyValue('borderTopWidth'); + let borderTop: number = borderTopValue ? parseFloat(borderTopValue) : 0; + let paddingTopValue: string = + getComputedStyle(container).getPropertyValue('paddingTop'); + let paddingTop: number = paddingTopValue ? parseFloat(paddingTopValue) : 0; + let containerRect = container.getBoundingClientRect(); + let itemRect = item.getBoundingClientRect(); + let offset = (itemRect.top + document.body.scrollTop) - + (containerRect.top + document.body.scrollTop) - borderTop - paddingTop; + let scroll = container.scrollTop; + let elementHeight = container.clientHeight; + let itemHeight = this.getOuterHeight(item); + + if (offset < 0) { + container.scrollTop = scroll + offset; + } else if ((offset + itemHeight) > elementHeight) { + container.scrollTop = scroll + offset - elementHeight + itemHeight; + } + } + + public fadeIn(element: any, duration: number): void { + element.style.opacity = 0; + + let last = +new Date(); + let opacity = 0; + let tick = () => { + opacity = + +element.style.opacity + (new Date().getTime() - last) / duration; + element.style.opacity = opacity; + last = +new Date(); + + if (+opacity < 1) { + if (!window.requestAnimationFrame || !requestAnimationFrame(tick)) { + setTimeout(tick, 16); + } + + /*(window.requestAnimationFrame && requestAnimationFrame(tick)) || + setTimeout(tick, 16);*/ + } + }; + + tick(); + } + + public fadeOut(element: any, ms: any) { + let opacity = 1; + let interval = 50; + let duration = ms; + let gap = interval / duration; + + let fading = setInterval(() => { + opacity = opacity - gap; + + if (opacity <= 0) { + opacity = 0; + clearInterval(fading); + } + + element.style.opacity = opacity; + }, interval); + } + + public getWindowScrollTop(): number { + let doc = document.documentElement; + return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); + } + + public getWindowScrollLeft(): number { + let doc = document.documentElement; + return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0); + } + + public matches(element: any, selector: string): boolean { + let p: any = Element.prototype; + let f: any = p['matches'] || p.webkitMatchesSelector || + p['mozMatchesSelector'] || p.msMatchesSelector || function(s: any) { + return [].indexOf.call(document.querySelectorAll(s), this) !== -1; + }; + return f.call(element, selector); + } + + public getOuterWidth(el: any, margin?: any) { + let width = el.offsetWidth; + + if (margin) { + let style = getComputedStyle(el); + width += parseFloat(style.marginLeft) + parseFloat(style.marginRight); + } + + return width; + } + + public getHorizontalPadding(el: any) { + let style = getComputedStyle(el); + return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight); + } + + public getHorizontalMargin(el: any) { + let style = getComputedStyle(el); + return parseFloat(style.marginLeft) + parseFloat(style.marginRight); + } + + public innerWidth(el: any) { + let width = el.offsetWidth; + let style = getComputedStyle(el); + + width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight); + return width; + } + + public width(el: any) { + let width = el.offsetWidth; + let style = getComputedStyle(el); + + width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight); + return width; + } + + public getOuterHeight(el: any, margin?: any) { + let height = el.offsetHeight; + + if (margin) { + let style = getComputedStyle(el); + height += parseFloat(style.marginTop) + parseFloat(style.marginBottom); + } + + return height; + } + + public getHeight(el: any): number { + let height = el.offsetHeight; + let style = getComputedStyle(el); + + height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth); + + return height; + } + + public getWidth(el: any): number { + let width = el.offsetWidth; + let style = getComputedStyle(el); + + width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth); + + return width; + } + + public getViewport(): any { + let win = window; + let d = document; + let e = d.documentElement; + let g = d.getElementsByTagName('body')[0]; + let w = win.innerWidth || e.clientWidth || g.clientWidth; + let h = win.innerHeight || e.clientHeight || g.clientHeight; + + return {width: w, height: h}; + } + + public getOffset(el: any) { + let x = el.offsetLeft; + let y = el.offsetTop; + + while (el = el.offsetParent) { + x += el.offsetLeft; + y += el.offsetTop; + } + + return {left: x, top: y}; + } + + public getUserAgent(): string { + return navigator.userAgent; + } + + public isIE() { + let ua = window.navigator.userAgent; + + let msie = ua.indexOf('MSIE '); + if (msie > 0) { + // IE 10 or older => return version number + return true; + } + + let trident = ua.indexOf('Trident/'); + if (trident > 0) { + // IE 11 => return version number + /* let rv = ua.indexOf('rv:');*/ + return true; + } + + let edge = ua.indexOf('Edge/'); + if (edge > 0) { + // Edge (IE 12+) => return version number + return true; + } + + // other browser + return false; + } + + public appendChild(element: any, target: any) { + if (this.isElement(target)) { + target.appendChild(element); + } else if (target.el && target.el.nativeElement) { + target.el.nativeElement.appendChild(element); + } else { + throw 'Cannot append ' + target + ' to ' + element; + } + } + + public removeChild(element: any, target: any) { + if (this.isElement(target)) { + target.removeChild(element); + } else if (target.el && target.el.nativeElement) { + target.el.nativeElement.removeChild(element); + } else { + throw 'Cannot remove ' + element + ' from ' + target; + } + } + + public isElement(obj: any) { + return ( + typeof HTMLElement === 'object' ? + obj instanceof HTMLElement : + obj && typeof obj === 'object' && obj !== null && + obj.nodeType === 1 && typeof obj.nodeName === 'string'); + } + + public calculateScrollbarWidth(): number { + let scrollDiv = document.createElement('div'); + scrollDiv.className = 'ui-scrollbar-measure'; + document.body.appendChild(scrollDiv); + + let scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + + return scrollbarWidth; + } +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/number-wrapper-parse.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/number-wrapper-parse.ts new file mode 100644 index 00000000..ceccd92e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/number-wrapper-parse.ts @@ -0,0 +1,10 @@ +/* tslint:disable:array-type member-access variable-name */ +export function NumberWrapperParseFloat(text: any) { + if (/^(\-|\+)?[0-9]+$/.test(text)) { + return parseInt(text); + } else if (/^(\-|\+)?[0-9]+\.[0-9]+$/.test(text)) { + return parseFloat(text); + } else { + return 0; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/fullscreen-overlay-container.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/fullscreen-overlay-container.ts new file mode 100644 index 00000000..0eca202d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/fullscreen-overlay-container.ts @@ -0,0 +1,62 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {Injectable} from '@angular/core'; +import {OverlayContainer} from './overlay-container'; + +/** + * The FullscreenOverlayContainer is the alternative to OverlayContainer + * that supports correct displaying of overlay elements in Fullscreen mode + * https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen + * It should be provided in the root component that way: + * providers: [ + * {provide: OverlayContainer, useClass: FullscreenOverlayContainer} + * ], + */ +@Injectable() +export class FullscreenOverlayContainer extends OverlayContainer { + protected _createContainer(): void { + super._createContainer(); + this._adjustParentForFullscreenChange(); + this._addFullscreenChangeListener( + () => this._adjustParentForFullscreenChange()); + } + + private _adjustParentForFullscreenChange(): void { + if (!this._containerElement) { + return; + } + const fullscreenElement = this.getFullscreenElement(); + const parent = fullscreenElement || document.body; + parent.appendChild(this._containerElement); + } + + private _addFullscreenChangeListener(fn: () => void) { + if (document.fullscreenEnabled) { + document.addEventListener('fullscreenchange', fn); + } else if (document.webkitFullscreenEnabled) { + document.addEventListener('webkitfullscreenchange', fn); + } else if ((document as any).mozFullScreenEnabled) { + document.addEventListener('mozfullscreenchange', fn); + } else if ((document as any).msFullscreenEnabled) { + document.addEventListener('MSFullscreenChange', fn); + } + } + + /** + * When the page is put into fullscreen mode, a specific element is specified. + * Only that element and its children are visible when in fullscreen mode. + */ + getFullscreenElement(): Element { + return document.fullscreenElement || document.webkitFullscreenElement || + (document as any).mozFullScreenElement || + (document as any).msFullscreenElement || null; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/generic-component-type.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/generic-component-type.ts new file mode 100644 index 00000000..523bd428 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/generic-component-type.ts @@ -0,0 +1,9 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +export interface ComponentType { new(...args: any[]): T; } diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/index.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/index.ts new file mode 100644 index 00000000..e02bc3cc --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/index.ts @@ -0,0 +1,49 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +import {NgModule, Provider} from '@angular/core'; + +import {Overlay} from './overlay'; +import {OVERLAY_CONTAINER_PROVIDER} from './overlay-container'; +import {ConnectedOverlayDirective, OverlayOrigin} from './overlay-directives'; +import {OverlayPositionBuilder} from './position/overlay-position-builder'; +import {VIEWPORT_RULER_PROVIDER} from './position/viewport-ruler'; +import {ScrollDispatchModule} from './scroll/index'; + + +export const OVERLAY_PROVIDERS: Provider[] = [ + Overlay, + OverlayPositionBuilder, + VIEWPORT_RULER_PROVIDER, + OVERLAY_CONTAINER_PROVIDER, +]; + +@NgModule({ + imports: [ScrollDispatchModule], + exports: [ConnectedOverlayDirective, OverlayOrigin, ScrollDispatchModule], + declarations: [ConnectedOverlayDirective, OverlayOrigin], + providers: [OVERLAY_PROVIDERS], +}) +export class OverlayModule { +} + + +export {Overlay} from './overlay'; +export {OverlayContainer} from './overlay-container'; +export {FullscreenOverlayContainer} from './fullscreen-overlay-container'; +export {OverlayRef} from './overlay-ref'; +export {OverlayState} from './overlay-state'; +export {ConnectedOverlayDirective, OverlayOrigin} from './overlay-directives'; +export {ViewportRuler} from './position/viewport-ruler'; + +export * from './position/connected-position'; +export * from './scroll/index'; + +// Export pre-defined position strategies and interface to build custom ones. +export {PositionStrategy} from './position/position-strategy'; +export {GlobalPositionStrategy} from './position/global-position-strategy'; +export {ConnectedPositionStrategy} from './position/connected-position-strategy'; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-container.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-container.ts new file mode 100644 index 00000000..fbb37c7e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-container.ts @@ -0,0 +1,83 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {Injectable, Optional, SkipSelf} from '@angular/core'; + + +/** + * The OverlayContainer is the container in which all overlays will load. + * It should be provided in the root component to ensure it is properly shared. + */ +@Injectable() +export class OverlayContainer { + protected _containerElement: HTMLElement; + + private _themeClass: string; + + /** + * Base theme to be applied to all overlay-based components. + */ + get themeClass(): string { + return this._themeClass; + } + set themeClass(value: string) { + if (this._containerElement) { + this._containerElement.classList.remove(this._themeClass); + + if (value) { + this._containerElement.classList.add(value); + } + } + + this._themeClass = value; + } + + /** + * This method returns the overlay container element. It will lazily + * create the element the first time it is called to facilitate using + * the container in non-browser environments. + * @returns the container element + */ + getContainerElement(): HTMLElement { + if (!this._containerElement) { + this._createContainer(); + } + return this._containerElement; + } + + /** + * Create the overlay container element, which is simply a div + * with the 'cdk-overlay-container' class on the document body. + */ + protected _createContainer(): void { + const container = document.createElement('div'); + container.classList.add('nz-overlay-container'); + + if (this._themeClass) { + container.classList.add(this._themeClass); + } + + document.body.appendChild(container); + this._containerElement = container; + } +} + +export function OVERLAY_CONTAINER_PROVIDER_FACTORY( + parentContainer: OverlayContainer) { + return parentContainer || new OverlayContainer(); +} + +export const OVERLAY_CONTAINER_PROVIDER = { + // If there is already an OverlayContainer available, use that. Otherwise, + // provide a new one. + provide: OverlayContainer, + deps: [[new Optional(), new SkipSelf(), OverlayContainer]], + useFactory: OVERLAY_CONTAINER_PROVIDER_FACTORY +}; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-directives.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-directives.ts new file mode 100644 index 00000000..5b8c1623 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-directives.ts @@ -0,0 +1,329 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens*/ +import {TemplatePortal} from '@angular/cdk'; +import {Direction, Directionality} from '@angular/cdk'; +import {ESCAPE} from '@angular/cdk'; +import {Directive, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Optional, Output, Renderer2, SimpleChanges, TemplateRef, ViewContainerRef} from '@angular/core'; +import {Subscription} from 'rxjs/Subscription'; + +import {Overlay} from './overlay'; +import {OverlayRef} from './overlay-ref'; +import {OverlayState} from './overlay-state'; +import {ConnectedOverlayPositionChange, ConnectionPositionPair} from './position/connected-position'; +import {ConnectedPositionStrategy} from './position/connected-position-strategy'; +import {ScrollStrategy} from './scroll/scroll-strategy'; + +/** Coerces a data-bound value (typically a string) to a boolean. */ +export function coerceBooleanProperty(value: any): boolean { + return value !== null && `${value}` !== 'false'; +} + + +/** Default set of positions for the overlay. Follows the behavior of a + * dropdown. */ +const defaultPositionList = [ + new ConnectionPositionPair( + {originX: 'start', originY: 'bottom'}, + {overlayX: 'start', overlayY: 'top'}), + new ConnectionPositionPair( + {originX: 'start', originY: 'top'}, + {overlayX: 'start', overlayY: 'bottom'}), +]; + + +/** + * Directive applied to an element to make it usable as an origin for an Overlay + * using a ConnectedPositionStrategy. + */ +@Directive({ + selector: '[nz-overlay-origin]', + exportAs: 'nzOverlayOrigin', +}) +export class OverlayOrigin { + constructor(public elementRef: ElementRef) {} +} + + +/** + * Directive to facilitate declarative creation of an Overlay using a + * ConnectedPositionStrategy. + */ +@Directive({selector: '[nz-connected-overlay]', exportAs: 'nzConnectedOverlay'}) +export class ConnectedOverlayDirective implements OnDestroy, OnChanges { + private _overlayRef: OverlayRef; + private _templatePortal: TemplatePortal; + private _hasBackdrop = false; + private _backdropSubscription: Subscription|null; + private _positionSubscription: Subscription; + private _offsetX = 0; + private _offsetY = 0; + private _position: ConnectedPositionStrategy; + private _escapeListener: Function; + + /** Origin for the connected overlay. */ + @Input() origin: OverlayOrigin; + + /** Registered connected position pairs. */ + @Input() positions: ConnectionPositionPair[]; + + /** The offset in pixels for the overlay connection point on the x-axis */ + @Input() + get offsetX(): number { + return this._offsetX; + } + + set offsetX(offsetX: number) { + this._offsetX = offsetX; + if (this._position) { + this._position.withOffsetX(offsetX); + } + } + + /** The offset in pixels for the overlay connection point on the y-axis */ + @Input() + get offsetY() { + return this._offsetY; + } + + set offsetY(offsetY: number) { + this._offsetY = offsetY; + if (this._position) { + this._position.withOffsetY(offsetY); + } + } + + /** The width of the overlay panel. */ + @Input() width: number|string; + + /** The height of the overlay panel. */ + @Input() height: number|string; + + /** The min width of the overlay panel. */ + @Input() minWidth: number|string; + + /** The min height of the overlay panel. */ + @Input() minHeight: number|string; + + /** The custom class to be set on the backdrop element. */ + @Input() backdropClass: string; + + /** The custom class to be set on the pane element. */ + @Input() paneClass: string; + + /** Strategy to be used when handling scroll events while the overlay is open. + */ + @Input() + scrollStrategy: ScrollStrategy = this._overlay.scrollStrategies.reposition(); + + /** Whether the overlay is open. */ + @Input() open = false; + + /** Whether or not the overlay should attach a backdrop. */ + @Input() + get hasBackdrop() { + return this._hasBackdrop; + } + + set hasBackdrop(value: any) { + this._hasBackdrop = coerceBooleanProperty(value); + } + + /** Event emitted when the backdrop is clicked. */ + @Output() backdropClick = new EventEmitter(); + + /** Event emitted when the position has changed. */ + @Output() positionChange = new EventEmitter(); + + /** Event emitted when the overlay has been attached. */ + @Output() attach = new EventEmitter(); + + /** Event emitted when the overlay has been detached. */ + @Output() detach = new EventEmitter(); + + // TODO(jelbourn): inputs for size, scroll behavior, animation, etc. + + constructor( + private _overlay: Overlay, private _renderer: Renderer2, + templateRef: TemplateRef, viewContainerRef: ViewContainerRef, + @Optional() private _dir: Directionality) { + this._templatePortal = new TemplatePortal(templateRef, viewContainerRef); + } + + /** The associated overlay reference. */ + get overlayRef(): OverlayRef { + return this._overlayRef; + } + + /** The element's layout direction. */ + get dir(): Direction { + return this._dir ? this._dir.value : 'ltr'; + } + + ngOnDestroy() { + this._destroyOverlay(); + } + + ngOnChanges(changes: SimpleChanges) { + if (changes['open']) { + this.open ? this._attachOverlay() : this._detachOverlay(); + } + } + + /** Creates an overlay */ + private _createOverlay() { + if (!this.positions || !this.positions.length) { + this.positions = defaultPositionList; + } + + this._overlayRef = + this._overlay.create(this._buildConfig(), this.paneClass); + } + + /** Builds the overlay config based on the directive's inputs */ + private _buildConfig(): OverlayState { + const overlayConfig = new OverlayState(); + + if (this.width || this.width === 0) { + overlayConfig.width = this.width; + } + + if (this.height || this.height === 0) { + overlayConfig.height = this.height; + } + + if (this.minWidth || this.minWidth === 0) { + overlayConfig.minWidth = this.minWidth; + } + + if (this.minHeight || this.minHeight === 0) { + overlayConfig.minHeight = this.minHeight; + } + + overlayConfig.hasBackdrop = this.hasBackdrop; + + if (this.backdropClass) { + overlayConfig.backdropClass = this.backdropClass; + } + + this._position = + this._createPositionStrategy() as ConnectedPositionStrategy; + overlayConfig.positionStrategy = this._position; + overlayConfig.scrollStrategy = this.scrollStrategy; + + return overlayConfig; + } + + /** Returns the position strategy of the overlay to be set on the overlay + * config */ + private _createPositionStrategy(): ConnectedPositionStrategy { + const pos = this.positions[0]; + const originPoint = {originX: pos.originX, originY: pos.originY}; + const overlayPoint = {overlayX: pos.overlayX, overlayY: pos.overlayY}; + + const strategy = + this._overlay.position() + .connectedTo(this.origin.elementRef, originPoint, overlayPoint) + .withOffsetX(this.offsetX) + .withOffsetY(this.offsetY); + + this._handlePositionChanges(strategy); + + return strategy; + } + + private _handlePositionChanges(strategy: ConnectedPositionStrategy): void { + for (let i = 1; i < this.positions.length; i++) { + strategy.withFallbackPosition( + { + originX: this.positions[i].originX, + originY: this.positions[i].originY + }, + { + overlayX: this.positions[i].overlayX, + overlayY: this.positions[i].overlayY + }); + } + + this._positionSubscription = strategy.onPositionChange.subscribe( + pos => this.positionChange.emit(pos)); + } + + /** Attaches the overlay and subscribes to backdrop clicks if backdrop exists + */ + private _attachOverlay() { + if (!this._overlayRef) { + this._createOverlay(); + } + + this._position.withDirection(this.dir); + this._overlayRef.getState().direction = this.dir; + this._initEscapeListener(); + + if (!this._overlayRef.hasAttached()) { + this._overlayRef.attach(this._templatePortal); + this.attach.emit(); + } + + if (this.hasBackdrop) { + this._backdropSubscription = + this._overlayRef.backdropClick().subscribe(() => { + this.backdropClick.emit(); + }); + } + } + + /** Detaches the overlay and unsubscribes to backdrop clicks if backdrop + * exists */ + private _detachOverlay() { + if (this._overlayRef) { + this._overlayRef.detach(); + this.detach.emit(); + } + + if (this._backdropSubscription) { + this._backdropSubscription.unsubscribe(); + this._backdropSubscription = null; + } + + if (this._escapeListener) { + this._escapeListener(); + } + } + + /** Destroys the overlay created by this directive. */ + private _destroyOverlay() { + if (this._overlayRef) { + this._overlayRef.dispose(); + } + + if (this._backdropSubscription) { + this._backdropSubscription.unsubscribe(); + } + + if (this._positionSubscription) { + this._positionSubscription.unsubscribe(); + } + + if (this._escapeListener) { + this._escapeListener(); + } + } + + /** Sets the event listener that closes the overlay when pressing Escape. */ + private _initEscapeListener() { + this._escapeListener = + this._renderer.listen('document', 'keydown', (event: KeyboardEvent) => { + if (event.keyCode === ESCAPE) { + this._detachOverlay(); + } + }); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-position-map.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-position-map.ts new file mode 100644 index 00000000..8ce53850 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-position-map.ts @@ -0,0 +1,124 @@ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector one-variable-per-declaration + no-attribute-parameter-decorator*/ +import {ConnectionPositionPair} from './index'; + +export const POSITION_MAP: any = { + 'top': { + originX: 'center', + originY: 'top', + overlayX: 'center', + overlayY: 'bottom' + }, + 'topCenter': { + originX: 'center', + originY: 'top', + overlayX: 'center', + overlayY: 'bottom' + }, + 'topLeft': + {originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom'}, + 'topRight': + {originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom'}, + 'right': { + originX: 'end', + originY: 'center', + overlayX: 'start', + overlayY: 'center', + }, + 'rightTop': { + originX: 'end', + originY: 'top', + overlayX: 'start', + overlayY: 'top', + }, + 'rightBottom': { + originX: 'end', + originY: 'bottom', + overlayX: 'start', + overlayY: 'bottom', + }, + 'bottom': { + originX: 'center', + originY: 'bottom', + overlayX: 'center', + overlayY: 'top', + }, + 'bottomCenter': { + originX: 'center', + originY: 'bottom', + overlayX: 'center', + overlayY: 'top', + }, + 'bottomLeft': { + originX: 'start', + originY: 'bottom', + overlayX: 'start', + overlayY: 'top', + }, + 'bottomRight': { + originX: 'end', + originY: 'bottom', + overlayX: 'end', + overlayY: 'top', + }, + 'left': { + originX: 'start', + originY: 'center', + overlayX: 'end', + overlayY: 'center', + }, + 'leftTop': { + originX: 'start', + originY: 'top', + overlayX: 'end', + overlayY: 'top', + }, + 'leftBottom': { + originX: 'start', + originY: 'bottom', + overlayX: 'end', + overlayY: 'bottom', + }, +}; +export const DEFAULT_4_POSITIONS = _objectValues([ + POSITION_MAP['top'], POSITION_MAP['right'], POSITION_MAP['bottom'], + POSITION_MAP['left'] +]); +export const DEFAULT_DROPDOWN_POSITIONS = + _objectValues([POSITION_MAP['bottomLeft'], POSITION_MAP['topLeft']]); +export const DEFAULT_DATEPICKER_POSITIONS = [ + { + originX: 'start', + originY: 'top', + overlayX: 'start', + overlayY: 'top', + }, + { + originX: 'start', + originY: 'bottom', + overlayX: 'start', + overlayY: 'bottom', + } +] as ConnectionPositionPair[]; + +function arrayMap(array: any, iteratee: any) { + let index = -1; + const length = array === null ? 0 : array.length, result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +function baseValues(object: any, props: any) { + return arrayMap(props, function(key: any) { + return object[key]; + }); +} + +function _objectValues(object: any) { + return object === null ? [] : baseValues(object, Object.keys(object)); +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-ref.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-ref.ts new file mode 100644 index 00000000..03c8c2b5 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-ref.ts @@ -0,0 +1,271 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens + promise-function-async*/ +import {Portal, PortalHost} from '@angular/cdk'; +import {NgZone} from '@angular/core'; +import {Observable} from 'rxjs/Observable'; +import {Subject} from 'rxjs/Subject'; + +import {OverlayState} from './overlay-state'; +import {ScrollStrategy} from './scroll/scroll-strategy'; + + +/** + * Reference to an overlay that has been created with the Overlay service. + * Used to manipulate or dispose of said overlay. + */ +export class OverlayRef implements PortalHost { + private _backdropElement: HTMLElement|null = null; + private _backdropClick: Subject = new Subject(); + private _attachments = new Subject(); + private _detachments = new Subject(); + + constructor( + private _portalHost: PortalHost, private _pane: HTMLElement, + private _state: OverlayState, private _scrollStrategy: ScrollStrategy, + private _ngZone: NgZone) { + _scrollStrategy.attach(this); + } + + /** The overlay's HTML element */ + get overlayElement(): HTMLElement { + return this._pane; + } + + /** + * Attaches the overlay to a portal instance and adds the backdrop. + * @param portal Portal instance to which to attach the overlay. + * @returns The portal attachment result. + */ + attach(portal: Portal): any { + const attachResult = this._portalHost.attach(portal); + + // Update the pane element with the given state configuration. + this._updateStackingOrder(); + this.updateSize(); + this.updateDirection(); + this.updatePosition(); + this._scrollStrategy.enable(); + + // Enable pointer events for the overlay pane element. + this._togglePointerEvents(true); + + if (this._state.hasBackdrop) { + this._attachBackdrop(); + } + + if (this._state.panelClass) { + this._pane.classList.add(this._state.panelClass); + } + + // Only emit the `attachments` event once all other setup is done. + this._attachments.next(); + + return attachResult; + } + + /** + * Detaches an overlay from a portal. + * @returns Resolves when the overlay has been detached. + */ + detach(): Promise { + this.detachBackdrop(); + + // When the overlay is detached, the pane element should disable pointer + // events. This is necessary because otherwise the pane element will cover + // the page and disable pointer events therefore. Depends on the position + // strategy and the applied pane boundaries. + this._togglePointerEvents(false); + this._scrollStrategy.disable(); + + const detachmentResult = this._portalHost.detach(); + + // Only emit after everything is detached. + this._detachments.next(); + + return detachmentResult; + } + + /** + * Cleans up the overlay from the DOM. + */ + dispose(): void { + if (this._state.positionStrategy) { + this._state.positionStrategy.dispose(); + } + + if (this._scrollStrategy) { + this._scrollStrategy.disable(); + } + + this.detachBackdrop(); + this._portalHost.dispose(); + this._attachments.complete(); + this._backdropClick.complete(); + this._detachments.next(); + this._detachments.complete(); + } + + /** + * Checks whether the overlay has been attached. + */ + hasAttached(): boolean { + return this._portalHost.hasAttached(); + } + + /** + * Returns an observable that emits when the backdrop has been clicked. + */ + backdropClick(): Observable { + return this._backdropClick.asObservable(); + } + + /** Returns an observable that emits when the overlay has been attached. */ + attachments(): Observable { + return this._attachments.asObservable(); + } + + /** Returns an observable that emits when the overlay has been detached. */ + detachments(): Observable { + return this._detachments.asObservable(); + } + + /** + * Gets the current state config of the overlay. + */ + getState(): OverlayState { + return this._state; + } + + /** Updates the position of the overlay based on the position strategy. */ + updatePosition() { + if (this._state.positionStrategy) { + this._state.positionStrategy.apply(this._pane); + } + } + + /** Updates the text direction of the overlay panel. */ + private updateDirection() { + this._pane.setAttribute('dir', this._state.direction); + } + + + /** Updates the size of the overlay based on the overlay config. */ + updateSize() { + if (this._state.width || this._state.width === 0) { + this._pane.style.width = formatCssUnit(this._state.width); + } + + if (this._state.height || this._state.height === 0) { + this._pane.style.height = formatCssUnit(this._state.height); + } + + if (this._state.minWidth || this._state.minWidth === 0) { + this._pane.style.minWidth = formatCssUnit(this._state.minWidth); + } + + if (this._state.minHeight || this._state.minHeight === 0) { + this._pane.style.minHeight = formatCssUnit(this._state.minHeight); + } + } + + /** Toggles the pointer events for the overlay pane element. */ + private _togglePointerEvents(enablePointer: boolean) { + this._pane.style.pointerEvents = enablePointer ? 'auto' : 'none'; + } + + /** Attaches a backdrop for this overlay. */ + private _attachBackdrop() { + this._backdropElement = document.createElement('div'); + this._backdropElement.classList.add('nz-overlay-backdrop'); + + if (this._state.backdropClass) { + this._backdropElement.classList.add(this._state.backdropClass); + } + + // Insert the backdrop before the pane in the DOM order, + // in order to handle stacked overlays properly. + this._pane.parentElement.insertBefore(this._backdropElement, this._pane); + + // Forward backdrop clicks such that the consumer of the overlay can perform + // whatever action desired when such a click occurs (usually closing the + // overlay). + this._backdropElement.addEventListener( + 'click', () => this._backdropClick.next(null)); + + // Add class to fade-in the backdrop after one frame. + requestAnimationFrame(() => { + if (this._backdropElement) { + this._backdropElement.classList.add('nz-overlay-backdrop-showing'); + } + }); + } + + /** + * Updates the stacking order of the element, moving it to the top if + * necessary. This is required in cases where one overlay was detached, while + * another one, that should be behind it, was destroyed. The next time both of + * them are opened, the stacking will be wrong, because the detached element's + * pane will still be in its original DOM position. + */ + private _updateStackingOrder() { + if (this._pane.nextSibling) { + this._pane.parentNode.appendChild(this._pane); + } + } + + /** Detaches the backdrop (if any) associated with the overlay. */ + detachBackdrop(): void { + const backdropToDetach = this._backdropElement; + + if (backdropToDetach) { + const finishDetach = () => { + // It may not be attached to anything in certain cases (e.g. unit + // tests). + if (backdropToDetach && backdropToDetach.parentNode) { + backdropToDetach.parentNode.removeChild(backdropToDetach); + } + + // It is possible that a new portal has been attached to this overlay + // since we started removing the backdrop. If that is the case, only + // clear the backdrop reference if it is still the same instance that we + // started to remove. + if (this._backdropElement === backdropToDetach) { + this._backdropElement = null; + } + }; + + backdropToDetach.classList.remove('nz-overlay-backdrop-showing'); + + if (this._state.backdropClass) { + backdropToDetach.classList.remove(this._state.backdropClass); + } + + backdropToDetach.addEventListener('transitionend', finishDetach); + + // If the backdrop doesn't have a transition, the `transitionend` event + // won't fire. In this case we make it unclickable and we try to remove it + // after a delay. + backdropToDetach.style.pointerEvents = 'none'; + + // Run this outside the Angular zone because there's nothing that Angular + // cares about. If it were to run inside the Angular zone, every test that + // used Overlay would have to be either async or fakeAsync. + this._ngZone.runOutsideAngular(() => { + setTimeout(finishDetach, 500); + }); + } + } +} + +function formatCssUnit(value: number|string) { + return typeof value === 'string' ? value as string : `${value}px`; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-state.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-state.ts new file mode 100644 index 00000000..73d6b54d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay-state.ts @@ -0,0 +1,61 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {Direction} from '@angular/cdk'; + +import {PositionStrategy} from './position/position-strategy'; +import {ScrollStrategy} from './scroll/scroll-strategy'; + + +/** + * OverlayState is a bag of values for either the initial configuration or + * current state of an overlay. + */ +export class OverlayState { + /** Strategy with which to position the overlay. */ + positionStrategy: PositionStrategy; + + /** Strategy to be used when handling scroll events while the overlay is open. + */ + scrollStrategy: ScrollStrategy; + + /** Custom class to add to the overlay pane. */ + panelClass = ''; + + /** Whether the overlay has a backdrop. */ + hasBackdrop = false; + + /** Custom class to add to the backdrop */ + backdropClass = 'cdk-overlay-dark-backdrop'; + + /** The width of the overlay panel. If a number is provided, pixel units are + * assumed. */ + width?: number|string; + + /** The height of the overlay panel. If a number is provided, pixel units are + * assumed. */ + height?: number|string; + + /** The min-width of the overlay panel. If a number is provided, pixel units + * are assumed. */ + minWidth?: number|string; + + /** The min-height of the overlay panel. If a number is provided, pixel units + * are assumed. */ + minHeight?: number|string; + + /** The direction of the text in the overlay panel. */ + direction?: Direction = 'ltr'; + + // TODO(jelbourn): configuration still to add + // - focus trap + // - disable pointer events + // - z-index +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay.ts new file mode 100644 index 00000000..5995201b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/overlay.ts @@ -0,0 +1,109 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens*/ +import {DomPortalHost} from '@angular/cdk'; +import {ApplicationRef, ComponentFactoryResolver, Injectable, Injector, NgZone} from '@angular/core'; + +import {OverlayContainer} from './overlay-container'; +import {OverlayRef} from './overlay-ref'; +import {OverlayState} from './overlay-state'; +import {OverlayPositionBuilder} from './position/overlay-position-builder'; +import {ScrollStrategyOptions} from './scroll/index'; + + +/** Next overlay unique ID. */ +let nextUniqueId = 0; + +/** The default state for newly created overlays. */ +const defaultState = new OverlayState(); + + +/** + * Service to create Overlays. Overlays are dynamically added pieces of floating + * UI, meant to be used as a low-level building building block for other + * components. Dialogs, tooltips, menus, selects, etc. can all be built using + * overlays. The service should primarily be used by authors of re-usable + * components rather than developers building end-user applications. + * + * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one. + */ +@Injectable() +export class Overlay { + constructor( + public scrollStrategies: ScrollStrategyOptions, + private _overlayContainer: OverlayContainer, + private _componentFactoryResolver: ComponentFactoryResolver, + private _positionBuilder: OverlayPositionBuilder, + private _appRef: ApplicationRef, private _injector: Injector, + private _ngZone: NgZone) {} + + /** + * Creates an overlay. + * @param state State to apply to the overlay. + * @returns Reference to the created overlay. + */ + create(state: OverlayState = defaultState, paneClassName?: string): + OverlayRef { + return this._createOverlayRef( + this._createPaneElement(paneClassName), state); + } + + /** + * Returns a position builder that can be used, via fluent API, + * to construct and configure a position strategy. + */ + position(): OverlayPositionBuilder { + return this._positionBuilder; + } + + /** + * Creates the DOM element for an overlay and appends it to the overlay + * container. + * @returns Newly-created pane element + */ + private _createPaneElement(className?: string): HTMLElement { + const pane = document.createElement('div'); + + pane.id = `nz-overlay-${nextUniqueId++}`; + pane.classList.add('nz-overlay-pane'); + if (className) { + const classList = className.split(' '); + classList.forEach(c => { + pane.classList.add(c); + }); + } + this._overlayContainer.getContainerElement().appendChild(pane); + + return pane; + } + + /** + * Create a DomPortalHost into which the overlay content can be loaded. + * @param pane The DOM element to turn into a portal host. + * @returns A portal host for the given DOM element. + */ + private _createPortalHost(pane: HTMLElement): DomPortalHost { + return new DomPortalHost( + pane, this._componentFactoryResolver, this._appRef, this._injector); + } + + /** + * Creates an OverlayRef for an overlay in the given DOM element. + * @param pane DOM element for the overlay + * @param state + */ + private _createOverlayRef(pane: HTMLElement, state: OverlayState): + OverlayRef { + const scrollStrategy = state.scrollStrategy || this.scrollStrategies.noop(); + const portalHost = this._createPortalHost(pane); + return new OverlayRef( + portalHost, pane, state, scrollStrategy, this._ngZone); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position-strategy.ts new file mode 100644 index 00000000..d144c81f --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position-strategy.ts @@ -0,0 +1,478 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens + no-unused-variable*/ +import {ElementRef} from '@angular/core'; +import {Observable} from 'rxjs/Observable'; +import {Subject} from 'rxjs/Subject'; + +import {Scrollable} from '../scroll/scrollable'; + +import {ConnectedOverlayPositionChange, ConnectionPositionPair, OriginConnectionPosition, OverlayConnectionPosition, ScrollableViewProperties} from './connected-position'; +import {PositionStrategy} from './position-strategy'; +import {ViewportRuler} from './viewport-ruler'; + +/** + * Container to hold the bounding positions of a particular element with respect + * to the viewport, where top and bottom are the y-axis coordinates of the + * bounding rectangle and left and right are the x-axis coordinates. + */ +interface ElementBoundingPositions { + top: number; + right: number; + bottom: number; + left: number; +} + +/** + * A strategy for positioning overlays. Using this strategy, an overlay is given + * an implicit position relative some origin element. The relative position is + * defined in terms of a point on the origin element that is connected to a + * point on the overlay element. For example, a basic dropdown is connecting the + * bottom-left corner of the origin to the top-left corner of the overlay. + */ +export class ConnectedPositionStrategy implements PositionStrategy { + private _dir = 'ltr'; + + /** The offset in pixels for the overlay connection point on the x-axis */ + private _offsetX = 0; + + /** The offset in pixels for the overlay connection point on the y-axis */ + private _offsetY = 0; + + /** The Scrollable containers used to check scrollable view properties on + * position change. */ + private scrollables: Scrollable[] = []; + + /** Whether the we're dealing with an RTL context */ + get _isRtl() { + return this._dir === 'rtl'; + } + + /** Ordered list of preferred positions, from most to least desirable. */ + _preferredPositions: ConnectionPositionPair[] = []; + + /** The origin element against which the overlay will be positioned. */ + private _origin: HTMLElement; + + /** The overlay pane element. */ + private _pane: HTMLElement; + + /** The last position to have been calculated as the best fit position. */ + private _lastConnectedPosition: ConnectionPositionPair; + + _onPositionChange: Subject = + new Subject(); + + /** Emits an event when the connection point changes. */ + get onPositionChange(): Observable { + return this._onPositionChange.asObservable(); + } + + constructor( + private _connectedTo: ElementRef, + private _originPos: OriginConnectionPosition, + private _overlayPos: OverlayConnectionPosition, + private _viewportRuler: ViewportRuler) { + this._origin = this._connectedTo.nativeElement; + this.withFallbackPosition(this._originPos, this._overlayPos); + } + + /** Ordered list of preferred positions, from most to least desirable. */ + get positions() { + return this._preferredPositions; + } + + /** + * To be used to for any cleanup after the element gets destroyed. + */ + dispose() { + // + } + + /** + * Updates the position of the overlay element, using whichever preferred + * position relative to the origin fits on-screen. + * @docs-private + * + * @param element Element to which to apply the CSS styles. + * @returns Resolves when the styles have been applied. + */ + apply(element: HTMLElement): void { + // Cache the overlay pane element in case re-calculating position is + // necessary + this._pane = element; + + // We need the bounding rects for the origin and the overlay to determine + // how to position the overlay relative to the origin. + const originRect = this._origin.getBoundingClientRect(); + const overlayRect = element.getBoundingClientRect(); + + // We use the viewport rect to determine whether a position would go + // off-screen. + const viewportRect = this._viewportRuler.getViewportRect(); + + // Fallback point if none of the fallbacks fit into the viewport. + let fallbackPoint: OverlayPoint|undefined; + let fallbackPosition: ConnectionPositionPair|undefined; + + // We want to place the overlay in the first of the preferred positions such + // that the overlay fits on-screen. + for (const pos of this._preferredPositions) { + // Get the (x, y) point of connection on the origin, and then use that to + // get the (top, left) coordinate for the overlay at `pos`. + const originPoint = this._getOriginConnectionPoint(originRect, pos); + const overlayPoint = + this._getOverlayPoint(originPoint, overlayRect, viewportRect, pos); + + // If the overlay in the calculated position fits on-screen, put it there + // and we're done. + if (overlayPoint.fitsInViewport) { + this._setElementPosition(element, overlayRect, overlayPoint, pos); + + // Save the last connected position in case the position needs to be + // re-calculated. + this._lastConnectedPosition = pos; + + // Notify that the position has been changed along with its change + // properties. + const scrollableViewProperties = + this.getScrollableViewProperties(element); + const positionChange = + new ConnectedOverlayPositionChange(pos, scrollableViewProperties); + this._onPositionChange.next(positionChange); + + return; + } else if ( + !fallbackPoint || + fallbackPoint.visibleArea < overlayPoint.visibleArea) { + fallbackPoint = overlayPoint; + fallbackPosition = pos; + } + } + + // If none of the preferred positions were in the viewport, take the one + // with the largest visible area. + this._setElementPosition( + element, overlayRect, fallbackPoint, fallbackPosition); + } + + /** + * This re-aligns the overlay element with the trigger in its last calculated + * position, even if a position higher in the "preferred positions" list would + * now fit. This allows one to re-align the panel without changing the + * orientation of the panel. + */ + recalculateLastPosition(): void { + const originRect = this._origin.getBoundingClientRect(); + const overlayRect = this._pane.getBoundingClientRect(); + const viewportRect = this._viewportRuler.getViewportRect(); + const lastPosition = + this._lastConnectedPosition || this._preferredPositions[0]; + + const originPoint = + this._getOriginConnectionPoint(originRect, lastPosition); + const overlayPoint = this._getOverlayPoint( + originPoint, overlayRect, viewportRect, lastPosition); + this._setElementPosition( + this._pane, overlayRect, overlayPoint, lastPosition); + } + + /** + * Sets the list of Scrollable containers that host the origin element so that + * on reposition we can evaluate if it or the overlay has been clipped or + * outside view. Every Scrollable must be an ancestor element of the + * strategy's origin element. + */ + withScrollableContainers(scrollables: Scrollable[]) { + this.scrollables = scrollables; + } + + /** + * Adds a new preferred fallback position. + * @param originPos + * @param overlayPos + */ + withFallbackPosition( + originPos: OriginConnectionPosition, + overlayPos: OverlayConnectionPosition): this { + this._preferredPositions.push( + new ConnectionPositionPair(originPos, overlayPos)); + return this; + } + + /** + * Sets the layout direction so the overlay's position can be adjusted to + * match. + * @param dir New layout direction. + */ + withDirection(dir: 'ltr'|'rtl'): this { + this._dir = dir; + return this; + } + + /** + * Sets an offset for the overlay's connection point on the x-axis + * @param offset New offset in the X axis. + */ + withOffsetX(offset: number): this { + this._offsetX = offset; + return this; + } + + /** + * Sets an offset for the overlay's connection point on the y-axis + * @param offset New offset in the Y axis. + */ + withOffsetY(offset: number): this { + this._offsetY = offset; + return this; + } + + /** + * Gets the horizontal (x) "start" dimension based on whether the overlay is + * in an RTL context. + * @param rect + */ + private _getStartX(rect: ClientRect): number { + return this._isRtl ? rect.right : rect.left; + } + + /** + * Gets the horizontal (x) "end" dimension based on whether the overlay is in + * an RTL context. + * @param rect + */ + private _getEndX(rect: ClientRect): number { + return this._isRtl ? rect.left : rect.right; + } + + + /** + * Gets the (x, y) coordinate of a connection point on the origin based on a + * relative position. + * @param originRect + * @param pos + */ + private _getOriginConnectionPoint( + originRect: ClientRect, pos: ConnectionPositionPair): Point { + const originStartX = this._getStartX(originRect); + const originEndX = this._getEndX(originRect); + + let x: number; + if (pos.originX === 'center') { + x = originStartX + (originRect.width / 2); + } else { + x = pos.originX === 'start' ? originStartX : originEndX; + } + + let y: number; + if (pos.originY === 'center') { + y = originRect.top + (originRect.height / 2); + } else { + y = pos.originY === 'top' ? originRect.top : originRect.bottom; + } + + return {x, y}; + } + + + /** + * Gets the (x, y) coordinate of the top-left corner of the overlay given a + * given position and origin point to which the overlay should be connected, + * as well as how much of the element would be inside the viewport at that + * position. + */ + private _getOverlayPoint( + originPoint: Point, overlayRect: ClientRect, viewportRect: ClientRect, + pos: ConnectionPositionPair): OverlayPoint { + // Calculate the (overlayStartX, overlayStartY), the start of the potential + // overlay position relative to the origin point. + let overlayStartX: number; + if (pos.overlayX === 'center') { + overlayStartX = -overlayRect.width / 2; + } else if (pos.overlayX === 'start') { + overlayStartX = this._isRtl ? -overlayRect.width : 0; + } else { + overlayStartX = this._isRtl ? 0 : -overlayRect.width; + } + + let overlayStartY: number; + if (pos.overlayY === 'center') { + overlayStartY = -overlayRect.height / 2; + } else { + overlayStartY = pos.overlayY === 'top' ? 0 : -overlayRect.height; + } + + // The (x, y) coordinates of the overlay. + const x = originPoint.x + overlayStartX + this._offsetX; + const y = originPoint.y + overlayStartY + this._offsetY; + + // How much the overlay would overflow at this position, on each side. + const leftOverflow = 0 - x; + const rightOverflow = (x + overlayRect.width) - viewportRect.width; + const topOverflow = 0 - y; + const bottomOverflow = (y + overlayRect.height) - viewportRect.height; + + // Visible parts of the element on each axis. + const visibleWidth = + this._subtractOverflows(overlayRect.width, leftOverflow, rightOverflow); + const visibleHeight = this._subtractOverflows( + overlayRect.height, topOverflow, bottomOverflow); + + // The area of the element that's within the viewport. + const visibleArea = visibleWidth * visibleHeight; + const fitsInViewport = + (overlayRect.width * overlayRect.height) === visibleArea; + + return {x, y, fitsInViewport, visibleArea}; + } + + /** + * Gets the view properties of the trigger and overlay, including whether they + * are clipped or completely outside the view of any of the strategy's + * scrollables. + */ + private getScrollableViewProperties(overlay: HTMLElement): + ScrollableViewProperties { + const originBounds = this._getElementBounds(this._origin); + const overlayBounds = this._getElementBounds(overlay); + const scrollContainerBounds = + this.scrollables.map((scrollable: Scrollable) => { + return this._getElementBounds( + scrollable.getElementRef().nativeElement); + }); + + return { + isOriginClipped: + this.isElementClipped(originBounds, scrollContainerBounds), + isOriginOutsideView: + this.isElementOutsideView(originBounds, scrollContainerBounds), + isOverlayClipped: + this.isElementClipped(overlayBounds, scrollContainerBounds), + isOverlayOutsideView: + this.isElementOutsideView(overlayBounds, scrollContainerBounds), + }; + } + + /** Whether the element is completely out of the view of any of the + * containers. */ + private isElementOutsideView( + elementBounds: ElementBoundingPositions, + containersBounds: ElementBoundingPositions[]): boolean { + return containersBounds.some( + (containerBounds: ElementBoundingPositions) => { + const outsideAbove = elementBounds.bottom < containerBounds.top; + const outsideBelow = elementBounds.top > containerBounds.bottom; + const outsideLeft = elementBounds.right < containerBounds.left; + const outsideRight = elementBounds.left > containerBounds.right; + + return outsideAbove || outsideBelow || outsideLeft || outsideRight; + }); + } + + /** Whether the element is clipped by any of the containers. */ + private isElementClipped( + elementBounds: ElementBoundingPositions, + containersBounds: ElementBoundingPositions[]): boolean { + return containersBounds.some( + (containerBounds: ElementBoundingPositions) => { + const clippedAbove = elementBounds.top < containerBounds.top; + const clippedBelow = elementBounds.bottom > containerBounds.bottom; + const clippedLeft = elementBounds.left < containerBounds.left; + const clippedRight = elementBounds.right > containerBounds.right; + + return clippedAbove || clippedBelow || clippedLeft || clippedRight; + }); + } + + /** Physically positions the overlay element to the given coordinate. */ + private _setElementPosition( + element: HTMLElement, overlayRect: ClientRect, overlayPoint: Point, + pos: ConnectionPositionPair) { + // We want to set either `top` or `bottom` based on whether the overlay + // wants to appear above or below the origin and the direction in which the + // element will expand. + const verticalStyleProperty = pos.overlayY === 'bottom' ? 'bottom' : 'top'; + + // When using `bottom`, we adjust the y position such that it is the + // distance from the bottom of the viewport rather than the top. + const y = verticalStyleProperty === 'top' ? + overlayPoint.y : + document.documentElement.clientHeight - + (overlayPoint.y + overlayRect.height); + + // We want to set either `left` or `right` based on whether the overlay + // wants to appear "before" or "after" the origin, which determines the + // direction in which the element will expand. For the horizontal axis, the + // meaning of "before" and "after" change based on whether the page is in + // RTL or LTR. + let horizontalStyleProperty: any; + if (this._dir === 'rtl') { + horizontalStyleProperty = pos.overlayX === 'end' ? 'left' : 'right'; + } else { + horizontalStyleProperty = pos.overlayX === 'end' ? 'right' : 'left'; + } + + // When we're setting `right`, we adjust the x position such that it is the + // distance from the right edge of the viewport rather than the left edge. + const x = horizontalStyleProperty === 'left' ? + overlayPoint.x : + document.documentElement.clientWidth - + (overlayPoint.x + overlayRect.width); + + + // Reset any existing styles. This is necessary in case the preferred + // position has changed since the last `apply`. + ['top', 'bottom', 'left', 'right'].forEach( + (p: any) => element.style[p] = null); + + element.style[verticalStyleProperty] = `${y}px`; + element.style[horizontalStyleProperty] = `${x}px`; + } + + /** Returns the bounding positions of the provided element with respect to the + * viewport. */ + private _getElementBounds(element: HTMLElement): ElementBoundingPositions { + const boundingClientRect = element.getBoundingClientRect(); + return { + top: boundingClientRect.top, + right: boundingClientRect.left + boundingClientRect.width, + bottom: boundingClientRect.top + boundingClientRect.height, + left: boundingClientRect.left + }; + } + + /** + * Subtracts the amount that an element is overflowing on an axis from it's + * length. + */ + private _subtractOverflows(length: number, ...overflows: number[]): number { + return overflows.reduce((currentValue: number, currentOverflow: number) => { + return currentValue - Math.max(currentOverflow, 0); + }, length); + } +} + +/** A simple (x, y) coordinate. */ +interface Point { + x: number; + y: number; +} + +/** + * Expands the simple (x, y) coordinate by adding info about whether the + * element would fit inside the viewport at that position, as well as + * how much of the element would be visible. + */ +interface OverlayPoint extends Point { + visibleArea: number; + fitsInViewport: boolean; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position.ts new file mode 100644 index 00000000..dad3f04e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/connected-position.ts @@ -0,0 +1,87 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens*/ +/** Horizontal dimension of a connection point on the perimeter of the origin or + * overlay element. */ +import {Optional} from '@angular/core'; +export type HorizontalConnectionPos = 'start' | 'center' | 'end'; + +/** Vertical dimension of a connection point on the perimeter of the origin or + * overlay element. */ +export type VerticalConnectionPos = 'top' | 'center' | 'bottom'; + + +/** A connection point on the origin element. */ +export interface OriginConnectionPosition { + originX: HorizontalConnectionPos; + originY: VerticalConnectionPos; +} + +/** A connection point on the overlay element. */ +export interface OverlayConnectionPosition { + overlayX: HorizontalConnectionPos; + overlayY: VerticalConnectionPos; +} + +/** The points of the origin element and the overlay element to connect. */ +export class ConnectionPositionPair { + originX: HorizontalConnectionPos; + originY: VerticalConnectionPos; + overlayX: HorizontalConnectionPos; + overlayY: VerticalConnectionPos; + + constructor( + origin: OriginConnectionPosition, overlay: OverlayConnectionPosition) { + this.originX = origin.originX; + this.originY = origin.originY; + this.overlayX = overlay.overlayX; + this.overlayY = overlay.overlayY; + } +} + +/** + * Set of properties regarding the position of the origin and overlay relative + * to the viewport with respect to the containing Scrollable elements. + * + * The overlay and origin are clipped if any part of their bounding client + * rectangle exceeds the bounds of any one of the strategy's Scrollable's + * bounding client rectangle. + * + * The overlay and origin are outside view if there is no overlap between their + * bounding client rectangle and any one of the strategy's Scrollable's bounding + * client rectangle. + * + * ----------- ----------- + * | outside | | clipped | + * | view | -------------------------- + * | | | | | | + * ---------- | ----------- | + * -------------------------- | | + * | | | Scrollable | + * | | | | + * | | -------------------------- + * | Scrollable | + * | | + * -------------------------- + */ +export class ScrollableViewProperties { + isOriginClipped: boolean; + isOriginOutsideView: boolean; + isOverlayClipped: boolean; + isOverlayOutsideView: boolean; +} + +/** The change event emitted by the strategy when a fallback position is used. + */ +export class ConnectedOverlayPositionChange { + constructor( + public connectionPair: ConnectionPositionPair, + @Optional() public scrollableViewProperties: ScrollableViewProperties) {} +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/fake-viewport-ruler.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/fake-viewport-ruler.ts new file mode 100644 index 00000000..698aed1d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/fake-viewport-ruler.ts @@ -0,0 +1,25 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** @docs-private */ +export class FakeViewportRuler { + getViewportRect() { + return { + left: 0, + top: 0, + width: 1014, + height: 686, + bottom: 686, + right: 1014 + }; + } + + getViewportScrollPosition() { + return {top: 0, left: 0}; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/free-position-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/free-position-strategy.ts new file mode 100644 index 00000000..bd33e404 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/free-position-strategy.ts @@ -0,0 +1,83 @@ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens*/ +import {PositionStrategy} from './position-strategy'; + +/** + * Free position strategy for overlay without origin + * @author lingyi.zcs + */ +export class FreePositionStrategy implements PositionStrategy { + private _wrapper: HTMLElement; + // private _cssPosition: string = ''; + // private _top: string = ''; + // private _left: string = ''; + // private _width: string = ''; + // private _height: string = ''; + + // cssPosition(value: string) { + // this._cssPosition = value; + // return this; + // } + + // top(value: number | string): this { + // this._top = this._toCssValue(value); + // return this; + // } + + // left(value: number | string): this { + // this._left = this._toCssValue(value); + // return this; + // } + + // width(value: number | string): this { + // this._width = this._toCssValue(value); + // return this; + // } + + // height(value: number | string): this { + // this._height = this._toCssValue(value); + // return this; + // } + + /** + * Apply the position to the element. (NOTE: normally will triggered by + * scrolling) + * @docs-private + * + * @param element Element to which to apply the CSS. + * @returns Resolved when the styles have been applied. + */ + apply(element: HTMLElement): void { + if (!this._wrapper) { + this._wrapper = document.createElement('div'); + this._wrapper.classList.add('cdk-free-overlay-wrapper'); + element.parentNode.insertBefore(this._wrapper, element); + this._wrapper.appendChild(element); + + // // Initialized style once + // const style = element.style; + // style.position = this._cssPosition; + // style.top = this._top; + // style.left = this._left; + // style.width = this._width; + // style.height = this._height; + } + + // TODO: do somethings while triggered (eg. by scrolling) + } + + /** + * Removes the wrapper element from the DOM. + */ + dispose(): void { + if (this._wrapper && this._wrapper.parentNode) { + this._wrapper.parentNode.removeChild(this._wrapper); + this._wrapper = null; + } + } + + // private _toCssValue(value: number | string) { + // return typeof value === 'number' ? value + 'px' : value; + // } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/global-position-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/global-position-strategy.ts new file mode 100644 index 00000000..8e3204a9 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/global-position-strategy.ts @@ -0,0 +1,178 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens*/ +import {PositionStrategy} from './position-strategy'; + + +/** + * A strategy for positioning overlays. Using this strategy, an overlay is given + * an explicit position relative to the browser's viewport. We use flexbox, + * instead of transforms, in order to avoid issues with subpixel rendering which + * can cause the element to become blurry. + */ +export class GlobalPositionStrategy implements PositionStrategy { + private _cssPosition = 'static'; + private _topOffset = ''; + private _bottomOffset = ''; + private _leftOffset = ''; + private _rightOffset = ''; + private _alignItems = ''; + private _justifyContent = ''; + private _width = ''; + private _height = ''; + + /* A lazily-created wrapper for the overlay element that is used as a flex + * container. */ + private _wrapper: HTMLElement|null = null; + + /** + * Sets the top position of the overlay. Clears any previously set vertical + * position. + * @param value New top offset. + */ + top(value = ''): this { + this._bottomOffset = ''; + this._topOffset = value; + this._alignItems = 'flex-start'; + return this; + } + + /** + * Sets the left position of the overlay. Clears any previously set horizontal + * position. + * @param value New left offset. + */ + left(value = ''): this { + this._rightOffset = ''; + this._leftOffset = value; + this._justifyContent = 'flex-start'; + return this; + } + + /** + * Sets the bottom position of the overlay. Clears any previously set vertical + * position. + * @param value New bottom offset. + */ + bottom(value = ''): this { + this._topOffset = ''; + this._bottomOffset = value; + this._alignItems = 'flex-end'; + return this; + } + + /** + * Sets the right position of the overlay. Clears any previously set + * horizontal position. + * @param value New right offset. + */ + right(value = ''): this { + this._leftOffset = ''; + this._rightOffset = value; + this._justifyContent = 'flex-end'; + return this; + } + + /** + * Sets the overlay width and clears any previously set width. + * @param value New width for the overlay + */ + width(value = ''): this { + this._width = value; + + // When the width is 100%, we should reset the `left` and the offset, + // in order to ensure that the element is flush against the viewport edge. + if (value === '100%') { + this.left('0px'); + } + + return this; + } + + /** + * Sets the overlay height and clears any previously set height. + * @param value New height for the overlay + */ + height(value = ''): this { + this._height = value; + + // When the height is 100%, we should reset the `top` and the offset, + // in order to ensure that the element is flush against the viewport edge. + if (value === '100%') { + this.top('0px'); + } + + return this; + } + + /** + * Centers the overlay horizontally with an optional offset. + * Clears any previously set horizontal position. + * + * @param offset Overlay offset from the horizontal center. + */ + centerHorizontally(offset = ''): this { + this.left(offset); + this._justifyContent = 'center'; + return this; + } + + /** + * Centers the overlay vertically with an optional offset. + * Clears any previously set vertical position. + * + * @param offset Overlay offset from the vertical center. + */ + centerVertically(offset = ''): this { + this.top(offset); + this._alignItems = 'center'; + return this; + } + + /** + * Apply the position to the element. + * @docs-private + * + * @param element Element to which to apply the CSS. + * @returns Resolved when the styles have been applied. + */ + apply(element: HTMLElement): void { + if (!this._wrapper && element.parentNode) { + this._wrapper = document.createElement('div'); + this._wrapper.classList.add('cdk-global-overlay-wrapper'); + element.parentNode.insertBefore(this._wrapper, element); + this._wrapper.appendChild(element); + } + + const styles = element.style; + const parentStyles = (element.parentNode as HTMLElement).style; + + styles.position = this._cssPosition; + styles.marginTop = this._topOffset; + styles.marginLeft = this._leftOffset; + styles.marginBottom = this._bottomOffset; + styles.marginRight = this._rightOffset; + styles.width = this._width; + styles.height = this._height; + + parentStyles.justifyContent = this._justifyContent; + parentStyles.alignItems = this._alignItems; + } + + /** + * Removes the wrapper element from the DOM. + */ + dispose(): void { + if (this._wrapper && this._wrapper.parentNode) { + this._wrapper.parentNode.removeChild(this._wrapper); + this._wrapper = null; + } + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/overlay-position-builder.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/overlay-position-builder.ts new file mode 100644 index 00000000..0f6735eb --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/overlay-position-builder.ts @@ -0,0 +1,51 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens*/ +import {ElementRef, Injectable} from '@angular/core'; + +import {OriginConnectionPosition, OverlayConnectionPosition} from './connected-position'; +import {ConnectedPositionStrategy} from './connected-position-strategy'; +import {FreePositionStrategy} from './free-position-strategy'; +import {GlobalPositionStrategy} from './global-position-strategy'; +import {ViewportRuler} from './viewport-ruler'; + + +/** Builder for overlay position strategy. */ +@Injectable() +export class OverlayPositionBuilder { + constructor(private _viewportRuler: ViewportRuler) {} + + /** + * Creates a free position strategy + */ + free(): FreePositionStrategy { + return new FreePositionStrategy(); + } + + /** + * Creates a global position strategy. + */ + global(): GlobalPositionStrategy { + return new GlobalPositionStrategy(); + } + + /** + * Creates a relative position strategy. + * @param elementRef + * @param originPos + * @param overlayPos + */ + connectedTo( + elementRef: ElementRef, originPos: OriginConnectionPosition, + overlayPos: OverlayConnectionPosition): ConnectedPositionStrategy { + return new ConnectedPositionStrategy( + elementRef, originPos, overlayPos, this._viewportRuler); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/position-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/position-strategy.ts new file mode 100644 index 00000000..21bd0fa0 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/position-strategy.ts @@ -0,0 +1,17 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +/** Strategy for setting the position on an overlay. */ +export interface PositionStrategy { + /** Updates the position of the overlay element. */ + apply(element: Element): void; + + /** Cleans up any DOM modifications made by the position strategy, if + * necessary. */ + dispose(): void; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/viewport-ruler.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/viewport-ruler.ts new file mode 100644 index 00000000..298cd642 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/position/viewport-ruler.ts @@ -0,0 +1,110 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unnecessary-type-assertion arrow-parens*/ +import {Injectable, Optional, SkipSelf} from '@angular/core'; +import {ScrollDispatcher} from '../scroll/scroll-dispatcher'; + + +/** + * Simple utility for getting the bounds of the browser viewport. + * @docs-private + */ +@Injectable() +export class ViewportRuler { + /** Cached document client rectangle. */ + private _documentRect?: ClientRect; + + constructor(scrollDispatcher: ScrollDispatcher) { + // Subscribe to scroll and resize events and update the document rectangle + // on changes. + scrollDispatcher.scrolled(0, () => this._cacheViewportGeometry()); + } + + /** Gets a ClientRect for the viewport's bounds. */ + getViewportRect(documentRect = this._documentRect): ClientRect { + // Cache the document bounding rect so that we don't recompute it for + // multiple calls. + if (!documentRect) { + this._cacheViewportGeometry(); + documentRect = this._documentRect; + } + + // Use the document element's bounding rect rather than the window scroll + // properties (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE + // where window scroll properties and client coordinates + // (boundingClientRect, clientX/Y, etc.) are in different conceptual + // viewports. Under most circumstances these viewports are equivalent, but + // they can disagree when the page is pinch-zoomed (on devices that support + // touch). See + // https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4 We use + // the documentElement instead of the body because, by default (without a + // css reset) browsers typically give the document body an 8px margin, which + // is not included in getBoundingClientRect(). + const scrollPosition = this.getViewportScrollPosition(documentRect); + const height = window.innerHeight; + const width = window.innerWidth; + + return { + top: scrollPosition.top, + left: scrollPosition.left, + bottom: scrollPosition.top + height, + right: scrollPosition.left + width, + height, + width, + }; + } + + + /** + * Gets the (top, left) scroll position of the viewport. + * @param documentRect + */ + getViewportScrollPosition(documentRect = this._documentRect) { + // Cache the document bounding rect so that we don't recompute it for + // multiple calls. + if (!documentRect) { + this._cacheViewportGeometry(); + documentRect = this._documentRect; + } + + // The top-left-corner of the viewport is determined by the scroll position + // of the document body, normally just (scrollLeft, scrollTop). However, + // Chrome and Firefox disagree about whether `document.body` or + // `document.documentElement` is the scrolled element, so reading + // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding + // rect of `document.documentElement` works consistently, where the `top` + // and `left` values will equal negative the scroll position. + const top = -documentRect.top || document.body.scrollTop || + window.scrollY || document.documentElement.scrollTop || 0; + + const left = -documentRect.left || document.body.scrollLeft || + window.scrollX || document.documentElement.scrollLeft || 0; + + return {top, left}; + } + + /** Caches the latest client rectangle of the document element. */ + _cacheViewportGeometry() { + this._documentRect = document.documentElement.getBoundingClientRect(); + } +} + +export function VIEWPORT_RULER_PROVIDER_FACTORY( + parentRuler: ViewportRuler, scrollDispatcher: ScrollDispatcher) { + return parentRuler || new ViewportRuler(scrollDispatcher); +} + +export const VIEWPORT_RULER_PROVIDER = { + // If there is already a ViewportRuler available, use that. Otherwise, provide + // a new one. + provide: ViewportRuler, + deps: [[new Optional(), new SkipSelf(), ViewportRuler], ScrollDispatcher], + useFactory: VIEWPORT_RULER_PROVIDER_FACTORY +}; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/block-scroll-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/block-scroll-strategy.ts new file mode 100644 index 00000000..d1c1d401 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/block-scroll-strategy.ts @@ -0,0 +1,77 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {ViewportRuler} from '../position/viewport-ruler'; + +import {ScrollStrategy} from './scroll-strategy'; + +/** + * Strategy that will prevent the user from scrolling while the overlay is + * visible. + */ +export class BlockScrollStrategy implements ScrollStrategy { + private _previousHTMLStyles = {top: '', left: ''}; + private _previousScrollPosition: {top: number, left: number}; + private _isEnabled = false; + + constructor(private _viewportRuler: ViewportRuler) {} + + attach() { + // + } + + enable() { + if (this._canBeEnabled()) { + const root = document.documentElement; + + this._previousScrollPosition = + this._viewportRuler.getViewportScrollPosition(); + + // Cache the previous inline styles in case the user had set them. + this._previousHTMLStyles.left = root.style.left || ''; + this._previousHTMLStyles.top = root.style.top || ''; + + // Note: we're using the `html` node, instead of the `body`, because the + // `body` may have the user agent margin, whereas the `html` is guaranteed + // not to have one. + root.style.left = `${- this._previousScrollPosition.left}px`; + root.style.top = `${- this._previousScrollPosition.top}px`; + root.classList.add('cdk-global-scrollblock'); + this._isEnabled = true; + } + } + + disable() { + if (this._isEnabled) { + this._isEnabled = false; + document.documentElement.style.left = this._previousHTMLStyles.left; + document.documentElement.style.top = this._previousHTMLStyles.top; + document.documentElement.classList.remove('cdk-global-scrollblock'); + window.scroll( + this._previousScrollPosition.left, this._previousScrollPosition.top); + } + } + + private _canBeEnabled(): boolean { + // Since the scroll strategies can't be singletons, we have to use a global + // CSS class + // (`cdk-global-scrollblock`) to make sure that we don't try to disable + // global scrolling multiple times. + if (document.documentElement.classList.contains('cdk-global-scrollblock') || + this._isEnabled) { + return false; + } + + const body = document.body; + const viewport = this._viewportRuler.getViewportRect(); + return body.scrollHeight > viewport.height || + body.scrollWidth > viewport.width; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/close-scroll-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/close-scroll-strategy.ts new file mode 100644 index 00000000..51189dc1 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/close-scroll-strategy.ts @@ -0,0 +1,54 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {Subscription} from 'rxjs/Subscription'; + +import {OverlayRef} from '../overlay-ref'; + +import {ScrollDispatcher} from './scroll-dispatcher'; +import {getMdScrollStrategyAlreadyAttachedError, ScrollStrategy} from './scroll-strategy'; + + +/** + * Strategy that will close the overlay as soon as the user starts scrolling. + */ +export class CloseScrollStrategy implements ScrollStrategy { + private _scrollSubscription: Subscription|null = null; + private _overlayRef: OverlayRef; + + constructor(private _scrollDispatcher: ScrollDispatcher) {} + + attach(overlayRef: OverlayRef) { + if (this._overlayRef) { + throw getMdScrollStrategyAlreadyAttachedError(); + } + + this._overlayRef = overlayRef; + } + + enable() { + if (!this._scrollSubscription) { + this._scrollSubscription = this._scrollDispatcher.scrolled(0, () => { + if (this._overlayRef.hasAttached()) { + this._overlayRef.detach(); + } + + this.disable(); + }); + } + } + + disable() { + if (this._scrollSubscription) { + this._scrollSubscription.unsubscribe(); + this._scrollSubscription = null; + } + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/index.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/index.ts new file mode 100644 index 00000000..e386770b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/index.ts @@ -0,0 +1,35 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {PlatformModule} from '@angular/cdk'; +import {NgModule} from '@angular/core'; + +import {SCROLL_DISPATCHER_PROVIDER} from './scroll-dispatcher'; +import {ScrollStrategyOptions} from './scroll-strategy-options'; +import {Scrollable} from './scrollable'; + +export {BlockScrollStrategy} from './block-scroll-strategy'; +export {CloseScrollStrategy} from './close-scroll-strategy'; +export {NoopScrollStrategy} from './noop-scroll-strategy'; +export {RepositionScrollStrategy} from './reposition-scroll-strategy'; +export {ScrollDispatcher} from './scroll-dispatcher'; +// Export pre-defined scroll strategies and interface to build custom ones. +export {ScrollStrategy} from './scroll-strategy'; +export {ScrollStrategyOptions} from './scroll-strategy-options'; +export {Scrollable} from './scrollable'; + +@NgModule({ + imports: [PlatformModule], + exports: [Scrollable], + declarations: [Scrollable], + providers: [SCROLL_DISPATCHER_PROVIDER, ScrollStrategyOptions], +}) +export class ScrollDispatchModule { +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/noop-scroll-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/noop-scroll-strategy.ts new file mode 100644 index 00000000..9b92ab49 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/noop-scroll-strategy.ts @@ -0,0 +1,24 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ + +import {ScrollStrategy} from './scroll-strategy'; + +/** + * Scroll strategy that doesn't do anything. + */ +export class NoopScrollStrategy implements ScrollStrategy { + enable() { + // + } + disable() { + // + } + attach() { + // + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/reposition-scroll-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/reposition-scroll-strategy.ts new file mode 100644 index 00000000..b15d5dea --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/reposition-scroll-strategy.ts @@ -0,0 +1,59 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {Subscription} from 'rxjs/Subscription'; + +import {OverlayRef} from '../overlay-ref'; + +import {ScrollDispatcher} from './scroll-dispatcher'; +import {getMdScrollStrategyAlreadyAttachedError, ScrollStrategy} from './scroll-strategy'; + +/** + * Config options for the RepositionScrollStrategy. + */ +export interface RepositionScrollStrategyConfig { scrollThrottle?: number; } + +/** + * Strategy that will update the element position as the user is scrolling. + */ +export class RepositionScrollStrategy implements ScrollStrategy { + private _scrollSubscription: Subscription|null = null; + private _overlayRef: OverlayRef; + + constructor( + private _scrollDispatcher: ScrollDispatcher, + private _config?: RepositionScrollStrategyConfig) {} + + attach(overlayRef: OverlayRef) { + if (this._overlayRef) { + throw getMdScrollStrategyAlreadyAttachedError(); + } + + this._overlayRef = overlayRef; + } + + enable() { + if (!this._scrollSubscription) { + const throttle = this._config ? this._config.scrollThrottle : 0; + + this._scrollSubscription = + this._scrollDispatcher.scrolled(throttle, () => { + this._overlayRef.updatePosition(); + }); + } + } + + disable() { + if (this._scrollSubscription) { + this._scrollSubscription.unsubscribe(); + this._scrollSubscription = null; + } + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-dispatcher.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-dispatcher.ts new file mode 100644 index 00000000..2c145af5 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-dispatcher.ts @@ -0,0 +1,174 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {Platform} from '@angular/cdk'; +import {auditTime} from 'rxjs/operator/auditTime'; +import {ElementRef, Injectable, NgZone, Optional, SkipSelf} from '@angular/core'; +import {fromEvent} from 'rxjs/observable/fromEvent'; +import {merge} from 'rxjs/observable/merge'; +import {Subject} from 'rxjs/Subject'; +import {Subscription} from 'rxjs/Subscription'; + +import {Scrollable} from './scrollable'; + + +/** Time in ms to throttle the scrolling events by default. */ +export const DEFAULT_SCROLL_TIME = 20; + +/** + * Service contained all registered Scrollable references and emits an event + * when any one of the Scrollable references emit a scrolled event. + */ +@Injectable() +export class ScrollDispatcher { + /** Subject for notifying that a registered scrollable reference element has + * been scrolled. */ + _scrolled: Subject = new Subject(); + + /** Keeps track of the global `scroll` and `resize` subscriptions. */ + _globalSubscription: Subscription|null = null; + + /** Keeps track of the amount of subscriptions to `scrolled`. Used for + * cleaning up afterwards. */ + private _scrolledCount = 0; + + /** + * Map of all the scrollable references that are registered with the service + * and their scroll event subscriptions. + */ + scrollableReferences: Map = new Map(); + + constructor(private _ngZone: NgZone, private _platform: Platform) {} + + /** + * Registers a Scrollable with the service and listens for its scrolled + * events. When the scrollable is scrolled, the service emits the event in its + * scrolled observable. + * @param scrollable Scrollable instance to be registered. + */ + register(scrollable: Scrollable): void { + const scrollSubscription = + scrollable.elementScrolled().subscribe(() => this._notify()); + + this.scrollableReferences.set(scrollable, scrollSubscription); + } + + /** + * Deregisters a Scrollable reference and unsubscribes from its scroll event + * observable. + * @param scrollable Scrollable instance to be deregistered. + */ + deregister(scrollable: Scrollable): void { + const scrollableReference = this.scrollableReferences.get(scrollable); + + if (scrollableReference) { + scrollableReference.unsubscribe(); + this.scrollableReferences.delete(scrollable); + } + } + + /** + * Subscribes to an observable that emits an event whenever any of the + * registered Scrollable references (or window, document, or body) fire a + * scrolled event. Can provide a time in ms to override the default "throttle" + * time. + */ + scrolled(auditTimeInMs: number = DEFAULT_SCROLL_TIME, callback: () => any): + Subscription { + // Scroll events can only happen on the browser, so do nothing if we're not + // on the browser. + if (!this._platform.isBrowser) { + return Subscription.EMPTY; + } + + // In the case of a 0ms delay, use an observable without auditTime + // since it does add a perceptible delay in processing overhead. + const observable = auditTimeInMs > 0 ? + auditTime.call(this._scrolled.asObservable(), auditTimeInMs) : + this._scrolled.asObservable(); + + this._scrolledCount++; + + if (!this._globalSubscription) { + this._globalSubscription = this._ngZone.runOutsideAngular(() => { + return merge( + fromEvent(window.document, 'scroll'), + fromEvent(window, 'resize')) + .subscribe(() => this._notify()); + }); + } + + // Note that we need to do the subscribing from here, in order to be able to + // remove the global event listeners once there are no more subscriptions. + const subscription = observable.subscribe(callback); + + subscription.add(() => { + this._scrolledCount--; + + if (this._globalSubscription && !this.scrollableReferences.size && + !this._scrolledCount) { + this._globalSubscription.unsubscribe(); + this._globalSubscription = null; + } + }); + + return subscription; + } + + /** Returns all registered Scrollables that contain the provided element. */ + getScrollContainers(elementRef: ElementRef): Scrollable[] { + const scrollingContainers: Scrollable[] = []; + + this.scrollableReferences.forEach( + (_subscription: Subscription, scrollable: Scrollable) => { + if (this.scrollableContainsElement(scrollable, elementRef)) { + scrollingContainers.push(scrollable); + } + }); + + return scrollingContainers; + } + + /** Returns true if the element is contained within the provided Scrollable. + */ + scrollableContainsElement(scrollable: Scrollable, elementRef: ElementRef): + boolean { + let element = elementRef.nativeElement; + const scrollableElement = scrollable.getElementRef().nativeElement; + + // Traverse through the element parents until we reach null, checking if any + // of the elements are the scrollable's element. + do { + if (element === scrollableElement) { + return true; + } + } while (element = element.parentElement); + + return false; + } + + /** Sends a notification that a scroll event has been fired. */ + _notify() { + this._scrolled.next(); + } +} + +export function SCROLL_DISPATCHER_PROVIDER_FACTORY( + parentDispatcher: ScrollDispatcher, ngZone: NgZone, platform: Platform) { + return parentDispatcher || new ScrollDispatcher(ngZone, platform); +} + +export const SCROLL_DISPATCHER_PROVIDER = { + // If there is already a ScrollDispatcher available, use that. Otherwise, + // provide a new one. + provide: ScrollDispatcher, + deps: [[new Optional(), new SkipSelf(), ScrollDispatcher], NgZone, Platform], + useFactory: SCROLL_DISPATCHER_PROVIDER_FACTORY +}; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy-options.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy-options.ts new file mode 100644 index 00000000..f6270388 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy-options.ts @@ -0,0 +1,52 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector no-unused-expression*/ +import {Injectable} from '@angular/core'; + +import {ViewportRuler} from '../position/viewport-ruler'; + +import {BlockScrollStrategy} from './block-scroll-strategy'; +import {CloseScrollStrategy} from './close-scroll-strategy'; +import {NoopScrollStrategy} from './noop-scroll-strategy'; +import {RepositionScrollStrategy, RepositionScrollStrategyConfig} from './reposition-scroll-strategy'; +import {ScrollDispatcher} from './scroll-dispatcher'; +// import {ScrollStrategy} from './scroll-strategy'; + + +/** + * Options for how an overlay will handle scrolling. + * + * Users can provide a custom value for `ScrollStrategyOptions` to replace the + * default behaviors. This class primarily acts as a factory for ScrollStrategy + * instances. + */ +@Injectable() +export class ScrollStrategyOptions { + constructor( + private _scrollDispatcher: ScrollDispatcher, + private _viewportRuler: ViewportRuler) {} + + /** Do nothing on scroll. */ + noop = () => new NoopScrollStrategy(); + + /** Close the overlay as soon as the user scrolls. */ + close = () => new CloseScrollStrategy(this._scrollDispatcher); + + /** Block scrolling. */ + block = () => new BlockScrollStrategy(this._viewportRuler); + + /** + * Update the overlay's position on scroll. + * @param config Configuration to be used inside the scroll strategy. + * Allows debouncing the reposition calls. + */ + reposition = (config?: RepositionScrollStrategyConfig) => + new RepositionScrollStrategy(this._scrollDispatcher, config) +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy.ts new file mode 100644 index 00000000..d59651a7 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scroll-strategy.ts @@ -0,0 +1,29 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {OverlayRef} from '../overlay-ref'; + +/** + * Describes a strategy that will be used by an overlay + * to handle scroll events while it is open. + */ +export abstract class ScrollStrategy { + enable: () => void; + disable: () => void; + attach: (overlayRef: OverlayRef) => void; +} + +/** + * Returns an error to be thrown when attempting to attach an already-attached + * scroll strategy. + */ +export function getMdScrollStrategyAlreadyAttachedError(): Error { + return Error(`Scroll strategy has already been attached.`); +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts new file mode 100644 index 00000000..fe7b041c --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlay/scroll/scrollable.ts @@ -0,0 +1,63 @@ +/** + * @license + * Copyright Google Inc. All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.io/license + */ +/* tslint:disable:array-type member-access variable-name typedef + only-arrow-functions directive-class-suffix component-class-suffix + component-selector*/ +import {Directive, ElementRef, NgZone, OnDestroy, OnInit, Renderer2} from '@angular/core'; +import {Observable} from 'rxjs/Observable'; +import {Subject} from 'rxjs/Subject'; + +import {ScrollDispatcher} from './scroll-dispatcher'; + + +/** + * Sends an event when the directive's element is scrolled. Registers itself + * with the ScrollDispatcher service to include itself as part of its collection + * of scrolling events that it can be listened to through the service. + */ +@Directive({selector: '[cdk-scrollable], [cdkScrollable]'}) +export class Scrollable implements OnInit, OnDestroy { + private _elementScrolled: Subject = new Subject(); + private _scrollListener: Function|null; + + constructor( + private _elementRef: ElementRef, private _scroll: ScrollDispatcher, + private _ngZone: NgZone, private _renderer: Renderer2) {} + + ngOnInit() { + this._scrollListener = this._ngZone.runOutsideAngular(() => { + return this._renderer.listen( + this.getElementRef().nativeElement, 'scroll', (event: Event) => { + this._elementScrolled.next(event); + }); + }); + + this._scroll.register(this); + } + + ngOnDestroy() { + this._scroll.deregister(this); + + if (this._scrollListener) { + this._scrollListener(); + this._scrollListener = null; + } + } + + /** + * Returns observable that emits when a scroll event is fired on the host + * element. + */ + elementScrolled(): Observable { + return this._elementScrolled.asObservable(); + } + + getElementRef(): ElementRef { + return this._elementRef; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/index.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/index.ts new file mode 100644 index 00000000..4ad2b4a3 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/index.ts @@ -0,0 +1 @@ +export * from './overlaypanel'; \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/overlaypanel.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/overlaypanel.ts new file mode 100644 index 00000000..ee529c5f --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/overlaypanel/overlaypanel.ts @@ -0,0 +1,163 @@ +import {CommonModule} from '@angular/common'; +import {AfterViewInit, Component, ElementRef, EventEmitter, Input, NgModule, OnDestroy, OnInit, Output, Renderer} from '@angular/core'; + +import {DomHandler} from '../domhandler'; + +@Component({ + selector: 'plx-overlay-panel', + template: ` +
+
+ +
+ + + +
+ `, + providers: [DomHandler] +}) +export class PlxOverlayPanelComponent implements OnInit, AfterViewInit, + OnDestroy { + @Input() dismissable: boolean = true; + + @Input() showCloseIcon: boolean; + + @Input() style: any; + + @Input() styleClass: string; + + @Input() appendTo: any; + + @Output() onBeforeShow: EventEmitter = new EventEmitter(); + + @Output() onAfterShow: EventEmitter = new EventEmitter(); + + @Output() onBeforeHide: EventEmitter = new EventEmitter(); + + @Output() onAfterHide: EventEmitter = new EventEmitter(); + + container: any; + + visible: boolean = false; + + documentClickListener: any; + + selfClick: boolean; + + targetEvent: boolean; + + target: any; + + constructor( + public el: ElementRef, public domHandler: DomHandler, + public renderer: Renderer) {} + + ngOnInit() { + if (this.dismissable) { + this.documentClickListener = + this.renderer.listenGlobal('body', 'click', () => { + if (!this.selfClick && !this.targetEvent) { + this.hide(); + } + this.selfClick = false; + this.targetEvent = false; + }); + } + } + + ngAfterViewInit() { + this.container = this.el.nativeElement.children[0]; + if (this.appendTo) { + if (this.appendTo === 'body') { + document.body.appendChild(this.container); + } else { + this.domHandler.appendChild(this.container, this.appendTo); + } + } + } + + toggle(event: any, target?: any) { + let currentTarget = (target || event.currentTarget || event.target); + + if (!this.target || this.target === currentTarget) { + if (this.visible) { + this.hide(); + } else { + this.show(event, target); + } + } else { + this.show(event, target); + } + + if (this.dismissable) { + this.targetEvent = true; + } + + this.target = currentTarget; + } + + show(event: any, target?: any) { + if (this.dismissable) { + this.targetEvent = true; + } + + this.onBeforeShow.emit(null); + let elementTarget = target || event.currentTarget || event.target; + this.container.style.zIndex = ++DomHandler.zindex; + + if (this.visible) { + this.domHandler.absolutePosition(this.container, elementTarget); + } else { + this.visible = true; + this.domHandler.absolutePosition(this.container, elementTarget); + this.domHandler.fadeIn(this.container, 250); + } + this.onAfterShow.emit(null); + } + + hide() { + if (this.visible) { + this.onBeforeHide.emit(null); + this.visible = false; + this.onAfterHide.emit(null); + } + } + + onPanelClick() { + if (this.dismissable) { + this.selfClick = true; + } + } + + onCloseClick(event: any) { + this.hide(); + + if (this.dismissable) { + this.selfClick = true; + } + + event.preventDefault(); + } + + ngOnDestroy() { + if (this.documentClickListener) { + this.documentClickListener(); + } + + if (this.appendTo) { + this.el.nativeElement.appendChild(this.container); + } + + this.target = null; + } +} + +@NgModule({ + imports: [CommonModule], + exports: [PlxOverlayPanelComponent], + declarations: [PlxOverlayPanelComponent] +}) +export class PlxOverlayPanelModule { +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button-state.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button-state.ts new file mode 100644 index 00000000..2f1f73b2 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button-state.ts @@ -0,0 +1,6 @@ +export enum PlxButtonState { + IDLE, + DOING, + SUCCESS, + FAILURE +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.directive.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.directive.ts new file mode 100644 index 00000000..842b9fb4 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.directive.ts @@ -0,0 +1,178 @@ +import {AfterViewInit, Directive, ElementRef, Input, OnDestroy} from '@angular/core'; + +import {DomHandler} from '../domhandler'; + +import {PlxButtonState} from './button-state'; + +@Directive({selector: '[pxButton]', providers: [DomHandler]}) +export class PlxButtonDirective implements AfterViewInit, OnDestroy { + @Input() iconPos: string = 'left'; + + @Input() cornerStyleClass: string = 'ui-corner-all'; + + _label: string; + + _loadinglabel: string; + + _icon: string; + + _state: number; + + initialized: boolean; + + constructor( + public el: ElementRef, public domHandler: DomHandler) {} + + ngAfterViewInit() { + this.domHandler.addMultipleClasses( + this.el.nativeElement, this.getStyleClass()); + if (this.icon) { + let iconElement = document.createElement('span'); + let iconPosClass = (this.iconPos === 'right') ? 'ui-button-icon-right' : + 'ui-button-icon-left'; + iconElement.className = + iconPosClass + ' ui-c iconfont plx-icon-' + this.icon; + this.el.nativeElement.appendChild(iconElement); + } + + let iconAnimationElement = document.createElement('span'); + iconAnimationElement.className = + 'ui-button-icon-left ui-c iconfont plx-icon-circle-o-notch plx-spin'; + iconAnimationElement.style.display = 'none'; + this.el.nativeElement.appendChild(iconAnimationElement); + + let labelElement = document.createElement('span'); + labelElement.className = 'ui-button-text ui-c'; + labelElement.appendChild(document.createTextNode(this.label || '')); + this.el.nativeElement.appendChild(labelElement); + + if (this.state) { + let spanElement = + this.domHandler.findSingle(this.el.nativeElement, '.ui-button-text'); + if (this.state === PlxButtonState.DOING) { + if (spanElement) { + spanElement.innerText = this.loadinglabel || 'loading'; + } + this.el.nativeElement.disabled = true; + this.setIconELement(true); + } else { + spanElement.innerText = this.label || ''; + this.el.nativeElement.disabled = false; + this.setIconELement(false); + } + } + + this.initialized = true; + } + + getStyleClass(): string { + let styleClass = + 'ui-button ui-widget ui-state-default ' + this.cornerStyleClass; + if (this.icon) { + if (this.label !== null && this.label !== undefined) { + if (this.iconPos === 'left') { + styleClass = styleClass + ' ui-button-text-icon-left'; + } else { + styleClass = styleClass + ' ui-button-text-icon-right'; + } + } else { + styleClass = styleClass + ' ui-button-icon-only'; + } + } else { + styleClass = styleClass + ' ui-button-text-only'; + } + + return styleClass; + } + + setIconELement(isShowAnimation: boolean) { + let iconLeftElement = this.domHandler.findSingle( + this.el.nativeElement, '.ui-button-icon-left.iconfont'); + if (iconLeftElement) { + iconLeftElement.style.display = isShowAnimation ? 'none' : 'inline-block'; + } + let iconRightElement = this.domHandler.findSingle( + this.el.nativeElement, '.ui-button-icon-left.iconfont'); + if (iconRightElement) { + iconRightElement.style.display = + isShowAnimation ? 'none' : 'inline-block'; + } + let iconAnimationElement = this.domHandler.findSingle( + this.el.nativeElement, '.iconfont.plx-icon-circle-o-notch.plx-spin'); + if (iconAnimationElement) { + iconAnimationElement.style.display = + isShowAnimation ? 'inline-block' : 'none'; + } + } + + @Input() + get label(): string { + return this._label; + } + + set label(val: string) { + this._label = val; + + if (this.initialized) { + this.domHandler.findSingle(this.el.nativeElement, '.ui-button-text') + .textContent = this._label; + } + } + + @Input() + get loadinglabel(): string { + return this._loadinglabel; + } + + set loadinglabel(val: string) { + this._loadinglabel = val; + } + + @Input() + get icon(): string { + return this._icon; + } + + set icon(val: string) { + this._icon = val; + + if (this.initialized) { + let iconPosClass = (this.iconPos === 'right') ? 'ui-button-icon-right' : + 'ui-button-icon-left'; + this.domHandler.findSingle(this.el.nativeElement, '.iconfont').className = + iconPosClass + ' ui-c iconfont plx-icon-' + this.icon; + } + } + + @Input() + get state(): number { + return this._state; + } + + set state(val: number) { + this._state = val; + if (this.initialized) { + let spanElement = + this.domHandler.findSingle(this.el.nativeElement, '.ui-button-text'); + if (this.state === PlxButtonState.DOING) { + if (spanElement) { + spanElement.innerText = this.loadinglabel || 'loading'; + } + this.el.nativeElement.disabled = true; + this.setIconELement(true); + } else { + spanElement.innerText = this.label || ''; + this.el.nativeElement.disabled = false; + this.setIconELement(false); + } + } + } + + ngOnDestroy() { + while (this.el.nativeElement.hasChildNodes()) { + this.el.nativeElement.removeChild(this.el.nativeElement.lastChild); + } + + this.initialized = false; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.module.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.module.ts new file mode 100644 index 00000000..01973295 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/button.module.ts @@ -0,0 +1,14 @@ +/** + * Created by 10190264 on 2016/12/15. + */ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {PlxButtonDirective} from './button.directive'; + +@NgModule({ + imports: [CommonModule], + exports: [PlxButtonDirective], + declarations: [PlxButtonDirective] +}) +export class PlxButtonModule { +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/index.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/index.ts new file mode 100644 index 00000000..f435b247 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/pxbutton/index.ts @@ -0,0 +1,2 @@ +export * from './button.module'; +export * from './button-state'; \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/select.service.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/select.service.ts new file mode 100644 index 00000000..ba6f579e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/select.service.ts @@ -0,0 +1,57 @@ +/* tslint:disable:array-type member-access variable-name */ +import {Injectable} from '@angular/core'; + +@Injectable() +export class SelectService { + selection: string[] = []; + + selected(indexName: string): boolean { + if (this.selection === undefined || this.selection === []) { + return null; + } + + for (let item of this.selection) { + if (item === indexName) { + return true; + } + } + return false; + } + + handleSingleSelect(optionIndex: string) { + this.selection = []; + this.selection.push(optionIndex); + return this.selection; + } + + handleMutipleSelect(optionIndex: string) { + if (this.selected(optionIndex)) { + this.selection = this.handleSecondSelect(optionIndex); + } else { + this.selection.push(optionIndex); + } + return this.selection; + } + + handleSecondSelect(optionIndex: string) { + let selectedOption = []; + for (let option of this.selection) { + if (option !== optionIndex) { + selectedOption.push(option); + } + } + return selectedOption; + } + + select(optionIndex: string, isMutiple: boolean): string[] { + if (!isMutiple) { + return this.handleSingleSelect(optionIndex); + } else { + return this.handleMutipleSelect(optionIndex); + } + } + + deselect() { + this.selection = []; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/uuid.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/uuid.ts new file mode 100644 index 00000000..58756b63 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/core/uuid.ts @@ -0,0 +1,36 @@ +/* tslint:disable:array-type member-access variable-name */ +export class UUID { + constructor() { + // + } + + static UUID(): string { + if (typeof(window.crypto) !== 'undefined' && + typeof(window.crypto.getRandomValues) !== 'undefined') { + // If we have a cryptographically secure PRNG, use that + let buf: Uint16Array = new Uint16Array(8); + window.crypto.getRandomValues(buf); + return ( + this.pad4(buf[0]) + this.pad4(buf[1]) + '-' + this.pad4(buf[2]) + + '-' + this.pad4(buf[3]) + '-' + this.pad4(buf[4]) + '-' + + this.pad4(buf[5]) + this.pad4(buf[6]) + this.pad4(buf[7])); + } else { + // Otherwise, just use Math.random + return this.random4() + this.random4() + '-' + this.random4() + '-' + + this.random4() + '-' + this.random4() + '-' + this.random4() + + this.random4() + this.random4(); + } + } + + private static pad4(num: number): string { + let ret: string = num.toString(16); + while (ret.length < 4) { + ret = '0' + ret; + } + return ret; + } + + private static random4(): string { + return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/numberedFixLen.pipe.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/numberedFixLen.pipe.ts new file mode 100644 index 00000000..9d26b16f --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/numberedFixLen.pipe.ts @@ -0,0 +1,27 @@ +/** + * numberFixedLen.pipe + */ + +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'numberFixedLen' +}) +export class NumberFixedLenPipe implements PipeTransform { + transform(num: number, len: number): any { + let numberInt = Math.floor(num); + let length = Math.floor(len); + + if (num === null || isNaN(numberInt) || isNaN(length)) { + return num; + } + + let numString = numberInt.toString(); + + while (numString.length < length) { + numString = '0' + numString; + } + + return numString; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.css new file mode 100644 index 00000000..02983835 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.css @@ -0,0 +1,366 @@ +.owl-dateTime-input { + width: 100%; + padding-right: 1.5em; } + +.owl-dateTime-cancel { + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + transform: translateY(-50%); + cursor: pointer; + color: inherit; } + +.owl-dateTime-inputWrapper { + position: relative; } + +.owl-dateTime-customTemp { + display: inline-block; + position: relative; } + +.owl-dateTime-dialog { + position: absolute; } + +.owl-dateTime-dialogHeader { + display: flex; + justify-content: center; + align-items: center; + width: 100%; } + +.owl-calendar-wrapper, +.owl-timer-wrapper { + position: relative; + width: 100%; + padding: .2em .5em; } + +.owl-calendar-control { + display: flex; + justify-content: space-around; + width: 100%; + height: 2em; } + .owl-calendar-control .owl-calendar-controlNav { + position: relative; + cursor: pointer; + width: 12.5%; } + .owl-calendar-control .owl-calendar-controlContent { + display: flex; + justify-content: center; + align-items: center; + width: 75%; + height: 100%; } + +.owl-calendar { + position: relative; + min-height: 13.7em; } + .owl-calendar table { + width: 100%; + border-collapse: collapse; } + .owl-calendar tbody td { + position: relative; + text-align: center; } + .owl-calendar tbody td a { + display: block; + width: 100%; + height: 100%; + text-decoration: none; + color: inherit; + font-size:12px; + } + .owl-calendar .owl-calendar-yearArrow { + position: absolute; + top: 50%; + width: 1.5em; + height: 1.5em; + transform: translateY(-50%); + cursor: pointer; } + .owl-calendar .owl-calendar-yearArrow.left { + left: -.5em; } + .owl-calendar .owl-calendar-yearArrow.right { + right: -.5em; } + +.owl-timer-wrapper { + position: relative; + display: flex; + justify-content: center; } + .owl-timer-wrapper .owl-timer { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 25%; + height: 100%; } + .owl-timer-wrapper .owl-timer-control { + display: flex; + justify-content: center; + align-items: center; + height: 30%; + width: 100%; + cursor: pointer; } + .owl-timer-wrapper .owl-timer-control .icon:before { + margin: 0; } + .owl-timer-wrapper .owl-timer-input { + width: 60%; + height: 100%; } + +/*# sourceMappingURL=picker.component.css.map */ +.font-face { + font-weight: normal; + font-style: normal; } +[class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } + +.icon-cancel:before { + content: '\e802'; } + +/* '' */ +.icon-up-open:before { + content: '\e805'; } + +/* '' */ +.icon-down-open:before { + content: '\e80b'; } + +/* '' */ +.icon-left-open:before { + content: '\e817'; } + +/* '' */ +.icon-right-open:before { + content: '\e818'; } + +/* '' */ +.owl-widget, +.owl-widget * { + box-sizing: border-box; } + +.owl-widget { + font-size: 1em; } + +.owl-state-focus { + box-shadow: 0px 0px 5px #1f89ce; } + +.owl-corner-all { + border-radius: 3px; } + +.owl-corner-top { + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + +.owl-state-default { + border: 1px solid #d6d6d6; + background: #ffffff; + color: #555555; } + +.owl-inputtext { + margin: 0; + outline: medium none; + padding: .25em; + background: #ffffff; + color: #222222; + transition: .2s; } + .owl-inputtext:focus, .owl-inputtext.owl-state-focus { + box-shadow: 0 0 5px #1f89ce; } + +.owl-dateTime { + display: inline-block; + position: relative; + width: 100%; } + .owl-dateTime.owl-dateTime-inline { + width: auto; } + .owl-dateTime.owl-dateTime-inline .owl-dateTime-dialog { + position: relative; + z-index: auto; } + +.owl-dateTime-dialog { + width: 300px; + user-select: none; + z-index: 99999; } + +.owl-dateTime-dialogHeader { + height: 2.5em; + padding: .25em; + background-color: rgba(0, 0, 0, 0.1); + overflow-y: auto; } + +.owl-calendar-control .owl-calendar-controlNav .nav-prev, +.owl-calendar-control .owl-calendar-controlNav .nav-next { + position: absolute; + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); } + .owl-calendar-control .owl-calendar-controlNav .nav-prev:before, + .owl-calendar-control .owl-calendar-controlNav .nav-next:before { + content: " "; + border-top: .5em solid transparent; + border-bottom: .5em solid transparent; + border-right: 0.75em solid #000000; + width: 0; + height: 0; + display: block; + margin: 0 auto; } +.owl-calendar-control .owl-calendar-controlNav .nav-next:before { + border-right: 0; + border-left: 0.75em solid #000000; } +.owl-calendar-control .owl-calendar-controlContent .month-control, +.owl-calendar-control .owl-calendar-controlContent .year-control { + display: inline-block; + cursor: pointer; + transition: transform 200ms ease; } + .owl-calendar-control .owl-calendar-controlContent .month-control:hover, + .owl-calendar-control .owl-calendar-controlContent .year-control:hover { + transform: scale(1.2); } +.owl-calendar-control .owl-calendar-controlContent .month-control { + font-size: 1em; + margin-right: .8rem; + font-weight: 700; } +.owl-calendar-control .owl-calendar-controlContent .year-control { + font-size: .8em; + font-style: italic; + color: #999; } + + +.owl-calendar tbody td .owl-calendar-selected { + background-color: #00abff; + color: #FFFFFF; } +.owl-calendar tbody td.owl-calendar-invalid { + color: #acacac; } +.owl-calendar tbody td.owl-calendar-outFocus { + color: #dddddd; } +.owl-calendar tbody td.owl-calendar-hidden { + visibility: hidden; } +.owl-calendar tbody td:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: #bae4ff; + color: #000000; } + +.owl-years td.owl-year, +.owl-years td.owl-month, +.owl-months td.owl-year, +.owl-months td.owl-month { + font-size: 1.2em; + height: 2.5em; + width: 33.33%; + line-height: 2.5em; } + +.owl-weekdays th.owl-weekday { + height: 1em; + line-height: 2em; + text-align: center; + font-size: .7em; + color: #999; } + +.owl-days td.owl-day { + height: 2em; + width: calc(100% / 7); + line-height: 2em; } + .owl-days td.owl-day.owl-day-today:before { + content: ''; + display: block; + position: absolute; + right: 2px; + top: 2px; + border-top: 0.5em solid #21a7ff; + border-left: .5em solid transparent; + } + +.owl-timer-wrapper { + height: 5.4em; + background-color: rgba(0, 0, 0, 0.1); } + .owl-timer-wrapper .owl-timer-text { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 40%; + font-size: 1.5em; } + .owl-timer-wrapper .owl-meridian-btn { + font-size: .8em; + color: #00abff; + background-image: none; + background-color: transparent; + border-color: #00abff; } + .owl-timer-wrapper .owl-meridian-btn:hover { + color: #FFFFFF; + background-color: #00abff; + border-color: #00abff; } + +.owl-timer-divider { + display: inline-block; + align-self: flex-end; + position: absolute; + width: .6em; + height: 100%; + left: -.3em; } + .owl-timer-divider .owl-timer-dot { + display: block; + width: .3em; + height: .3em; + position: absolute; + left: 50%; + border-radius: 50%; + transform: translateX(-50%); } + .owl-timer-divider .owl-timer-dot.dot-top { + top: 38%; } + .owl-timer-divider .owl-timer-dot.dot-bottom { + bottom: 38%; } +.owl-icon{ + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: #9a9a9a; +} +.plx-btn{color: #00abff; +min-width: 80px; +letter-spacing: 1px; +padding: 0px 16px; +height: 32px; +font-size: 12px; +cursor: pointer; +text-align: center; +white-space: nowrap; +margin-right: 10px; +vertical-align: middle; +border: 1px solid #d9d9d9; +background-color: #fff; +border-radius: 3px; +line-height: 30px; +} +.plx-btn-xs{ + height: 24px; + padding: 0px 12px; + min-width: 60px; + margin-right: 5px; + line-height: 22px; +} +/*# sourceMappingURL=picker.css.map */ + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.html b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.html new file mode 100644 index 00000000..8e4102c2 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.html @@ -0,0 +1,134 @@ +
+
+ + + + +
+ +
+ +
+
+
+ {{formattedValue}} + {{placeHolder}} +
+
+
+
+ +
+
+ {{pickerMonth}} + {{pickerYear}} +
+
+ +
+
+
+ + + + + + + + + + + +
+ {{weekDay}} +
+
+ {{d.num}} +
+
+
+
+ + + + + + +
+
+ {{month}} +
+
+
+
+ + + + + + +
+
+ {{year}} +
+
+ +
+
+
+
+ +
+ +
+
+
+
+
\ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.less new file mode 100644 index 00000000..8e50660b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.less @@ -0,0 +1,434 @@ +@import "../../assets/components/themes/default/theme.less"; +@import "../../assets/components/themes/common/plx-input.less"; +@import "../../assets/components/themes/common/plx-button.less"; + +.owl-dateTime { + display: inline-block; + position: relative; + width: 100%; + font-family: @font-family; + font-size: @font-size; + background: @component-bg; + color: @text-color; +} + +.owl-dateTime input { + .plx-input; +} + +.owl-dateTime input:-ms-input-placeholder { + color: @unselected-text-color !important; +} +.owl-dateTime input::-webkit-input-placeholder { + color: @unselected-text-color !important; +} + +.owl-dateTime-input { + width: 100%; + padding-right: 1.5em; } + +.owl-dateTime-cancel { + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + transform: translateY(-50%); + cursor: pointer; + color: inherit; } + +.owl-dateTime-inputWrapper { + position: relative; } + +.owl-dateTime-customTemp { + display: inline-block; + position: relative; } + +.owl-dateTime-dialog { + padding: 0px; + position: absolute; } + +.owl-dateTime-dialogHeader { + display: flex; + justify-content: center; + align-items: center; + width: 100%; } + +.owl-calendar-wrapper, +.owl-timer-wrapper { + position: relative; + width: 100%; + padding: .2em .5em; } + +.owl-calendar-control { + display: flex; + justify-content: space-around; + width: 100%; + height: 2em; } + .owl-calendar-control .owl-calendar-controlNav { + position: relative; + cursor: pointer; + width: 12.5%; } + .owl-calendar-control .owl-calendar-controlContent { + display: flex; + justify-content: center; + align-items: center; + width: 75%; + height: 100%; } + +.owl-calendar { + position: relative; + min-height: 13.7em; } + .owl-calendar table { + width: 100%; + border-collapse: collapse; } + .owl-calendar tbody td { + position: relative; + text-align: center; } + .owl-calendar tbody td a { + display: block; + width: 100%; + height: 100%; + text-decoration: none; + color: inherit; + font-size:12px; + } + .owl-calendar .owl-calendar-yearArrow { + position: absolute; + top: 50%; + width: 1.5em; + height: 1.5em; + transform: translateY(-50%); + cursor: pointer; } + .owl-calendar .owl-calendar-yearArrow.left { + left: -.5em; } + .owl-calendar .owl-calendar-yearArrow.right { + right: -.5em; } + +.owl-timer-wrapper { + position: relative; + display: flex; + justify-content: center; } + .owl-timer-wrapper .owl-timer { + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 25%; + height: 100%; } + .owl-timer-wrapper .owl-timer-control { + display: flex; + justify-content: center; + align-items: center; + height: 30%; + width: 100%; + cursor: pointer; } + .owl-timer-wrapper .owl-timer-control .icon:before { + margin: 0; } + .owl-timer-wrapper .owl-timer-input { + width: 60%; + height: 100%; } + +/*# sourceMappingURL=picker.component.css.map */ +.font-face { + font-weight: normal; + font-style: normal; } + +[class^="paletx-datepicker-icon-"]:before, [class*="paletx-datepicker-icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } + +.paletx-datepicker-icon-cancel:before { + content: '\e802'; } + +/* '' */ +.paletx-datepicker-icon-up-open:before { + content: '\e805'; } + +/* '' */ +.paletx-datepicker-icon-down-open:before { + content: '\e80b'; } + +/* '' */ +.paletx-datepicker-icon-left-open:before { + content: '\e817'; } + +/* '' */ +.paletx-datepicker-icon-right-open:before { + content: '\e818'; } + +/* '' */ +.owl-widget, +.owl-widget * { + box-sizing: border-box; } + +.owl-widget { + font-size: 1em; } +.owl-padding{ + padding: 0px; +} +.owl-corner-all { + border-radius: 3px; } + +.owl-corner-top { + border-top-left-radius: 3px; + border-top-right-radius: 3px; } + +.owl-state-default { + border: 1px solid @border-color-base; + background: @component-bg; + color: @text-color; } + +.owl-inputtext { + margin: 0; + outline: medium none; + transition: .2s; } + + + .owl-dateTime.owl-dateTime-inline { + width: auto; } + .owl-dateTime.owl-dateTime-inline .owl-dateTime-dialog { + position: relative; + z-index: auto; } + +.owl-dateTime-dialog { + width: 300px; + user-select: none; + z-index: 99999; } + +.owl-dateTime-dialogHeader { + height: 2.5em; + padding: .25em; + background-color: @component-bg; + overflow-y: auto; } + +.owl-calendar-control .owl-calendar-controlNav .nav-prev, +.owl-calendar-control .owl-calendar-controlNav .nav-next { + position: absolute; + top: 50%; + right: auto; + bottom: auto; + left: 50%; + transform: translate(-50%, -50%); +} + +.owl-cal-header{ + background: @selected-bg-color; + //color: @form-label; + height: 35px; + //width: 105%; + //margin-left: -7px; +} + .owl-calendar-control .owl-calendar-controlNav .nav-prev:before, + .owl-calendar-control .owl-calendar-controlNav .nav-next:before { + //content: ""; + border-top: .5em solid transparent; + border-bottom: .5em solid transparent; + border-right: 0.75em solid #000000; + width: 0; + height: 0; + display: block; + margin: 0 auto; } +.owl-calendar-control .owl-calendar-controlNav .nav-next:before { + border-right: 0; + border-left: 0.75em solid #000000; } +.owl-calendar-control .owl-calendar-controlContent .month-control, +.owl-calendar-control .owl-calendar-controlContent .year-control { + color: @unselected-text-color; + display: inline-block; + cursor: pointer; + transition: transform 200ms ease; } + .owl-calendar-control .owl-calendar-controlContent .month-control:hover, + .owl-calendar-control .owl-calendar-controlContent .year-control:hover { + // transform: scale(1.2); } + color: @guide-color; } +.owl-calendar-control .owl-calendar-controlContent .month-control { + font-size: @font-size-title-group; + margin-right: .8rem; +} +.owl-calendar-control .owl-calendar-controlContent .year-control { + font-size: @font-size-title-group; +} + +.owl-calendar tbody td.owl-calendar-selected { + background-color: @guide-color; + color: @component-bg } +.owl-calendar tbody td.owl-calendar-invalid { + color: @disabled-text-color } +.owl-calendar tbody td.owl-calendar-outFocus { + color: @unselected-text-color; } +.owl-calendar tbody td.owl-calendar-hidden { + visibility: hidden; } + /** +.owl-calendar tbody td:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: @hover-bg-color; + color: @shadow-color } +**/ +.owl-years td.owl-year, +.owl-years td.owl-month, +.owl-months td.owl-year, +.owl-months td.owl-month { + font-size: 1.2em; + height: 2.5em; + width: 33.33%; + line-height: 2.5em; + border-radius: 60px; + } + +.owl-weekdays th.owl-weekday { + height: 1em; + line-height: 2em; + text-align: center; + font-weight: normal; + font-size: @font-size; + /**color: @unselected-text-color; **/ + } + +.owl-days td.owl-day { + border-radius: 30px; + height: 2em; + width: calc(100% / 7); + line-height: 2em; } + .owl-days td.owl-day.owl-day-today:before { + content: ''; + display: block; + position: absolute; + right: 2px; + top: 2px; + color: @primary-color; + border-top: 0.5em solid @primary-color-hover; + border-left: .5em solid transparent; + } + +.owl-timer-wrapper { + height: 5.4em; + background-color: @shadow-color; } + .owl-timer-wrapper .owl-timer-text { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 40%; + font-size: 1.5em; } + .owl-timer-wrapper .owl-meridian-btn { + font-size: .8em; + color: @guide-color; + background-image: none; + background-color: transparent; + border-color: @guide-color; } + .owl-timer-wrapper .owl-meridian-btn:hover { + color: @scene-textcolor; + background-color: @guide-color; + border-color: @guide-color; } + +.owl-timer-divider { + display: inline-block; + align-self: flex-end; + position: absolute; + width: .6em; + height: 100%; + left: -.3em; } + .owl-timer-divider .owl-timer-dot { + display: block; + width: .3em; + height: .3em; + position: absolute; + left: 50%; + border-radius: 50%; + transform: translateX(-50%); } + .owl-timer-divider .owl-timer-dot.dot-top { + top: 38%; } + .owl-timer-divider .owl-timer-dot.dot-bottom { + bottom: 38%; } +.owl-icon{ + position: absolute; + top: 50%; + right: .1em; + border-radius: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + cursor: pointer; + color: @fonticon-color; +} + +.oes-time-control{ + color: @text-color !important; +} +.owl-calendar-selected { + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar tbody td div.day:not(.owl-calendar-selected):not(.owl-calendar-invalid):hover { + background-color: @hover-bg-color; + color:#000; + border-radius: 50%; } +.oes-time-control{ + font-size: @font-size; +} +.owl-calendar-year-part{ + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-year-part:hover{ + background-color: @hover-bg-color; + color:#000; + border-radius: 50%; +} +.owl-calendar-year-selected{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar-year-selected:hover{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-part{ + width: 42px; + margin-left: 30px; + text-align: center; +} +.owl-calendar-month-part:hover{ + background-color: @hover-bg-color; + color:#000; + border-radius: 50%; +} +.owl-calendar-month-selected{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} +.owl-calendar-month-selected:hover{ + background-color: @guide-color; + color: #fff; + border-radius: 50%; +} + +/*# sourceMappingURL=picker.css.map */ + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.ts new file mode 100644 index 00000000..493e0cb2 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.component.ts @@ -0,0 +1,1712 @@ +/** + * picker.component + */ + +import { + AfterViewInit, + Component, ElementRef, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Output, Renderer2, + ViewChild +} from '@angular/core'; +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; +import { + parse, + isValid, + startOfMonth, + getDate, + getDay, + addDays, + addMonths, + isSameDay, + isSameMonth, + isToday, + getMonth, + setMonth, + getYear, + addYears, + differenceInCalendarDays, + setYear, + getHours, + setHours, + getMinutes, + setMinutes, + getSeconds, + setSeconds, + isBefore, + isAfter, + compareAsc, + startOfDay, + format, + endOfDay, +} from 'date-fns'; +import { NumberFixedLenPipe } from './numberedFixLen.pipe'; + +export interface LocaleSettings { + firstDayOfWeek?: number; + dayNames: string[]; + dayNamesShort: string[]; + monthNames: string[]; + monthNamesShort: string[]; + dateFns: any; + confirm: string; +} + +export enum DialogType { + Time, + Date, + Month, + Year, +} + +export const DATETIMEPICKER_VALUE_ACCESSOR: any = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => DateTimePickerComponent), + multi: true +}; + +@Component({ + selector: 'plx-datepicker', + templateUrl: './picker.component.html', + styleUrls: ['./picker.component.less'], + providers: [NumberFixedLenPipe, DATETIMEPICKER_VALUE_ACCESSOR], + animations: [ + trigger('fadeInOut', [ + state('hidden', style({ + opacity: 0, + display: 'none' + })), + state('visible', style({ + opacity: 1, + display: 'block' + })), + transition('visible => hidden', animate('200ms ease-in')), + transition('hidden => visible', animate('400ms ease-out')) + ]) + ], +}) + +export class DateTimePickerComponent implements OnInit, AfterViewInit, OnDestroy, ControlValueAccessor { + + @ViewChild('timepicker') public timepicker; + + /** + * Type of the value to write back to ngModel + * @default 'date' -- Javascript Date type + * @type {'string' | 'date'} + * */ + @Input() dataType: 'string' | 'date' = 'date'; + + /** + * Format of the date + * @default 'y/MM/dd' + * @type {String} + * */ + @Input() dateFormat: string = 'YYYY-MM-DD HH:mm'; + /** + * When present, it specifies that the component should be disabled + * @default false + * @type {Boolean} + * */ + @Input() disabled: boolean; + /** + * @default false + * @type {Boolean} + * */ + @Input() supportKeyboardInput: boolean = false; + /** + * Array with dates that should be disabled (not selectable) + * @default null + * @type {Date[]} + * */ + @Input() disabledDates: Date[] = []; + + /** + * Array with weekday numbers that should be disabled (not selectable) + * @default null + * @type {number[]} + * */ + @Input() disabledDays: number[]; + + /** + * When enabled, displays the calendar as inline + * @default false -- popup mode + * @type {boolean} + * */ + @Input() inline: boolean; + + /** + * Identifier of the focus input to match a label defined for the component + * @default null + * @type {String} + * */ + @Input() inputId: string; + + /** + * Inline style of the picker text input + * @default null + * @type {any} + * */ + @Input() inputStyle: any; + + /** + * Style class of the picker text input + * @default null + * @type {String} + * */ + @Input() inputStyleClass: string; + + /** + * Maximum number of selectable dates in multiple mode + * @default null + * @type {number} + * */ + @Input() maxDateCount: number; + + /** + * The minimum selectable date time + * @default null + * @type {Date | string} + * */ + private _max: Date; + @Input() + get max() { + return this._max; + } + + set max(val: Date | string) { + this._max = this.parseToDate(val); + } + + @Input() + get maxDate() { + return this._max; + } + + set maxDate(val: Date | string) { + this._max = this.parseToDate(val); + } + + /** + * The maximum selectable date time + * @default null + * @type {Date | string } + * */ + private _min: Date; + @Input() + get min() { + return this._min; + } + + set min(val: Date | string) { + this._min = this.parseToDate(val); + } + @Input() + get minDate() { + return this._min; + } + + set minDate(val: Date | string) { + this._min = this.parseToDate(val); + } + + @Input() + get dateValue() { + return this.value; + } + + set dateValue(val: Date | string) { + let newvalue = this.parseToDate(val); + if(newvalue!==undefined) + { + this.updateModel(newvalue); + this.updateCalendar(newvalue); + this.updateTimer(newvalue); + this.updateFormattedValue(); + } + } + + + /** + * Picker input placeholder value + * @default + * @type {String} + * */ + @Input() placeHolder: string = 'yyyy-mm-dd hh:mm'; + + /** + * When present, it specifies that an input field must be filled out before submitting the form + * @default false + * @type {Boolean} + * */ + @Input() required: boolean; + + /** + * Defines the quantity of the selection + * 'single' -- allow only a date value to be selected + * 'multiple' -- allow multiple date value to be selected + * 'range' -- allow to select an range ot date values + * @default 'single' + * @type {string} + * */ + @Input() selectionMode: 'single' | 'multiple' | 'range' = 'single'; + + /** + * Whether to show the picker dialog header + * @default false + * @type {Boolean} + * */ + @Input() showHeader: boolean; + + @Input() canClear: boolean = true; + + /** + * Whether to show the second's timer + * @default false + * @type {Boolean} + * */ + @Input() showSeconds: boolean; + + /** + * Inline style of the element + * @default null + * @type {any} + * */ + @Input() style: any; + + /** + * Style class of the element + * @default null + * @type {String} + * */ + @Input() styleClass: string; + + /** + * Index of the element in tabbing order + * @default null + * @type {Number} + * */ + @Input() tabIndex: number; + + /** + * Set the type of the dateTime picker + * 'both' -- show both calendar and timer + * 'calendar' -- show only calendar + * 'timer' -- show only timer + * @default 'both' + * @type {'both' | 'calendar' | 'timer'} + * */ + @Input() type: 'both' | 'calendar' | 'timer' = 'calendar'; + + //附加方法 + @Input() + set timeOnly(value: boolean) { + if (value) { + this.type = 'timer'; + } + else { + this.type = "both"; + } + } + + @Input() + set showTime(value: boolean) { + if (value) { + this.type = 'both'; + } + else { + this.type = "calendar"; + } + } + + /** + * An object having regional configuration properties for the dateTimePicker + * */ + @Input() + get locale(): any { + return this._locale; + } + set locale(val: any) { + if (val !== undefined) { + this._locale = val; + this._userlocale = true; + } + } + + @Input() localePrefab: 'Zh' | 'En' = 'En'; + /** + * Determine the hour format (12 or 24) + * @default '24' + * @type {'24'| '12'} + * */ + @Input() hourFormat: '12' | '24' = '24'; + + + /** + * When it is set to false, only show current month's days in calendar + * @default true + * @type {boolean} + * */ + @Input() showOtherMonths: boolean = true; + + /** + * Callback to invoke when dropdown gets focus. + * */ + @Output() onFocus: any = new EventEmitter(); + + /** + * Callback to invoke when dropdown gets focus. + * */ + @Output() onConfirm: any = new EventEmitter(); + + /** + * Callback to invoke when dropdown loses focus. + * */ + @Output() onBlur: any = new EventEmitter(); + + /** + * Callback to invoke when a invalid date is selected. + * */ + @Output() onInvalid: any = new EventEmitter(); + + + + @ViewChild('container') containerElm: ElementRef; + @ViewChild('textInput') textInputElm: ElementRef; + @ViewChild('dialog') dialogElm: ElementRef; + + public calendarDays: Array; + public calendarWeekdays: string[]; + public calendarMonths: Array; + public calendarYears: Array = []; + public dialogType: DialogType = DialogType.Date; + public dialogVisible: boolean; + public focus: boolean; + public formattedValue: string = ''; + public value: any; + public pickerMoment: Date; + public pickerMonth: string; + public pickerYear: string; + + public hourValue: number; + public minValue: number; + public secValue: number; + public meridianValue: string = 'AM'; + private _userlocale: boolean = false; + private _locale: LocaleSettings = { + firstDayOfWeek: 0, + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + //dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dateFns: null, + confirm: 'OK' + }; + private _localeEn: LocaleSettings = { + firstDayOfWeek: 0, + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dateFns: null, + confirm: 'OK' + }; + private _localeZh: LocaleSettings = { + firstDayOfWeek: 0, + dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], + dayNamesShort: ['日', '一', '二', '三', '四', '五', '六'], + monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + monthNamesShort: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + dateFns: null, + confirm: '确定' + }; + private dialogClick: boolean; + private documentClickListener: Function; + private valueIndex: number = 0; + private onModelChange: Function = () => { + // + } + private onModelTouched: Function = () => { + // + } + + constructor(private renderer: Renderer2, + private numFixedLenPipe: NumberFixedLenPipe) { + } + private updateDate(newvalue : Date) + { + if(newvalue!==undefined&&newvalue!==null) + { + if(this.min) + { + newvalue = this._min.getTime()<=newvalue.getTime()?newvalue:new Date(this._min); + } + if(this.max) + { + newvalue = this._max.getTime()>=newvalue.getTime()?newvalue:new Date(this._max); + } + this.updateModel(newvalue); + this.updateCalendar(newvalue); + this.updateTimer(newvalue); + this.updateFormattedValue(); + return; + } + } + public onInputChange(event:any): void { + let newvalue = this.parseToDate(event.target.value); + if(newvalue!==undefined&&newvalue!==null) + { + if(this.min) + { + newvalue = this._min.getTime()<=newvalue.getTime()?newvalue:new Date(this._min); + } + if(this.max) + { + newvalue = this._max.getTime()>=newvalue.getTime()?newvalue:new Date(this._max); + } + this.updateModel(newvalue); + this.updateCalendar(newvalue); + this.updateTimer(newvalue); + this.updateFormattedValue(); + return; + } + this.updateModel(null); + this.updateCalendar(null); + this.updateTimer(null); + this.updateFormattedValue(); + } + public ngOnInit(): void { + + if ((!this._userlocale) || this.locale === null && this.locale === undefined) { + switch (this.localePrefab) { + + case 'Zh': { + this._locale = this._localeZh; + break; + } + case 'En': { + this._locale = this._localeEn; + break; + } + default: + { + this._locale = this._localeEn; + break; + } + } + } + this.pickerMoment = new Date(); + + if (this.type === 'both' || this.type === 'calendar') { + this.generateWeekDays(); + this.generateMonthList(); + } + this.updateTimer(this.value); + } + + public ngAfterViewInit(): void { + this.updateCalendar(this.value); + this.updateTimer(this.value); + } + + public ngOnDestroy(): void { + this.unbindDocumentClickListener(); + } + + public writeValue(obj: any): void { + + if (obj instanceof Array) { + this.value = []; + for (let o of obj) { + let v = this.parseToDate(o); + this.value.push(v); + } + this.updateCalendar(this.value[0]); + this.updateTimer(this.value[0]); + } else { + this.value = this.parseToDate(obj); + this.updateCalendar(this.value); + this.updateTimer(this.value); + } + this.updateFormattedValue(); + } + + public registerOnChange(fn: any): void { + this.onModelChange = fn; + } + + public registerOnTouched(fn: any): void { + this.onModelTouched = fn; + } + + public setDisabledState(isDisabled: boolean): void { + this.disabled = isDisabled; + } + + + private initflag = true; + /** + * Handle click event on the text input + * @param {any} event + * @return {void} + * */ + public onInputClick(event: any): void { + + if (this.timepicker !== undefined && this.initflag) { + this.initflag = false; + if (this.value !== undefined && this.value !== null) { + this.timepicker.updateHour(this.value.getHours()); + this.timepicker.updateMinute(this.value.getMinutes()); + this.timepicker.updateSecond(this.value.getSeconds()); + } + else { + this.timepicker.updateHour(0); + this.timepicker.updateMinute(0); + this.timepicker.updateSecond(0); + this.updateModel(null); + this.updateFormattedValue(); + } + } + if (this.disabled) { + event.preventDefault(); + return; + } + + this.dialogClick = true; + if (!this.dialogVisible) { + this.show(); + } + event.preventDefault(); + return; + } + + /** + * Set the element on focus + * @param {any} event + * @return {void} + * */ + public onInputFocus(event: any): void { + this.focus = true; + this.onFocus.emit(event); + event.preventDefault(); + return; + } + + /** + * Set the element on blur + * @param {any} event + * @return {void} + * */ + public onInputBlur(event: any): void { + this.focus = false; + this.onModelTouched(); + this.onBlur.emit(event); + event.preventDefault(); + return; + } + + /** + * Handle click event on the dialog + * @param {any} event + * @return {void} + * */ + public onDialogClick(event: any): void { + this.dialogClick = true; + } + + /** + * Go to previous month + * @param {any} event + * @return {void} + * */ + public prevMonth(event: any): void { + + if (this.disabled) { + event.preventDefault(); + return; + } + + this.pickerMoment = addMonths(this.pickerMoment, -1); + this.generateCalendar(); + if(this.value!==undefined&&this.value!==null) + { + let nowvalue = new Date(this.value); + nowvalue.setMonth(this.pickerMoment.getMonth()); + this.updateDate(nowvalue); + } + event.preventDefault(); + return; + } + + /** + * Go to next month + * @param {any} event + * @return {void} + * */ + public nextMonth(event: any): void { + + if (this.disabled) { + event.preventDefault(); + return; + } + + this.pickerMoment = addMonths(this.pickerMoment, 1); + this.generateCalendar(); + if(this.value!==undefined&&this.value!==null) + { + let nowvalue = new Date(this.value); + nowvalue.setMonth(this.pickerMoment.getMonth()); + this.updateDate(nowvalue); + } + event.preventDefault(); + return; + } + + /** + * Select a date + * @param {any} event + * @param {Date} date + * @return {void} + * */ + public selectDate(event: any, date: Date): void { + + if (this.disabled || !date) { + event.preventDefault(); + return; + } + + let temp: Date; + // check if the selected date is valid + if (this.isValidValue(date)) { + temp = date; + } else { + if (isSameDay(date, this._min)) { + temp = new Date(this._min); + } else if (isSameDay(date, this._max)) { + temp = new Date(this._max); + } else { + this.onInvalid.emit({ originalEvent: event, value: date }); + return; + } + } + if (this.minValue !== undefined) { + temp.setMinutes(this.minValue); + } + if (this.secValue !== undefined) { + temp.setSeconds(this.secValue); + } + if (this.hourValue !== undefined) { + temp.setHours(this.hourValue); + } + let selected; + if (this.isSingleSelection()) { + if (!isSameDay(this.value, temp)) { + selected = temp; + } + } else if (this.isRangeSelection()) { + if (this.value && this.value.length) { + let startDate = this.value[0]; + let endDate = this.value[1]; + + if (!endDate && temp.getTime() > startDate.getTime()) { + endDate = temp; + this.valueIndex = 1; + } else { + startDate = temp; + endDate = null; + this.valueIndex = 0; + } + selected = [startDate, endDate]; + } else { + selected = [temp, null]; + this.valueIndex = 0; + } + } else if (this.isMultiSelection()) { + + // check if it exceeds the maxDateCount limit + if (this.maxDateCount && this.value && + this.value.length && this.value.length >= this.maxDateCount) { + this.onInvalid.emit({ originalEvent: event, value: 'Exceed max date count.' }); + return; + } + + if (this.isSelectedDay(temp)) { + selected = this.value.filter((d: Date) => { + return !isSameDay(d, temp); + }); + } else { + selected = this.value ? [...this.value, temp] : [temp]; + this.valueIndex = selected.length - 1; + } + } + if (selected) { + this.updateModel(selected); + if (this.value instanceof Array) { + this.updateCalendar(this.value[this.valueIndex]); + this.updateTimer(this.value[this.valueIndex]); + } else { + this.updateCalendar(this.value); + this.updateTimer(this.value); + } + this.updateFormattedValue(); + } + } + + /** + * Set a pickerMoment's month + * @param {Number} monthNum + * @return {void} + * */ + public selectMonth(monthNum: number): void { + this.pickerMoment = setMonth(this.pickerMoment, monthNum); + this.generateCalendar(); + if(this.value!==undefined&&this.value!==null) + { + let nowvalue = new Date(this.value); + nowvalue.setMonth(monthNum); + this.updateDate(nowvalue); + } + this.changeDialogType(DialogType.Month); + } + + /** + * Set a pickerMoment's year + * @param {Number} yearNum + * @return {void} + * */ + public selectYear(yearNum: number): void { + this.pickerMoment = setYear(this.pickerMoment, yearNum); + this.generateCalendar(); + if(this.value!==undefined&&this.value!==null) + { + let nowvalue = new Date(this.value); + nowvalue.setFullYear(yearNum); + this.updateDate(nowvalue); + } + this.changeDialogType(DialogType.Year); + } + + /** + * Set the selected moment's meridian + * @param {any} event + * @return {void} + * */ + public toggleMeridian(event: any): void { + + let value = this.value ? (this.value.length ? this.value[this.valueIndex] : this.value) : null; + + if (this.disabled) { + event.preventDefault(); + return; + } + + if (!value) { + this.meridianValue = this.meridianValue === 'AM' ? 'PM' : 'AM'; + return; + } + + let hours = getHours(value); + if (this.meridianValue === 'AM') { + hours += 12; + } else if (this.meridianValue === 'PM') { + hours -= 12; + } + + let selectedTime = setHours(value, hours); + this.setSelectedTime(selectedTime); + event.preventDefault(); + return; + } + + /** + * Set the selected moment's hour + * @param {any} event + * @param {'increase' | 'decrease' | number} val + * 'increase' -- increase hour value by 1 + * 'decrease' -- decrease hour value by 1 + * number -- set hour value to val + * @param {HTMLInputElement} input -- optional + * @return {boolean} + * */ + public setHours(event: any, val: 'increase' | 'decrease' | number, input?: HTMLInputElement): boolean { + + let value; + if (this.value) { + if (this.value.length) { + value = this.value[this.valueIndex]; + } else { + value = this.value; + } + } else { + if (this.type === 'timer') { + value = new Date(); + } else { + value = null; + } + } + + if (this.disabled || !value) { + event.preventDefault(); + return false; + } + + let hours = getHours(value); + if (val === 'increase') { + hours += 1; + } else if (val === 'decrease') { + hours -= 1; + } else { + hours = val; + } + + if (hours > 23) { + hours = 0; + } else if (hours < 0) { + hours = 23; + } + + let selectedTime = setHours(value, hours); + let done = this.setSelectedTime(selectedTime); + + // Focus the input and select its value when model updated + if (input) { + setTimeout(() => { + input.focus(); + }, 0); + } + + event.preventDefault(); + return done; + } + + /** + * Set the selected moment's minute + * @param {any} event + * @param {'increase' | 'decrease' | number} val + * 'increase' -- increase minute value by 1 + * 'decrease' -- decrease minute value by 1 + * number -- set minute value to val + * @param {HTMLInputElement} input -- optional + * @return {boolean} + * */ + public setMinutes(event: any, val: 'increase' | 'decrease' | number, input?: HTMLInputElement): boolean { + + let value; + if (this.value) { + if (this.value.length) { + value = this.value[this.valueIndex]; + } else { + value = this.value; + } + } else { + if (this.type === 'timer') { + value = new Date(); + } else { + value = null; + } + } + + if (this.disabled || !value) { + event.preventDefault(); + return false; + } + + let minutes = getMinutes(value); + if (val === 'increase') { + minutes += 1; + } else if (val === 'decrease') { + minutes -= 1; + } else { + minutes = val; + } + + if (minutes > 59) { + minutes = 0; + } else if (minutes < 0) { + minutes = 59; + } + + let selectedTime = setMinutes(value, minutes); + let done = this.setSelectedTime(selectedTime); + + // Focus the input and select its value when model updated + if (input) { + setTimeout(() => { + input.focus(); + }, 0); + } + + event.preventDefault(); + return done; + } + + /** + * Set the selected moment's second + * @param {any} event + * @param {'increase' | 'decrease' | number} val + * 'increase' -- increase second value by 1 + * 'decrease' -- decrease second value by 1 + * number -- set second value to val + * @param {HTMLInputElement} input -- optional + * @return {boolean} + * */ + public setSeconds(event: any, val: 'increase' | 'decrease' | number, input?: HTMLInputElement): boolean { + + let value; + if (this.value) { + if (this.value.length) { + value = this.value[this.valueIndex]; + } else { + value = this.value; + } + } else { + if (this.type === 'timer') { + value = new Date(); + } else { + value = null; + } + } + + if (this.disabled || !value) { + event.preventDefault(); + return false; + } + + let seconds = getSeconds(value); + if (val === 'increase') { + seconds = this.secValue + 1; + } else if (val === 'decrease') { + seconds = this.secValue - 1; + } else { + seconds = val; + } + + if (seconds > 59) { + seconds = 0; + } else if (seconds < 0) { + seconds = 59; + } + + let selectedTime = setSeconds(value, seconds); + let done = this.setSelectedTime(selectedTime); + + // Focus the input and select its value when model updated + if (input) { + setTimeout(() => { + input.focus(); + }, 0); + } + + event.preventDefault(); + return done; + } + + /** + * Check if the date is selected + * @param {Date} date + * @return {Boolean} + * */ + public isSelectedDay(date: Date): boolean { + if (this.isSingleSelection()) { + return this.value && isSameDay(this.value, date); + } else if (this.isRangeSelection() && this.value && this.value.length) { + if (this.value[1]) { + return (isSameDay(this.value[0], date) || isSameDay(this.value[1], date) || + this.isDayBetween(this.value[0], this.value[1], date)) && this.isValidDay(date); + } else { + return isSameDay(this.value[0], date); + } + } else if (this.isMultiSelection() && this.value && this.value.length) { + let selected; + for (let d of this.value) { + selected = isSameDay(d, date); + if (selected) { + break; + } + } + return selected; + } + return false; + } + + /** + * Check if a day is between two specific days + * @param {Date} start + * @param {Date} end + * @param {Date} day + * @return {boolean} + * */ + public isDayBetween(start: Date, end: Date, day: Date): boolean { + if (start && end) { + return isAfter(day, start) && isBefore(day, end); + } else { + return false; + } + } + + /** + * Check if the calendar day is a valid day + * @param {Date} date + * @return {Boolean} + * */ + public isValidDay(date: Date): boolean { + let isValid = true; + if (this.disabledDates && this.disabledDates.length) { + for (let disabledDate of this.disabledDates) { + if (isSameDay(disabledDate, date)) { + return false; + } + } + } + + if (isValid && this.disabledDays && this.disabledDays.length) { + let weekdayNum = getDay(date); + isValid = this.disabledDays.indexOf(weekdayNum) === -1; + } + + if (isValid && this.min) { + isValid = isValid && !isBefore(date, startOfDay(this.min)); + } + + if (isValid && this.max) { + isValid = isValid && !isAfter(date, endOfDay(this.max)); + } + return isValid; + } + + /** + * Check if the month is current pickerMoment's month + * @param {Number} monthNum + * @return {Boolean} + * */ + public isCurrentMonth(monthNum: number): boolean { + return getMonth(this.pickerMoment) === monthNum; + } + + /** + * Check if the year is current pickerMoment's year + * @param {Number} yearNum + * @return {Boolean} + * */ + public isCurrentYear(yearNum: any): boolean { + return getYear(this.pickerMoment) === yearNum||(getYear(this.pickerMoment)+"") === yearNum; + } + + /** + * Change the dialog type + * @param {DialogType} type + * @return {void} + * */ + public changeDialogType(type: DialogType): void { + if (this.dialogType === type) { + this.dialogType = DialogType.Date; + return; + } else { + this.dialogType = type; + } + + if (this.dialogType === DialogType.Year) { + this.generateYearList(); + } + } + + /** + * Handle blur event on timer input + * @param {any} event + * @param {HTMLInputElement} input + * @param {string} type + * @param {number} modelValue + * @return {void} + * */ + public onTimerInputBlur(event: any, input: HTMLInputElement, type: string, modelValue: number): void { + let val = +input.value; + + if (this.disabled || val === modelValue) { + event.preventDefault(); + return; + } + + let done; + if (!isNaN(val)) { + switch (type) { + case 'hours': + if (this.hourFormat === '24' && + val >= 0 && val <= 23) { + done = this.setHours(event, val); + } else if (this.hourFormat === '12' + && val >= 1 && val <= 12) { + if (this.meridianValue === 'AM' && val === 12) { + val = 0; + } else if (this.meridianValue === 'PM' && val < 12) { + val = val + 12; + } + done = this.setHours(event, val); + } + break; + case 'minutes': + if (val >= 0 && val <= 59) { + done = this.setMinutes(event, val); + } + break; + case 'seconds': + if (val >= 0 && val <= 59) { + done = this.setSeconds(event, val); + } + break; + } + } + + if (!done) { + input.value = this.numFixedLenPipe.transform(modelValue, 2); + input.focus(); + return; + } + event.preventDefault(); + return; + } + + /** + * Set value to null + * @param {any} event + * @return {void} + * */ + public clearValue(event: any): void { + this.dialogClick = true; + this.updateModel(null); + this.updateTimer(this.value); + if (this.timepicker!==undefined) { + this.timepicker.settime(undefined); + } + this.updateFormattedValue(); + if(this.value!==null) + { + event.date=new Date(this.value); + } + this.onConfirm.emit(event); + event.preventDefault(); + } + + /** + * Show the dialog + * @return {void} + * */ + private show(): void { + this.alignDialog(); + this.dialogVisible = true; + this.dialogType = DialogType.Date; + this.bindDocumentClickListener(); + return; + } + private nextNav(event : any):void { + if( this.dialogType===DialogType.Date|| this.dialogType===DialogType.Month) + { + this.nextMonth(event); + } + else if(this.dialogType===DialogType.Year){ + this.generateYearList('next'); + } + } + private prevNav(event : any):void { + if( this.dialogType===DialogType.Date|| this.dialogType===DialogType.Month) + { + this.prevMonth(event); + } + else if(this.dialogType===DialogType.Year){ + this.generateYearList('prev'); + } + } + /** + * Hide the dialog + * @return {void} + * */ + private hide(): void { + this.dialogVisible = false; + this.timepicker ? this.timepicker.closeProp() : 0; + this.unbindDocumentClickListener(); + if(this.value!==null) + { + event["date"]=new Date(this.value); + } + this.onConfirm.emit(event); + return; + } + + /** + * Set the dialog position + * @return {void} + * */ + private alignDialog(): void { + let element = this.dialogElm.nativeElement; + let target = this.containerElm.nativeElement; + let elementDimensions = element.offsetParent ? { + width: element.offsetWidth, + height: element.offsetHeight + } : this.getHiddenElementDimensions(element); + let targetHeight = target.offsetHeight; + let targetWidth = target.offsetWidth; + let targetOffset = target.getBoundingClientRect(); + let viewport = this.getViewport(); + let top, left; + + if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) { + top = -1 * (elementDimensions.height); + if (targetOffset.top + top < 0) { + top = 0; + } + } else { + top = targetHeight; + } + + + if ((targetOffset.left + elementDimensions.width) > viewport.width) { + left = targetWidth - elementDimensions.width; + } else { + left = 0; + } + + element.style.top = top + 'px'; + element.style.left = left + 'px'; + } + + /** + * Bind click event on document + * @return {void} + * */ + private bindDocumentClickListener(): void { + let firstClick = true; + if (!this.documentClickListener) { + this.documentClickListener = this.renderer.listen('document', 'click', () => { + if (!firstClick && !this.dialogClick) { + this.hide(); + } + + firstClick = false; + this.dialogClick = false; + }); + } + return; + } + + /** + * Unbind click event on document + * @return {void} + * */ + private unbindDocumentClickListener(): void { + if (this.documentClickListener) { + this.documentClickListener(); + this.documentClickListener = null; + } + return; + } + + /** + * Parse a object to Date object + * @param {any} val + * @return {Date} + * */ + private parseToDate(val: any): Date { + if (!val) { + return; + } + + let parsedVal; + if (typeof val === 'string') { + parsedVal = parse(val); + } else { + parsedVal = val; + } + + return isValid(parsedVal) ? parsedVal : null; + } + + /** + * Generate the calendar days array + * @return {void} + * */ + private generateCalendar(): void { + + if (!this.pickerMoment) { + return; + } + + this.calendarDays = []; + let startDateOfMonth = startOfMonth(this.pickerMoment); + let startWeekdayOfMonth = getDay(startDateOfMonth); + + let dayDiff = 0 - (startWeekdayOfMonth + (7 - this.locale.firstDayOfWeek)) % 7; + + for (let i = 1; i < 7; i++) { + let week = []; + for (let j = 0; j < 7; j++) { + let date = addDays(startDateOfMonth, dayDiff); + let inOtherMonth = !isSameMonth(date, this.pickerMoment); + week.push({ + date, + num: getDate(date), + today: isToday(date), + otherMonth: inOtherMonth, + hide: !this.showOtherMonths && inOtherMonth, + }); + dayDiff += 1; + } + this.calendarDays.push(week); + } + + this.pickerMonth = this.locale.monthNames[getMonth(this.pickerMoment)]; + this.pickerYear = getYear(this.pickerMoment).toString(); + } + + /** + * Generate the calendar weekdays array + * */ + private generateWeekDays(): void { + this.calendarWeekdays = []; + let dayIndex = this.locale.firstDayOfWeek; + for (let i = 0; i < 7; i++) { + this.calendarWeekdays.push(this.locale.dayNamesShort[dayIndex]); + dayIndex = (dayIndex === 6) ? 0 : ++dayIndex; + } + } + + /** + * Generate the calendar month array + * @return {void} + * */ + private generateMonthList(): void { + this.calendarMonths = []; + let monthIndex = 0; + for (let i = 0; i < 4; i++) { + let months = []; + for (let j = 0; j < 3; j++) { + months.push(this.locale.monthNamesShort[monthIndex]); + monthIndex += 1; + } + this.calendarMonths.push(months); + } + } + + /** + * Generate the calendar year array + * @return {void} + * */ + public generateYearList(dir?: string): void { + + if (!this.pickerMoment) { + return; + } + let start; + + if (dir === 'prev') { + start = +this.calendarYears[0][0] - 12; + if(start<0) + { + start=0; + } + } else if (dir === 'next') { + start = +this.calendarYears[3][2] + 1; + } else { + start = getYear(addYears(this.pickerMoment, -4)); + } + + for (let i = 0; i < 4; i++) { + let years = []; + for (let j = 0; j < 3; j++) { + let year = (start + i * 3 + j).toString(); + years.push(year); + } + this.calendarYears[i] = years; + } + return; + } + + /** + * Update the calendar + * @param {Date} value + * @return {void} + * */ + private updateCalendar(value: Date): void { + + // if the dateTime picker is only the timer, + // no need to update the update Calendar. + if (this.type === 'timer') { + return; + } + + if (value && (!this.calendarDays || !isSameMonth(value, this.pickerMoment))) { + this.pickerMoment = setMonth(this.pickerMoment, getMonth(value)); + this.pickerMoment = setYear(this.pickerMoment, getYear(value)); + this.generateCalendar(); + } else if (!value && !this.calendarDays) { + this.generateCalendar(); + } + return; + } + + /** + * Update the timer + * @param {Date} value + * @return {boolean} + * */ + private updateTimer(value: Date): boolean { + + // if the dateTime picker is only the calendar, + // no need to update the timer + if (this.type === 'calendar') { + return false; + } + + if (!value) { + this.hourValue = null; + this.minValue = null; + this.secValue = null; + this.mtime.hour = 0; + this.mtime.minute = 0; + this.mtime.second = 0; + return true; + } + this.mtime.hour = value.getHours(); + this.mtime.minute = value.getMinutes(); + this.mtime.second = value.getSeconds();; + + let time = value; + let hours = getHours(time); + if (this.hourFormat === '12') { + if (hours < 12 && hours > 0) { + this.hourValue = hours; + this.meridianValue = 'AM'; + } else if (hours > 12) { + this.hourValue = hours - 12; + this.meridianValue = 'PM'; + } else if (hours === 12) { + this.hourValue = 12; + this.meridianValue = 'PM'; + } else if (hours === 0) { + this.hourValue = 12; + this.meridianValue = 'AM'; + } + } else if (this.hourFormat === '24') { + this.hourValue = hours; + } + + this.minValue = getMinutes(time); + this.secValue = getSeconds(time); + if(this.value!==undefined&&this.timepicker!==undefined) + { + this.timepicker.settime(new Date(this.value)); + } + return true; + } + + /** + * Update ngModel + * @param {Date} value + * @return {Boolean} + * */ + private updateModel(value: Date | Date[]): boolean { + this.value = value; + if (this.dataType === 'date') { + this.onModelChange(this.value); + } else if (this.dataType === 'string') { + if (this.value && this.value.length) { + let formatted = []; + for (let v of this.value) { + if (v) { + formatted.push(format(v, this.dateFormat, { locale: this.locale.dateFns })); + } else { + formatted.push(null); + } + } + this.onModelChange(formatted); + } else { + this.onModelChange(format(this.value, this.dateFormat, { locale: this.locale.dateFns })); + } + } + return true; + } + + /** + * Update variable formattedValue + * @return {void} + * */ + private updateFormattedValue(): void { + let formattedValue = ''; + + if (this.value) { + if (this.isSingleSelection()) { + formattedValue = format(this.value, this.dateFormat, { locale: this.locale.dateFns }); + } else if (this.isRangeSelection()) { + let startDate = this.value[0]; + let endDate = this.value[1]; + + formattedValue = format(startDate, this.dateFormat, { locale: this.locale.dateFns }); + + if (endDate) { + formattedValue += ' - ' + format(endDate, this.dateFormat, { locale: this.locale.dateFns }); + } else { + formattedValue += ' - ' + this.dateFormat; + } + } else if (this.isMultiSelection()) { + for (let i = 0; i < this.value.length; i++) { + let dateAsString = format(this.value[i], this.dateFormat, { locale: this.locale.dateFns }); + formattedValue += dateAsString; + if (i !== (this.value.length - 1)) { + formattedValue += ', '; + } + } + } + } + + this.formattedValue = formattedValue; + + return; + } + + /** + * Set the time + * @param {Date} val + * @return {boolean} + * */ + public setSelectedTime(val: Date): boolean { + let done; + if (this.isValidValue(val)) { + if (this.value instanceof Array) { + this.value[this.valueIndex] = val; + done = this.updateModel(this.value); + done = done && this.updateTimer(this.value[this.valueIndex]); + } else { + done = this.updateModel(val); + done = done && this.updateTimer(this.value); + } + this.updateFormattedValue(); + } else { + this.onInvalid.emit({ originalEvent: event, value: val }); + done = false; + } + return done; + } + + private isValidValue(value: Date): boolean { + let isValid = true; + + if (this.disabledDates && this.disabledDates.length) { + for (let disabledDate of this.disabledDates) { + if (isSameDay(disabledDate, value)) { + return false; + } + } + } + + if (isValid && this.disabledDays && this.disabledDays.length) { + let weekdayNum = getDay(value); + isValid = this.disabledDays.indexOf(weekdayNum) === -1; + } + + if (isValid && this.min) { + isValid = isValid && !isBefore(value, this.min); + } + + if (isValid && this.max) { + isValid = isValid && !isAfter(value, this.max); + } + + return isValid; + } + + /** + * Check if the selection mode is 'single' + * @return {boolean} + * */ + private isSingleSelection(): boolean { + return this.selectionMode === 'single'; + } + + /** + * Check if the selection mode is 'range' + * @return {boolean} + * */ + private isRangeSelection(): boolean { + return this.selectionMode === 'range'; + } + + /** + * Check if the selection mode is 'multiple' + * @return {boolean} + * */ + private isMultiSelection(): boolean { + return this.selectionMode === 'multiple'; + } + + private getHiddenElementDimensions(element: any): any { + let dimensions: any = {}; + element.style.visibility = 'hidden'; + element.style.display = 'block'; + dimensions.width = element.offsetWidth; + dimensions.height = element.offsetHeight; + element.style.display = 'none'; + element.style.visibility = 'visible'; + + return dimensions; + } + + private getViewport(): any { + let win = window, + d = document, + e = d.documentElement, + g = d.getElementsByTagName('body')[0], + w = win.innerWidth || e.clientWidth || g.clientWidth, + h = win.innerHeight || e.clientHeight || g.clientHeight; + + return { width: w, height: h }; + } + public confirm() { + this.hide(); + } + public seconds = false; + public mtime: any = { hour: 0, minute: 0, second: 0 }; + public TimerChange(time: any) { + let value; + if (this.value) { + if (this.value.length) { + value = this.value[this.valueIndex]; + } else { + value = this.value; + } + } else { + if (this.type === 'timer') { + value = new Date(); + } else { + value = new Date(); + } + } + + if (this.disabled || !value) { + event.preventDefault(); + return false; + } + + let minute = time.minute; + let hour = time.hour; + let second = time.second; + this.minValue = minute; + this.hourValue = hour; + this.secValue = second; + let selectedTime = setMinutes(value, minute); + selectedTime = setHours(selectedTime, hour); + selectedTime = setSeconds(selectedTime, second); + let done = this.setSelectedTime(selectedTime); + + // Focus the input and select its value when model updated + + event.preventDefault(); + return done; + } + private mouseIn :boolean = false; + private Mouseout(event:any) + { + this.mouseIn = false; + } + private Mouseover(event:any) + { + this.mouseIn = true; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.module.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.module.ts new file mode 100644 index 00000000..0511ad71 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/picker.module.ts @@ -0,0 +1,27 @@ +/** + * picker.module + */ + +import { NgModule } from '@angular/core'; + +import { DateTimePickerComponent } from './picker.component'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NumberFixedLenPipe } from './numberedFixLen.pipe'; +import { NgbTimepickerr } from './timepicker'; +import { OesDaterangePopover, OesDaterangePopoverWindow } from './popover'; +import { OesDaterangePopoverConfig } from './popover-config'; +import { NgbTimepickerConfig } from './timepicker-config'; +import { PlxDateRangePickerComponent } from './pickerrange.component' +export {DateTimePickerComponent} from './picker.component'; + +@NgModule({ + imports: [CommonModule, FormsModule], + exports: [DateTimePickerComponent, NgbTimepickerr, OesDaterangePopover,PlxDateRangePickerComponent], + declarations: [DateTimePickerComponent, NumberFixedLenPipe, NgbTimepickerr, OesDaterangePopoverWindow, OesDaterangePopover,PlxDateRangePickerComponent], + providers: [OesDaterangePopoverConfig, NgbTimepickerConfig, OesDaterangePopoverConfig], + entryComponents: [DateTimePickerComponent, OesDaterangePopoverWindow] +}) +export class PlxDatePickerModule { +} + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.css b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.css new file mode 100644 index 00000000..2fb5b2b4 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.css @@ -0,0 +1,18 @@ +.datepickboxleft +{ + width:45%; + margin-right: 3%; + float: left; +} +.datepickboxright +{ + width:45%; + margin-left: 3%; + float: left; +} +.datepickboxto{ + width:4%; + float: left; + margin-top: 6px; + text-align: center; +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.html b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.html new file mode 100644 index 00000000..2b1986fe --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.html @@ -0,0 +1,14 @@ +
+
+ +
+
+{{locale.to}} +
+
+ +
+
+
\ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.ts new file mode 100644 index 00000000..a84e0987 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/pickerrange.component.ts @@ -0,0 +1,162 @@ +/** + * picker.component + */ + +import { + AfterViewInit, + Component, ElementRef, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Output, Renderer2, + ViewChild +} from '@angular/core'; +import {animate, state, style, transition, trigger} from '@angular/animations'; +import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; + +export interface LocaleSettings { + firstDayOfWeek?: number; + dayNames: string[]; + dayNamesShort: string[]; + monthNames: string[]; + monthNamesShort: string[]; + dateFns: any; +} + +export enum DialogType { + Time, + Date, + Month, + Year, +} + +@Component({ + selector: 'plx-daterange-picker', + templateUrl: './pickerrange.component.html', + styleUrls: ['./pickerrange.component.css'], + providers: [], +}) + +export class PlxDateRangePickerComponent { + /* +disabled boolean false 设置为true时input框不能输入 +minDate Date null 最小可选日期 +maxDate Date null 最大可选日期 +showTime boolean false 设置为true时显示时间选择器 +showSeconds boolean false 时间选择器显示秒 +timeOnly boolean false 设置为true时只显示时间选择器 +dateFormat string YYYY-MM-DD HH:mm 设置时间选择模式 +locale Object null 设置国际化对象,请参考国际化例子。 +改变组件时间*/ + + @Input() disabled : boolean = false; + @Input() showTime : boolean = false; + @Input() showSeconds : boolean = false; + @Input() timeOnly : boolean = false; + @Input() dateFormat : string = "YYYY-MM-DD HH:mm"; + @Input() placeHolderStartDate : string = ""; + @Input() placeHolderEndDate : string = ""; + @Input() locale : any ={ + firstDayOfWeek: 0, + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], + monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dateFns: null, + confirm:'OK', + to:"to" + }; + @Input() startDate : Date; + @Input() endDate : Date; + @Input() canClear: boolean = true; + @Input() startMinDate:Date; + @Input() endMaxDate:Date; + /** + * @default false + * @type {Boolean} + * */ + @Input() supportKeyboardInput: boolean = false; + _startSetMaxDate:Date; + _startMaxDate:Date; + @Input() + set startMaxDate( date:Date) + { + this._startSetMaxDate=date; + this.BuildstartMaxDate(); + } + _endSetMinDate:Date; + _endMinDate:Date; + @Input() + set endMinDate( date:Date) + { + this._endSetMinDate=date; + this.BuildendMinDate(); + } + BuildstartMaxDate() + { + if(this._startSetMaxDate===undefined) + { + this._startMaxDate=this.endDate + return; + } + if(this.endDate!==undefined) + { + this._startMaxDate= this.endDatethis._endSetMinDate?this.startDate:this._endSetMinDate; + return; + } + this._endMinDate=this._endSetMinDate; + } + + @Output() + onStartDateClosed: EventEmitter = new EventEmitter(); + @Output() + onEndDateClosed: EventEmitter = new EventEmitter(); + + EvonStartDateClosed(event : any) + { + this.BuildendMinDate(); + if(this.startDate!==null) + { + event.date=new Date(this.startDate); + } + this.onStartDateClosed.emit(event); + event.preventDefault(); + let dd= this; + return; + } + + + EvonEndDateClosed (event : any) + { + + this.BuildstartMaxDate() + if(this.endDate!==null) + { + event.date=new Date(this.endDate); + } + this.onEndDateClosed.emit(event); + event.preventDefault(); + let dd= this; + return; + } + + + public navigateTo (startDate: Date, endDate: Date) + { + this.startDate=startDate; + this.endDate = endDate; + } + + + +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover-config.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover-config.ts new file mode 100644 index 00000000..5ac773c5 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover-config.ts @@ -0,0 +1,13 @@ +import { Injectable } from '@angular/core'; + +/** + * Configuration service for the OesDaterangePopover directive. + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the popovers used in the application. + */ +@Injectable() +export class OesDaterangePopoverConfig { + public placement: 'top' | 'bottom' | 'left' | 'right' = 'top'; + public triggers = 'click'; + public container: string; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover.ts new file mode 100644 index 00000000..3d054120 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/popover.ts @@ -0,0 +1,175 @@ +import { + Component, + Directive, + Input, + Output, + EventEmitter, + ChangeDetectionStrategy, + OnInit, + OnDestroy, + Injector, + Renderer, + ComponentRef, + ElementRef, + TemplateRef, + ViewContainerRef, + ComponentFactoryResolver, + NgZone +} from '@angular/core'; + +import { listenToTriggers } from './util/triggers'; +import { positionElements } from './util/positioning'; +import { PopupService } from './util/popup'; +import { OesDaterangePopoverConfig } from './popover-config'; + +let nextId = 0; + +@Component({ + selector: 'ngb-popover-window', + changeDetection: ChangeDetectionStrategy.OnPush, + host: { '[class]': '"popover show popover-" + placement', 'role': 'tooltip', '[id]': 'id' }, + styles: [` + + .popover-title,.popover-content{ + background-color: #fff; + } + .popover-custom{ + padding:9px 5px !important; + } + + + `], + template: ` +

{{title}}

+ ` +}) +export class OesDaterangePopoverWindow { + @Input() public placement: 'top' | 'bottom' | 'left' | 'right' = 'top'; + @Input() public title: string; + @Input() public id: string; +} + +/** + * A lightweight, extensible directive for fancy oes-popover creation. + */ +@Directive({ selector: '[oesDaterangePopover]', exportAs: 'oesDaterangePopover' }) +export class OesDaterangePopover implements OnInit, OnDestroy { + /** + * Content to be displayed as oes-popover. + */ + @Input() public oesDaterangePopover: string | TemplateRef; + /** + * Title of a oes-popover. + */ + @Input() public popoverTitle: string; + /** + * Placement of a oes-popover. Accepts: "top", "bottom", "left", "right" + */ + @Input() public placement: 'top' | 'bottom' | 'left' | 'right'; + /** + * Specifies events that should trigger. Supports a space separated list of event names. + */ + @Input() public triggers: string; + /** + * A selector specifying the element the oes-popover should be appended to. + * Currently only supports "body". + */ + @Input() public container: string; + /** + * Emits an event when the oes-popover is shown + */ + @Output() public shown = new EventEmitter(); + /** + * Emits an event when the oes-popover is hidden + */ + @Output() public hidden = new EventEmitter(); + + private _OesDaterangePopoverWindowId = `ngb-popover-${nextId++}`; + private _popupService: PopupService; + private _windowRef: ComponentRef; + private _unregisterListenersFn; + private _zoneSubscription: any; + + constructor( + private _elementRef: ElementRef, private _renderer: Renderer, injector: Injector, + componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: OesDaterangePopoverConfig, + ngZone: NgZone) { + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this._popupService = new PopupService( + OesDaterangePopoverWindow, injector, viewContainerRef, _renderer, componentFactoryResolver); + + this._zoneSubscription = ngZone.onStable.subscribe(() => { + if (this._windowRef) { + positionElements( + this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, + this.container === 'body'); + } + }); + } + + /** + * Opens an element’s oes-popover. This is considered a “manual” triggering of the oes-popover. + * The context is an optional value to be injected into the oes-popover template when it is created. + */ + public open(context?: any) { + if (!this._windowRef) { + this._windowRef = this._popupService.open(this.oesDaterangePopover, context); + this._windowRef.instance.placement = this.placement; + this._windowRef.instance.title = this.popoverTitle; + this._windowRef.instance.id = this._OesDaterangePopoverWindowId; + + this._renderer.setElementAttribute(this._elementRef.nativeElement, 'aria-describedby', this._OesDaterangePopoverWindowId); + + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + + // we need to manually invoke change detection since events registered via + // Renderer::listen() are not picked up by change detection with the OnPush strategy + this._windowRef.changeDetectorRef.markForCheck(); + this.shown.emit(); + } + } + + /** + * Closes an element’s oes-popover. This is considered a “manual” triggering of the oes-popover. + */ + public close(): void { + if (this._windowRef) { + this._renderer.setElementAttribute(this._elementRef.nativeElement, 'aria-describedby', null); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + } + } + + /** + * Toggles an element’s oes-popover. This is considered a “manual” triggering of the oes-popover. + */ + public toggle(): void { + if (this._windowRef) { + this.close(); + } else { + this.open(); + } + } + + /** + * Returns whether or not the oes-popover is currently being shown + */ + public isOpen(): boolean { return this._windowRef !== null; } + + public ngOnInit() { + this._unregisterListenersFn = listenToTriggers( + this._renderer, this._elementRef.nativeElement, this.triggers, this.open.bind(this), this.close.bind(this), + this.toggle.bind(this)); + } + + public ngOnDestroy() { + this.close(); + this._unregisterListenersFn(); + this._zoneSubscription.unsubscribe(); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/time.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/time.ts new file mode 100644 index 00000000..ab31a498 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/time.ts @@ -0,0 +1,51 @@ +import { isNumber, toInteger } from './util/util'; + +export class NgbTime { + public hour: number; + public minute: number; + public second: number; + + constructor(hour?: number, minute?: number, second?: number) { + this.hour = toInteger(hour); + this.minute = toInteger(minute); + this.second = toInteger(second); + } + + public changeHour(step = 1) { this.updateHour((isNaN(this.hour) ? 0 : this.hour) + step); } + + public updateHour(hour: number) { + if (isNumber(hour)) { + this.hour = (hour < 0 ? 24 + hour : hour) % 24; + } else { + this.hour = NaN; + } + } + + public changeMinute(step = 1) { this.updateMinute((isNaN(this.minute) ? 0 : this.minute) + step); } + + public updateMinute(minute: number) { + if (isNumber(minute)) { + this.minute = minute % 60 < 0 ? 60 + minute % 60 : minute % 60; + this.changeHour(Math.floor(minute / 60)); + } else { + this.minute = NaN; + } + } + + public changeSecond(step = 1) { this.updateSecond((isNaN(this.second) ? 0 : this.second) + step); } + + public updateSecond(second: number) { + if (isNumber(second)) { + this.second = second < 0 ? 60 + second % 60 : second % 60; + this.changeMinute(Math.floor(second / 60)); + } else { + this.second = NaN; + } + } + + public isValid(checkSecs = true) { + return isNumber(this.hour) && isNumber(this.minute) && (checkSecs ? isNumber(this.second) : true); + } + + public toString() { return `${this.hour || 0}:${this.minute || 0}:${this.second || 0}`; } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker-config.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker-config.ts new file mode 100644 index 00000000..8b752866 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker-config.ts @@ -0,0 +1,19 @@ +import { Injectable } from '@angular/core'; + +/** + * Configuration service for the NgbTimepicker component. + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the timepickers used in the application. + */ +@Injectable() +export class NgbTimepickerConfig { + public meridian = false; + public spinners = true; + public seconds = false; + public hourStep = 1; + public minuteStep = 1; + public secondStep = 1; + public disabled = false; + public readonlyInputs = false; + public size: 'small' | 'medium' | 'large' = 'medium'; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.less new file mode 100644 index 00000000..60acfa6b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.less @@ -0,0 +1,163 @@ +@import "../../assets/components/themes/default/theme.less"; +@import "../../assets/components/themes/common/plx-input.less"; +@import "../../assets/components/themes/common/plx-button.less"; +.oes-time-table .chevron::before { + border-style: solid; + border-width: 0.29em 0.29em 0 0; + content: ''; + display: inline-block; + height: 0.69em; + left: 0.05em; + position: relative; + top: 0.15em; + transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + vertical-align: middle; + width: 0.71em; +} + +.oes-time-table .chevron.bottom:before { + top: -.3em; + -webkit-transform: rotate(135deg); + -ms-transform: rotate(135deg); + transform: rotate(135deg); +} + +.oes-time-table .btn-link { + border: none!important; + cursor: pointer; + outline: 0; + display: block; +} + +.oes-time-table .btn-link.disabled { + cursor: not-allowed; + opacity: .65; +} + +.oes-time-control { + text-align: center; +} + +.datapicker-form-control { + width: auto !important; + display: inline-block; +} + +.oes-time-table .ict-stretch{ + + font-size: 8px; +} + +.oes-time-table .ict-shrink{ + font-size: 8px; +} +.time-pick-bk{ + background-color: #fff; +} + +.btn-link:focus, .btn-link:hover{ + text-decoration: none; +} +.oes-time-control{ + border: 0; + width: 30px !important; + padding: 3px 0; + margin: 0; + font-size: @font-size; +} + +.oes-time-control:hover{ + background-color: #e6e6e6; + color:#000; + cursor: pointer; +} + + +.oes-time-control-foucs-bk{ + background-color: #00abff !important; + color:#fff!important; + +} + +.oes-time-separator{ + margin: 0 -5px; +} +.oes-time-group,.oes-time-group:hover{ + + border-bottom: 1px solid #ccc; + border-left: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; + } + .oes-time-btns,.oes-time-btns:hover{ + + border-bottom: 1px solid #ccc; + border-right: 1px solid #ccc; + border-top: 1px solid #ccc; + border-radius: 0.2em; + padding: 0 0 7px 0 !important; + + } + + .oes-time-btns-wrapper { + margin-top:-3px; + transform:scale(0.6,0.6); + } + + .i18nTimeDes,.i18nTimeDes:hover{ + + padding: 0 5px 0px 0; + + } + + .oes-time-btn{ + + height: 5px; + } + + + .oes-time-table{ + margin-bottom: 10px; + } + +.hour-table{ + + font-size:12px; +} + +.hour-table td{ + + padding: 5px; + padding-top: 3px; + padding-bottom: 3px; + cursor: pointer; +} +.oes-time-btn-shrink{ + position: relative; + top:-5px; + left:0px; + color:#CCC; +} + +.oes-time-btn-stretch{ + position: relative; + left:0px; + color:#CCC; +} +.owl-calendar-timer-invalid{ + color: #acacac; +} +.owl-calendar-timer-selected{ + background-color: #00abff; + color: #FFFFFF; + border-radius: 1.2em; +} +.hour-table td:not(.owl-calendar-timer-selected):not(.owl-calendar-timer-invalid):hover { + background-color: #ebf6fd; + color: #000000; + border-radius: 1.2em; +} + + diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.ts new file mode 100644 index 00000000..45dd7a4a --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/timepicker.ts @@ -0,0 +1,558 @@ +import { Component, Input, Output, forwardRef, OnChanges, EventEmitter, SimpleChanges, ViewChild } from '@angular/core'; +import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; + +import { isNumber, padNumber, toInteger, isDefined } from './util/util'; +import { NgbTime } from './time'; +import { NgbTimepickerConfig } from './timepicker-config'; + +const NGB_TIMEPICKER_VALUE_ACCESSOR = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => NgbTimepickerr), + multi: true +}; + +/** + * A lightweight & configurable timepicker directive. + */ +@Component({ + selector: 'oes-timepickerr', + styleUrls: ['./timepicker.less'], + template: ` + + + + + + + + + + + + +
+ {{i18nTimeDes}} + + +  :  + +  :  + + +
+ + +
+
+ `, + providers: [NGB_TIMEPICKER_VALUE_ACCESSOR] +}) +export class NgbTimepickerr implements ControlValueAccessor, + OnChanges { + public disabled: boolean; + public model: NgbTime; + public datemodel: Date; + @Output() TimerChange = new EventEmitter(); + /** + * Whether to display 12H or 24H mode. + */ + @Input() public meridian: boolean; + + /** + * Whether to display the spinners above and below the inputs. + */ + @Input() public spinners: boolean; + + /** + * Whether to display seconds input. + */ + @Input() public seconds: boolean; + + /** + * Number of hours to increase or decrease when using a button. + */ + @Input() public hourStep: number; + + /** + * Number of minutes to increase or decrease when using a button. + */ + @Input() public minuteStep: number; + + /** + * Number of seconds to increase or decrease when using a button. + */ + @Input() public secondStep: number; + + /** + * To make timepicker readonly + */ + @Input() public readonlyInputs: boolean; + + /** + * To set the size of the inputs and button + */ + @Input() public size: 'small' | 'medium' | 'large'; + + + + private _max: Date; + @Input() + get max() { + return this._max; + } + + set max(val: Date) { + this._max = val; + } + private _min: Date; + @Input() + get min() { + return this._min; + } + + set min(val: Date) { + this._min = val; + } + + /** + * Whether to show the second's timer + * @default false + * @type {Boolean} + * */ + @Input() showSecondsTimer: boolean; + /** + * datePicker的国际化描述 + */ + @Input() public i18nTimeDes: string; + + @ViewChild('hourItem') public hourItem; + + @ViewChild('minuteItem') public minuteItem; + @ViewChild('secondItem') public secondItem; + + @ViewChild('propHour') public propHour; + + @ViewChild('propMin') public propMin; + @ViewChild('propSecond') public propSecond; + + public currSelectedItem: 'hour' | 'minute' | 'second'; + + public hours1 = ['00', '01', '02', '03', '04', '05', '06', '07']; + + public hours2 = ['08', '09', '10', '11', '12', '13', '14', '15']; + + public hours3 = ['16', '17', '18', '19', '20', '21', '22', '23']; + + public minute1 = ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09']; + + public minute2 = ['10', '11', '12', '13', '14', '15', '16', '17', '18', '19']; + + public minute3 = ['20', '21', '22', '23', '24', '25', '26', '27', '28', '29']; + + public minute4 = ['30', '31', '32', '33', '34', '35', '36', '37', '38', '39']; + + public minute5 = ['40', '41', '42', '43', '44', '45', '46', '47', '48', '49']; + + public minute6 = ['50', '51', '52', '53', '54', '55', '56', '57', '58', '59']; + + constructor(config: NgbTimepickerConfig) { + this.meridian = config.meridian; + this.spinners = config.spinners; + this.seconds = config.seconds; + this.hourStep = config.hourStep; + this.minuteStep = config.minuteStep; + this.secondStep = config.secondStep; + this.disabled = config.disabled; + this.readonlyInputs = config.readonlyInputs; + this.size = config.size; + } + + public onChange = (_: any) => { + // TO DO + } + public onTouched = () => { + // TO DO + } + public settime(date : Date) + { + if(date!=null&&date!==undefined) + { + if(this._max!==undefined&&this._max.getTime()date.getTime()) + { + date.setHours(this._min.getHours()); + date.setMinutes(this._min.getMinutes()); + date.setSeconds(this._min.getSeconds()); + this.TimerChange.emit(new NgbTime(date.getHours(),date.getMinutes(),date.getSeconds())); + } + } + if(date!==null&&date!==undefined) + { + let temptime = new NgbTime(date.getHours(),date.getMinutes(),date.getSeconds()) + this.model = temptime; + this.datemodel = date; + } + else + { + let temptime = new NgbTime(0,0,0) + this.model = temptime; + this.datemodel = date; + } + + } + public selectHour(hour: string, event) { + if(!this.isValidHour(parseInt(hour))) + { + return; + } + this.model.hour = parseInt(hour); + this.propHour.close(); + this.propagateModelChange(); + event.stopPropagation(); + } + + public selectMin(minute: string, event) { + if(!this.isValidMin(parseInt(minute))) + { + return; + } + this.model.minute = parseInt(minute); + this.propMin.close(); + this.propagateModelChange(); + + event.stopPropagation(); + } + public selectSecond(second: string, event) { + if(!this.isValidSec(parseInt(second))) + { + return; + } + this.model.second = parseInt(second); + this.propSecond.close(); + this.propagateModelChange(); + + event.stopPropagation(); + } + + /** + * ###描述 + * 单击小时或者分钟选项时触发的事件 + * + * + * */ + + public selectItem(item: 'hour' | 'minute' | 'second') { + + // 切换选中项 + this.currSelectedItem = item; + + if (item === 'hour') { + + this.propMin?this.propMin.close():0; + this.propSecond?this.propSecond.close():0; + } else if (item === 'minute') { + this.propHour?this.propHour.close():0; + this.propSecond?this.propSecond.close():0; + } else if (item === 'second') { + this.propHour?this.propHour.close():0; + this.propMin?this.propMin.close():0; + } + + this.minuteItem.nativeElement.blur(); + this.hourItem.nativeElement.blur(); + + this.secondItem?this.secondItem.nativeElement.blur():0; + + // 弹出时间选择列表 + } + + public changeTime(stepTime) { + + if (this.currSelectedItem === 'hour') { // 如果当前选中的是小时 + + this.changeHour(stepTime); + + } else if (this.currSelectedItem === 'minute') { + + this.changeMinute(stepTime); + } else if (this.currSelectedItem === 'second') { + + this.changeSecond(stepTime); + } + + } + + + public writeValue(value) { + this.model = value ? new NgbTime(value.hour, value.minute, value.second) : new NgbTime(); + if (!this.seconds && (!value || !isNumber(value.second))) { + this.model.second = 0; + } + } + + public registerOnChange(fn: (value: any) => any): void { this.onChange = fn; } + + public registerOnTouched(fn: () => any): void { this.onTouched = fn; } + + public setDisabledState(isDisabled: boolean) { this.disabled = isDisabled; } + + public changeHour(step: number) { + let newDate = new Date(this.datemodel.getTime()); + newDate.setHours(newDate.getHours()+step); + if(!this.isValidDate(newDate)) + { + return; + } + this.model.changeHour(step); + this.propagateModelChange(); + } + + public changeMinute(step: number) { + let newDate = new Date(this.datemodel.getTime()); + newDate.setMinutes(newDate.getMinutes()+step); + if(!this.isValidDate(newDate)) + { + return; + } + this.model.changeMinute(step); + this.propagateModelChange(); + } + + public changeSecond(step: number) { + let newDate = new Date(this.datemodel.getTime()); + newDate.setSeconds(newDate.getSeconds()+step); + if(!this.isValidDate(newDate)) + { + return; + } + this.model.changeSecond(step); + this.propagateModelChange(); + } + + public updateHour(newVal: string) { + this.model.updateHour(toInteger(newVal)); + this.propagateModelChange(); + } + + public updateMinute(newVal: string) { + this.model.updateMinute(toInteger(newVal)); + this.propagateModelChange(); + } + + public updateSecond(newVal: string) { + this.model.updateSecond(toInteger(newVal)); + this.propagateModelChange(); + } + + public toggleMeridian() { + if (this.meridian) { + this.changeHour(12); + } + } + + public formatHour(value: number) { + if (isNumber(value)) { + if (this.meridian) { + return padNumber(value % 12 === 0 ? 12 : value % 12); + } else { + return padNumber(value % 24); + } + } else { + return padNumber(NaN); + } + } + + public formatMinSec(value: number) { return padNumber(value); } + + public setFormControlSize() { return { 'form-control-sm': this.size === 'small', 'form-control-lg': this.size === 'large' }; } + + public setButtonSize() { return { 'btn-sm': this.size === 'small', 'btn-lg': this.size === 'large' }; } + + + public ngOnChanges(changes: SimpleChanges): void { + if (changes['seconds'] && !this.seconds && this.model && !isNumber(this.model.second)) { + this.model.second = 0; + this.propagateModelChange(false); + } + } + + private propagateModelChange(touched = true) { + this.TimerChange.emit(this.model); + if (touched) { + this.onTouched(); + } + if (this.model.isValid(this.seconds)) { + this.onChange({ hour: this.model.hour, minute: this.model.minute, second: this.model.second }); + } else { + this.onChange(null); + } + } + public closeProp() + { + + if(this.propSecond!==undefined) + { + this.propSecond.close(); + } + if(this.propMin!==undefined) + { + this.propMin.close(); + } + if(this.propHour!==undefined) + { + this.propHour.close(); + } + } + private isValidDate(date: Date) + { + let isValid = true; + if (isValid && this._min!==undefined&&this._min!==null) { + isValid = date.getTime()>=this._min.getTime(); + } + if (isValid && this._max!==undefined&&this._max!==null) { + isValid = date.getTime()<=this._max.getTime(); + } + return isValid; + } + private isSelectedMin(strvalue:any): boolean { + let value = parseInt(strvalue); + if(this.model!==null&&this.model!==undefined) + { + return this.model.minute === value; + } + else + { + return false; + } +} + private isValidMin(strvalue:any): boolean { + let value = parseInt(strvalue); + let nowdate = new Date(); + if(this.datemodel===undefined||this.datemodel===null) + { + } + else + { + nowdate = new Date(this.datemodel); + } + nowdate.setMinutes(value); + return this.isValidDate(nowdate); +} +private isSelectedSec(strvalue:any): boolean { + let value = parseInt(strvalue); + if(this.model!==null&&this.model!==undefined) + { + return this.model.second === value; + } + else + { + return false; + } +} +private isValidSec(strvalue:any): boolean { + let value = parseInt(strvalue); + let nowdate = new Date(); + if(this.datemodel===undefined||this.datemodel===null) + { + } + else + { + nowdate = new Date(this.datemodel); + } + nowdate.setSeconds(value); + return this.isValidDate(nowdate); +} +private isSelectedHour(strvalue:any): boolean { + let value = parseInt(strvalue); + if(this.model!==null&&this.model!==undefined) + { + return this.model.hour === value; + } + else + { + return false; + } +} +private isValidHour(strvalue:any): boolean { + debugger; + let value = parseInt(strvalue); + let nowdate = new Date(); + if(this.datemodel===undefined||this.datemodel===null) + { + } + else + { + nowdate = new Date(this.datemodel); + } + nowdate.setHours(value); + return this.isValidDate(nowdate); +} +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/popup.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/popup.ts new file mode 100644 index 00000000..56c26d62 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/popup.ts @@ -0,0 +1,58 @@ +import { + Injector, + TemplateRef, + ViewRef, + ViewContainerRef, + Renderer, + ComponentRef, + ComponentFactory, + ComponentFactoryResolver +} from '@angular/core'; + +export class ContentRef { + constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef) {} +} + +export class PopupService { + private _windowFactory: ComponentFactory; + private _windowRef: ComponentRef; + private _contentRef: ContentRef; + + constructor( + type: any, private _injector: Injector, private _viewContainerRef: ViewContainerRef, private _renderer: Renderer, + componentFactoryResolver: ComponentFactoryResolver) { + this._windowFactory = componentFactoryResolver.resolveComponentFactory(type); + } + + public open(content?: string | TemplateRef, context?: any): ComponentRef { + if (!this._windowRef) { + this._contentRef = this._getContentRef(content, context); + this._windowRef = + this._viewContainerRef.createComponent(this._windowFactory, 0, this._injector, this._contentRef.nodes); + } + return this._windowRef; + } + + public close() { + if (this._windowRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)); + this._windowRef = null; + + if (this._contentRef.viewRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef)); + this._contentRef = null; + } + } + } + + private _getContentRef(content: string | TemplateRef, context?: any): ContentRef { + if (!content) { + return new ContentRef([]); + } else if (content instanceof TemplateRef) { + const viewRef = this._viewContainerRef.createEmbeddedView(>content, context); + return new ContentRef([viewRef.rootNodes], viewRef); + } else { + return new ContentRef([[this._renderer.createText(null, `${content}`)]]); + } + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/positioning.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/positioning.ts new file mode 100644 index 00000000..ed9005c1 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/positioning.ts @@ -0,0 +1,153 @@ +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +export class Positioning { + private getStyle(element: HTMLElement, prop: string): string { return window.getComputedStyle(element)[prop]; } + + private isStaticPositioned(element: HTMLElement): boolean { + return (this.getStyle(element, 'position') || 'static') === 'static'; + } + + private offsetParent(element: HTMLElement): HTMLElement { + let offsetParentEl = element.offsetParent || document.documentElement; + + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = offsetParentEl.offsetParent; + } + + return offsetParentEl || document.documentElement; + } + + public position(element: HTMLElement, round = true): ClientRect { + let elPosition: ClientRect; + let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0}; + + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + } else { + const offsetParentEl = this.offsetParent(element); + + elPosition = this.offset(element, false); + + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + + return elPosition; + } + + public offset(element: HTMLElement, round = true): ClientRect { + const elBcr = element.getBoundingClientRect(); + const viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + + let elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + + return elOffset; + } + + public positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): + ClientRect { + const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false); + const shiftWidth: any = { + left: hostElPosition.left, + left2: (hostElPosition.left - 85), + center: hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2, + right: hostElPosition.left + hostElPosition.width + }; + const shiftHeight: any = { + top: hostElPosition.top, + center: hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2, + bottom: hostElPosition.top + hostElPosition.height + }; + const targetElBCR = targetElement.getBoundingClientRect(); + const placementPrimary = placement.split('-')[0] || 'top'; + const placementSecondary = placement.split('-')[1] || 'center'; + + let targetElPosition: ClientRect = { + height: targetElBCR.height || targetElement.offsetHeight, + width: targetElBCR.width || targetElement.offsetWidth, + top: 0, + bottom: targetElBCR.height || targetElement.offsetHeight, + left: 0, + right: targetElBCR.width || targetElement.offsetWidth + }; + + switch (placementPrimary) { + case 'top': + targetElPosition.top = hostElPosition.top - targetElement.offsetHeight; + targetElPosition.bottom += hostElPosition.top - targetElement.offsetHeight; + targetElPosition.left = shiftWidth[placementSecondary]; + targetElPosition.right += shiftWidth[placementSecondary]; + break; + case 'bottom': + targetElPosition.top = shiftHeight[placementPrimary]; + targetElPosition.bottom += shiftHeight[placementPrimary]; + targetElPosition.left = shiftWidth[placementSecondary]; + targetElPosition.right += shiftWidth[placementSecondary]; + break; + case 'left': + targetElPosition.top = shiftHeight[placementSecondary]; + targetElPosition.bottom += shiftHeight[placementSecondary]; + targetElPosition.left = hostElPosition.left - targetElement.offsetWidth; + targetElPosition.right += hostElPosition.left - targetElement.offsetWidth; + break; + case 'right': + targetElPosition.top = shiftHeight[placementSecondary]; + targetElPosition.bottom += shiftHeight[placementSecondary]; + targetElPosition.left = shiftWidth[placementPrimary]; + targetElPosition.right += shiftWidth[placementPrimary]; + break; + + } + + targetElPosition.top = Math.round(targetElPosition.top); + targetElPosition.bottom = Math.round(targetElPosition.bottom); + targetElPosition.left = Math.round(targetElPosition.left); + targetElPosition.right = Math.round(targetElPosition.right); + + return targetElPosition; + } +} + +const positionService = new Positioning(); +export function positionElements( + hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): void { + const pos = positionService.positionElements(hostElement, targetElement, placement, appendToBody); + + targetElement.style.top = `${pos.top}px`; + targetElement.style.left = `${pos.left}px`; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/triggers.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/triggers.ts new file mode 100644 index 00000000..8197de5b --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/triggers.ts @@ -0,0 +1,62 @@ +export class Trigger { + constructor(public open: string, public close?: string) { + if (!close) { + this.close = open; + } + } + + public isManual() { return this.open === 'manual' || this.close === 'manual'; } +} + +const DEFAULT_ALIASES = { + hover: ['mouseenter', 'mouseleave'] +}; + +export function parseTriggers(triggers: string, aliases = DEFAULT_ALIASES): Trigger[] { + const trimmedTriggers = (triggers || '').trim(); + + if (trimmedTriggers.length === 0) { + return []; + } + + const parsedTriggers = trimmedTriggers.split(/\s+/).map(trigger => trigger.split(':')).map((triggerPair) => { + let alias = aliases[triggerPair[0]] || triggerPair; + return new Trigger(alias[0], alias[1]); + }); + + const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual()); + + if (manualTriggers.length > 1) { + throw 'Triggers parse error: only one manual trigger is allowed'; + } + + if (manualTriggers.length === 1 && parsedTriggers.length > 1) { + throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; + } + + return parsedTriggers; +} + +const noopFn = () => { + // TO DO +}; + +export function listenToTriggers(renderer: any, nativeElement: any, triggers: string, openFn, closeFn, toggleFn) { + const parsedTriggers = parseTriggers(triggers); + const listeners = []; + + if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { + return noopFn; + } + + parsedTriggers.forEach((trigger: Trigger) => { + if (trigger.open === trigger.close) { + listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn)); + } else { + listeners.push( + renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn)); + } + }); + + return () => { listeners.forEach(unsubscribeFn => unsubscribeFn()); }; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/util.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/util.ts new file mode 100644 index 00000000..fcabe960 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-datepicker/util/util.ts @@ -0,0 +1,39 @@ +export function toInteger(value: any): number { + return parseInt(`${value}`, 10); +} + +export function toString(value: any): string { + return (value !== undefined && value !== null) ? `${value}` : ''; +} + +export function getValueInRange(value: number, max: number, min = 0): number { + return Math.max(Math.min(value, max), min); +} + +export function isString(value: any): boolean { + return typeof value === 'string'; +} + +export function isNumber(value: any): boolean { + return !isNaN(toInteger(value)); +} + +export function isInteger(value: any): boolean { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; +} + +export function isDefined(value: any): boolean { + return value !== undefined && value !== null; +} + +export function padNumber(value: number) { + if (isNumber(value)) { + return value > 9? `${value}`.slice(-2):'0' + `${value}`.slice(-2); + } else { + return ''; + } +} + +export function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.spec.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.spec.ts new file mode 100644 index 00000000..887b66e4 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.spec.ts @@ -0,0 +1,16 @@ +import {TestBed} from '@angular/core/testing'; +import {PlxModalBackdrop} from './modal-backdrop'; + +describe('plx-modal-backdrop', () => { + + beforeEach(() => { + TestBed.configureTestingModule({declarations: [PlxModalBackdrop]}); + }); + + it('should render backdrop with required CSS classes', () => { + const fixture = TestBed.createComponent(PlxModalBackdrop); + + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveCssClass('modal-backdrop'); + }); +}); diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.ts new file mode 100644 index 00000000..07e2ff84 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-backdrop.ts @@ -0,0 +1,9 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'plx-modal-backdrop', + template: '', + host: {'class': 'modal-backdrop fade show'} +}) +export class PlxModalBackdrop { +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-dismiss-reasons.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-dismiss-reasons.ts new file mode 100644 index 00000000..08395852 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-dismiss-reasons.ts @@ -0,0 +1,4 @@ +export enum ModalDismissReasons { + BACKDROP_CLICK, + ESC +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-ref.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-ref.ts new file mode 100644 index 00000000..061dc70e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-ref.ts @@ -0,0 +1,109 @@ +import {Injectable, ComponentRef} from '@angular/core'; +import {PlxModalBackdrop} from './modal-backdrop'; +import {PlxModalWindow} from './modal-window'; +import {ContentRef} from '../util/popup'; + +/** + * A reference to an active (currently opened) modal. Instances of this class + * can be injected into components passed as modal content. + */ +@Injectable() +export class PlxActiveModal { + /** + * Can be used to close a modal, passing an optional result. + */ + public close(result?: any): void { + // TO DO + } + + /** + * Can be used to dismiss a modal, passing an optional reason. + */ + public dismiss(reason?: any): void { + // TO DO + } +} + +/** + * A reference to a newly opened modal. + */ +@Injectable() +export class PlxModalRef { + private _resolve: (result?: any) => void; + private _reject: (reason?: any) => void; + + /** + * The instance of component used as modal's content. + * Undefined when a TemplateRef is used as modal's content. + */ + get componentInstance(): any { + if (this._contentRef.componentRef) { + return this._contentRef.componentRef.instance; + } + } + + // only needed to keep TS1.8 compatibility + set componentInstance(instance: any) { + // TO DO + } + + /** + * A promise that is resolved when a modal is closed and rejected when a modal is dismissed. + */ + public result: Promise; + + constructor(private _windowCmptRef: ComponentRef, private _contentRef: ContentRef, + private _backdropCmptRef?: ComponentRef) { + _windowCmptRef.instance.dismissEvent.subscribe((reason: any) => { + this.dismiss(reason); + }); + + this.result = new Promise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + this.result.then(null, () => { + // TO DO + }); + } + + /** + * Can be used to close a modal, passing an optional result. + */ + public close(result?: any): void { + if (this._windowCmptRef) { + this._resolve(result); + this._removeModalElements(); + } + } + + /** + * Can be used to dismiss a modal, passing an optional reason. + */ + public dismiss(reason?: any): void { + if (this._windowCmptRef) { + this._reject(reason); + this._removeModalElements(); + } + } + + private _removeModalElements() { + const windowNativeEl = this._windowCmptRef.location.nativeElement; + windowNativeEl.parentNode.removeChild(windowNativeEl); + this._windowCmptRef.destroy(); + + if (this._backdropCmptRef) { + const backdropNativeEl = this._backdropCmptRef.location.nativeElement; + backdropNativeEl.parentNode.removeChild(backdropNativeEl); + this._backdropCmptRef.destroy(); + } + + if (this._contentRef && this._contentRef.viewRef) { + this._contentRef.viewRef.destroy(); + } + + this._windowCmptRef = null; + this._backdropCmptRef = null; + this._contentRef = null; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-stack.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-stack.ts new file mode 100644 index 00000000..37f5b171 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-stack.ts @@ -0,0 +1,103 @@ +import { + ApplicationRef, + Injectable, + Injector, + ReflectiveInjector, + ComponentFactory, + ComponentFactoryResolver, + ComponentRef, + TemplateRef +} from '@angular/core'; + +import {ContentRef} from '../util/popup'; +import {isDefined, isString} from '../util/util'; + +import {PlxModalBackdrop} from './modal-backdrop'; +import {PlxModalWindow} from './modal-window'; +import {PlxActiveModal, PlxModalRef} from './modal-ref'; + +@Injectable() +export class PlxModalStack { + private _backdropFactory: ComponentFactory; + private _windowFactory: ComponentFactory; + + constructor(private _applicationRef: ApplicationRef, private _injector: Injector, + private _componentFactoryResolver: ComponentFactoryResolver) { + this._backdropFactory = _componentFactoryResolver.resolveComponentFactory(PlxModalBackdrop); + this._windowFactory = _componentFactoryResolver.resolveComponentFactory(PlxModalWindow); + } + + public open(moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, options): PlxModalRef { + const containerSelector = options.container || 'body'; + const containerEl = document.querySelector(containerSelector);// 默认获取到body的DOM + + if (!containerEl) { + throw new Error(`The specified modal container "${containerSelector}" was not found in the DOM.`); + } + + const activeModal = new PlxActiveModal(); + const contentRef = this._getContentRef(moduleCFR, contentInjector, content, activeModal); + + let windowCmptRef: ComponentRef; + let backdropCmptRef: ComponentRef; + let ngbModalRef: PlxModalRef; + + + if (options.backdrop !== false) { + backdropCmptRef = this._backdropFactory.create(this._injector); + this._applicationRef.attachView(backdropCmptRef.hostView); + containerEl.appendChild(backdropCmptRef.location.nativeElement); + } + windowCmptRef = this._windowFactory.create(this._injector, contentRef.nodes); + + /** + * Attaches a view so that it will be dirty checked. + * The view will be automatically detached when it is destroyed. + * This will throw if the view is already attached to a ViewContainer. + */ + this._applicationRef.attachView(windowCmptRef.hostView); + + containerEl.appendChild(windowCmptRef.location.nativeElement); + + ngbModalRef = new PlxModalRef(windowCmptRef, contentRef, backdropCmptRef); + + activeModal.close = (result: any) => { + ngbModalRef.close(result); + }; + activeModal.dismiss = (reason: any) => { + ngbModalRef.dismiss(reason); + }; + + this._applyWindowOptions(windowCmptRef.instance, options); + + return ngbModalRef; + } + + private _applyWindowOptions(windowInstance: PlxModalWindow, options: Object): void { + ['backdrop', 'keyboard', 'size', 'windowClass'].forEach((optionName: string) => { + if (isDefined(options[optionName])) { + windowInstance[optionName] = options[optionName]; + } + }); + } + + private _getContentRef(moduleCFR: ComponentFactoryResolver, contentInjector: Injector, content: any, + context: PlxActiveModal): ContentRef { + if (!content) { + return new ContentRef([]); + } else if (content instanceof TemplateRef) { + const viewRef = content.createEmbeddedView(context); + this._applicationRef.attachView(viewRef); + return new ContentRef([viewRef.rootNodes], viewRef); + } else if (isString(content)) { + return new ContentRef([[document.createTextNode(`${content}`)]]); + } else { + const contentCmptFactory = moduleCFR.resolveComponentFactory(content); + const modalContentInjector = + ReflectiveInjector.resolveAndCreate([{provide: PlxActiveModal, useValue: context}], contentInjector); + const componentRef = contentCmptFactory.create(modalContentInjector); + this._applicationRef.attachView(componentRef.hostView); + return new ContentRef([[componentRef.location.nativeElement]], componentRef.hostView, componentRef); + } + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.spec.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.spec.ts new file mode 100644 index 00000000..5767bfee --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.spec.ts @@ -0,0 +1,114 @@ +import {TestBed, ComponentFixture} from '@angular/core/testing'; + +import {PlxModalWindow} from './modal-window'; +import {ModalDismissReasons} from './modal-dismiss-reasons'; + +describe('plx-modal-dialog', () => { + + let fixture: ComponentFixture; + + beforeEach(() => { + TestBed.configureTestingModule({declarations: [PlxModalWindow]}); + fixture = TestBed.createComponent(PlxModalWindow); + }); + + describe('basic rendering functionality', () => { + + it('should render default modal window', () => { + fixture.detectChanges(); + + const modalEl: Element = fixture.nativeElement; + const dialogEl: Element = fixture.nativeElement.querySelector('.modal-dialog'); + + expect(modalEl).toHaveCssClass('modal'); + expect(dialogEl).toHaveCssClass('modal-dialog'); + }); + + it('should render default modal window with a specified size', () => { + fixture.componentInstance.size = 'sm'; + fixture.detectChanges(); + + const dialogEl: Element = fixture.nativeElement.querySelector('.modal-dialog'); + expect(dialogEl).toHaveCssClass('modal-dialog'); + expect(dialogEl).toHaveCssClass('modal-sm'); + }); + + it('should render default modal window with a specified class', () => { + fixture.componentInstance.windowClass = 'custom-class'; + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveCssClass('custom-class'); + }); + + it('aria attributes', () => { + fixture.detectChanges(); + const dialogEl: Element = fixture.nativeElement.querySelector('.modal-dialog'); + + expect(fixture.nativeElement.getAttribute('role')).toBe('dialog'); + expect(dialogEl.getAttribute('role')).toBe('document'); + }); + }); + + describe('dismiss', () => { + + it('should dismiss on backdrop click by default', (done) => { + fixture.detectChanges(); + + fixture.componentInstance.dismissEvent.subscribe(($event) => { + expect($event).toBe(ModalDismissReasons.BACKDROP_CLICK); + done(); + }); + + fixture.nativeElement.click(); + }); + + it('should not dismiss on modal content click when there is active backdrop', (done) => { + fixture.detectChanges(); + fixture.componentInstance.dismissEvent.subscribe( + () => { + done.fail(new Error('Should not trigger dismiss event')); + }); + + fixture.nativeElement.querySelector('.modal-content').click(); + setTimeout(done, 200); + }); + + it('should ignore backdrop clicks when there is no backdrop', (done) => { + fixture.componentInstance.backdrop = false; + fixture.detectChanges(); + + fixture.componentInstance.dismissEvent.subscribe(($event) => { + expect($event).toBe(ModalDismissReasons.BACKDROP_CLICK); + done.fail(new Error('Should not trigger dismiss event')); + }); + + fixture.nativeElement.querySelector('.modal-dialog').click(); + setTimeout(done, 200); + }); + + it('should ignore backdrop clicks when backdrop is "static"', (done) => { + fixture.componentInstance.backdrop = 'static'; + fixture.detectChanges(); + + fixture.componentInstance.dismissEvent.subscribe(($event) => { + expect($event).toBe(ModalDismissReasons.BACKDROP_CLICK); + done.fail(new Error('Should not trigger dismiss event')); + }); + + fixture.nativeElement.querySelector('.modal-dialog').click(); + setTimeout(done, 200); + }); + + it('should dismiss on esc press by default', (done) => { + fixture.detectChanges(); + + fixture.componentInstance.dismissEvent.subscribe(($event) => { + expect($event).toBe(ModalDismissReasons.ESC); + done(); + }); + + fixture.debugElement.triggerEventHandler('keyup.esc', {}); + }); + }); + +}); diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.ts new file mode 100644 index 00000000..eda5b39f --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal-window.ts @@ -0,0 +1,82 @@ +import { + Component, + Output, + EventEmitter, + Input, + ElementRef, + Renderer, + OnInit, + AfterViewInit, + OnDestroy, ViewEncapsulation +} from '@angular/core'; + +import {ModalDismissReasons} from './modal-dismiss-reasons'; + +@Component({ + selector: 'plx-modal-window', + host: { + '[class]': '"modal plx-modal fade show" + (windowClass ? " " + windowClass : "")', + 'role': 'dialog', + 'tabindex': '-1', + 'style': 'display: block;', + '(keyup.esc)': 'escKey($event)', + '(click)': 'backdropClick($event)' + }, + template: ` +
+ +
+ `, + styleUrls: ['modal.less'], + encapsulation: ViewEncapsulation.None +}) +export class PlxModalWindow implements OnInit, AfterViewInit, OnDestroy { + private _elWithFocus: Element; // element that is focused prior to modal opening + + @Input() public backdrop: boolean | string = true; + @Input() public keyboard = true; + @Input() public size: string; + @Input() public windowClass: string; + + @Output('dismiss') public dismissEvent = new EventEmitter(); + + constructor(private _elRef: ElementRef, private _renderer: Renderer) { + } + + public backdropClick($event): void { + if (this.backdrop === true && this._elRef.nativeElement === $event.target) { + this.dismiss(ModalDismissReasons.BACKDROP_CLICK); + } + } + + public escKey($event): void { + if (this.keyboard && !$event.defaultPrevented) { + this.dismiss(ModalDismissReasons.ESC); + } + } + + public dismiss(reason): void { + this.dismissEvent.emit(reason); + } + + public ngOnInit() { + this._elWithFocus = document.activeElement; + this._renderer.setElementClass(document.body, 'modal-open', true); + } + + public ngAfterViewInit() { + if (!this._elRef.nativeElement.contains(document.activeElement)) { + this._renderer.invokeElementMethod(this._elRef.nativeElement, 'focus', []); + } + } + + public ngOnDestroy() { + if (this._elWithFocus && document.body.contains(this._elWithFocus)) { + this._renderer.invokeElementMethod(this._elWithFocus, 'focus', []); + } else { + this._renderer.invokeElementMethod(document.body, 'focus', []); + } + this._elWithFocus = null; + this._renderer.setElementClass(document.body, 'modal-open', false); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.less new file mode 100644 index 00000000..5868749c --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.less @@ -0,0 +1,125 @@ +@import "../../assets/components/themes/default/theme.less"; + +plx-modal-window { + .modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; + outline: 0; + z-index: 10000; + } + .modal-dialog { + position: relative; + max-width: 600px; + margin: 30px auto; + &.modal-sm { + max-width: 600px; + } + &.modal-lg { + max-width: 1000px; + } + } + .modal-content { + position: relative; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + background-color: @component-bg; + background-clip: padding-box; + border-radius: @radius; + box-shadow: 0 5px 15px @shadow-color; + outline: 0; + .modal-header { + border-bottom: 0; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 15px; + } + .modal-body { + .form-group:last-child, form:last-child { + margin-bottom: 0; + } + } + .modal-footer { + display: block; + border-top: 0; + margin-top: 0; + padding: 0 15px 15px 15px; + } + .modal-title { + font-size: @font-size-title-level1; + margin-bottom: 0; + line-height: 1.5; + } + .modal-btn { + text-align: center; + font-size: 0; + } + } + .close { + color: @fonticon-color; + font-size: @font-size-title-level2; + text-shadow: none; + width: 24px; + height: 24px; + background: @scene-textcolor; + border-radius: 20px; + padding-bottom: 2px; + outline: none; + &:hover { + color: @fonticon-color; + background: @fonticon-bg-color-hover; + } + } + .alert-modal { + &.row { + margin-left: 100px; + margin-bottom: 30px; + text-align: left; + .tip-img { + display: inline-block; + width: 52px; + height: 52px; + border-radius: 50px; + font-size: 45px; + text-align: center; + line-height: 1; + margin-top: -5px; + margin-right: 15px; + &::before { + content: "!"; + } + } + .tip-info { + width: 300px; + .alert-title { + font-size: @font-size-title-level2; + color: @title-text-color; + } + .alert-result { + margin-top: 5px; + font-size: @font-size; + color: @unselected-text-color; + } + } + .warning { + border: 3px solid @warning-color; + color: @warning-color; + } + .error { + border: 3px solid @error-color; + color: @error-color; + } + } + } +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.module.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.module.ts new file mode 100644 index 00000000..67fdb478 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.module.ts @@ -0,0 +1,21 @@ +import {NgModule, ModuleWithProviders} from '@angular/core'; + +import {PlxModalBackdrop} from './modal-backdrop'; +import {PlxModalWindow} from './modal-window'; +import {PlxModalStack} from './modal-stack'; +import {PlxModal} from './modal'; + +export {PlxModal, PlxModalOptions} from './modal'; +export {PlxModalRef, PlxActiveModal} from './modal-ref'; +export {ModalDismissReasons} from './modal-dismiss-reasons'; + +@NgModule({ + declarations: [PlxModalBackdrop, PlxModalWindow], + entryComponents: [PlxModalBackdrop, PlxModalWindow], + providers: [PlxModal] +}) +export class PlxModalModule { + public static forRoot(): ModuleWithProviders { + return {ngModule: PlxModalModule, providers: [PlxModal, PlxModalStack]}; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.spec.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.spec.ts new file mode 100644 index 00000000..a99c86b1 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.spec.ts @@ -0,0 +1,597 @@ +import {Component, Injectable, ViewChild, OnDestroy, NgModule, getDebugNode, DebugElement} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {TestBed, ComponentFixture} from '@angular/core/testing'; + +import {PlxModalModule, PlxModal, PlxActiveModal, PlxModalRef} from './modal.module'; + +const NOOP = () => { +}; + +@Injectable() +class SpyService { + called = false; +} + +describe('plx-modal', () => { + + let fixture: ComponentFixture; + + beforeEach(() => { + jasmine.addMatchers({ + toHaveModal: function (util, customEqualityTests) { + return { + compare: function (actual, content?, selector?) { + const allModalsContent = document.querySelector(selector || 'body').querySelectorAll('.modal-content'); + let pass = true; + let errMsg; + + if (!content) { + pass = allModalsContent.length > 0; + errMsg = 'at least one modal open but found none'; + } else if (Array.isArray(content)) { + pass = allModalsContent.length === content.length; + errMsg = `${content.length} modals open but found ${allModalsContent.length}`; + } else { + pass = allModalsContent.length === 1 && allModalsContent[0].textContent.trim() === content; + errMsg = `exactly one modal open but found ${allModalsContent.length}`; + } + + return {pass: pass, message: `Expected ${actual.outerHTML} to have ${errMsg}`}; + }, + negativeCompare: function (actual) { + const allOpenModals = actual.querySelectorAll('plx-modal-window'); + + return { + pass: allOpenModals.length === 0, + message: `Expected ${actual.outerHTML} not to have any modals open but found ${allOpenModals.length}` + }; + } + }; + } + }); + + jasmine.addMatchers({ + toHaveBackdrop: function (util, customEqualityTests) { + return { + compare: function (actual) { + return { + pass: document.querySelectorAll('plx-modal-backdrop').length === 1, + message: `Expected ${actual.outerHTML} to have exactly one backdrop element` + }; + }, + negativeCompare: function (actual) { + const allOpenModals = document.querySelectorAll('plx-modal-backdrop'); + + return { + pass: allOpenModals.length === 0, + message: `Expected ${actual.outerHTML} not to have any backdrop elements` + }; + } + }; + } + }); + }); + + beforeEach(() => { + TestBed.configureTestingModule({imports: [OesModalTestModule]}); + fixture = TestBed.createComponent(TestComponent); + }); + + afterEach(() => { + // detect left-over modals and close them or report errors when can't + + const remainingModalWindows = document.querySelectorAll('plx-modal-window'); + if (remainingModalWindows.length) { + fail(`${remainingModalWindows.length} modal windows were left in the DOM.`); + } + + const remainingModalBackdrops = document.querySelectorAll('plx-modal-backdrop'); + if (remainingModalBackdrops.length) { + fail(`${remainingModalBackdrops.length} modal backdrops were left in the DOM.`); + } + }); + + describe('basic functionality', () => { + + it('should open and close modal with default options', () => { + const modalInstance = fixture.componentInstance.open('foo'); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + + modalInstance.close('some result'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should open and close modal from a TemplateRef content', () => { + const modalInstance = fixture.componentInstance.openTpl(); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('Hello, World!'); + + modalInstance.close('some result'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should properly destroy TemplateRef content', () => { + const spyService = fixture.debugElement.injector.get(SpyService); + const modalInstance = fixture.componentInstance.openDestroyableTpl(); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('Some content'); + expect(spyService.called).toBeFalsy(); + + modalInstance.close('some result'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + expect(spyService.called).toBeTruthy(); + }); + + it('should open and close modal from a component type', () => { + const spyService = fixture.debugElement.injector.get(SpyService); + const modalInstance = fixture.componentInstance.openCmpt(DestroyableCmpt); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('Some content'); + expect(spyService.called).toBeFalsy(); + + modalInstance.close('some result'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + expect(spyService.called).toBeTruthy(); + }); + + it('should inject active modal ref when component is used as content', () => { + fixture.componentInstance.openCmpt(WithActiveModalCmpt); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('Close'); + + (document.querySelector('button.closeFromInside')).click(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should expose component used as modal content', () => { + const modalInstance = fixture.componentInstance.openCmpt(WithActiveModalCmpt); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('Close'); + expect(modalInstance.componentInstance instanceof WithActiveModalCmpt).toBeTruthy(); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should open and close modal from inside', () => { + fixture.componentInstance.openTplClose(); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + (document.querySelector('button#close')).click(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should open and dismiss modal from inside', () => { + fixture.componentInstance.openTplDismiss().result.catch(NOOP); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + (document.querySelector('button#dismiss')).click(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should resolve result promise on close', () => { + let resolvedResult; + fixture.componentInstance.openTplClose().result.then((result) => resolvedResult = result); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + (document.querySelector('button#close')).click(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + + fixture.whenStable().then(() => { + expect(resolvedResult).toBe('myResult'); + }); + }); + + it('should reject result promise on dismiss', () => { + let rejectReason; + fixture.componentInstance.openTplDismiss().result.catch((reason) => rejectReason = reason); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + (document.querySelector('button#dismiss')).click(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + + fixture.whenStable().then(() => { + expect(rejectReason).toBe('myReason'); + }); + }); + + it('should add / remove "modal-open" class to body when modal is open', () => { + const modalRef = fixture.componentInstance.open('bar'); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + expect(document.body).toHaveCssClass('modal-open'); + + modalRef.close('bar result'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + expect(document.body).not.toHaveCssClass('modal-open'); + }); + + it('should not throw when close called multiple times', () => { + const modalInstance = fixture.componentInstance.open('foo'); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + + modalInstance.close('some result'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + + modalInstance.close('some result'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should not throw when dismiss called multiple times', () => { + const modalRef = fixture.componentInstance.open('foo'); + modalRef.result.catch(NOOP); + + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + + modalRef.dismiss('some reason'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + + modalRef.dismiss('some reason'); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + }); + + describe('backdrop options', () => { + + it('should have backdrop by default', () => { + const modalInstance = fixture.componentInstance.open('foo'); + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveModal('foo'); + expect(fixture.nativeElement).toHaveBackdrop(); + + modalInstance.close('some reason'); + fixture.detectChanges(); + + expect(fixture.nativeElement).not.toHaveModal(); + expect(fixture.nativeElement).not.toHaveBackdrop(); + }); + + it('should open and close modal without backdrop', () => { + const modalInstance = fixture.componentInstance.open('foo', {backdrop: false}); + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveModal('foo'); + expect(fixture.nativeElement).not.toHaveBackdrop(); + + modalInstance.close('some reason'); + fixture.detectChanges(); + + expect(fixture.nativeElement).not.toHaveModal(); + expect(fixture.nativeElement).not.toHaveBackdrop(); + }); + + it('should open and close modal without backdrop from template content', () => { + const modalInstance = fixture.componentInstance.openTpl({backdrop: false}); + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveModal('Hello, World!'); + expect(fixture.nativeElement).not.toHaveBackdrop(); + + modalInstance.close('some reason'); + fixture.detectChanges(); + + expect(fixture.nativeElement).not.toHaveModal(); + expect(fixture.nativeElement).not.toHaveBackdrop(); + }); + + it('should dismiss on backdrop click', () => { + fixture.componentInstance.open('foo').result.catch(NOOP); + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveModal('foo'); + expect(fixture.nativeElement).toHaveBackdrop(); + + (document.querySelector('plx-modal-window')).click(); + fixture.detectChanges(); + + expect(fixture.nativeElement).not.toHaveModal(); + expect(fixture.nativeElement).not.toHaveBackdrop(); + }); + + it('should not dismiss on "static" backdrop click', () => { + const modalInstance = fixture.componentInstance.open('foo', {backdrop: 'static'}); + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveModal('foo'); + expect(fixture.nativeElement).toHaveBackdrop(); + + (document.querySelector('plx-modal-window')).click(); + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveModal(); + expect(fixture.nativeElement).toHaveBackdrop(); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should not dismiss on clicks outside content where there is no backdrop', () => { + const modalInstance = fixture.componentInstance.open('foo', {backdrop: false}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + + (document.querySelector('plx-modal-window')).click(); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should not dismiss on clicks that result in detached elements', () => { + const modalInstance = fixture.componentInstance.openTplIf({}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + (document.querySelector('button#if')).click(); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + }); + + describe('container options', () => { + + it('should attach window and backdrop elements to the specified container', () => { + const modalInstance = fixture.componentInstance.open('foo', {container: '#testContainer'}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo', '#testContainer'); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should throw when the specified container element doesnt exist', () => { + const brokenSelector = '#notInTheDOM'; + expect(() => { + fixture.componentInstance.open('foo', {container: brokenSelector}); + }).toThrowError(`The specified modal container "${brokenSelector}" was not found in the DOM.`); + }); + }); + + describe('keyboard options', () => { + + it('should dismiss modals on ESC by default', () => { + fixture.componentInstance.open('foo').result.catch(NOOP); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + + (getDebugNode(document.querySelector('plx-modal-window'))).triggerEventHandler('keyup.esc', {}); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should not dismiss modals on ESC when keyboard option is false', () => { + const modalInstance = fixture.componentInstance.open('foo', {keyboard: false}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + + (getDebugNode(document.querySelector('plx-modal-window'))).triggerEventHandler('keyup.esc', {}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + it('should not dismiss modals on ESC when default is prevented', () => { + const modalInstance = fixture.componentInstance.open('foo', {keyboard: true}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + + (getDebugNode(document.querySelector('plx-modal-window'))).triggerEventHandler('keyup.esc', { + defaultPrevented: true + }); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal(); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + }); + + describe('size options', () => { + + it('should render modals with specified size', () => { + const modalInstance = fixture.componentInstance.open('foo', {size: 'sm'}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + expect(document.querySelector('.modal-dialog')).toHaveCssClass('modal-sm'); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + }); + + describe('custom class options', () => { + + it('should render modals with the correct custom classes', () => { + const modalInstance = fixture.componentInstance.open('foo', {windowClass: 'bar'}); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + expect(document.querySelector('plx-modal-window')).toHaveCssClass('bar'); + + modalInstance.close(); + fixture.detectChanges(); + expect(fixture.nativeElement).not.toHaveModal(); + }); + + }); + + describe('focus management', () => { + + it('should focus modal window and return focus to previously focused element', () => { + fixture.detectChanges(); + const openButtonEl = fixture.nativeElement.querySelector('button#open'); + + openButtonEl.focus(); + openButtonEl.click(); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('from button'); + expect(document.activeElement).toBe(document.querySelector('plx-modal-window')); + + fixture.componentInstance.close(); + expect(fixture.nativeElement).not.toHaveModal(); + expect(document.activeElement).toBe(openButtonEl); + }); + + + it('should return focus to body if no element focused prior to modal opening', () => { + const modalInstance = fixture.componentInstance.open('foo'); + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveModal('foo'); + expect(document.activeElement).toBe(document.querySelector('plx-modal-window')); + + modalInstance.close('ok!'); + expect(document.activeElement).toBe(document.body); + }); + }); + + describe('window element ordering', () => { + it('should place newer windows on top of older ones', () => { + const modalInstance1 = fixture.componentInstance.open('foo', {windowClass: 'window-1'}); + fixture.detectChanges(); + + const modalInstance2 = fixture.componentInstance.open('bar', {windowClass: 'window-2'}); + fixture.detectChanges(); + + let windows = document.querySelectorAll('plx-modal-window'); + expect(windows.length).toBe(2); + expect(windows[0]).toHaveCssClass('window-1'); + expect(windows[1]).toHaveCssClass('window-2'); + + modalInstance2.close(); + modalInstance1.close(); + fixture.detectChanges(); + }); + }); +}); + +@Component({selector: 'destroyable-cmpt', template: 'Some content'}) +export class DestroyableCmpt implements OnDestroy { + constructor(private _spyService: SpyService) { + } + + ngOnDestroy(): void { + this._spyService.called = true; + } +} + +@Component( + {selector: 'modal-content-cmpt', template: ''}) +export class WithActiveModalCmpt { + constructor(public activeModal: PlxActiveModal) { + } + + close() { + this.activeModal.close('from inside'); + } +} + +@Component({ + selector: 'test-cmpt', + template: ` +
+ + + + + + + ` +}) +class TestComponent { + name = 'World'; + openedModal: PlxModalRef; + show = true; + @ViewChild('content') tplContent; + @ViewChild('destroyableContent') tplDestroyableContent; + @ViewChild('contentWithClose') tplContentWithClose; + @ViewChild('contentWithDismiss') tplContentWithDismiss; + @ViewChild('contentWithIf') tplContentWithIf; + + constructor(private modalService: PlxModal) { + } + + open(content: string, options?: Object) { + this.openedModal = this.modalService.open(content, options); + return this.openedModal; + } + + close() { + if (this.openedModal) { + this.openedModal.close('ok'); + } + } + + openTpl(options?: Object) { + return this.modalService.open(this.tplContent, options); + } + + openCmpt(cmptType: any, options?: Object) { + return this.modalService.open(cmptType, options); + } + + openDestroyableTpl(options?: Object) { + return this.modalService.open(this.tplDestroyableContent, options); + } + + openTplClose(options?: Object) { + return this.modalService.open(this.tplContentWithClose, options); + } + + openTplDismiss(options?: Object) { + return this.modalService.open(this.tplContentWithDismiss, options); + } + + openTplIf(options?: Object) { + return this.modalService.open(this.tplContentWithIf, options); + } +} + +@NgModule({ + declarations: [TestComponent, DestroyableCmpt, WithActiveModalCmpt], + exports: [TestComponent, DestroyableCmpt], + imports: [CommonModule, PlxModalModule.forRoot()], + entryComponents: [DestroyableCmpt, WithActiveModalCmpt], + providers: [SpyService] +}) +class OesModalTestModule { +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.ts new file mode 100644 index 00000000..5935eee6 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-modal/modal.ts @@ -0,0 +1,54 @@ +import {Injectable, Injector, ComponentFactoryResolver} from '@angular/core'; +import {PlxModalStack} from './modal-stack'; +import {PlxModalRef} from './modal-ref'; + +/** + * Represent options available when opening new modal windows. + */ +export interface PlxModalOptions { + /** + * Whether a backdrop element should be created for a given modal (true by default). + * Alternatively, specify 'static' for a backdrop which doesn't close the modal on click. + */ + backdrop?: boolean | 'static'; + + /** + * An element to which to attach newly opened modal windows. + */ + container?: string; + + /** + * Whether to close the modal when escape key is pressed (true by default). + */ + keyboard?: boolean; + + /** + * Size of a new modal window. + */ + size?: 'sm' | 'lg'; + + /** + * Custom class to append to the modal window + */ + windowClass?: string; +} + +/** + * A service to open modal windows. Creating a modal is straightforward: create a template and pass it as an argument to + * the "open" method! + */ +@Injectable() +export class PlxModal { + constructor(private _moduleCFR: ComponentFactoryResolver, private _injector: Injector, private _modalStack: PlxModalStack) { + } + + /** + * Opens a new modal window with the specified content and using supplied options. Content can be provided + * as a TemplateRef or a component type. If you pass a component type as content than instances of those + * components can be injected with an instance of the PlxActiveModal class. You can use methods on the + * PlxActiveModal class to close / dismiss modals from "inside" of a component. + */ + public open(content: any, options: PlxModalOptions = {}): PlxModalRef { + return this._modalStack.open(this._moduleCFR, this._injector, content, options); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/index.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/index.ts new file mode 100644 index 00000000..c677a944 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/index.ts @@ -0,0 +1,8 @@ +export * from './text-input.component'; +export * from './text-input.module'; +export * from './ipv4-validator.directive'; +export * from './ipv6-validator.directive'; +export * from './max-validator.directive'; +export * from './min-validator.directive'; +export * from './text-input-ip.component'; +export * from './text-input-ip-address.component'; diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv4-validator.directive.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv4-validator.directive.ts new file mode 100644 index 00000000..312ea5f3 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv4-validator.directive.ts @@ -0,0 +1,24 @@ +import {Directive, forwardRef} from '@angular/core'; +import {AbstractControl, NG_VALIDATORS, Validators} from '@angular/forms'; + +@Directive({ + selector: '[ipv4][ngModel],[ipv4][formControl],[ipv4][formControlName]', + providers: [{ + provide: NG_VALIDATORS, + useExisting: forwardRef(() => Ipv4ValidatorDirective), + multi: true + }], +}) + +export class Ipv4ValidatorDirective { + validate(c: AbstractControl) { + if (Validators.required(c) !== undefined && + Validators.required(c) !== null) { + return null; + } + const ipv4Reg = + /^((25[0-5]|2[0-4]\d|[0-1]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[0-1]?\d\d?)$/; + let regex = new RegExp(ipv4Reg); + return regex.test(c.value) ? null : {'ipv4': true}; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv6-validator.directive.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv6-validator.directive.ts new file mode 100644 index 00000000..3195eb82 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/ipv6-validator.directive.ts @@ -0,0 +1,24 @@ +import {Directive, forwardRef} from '@angular/core'; +import {AbstractControl, NG_VALIDATORS, Validators} from '@angular/forms'; + +@Directive({ + selector: '[ipv6][ngModel],[ipv6][formControl],[ipv6][formControlName]', + providers: [{ + provide: NG_VALIDATORS, + useExisting: forwardRef(() => Ipv6ValidatorDirective), + multi: true + }], +}) + +export class Ipv6ValidatorDirective { + validate(c: AbstractControl) { + if (Validators.required(c) !== undefined && + Validators.required(c) !== null) { + return null; + } + const ipv6Reg = + /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; + let regex = new RegExp(ipv6Reg); + return regex.test(c.value) ? null : {'ipv6': true}; + }4 +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts new file mode 100644 index 00000000..143dccc6 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/max-validator.directive.ts @@ -0,0 +1,49 @@ +import {AfterViewInit, Directive, ElementRef, forwardRef, Input} from '@angular/core'; +import {AbstractControl, NG_VALIDATORS, ValidatorFn, Validators} from '@angular/forms'; + +import {NumberWrapperParseFloat} from '../core/number-wrapper-parse'; + +@Directive({ + selector: '[max][ngModel],[max][formControl],[max][formControlName]', + providers: [{ + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MaxValidatorDirective), + multi: true + }], +}) + +export class MaxValidatorDirective implements AfterViewInit { + private _validator: ValidatorFn; + private inputElement: any; + constructor(elementRef: ElementRef) { + this.inputElement = elementRef; + } + ngAfterViewInit() { + this.inputElement = this.inputElement.nativeElement.querySelector('input'); + if (this.inputElement && this.inputElement.querySelector('input')) { + this._validator = max(NumberWrapperParseFloat( + this.inputElement.querySelector('input').getAttribute('max'))); + } + } + @Input() + set max(maxValue: string) { + this._validator = max(NumberWrapperParseFloat(maxValue)); + } + + validate(c: AbstractControl): {[key: string]: any} { + return this._validator(c); + } +} + +function max(maxvalue: number): ValidatorFn { + return (control: AbstractControl): {[key: string]: any} => { + if (Validators.required(control) !== undefined && + Validators.required(control) !== null) { + return null; + } + let v: Number = Number(control.value); + return v > maxvalue ? + {'max': {'requiredValue': maxvalue, 'actualValue': v}} : + null; + }; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/min-validator.directive.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/min-validator.directive.ts new file mode 100644 index 00000000..260a93ed --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/min-validator.directive.ts @@ -0,0 +1,49 @@ +import {AfterViewInit, Directive, ElementRef, forwardRef, Input} from '@angular/core'; +import {AbstractControl, NG_VALIDATORS, ValidatorFn, Validators} from '@angular/forms'; + +import {NumberWrapperParseFloat} from '../core/number-wrapper-parse'; + +@Directive({ + selector: '[min][ngModel],[min][formControl],[min][formControlName]', + providers: [{ + provide: NG_VALIDATORS, + useExisting: forwardRef(() => MinValidatorDirective), + multi: true + }], +}) + +export class MinValidatorDirective implements AfterViewInit { + private _validator: ValidatorFn; + private inputElement: any; + constructor(elementRef: ElementRef) { + this.inputElement = elementRef; + } + ngAfterViewInit() { + this.inputElement = this.inputElement.nativeElement.querySelector('input'); + if (this.inputElement && this.inputElement.querySelector('input')) { + this._validator = min(NumberWrapperParseFloat( + this.inputElement.querySelector('input').getAttribute('min'))); + } + } + @Input() + set min(minValue: string) { + this._validator = min(NumberWrapperParseFloat(minValue)); + } + + validate(c: AbstractControl): {[key: string]: any} { + return this._validator(c); + } +} + +function min(minvalue: number): ValidatorFn { + return (control: AbstractControl): {[key: string]: any} => { + if (Validators.required(control) !== undefined && + Validators.required(control) !== null) { + return null; + } + let v: Number = Number(control.value); + return v < minvalue ? + {'min': {'requiredValue': minvalue, 'actualValue': v}} : + null; + }; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip-address.component.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip-address.component.ts new file mode 100644 index 00000000..4936a28e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip-address.component.ts @@ -0,0 +1,170 @@ +import {Component, EventEmitter, forwardRef, Input, OnInit, Output} from '@angular/core'; +import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; +import {BooleanFieldValue} from '../core/boolean-field-value'; + +const noop = () => {}; + +export const PX_TEXT_INPUT_IP_ADDRESS_CONTROL_VALUE_ACCESSOR: any = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PlxTextInputIpAddressComponent), + multi: true +}; +@Component({ + selector: 'plx-text-input-ip-address', + template: ` +
+ +
{{errMsg}}
+
+ `, + styleUrls: ['text-input.less'], + host: {'style': 'display: inline-block;'}, + providers: [PX_TEXT_INPUT_IP_ADDRESS_CONTROL_VALUE_ACCESSOR] +}) + +export class PlxTextInputIpAddressComponent implements OnInit, ControlValueAccessor { + @Input() lang: string = 'zh'; //zh|en + @Input() size: string; //空代表普通尺寸,sm代表小尺寸 + @Input() ipAddressCheckTip: string = ''; // + + @Input() @BooleanFieldValue() required: boolean = false; + + @Input() public ipValue: string; + @Output() public ipValueChange: EventEmitter = new EventEmitter(); + + @Input() public ipValueFlg : boolean; + @Output() public ipValueFlgChange: EventEmitter = new EventEmitter(); + + private isNull : boolean = true; + + /** Callback registered via registerOnTouched (ControlValueAccessor) */ + private _onTouchedCallback: () => void = noop; + /** Callback registered via registerOnChange (ControlValueAccessor) */ + private _onChangeCallback: (_: any) => void = noop; + + public errMsgs = { + 'zh': { + 'empty': '此项不能为空', + 'invalidate': 'IP格式不对', + 'range': '请输入正确的IPV4地址或IPV6地址', + 'range-IPV4': '请输入正确的IPV4', + 'range-IPV6': '请输入正确的IPV6' + }, + 'en': { + 'empty': 'IP can not be empty', + 'invalidate': 'IP format is incorrect', + 'range': 'IP range is IPV4 or IPV6', + 'range-IPV4': 'IP range is IPV4', + 'range-IPV6': 'IP range is IPV6' + } + }; + public errMsg: string; + public sizeClass: string; + + constructor() { + } + + ngOnInit(): void { + if (this.size === 'sm') { + this.sizeClass = 'plx-input-sm'; + } + this.isNull = this.ipValueFlg; + if(this.repIPStr(this.ipValue) === ''&& !this.ipValueFlg){ + this.ipValueFlg = false; + this.emitValue(); + } + } + + public keyUp(event: any): void { + this.setValueToOutside(this.validate()); + this.emitValue(); + } + + public paste(event: any): void{ + setTimeout(() => { + this.ipValue = event.target.value; + this.setValueToOutside(this.validate()); + this.emitValue(); + }, 0); + } + + private emitValue(){ + this.ipValueChange.emit(this.ipValue); + this.ipValueFlgChange.emit(this.ipValueFlg); + } + + private setValueToOutside(validateFlg: boolean): void { + this.ipValueFlg = validateFlg; + let value; + if (validateFlg) { + if (this.ipValue) { + value = this.ipValue; + } + if(this.ipValue === "" && !this.isNull){ + this.ipValueFlg = false; + } + } else { + value = false; + } + this._onChangeCallback(value); + } + + writeValue(value: any): void { + // + this.errMsg = ''; + this.ipValue = value; + if (value) { + this.validate(); + } + } + + registerOnChange(fn: any) { + this._onChangeCallback = fn; + } + + registerOnTouched(fn: any) { + this._onTouchedCallback = fn; + } + + public validate(): boolean { + this.errMsg = ''; + if (this.required) { + if (!this.ipValue) { + this.errMsg = this.errMsgs[this.lang]['empty']; + return false; + } + } + if ((this.ipValue) && (!this.ipValue)) { + this.errMsg = this.errMsgs[this.lang]['invalidate']; + return false; + } + let blackStr = this.repIPStr(this.ipValue); + if(this.ipAddressCheckTip === ''){ + if(this.ipValue !== '' && blackStr === ''){ + this.errMsg = this.errMsgs[this.lang]['range']; + return false; + } + }else{ + if(this.ipValue !== '' && this.ipAddressCheckTip !== blackStr) { + this.errMsg = this.errMsgs[this.lang]['range-'+ this.ipAddressCheckTip]; + return false; + } + } + return true; + } + + private repIPStr(value: any): string { + let blackStr = ''; + var regip4 = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/; + if (regip4.test(value)) { + return "IPV4"; + } + var regip6 = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; + if (regip6.test(value)) { + return "IPV6"; + } + return blackStr; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip.component.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip.component.ts new file mode 100644 index 00000000..7c9d616d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input-ip.component.ts @@ -0,0 +1,189 @@ +import {Component, forwardRef, Input, OnInit} from '@angular/core'; +import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; + +import {BooleanFieldValue} from '../core/boolean-field-value'; + +const noop = () => {}; + +export const PX_TEXT_INPUT_IP_CONTROL_VALUE_ACCESSOR: any = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PlxTextInputIpComponent), + multi: true +}; + +@Component({ + selector: 'plx-text-input-ip', + template: ` +
+ + . + + . + + . + +
{{errMsg}}
+
+ `, + styleUrls: ['text-input.less'], + host: {'style': 'display: inline-block;'}, + providers: [PX_TEXT_INPUT_IP_CONTROL_VALUE_ACCESSOR] +}) + +export class PlxTextInputIpComponent implements OnInit, ControlValueAccessor { + @Input() lang: string = 'zh'; //zh|en + @Input() size: string; //空代表普通尺寸,sm代表小尺寸 + @Input() @BooleanFieldValue() required: boolean = false; + /** Callback registered via registerOnTouched (ControlValueAccessor) */ + private _onTouchedCallback: () => void = noop; + /** Callback registered via registerOnChange (ControlValueAccessor) */ + private _onChangeCallback: (_: any) => void = noop; + public ipValue1: number; + public ipValue2: number; + public ipValue3: number; + public ipValue4: number; + public errMsgs = { + 'zh': { + 'empty': 'IP不能为空', + 'invalidate': '非法IP', + 'range': 'IP范围[0.0.0.0]~[255.255.255.255]' + }, + 'en': { + 'empty': 'IP can not be empty', + 'invalidate': 'Invalid IP', + 'range': 'IP range is [0.0.0.0]~[255.255.255.255]' + } + }; + public errMsg: string; + + constructor() { + } + + ngOnInit(): void { + } + + public change(event: any) :void { + event.target.value = this.repNumber(event.target.value); + this.setValueToOutside(this.validate()); + } + + public keyup(event: any, frontElement: any, backElement: any): void { + event.target.value = this.repNumber(event.target.value); + if (((event.keyCode === 13 || event.keyCode === 110 || event.keyCode === 190) + && event.target.value.length !== 0) + || event.target.value.length === 3) { //enter:13,dot:110、190 + if (event.keyCode !== 9) { //tab:9 + if (backElement) { + backElement.autoFocus = true; + backElement.inputViewChild.nativeElement.select(); + } else { + if (event.keyCode !== 110 && event.keyCode !== 190) { + event.target.blur(); + } + } + } + } + + if (event.target.value.length === 0 // backspace:8 delete:46 + && (event.keyCode === 8 || event.keyCode === 46)) { + if (frontElement) { + frontElement.autoFocus = true; + frontElement.inputViewChild.nativeElement.select(); + } + } + + this.setValueToOutside(this.validate()); + } + + private setValueToOutside(validateFlg: boolean): void { + let value; + if (validateFlg) { + if (this.ipValue1 && this.ipValue2 && this.ipValue3 && this.ipValue4) { + value = this.ipValue1 + '.' + + this.ipValue2 + '.'+ this.ipValue3 + '.'+ this.ipValue4; + } + } else { + value = false; + } + this._onChangeCallback(value); + } + + writeValue(value: any): void { + // + this.errMsg = ''; + if (value) { + if (this.isIPStr(value)) { + let ipArr = value.split('.'); + this.ipValue1 = ipArr[0]; + this.ipValue2 = ipArr[1]; + this.ipValue3 = ipArr[2]; + this.ipValue4 = ipArr[3]; + } else { + this.errMsg = this.errMsgs[this.lang]['invalidate'] + ' : ' + value; + } + } + } + + registerOnChange(fn: any) { + this._onChangeCallback = fn; + } + + registerOnTouched(fn: any) { + this._onTouchedCallback = fn; + } + + public validate(): boolean { + this.errMsg = ''; + if (this.required) { + if (!this.ipValue1 && !this.ipValue2 && !this.ipValue3 && !this.ipValue4) { + this.errMsg = this.errMsgs[this.lang]['empty']; + return false; + } + } + if ((this.ipValue1 || this.ipValue2 || this.ipValue3 || this.ipValue4) + && (!this.ipValue1 || !this.ipValue2 || !this.ipValue3 || !this.ipValue4)) { + this.errMsg = this.errMsgs[this.lang]['invalidate']; + return false; + } + if ((this.ipValue1 && (this.ipValue1 < 0 || this.ipValue1 > 255)) + || (this.ipValue2 && (this.ipValue2 < 0 || this.ipValue2 > 255)) + || (this.ipValue3 && (this.ipValue3 < 0 || this.ipValue3 > 255)) + || (this.ipValue4 && (this.ipValue4 < 0 || this.ipValue4 > 255))) { + this.errMsg = this.errMsgs[this.lang]['range']; + return false; + } + + return true; + } + + private repNumber(value: any): number { + var reg = /^[\d]+$/g; + if (!reg.test(value)) { + let txt = value; + txt.replace(/[^0-9]+/, function (char, index, val) { //匹配第一次非数字字符 + value = val.replace(/\D/g, ""); //将非数字字符替换成"" + }) + } + return value; + } + + private isIPStr(value: any): boolean { + var regip4 = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/; + if (regip4.test(value)) { + return true; + } + return false; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.component.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.component.ts new file mode 100644 index 00000000..9b5a01e9 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.component.ts @@ -0,0 +1,765 @@ +import {AfterContentInit, Component, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, OnInit, Output, Renderer2, ViewChild} from '@angular/core'; +import {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms'; +import {Observable} from 'rxjs/Observable'; + +import {BooleanFieldValue} from '../core/boolean-field-value'; +import {NumberWrapperParseFloat} from '../core/number-wrapper-parse'; +import {UUID} from '../core/uuid'; + +const noop = () => {}; + +export const PX_TEXT_INPUT_CONTROL_VALUE_ACCESSOR: any = { + provide: NG_VALUE_ACCESSOR, + useExisting: forwardRef(() => PlxTextInputComponent), + multi: true +}; + +@Component({ + selector: 'plx-text-input', + templateUrl: 'text-input.html', + styleUrls: ['text-input.less'], + host: {'style': 'display: inline-block;'}, + providers: [PX_TEXT_INPUT_CONTROL_VALUE_ACCESSOR] +}) + +export class PlxTextInputComponent implements ControlValueAccessor, OnInit, + AfterContentInit { + private _focused: boolean = false; + private _value: any = ''; + /** Callback registered via registerOnTouched (ControlValueAccessor) */ + private _onTouchedCallback: () => void = noop; + /** Callback registered via registerOnChange (ControlValueAccessor) */ + private _onChangeCallback: (_: any) => void = noop; + + /** Readonly properties. */ + get empty() { + return this._value === null || this._value === ''; + } + get inputId(): string { + return `${this.id}`; + } + get isShowHintLabel() { + return this._focused && this.hintLabel !== null; + } + get inputType() { + return this.type === 'number' ? 'text' : this.type; + } + + @Input() id: string = `plx-input-${UUID.UUID()}`; + @Input() name: string = null; + @Input() hintLabel: string = null; + @Input() lang: string = 'zh'; + @Input() @BooleanFieldValue() disabled: boolean = false; + + @Input() numberShowSpinner = true; + @Input() max: string|number = null; + @Input() maxLength: number = 64; + @Input() min: string|number = null; + @Input() minLength: number = null; + @Input() placeholder: string = ''; + @Input() @BooleanFieldValue() readOnly: boolean = false; + @Input() @BooleanFieldValue() required: boolean = false; + @Input() @BooleanFieldValue() notShowOption: boolean = true; + @Input() type: string = 'text'; + @Input() tabIndex: number = null; + @Input() pattern: string = null; + + @Input() @BooleanFieldValue() shortInput: boolean = false; + @Input() unit: string = null; + @Input() unitOptions: string[] = null; + @Input() prefix: string = null; + @Input() suffixList: string[] = null; + + // @Input() precision: number = 0; + @Input() step: number = 1; + @Input() width: string = '400px'; + @Input() unitWidth: string = '45px'; + @Input() unitOptionWidth: string = '84px'; + @Input() prefixWidth: string = '70px'; + @Input() historyList: string[]; + + @Input() prefixOptions: string[] = []; + @Input() prefixOptionWidth: string = '84px'; + + @Input() @BooleanFieldValue() passwordSwitch: boolean = false; + + @ViewChild('input') inputViewChild: ElementRef; + @ViewChild('inputOutter') pxTextInputElement: ElementRef; + + @HostBinding('class.input-invalid') selectClass: boolean = true; + + isDisabledUp: boolean = false; + isDisabledDown: boolean = false; + displayDataList: string[]; + currentPrecision: number = 0; + keyPattern: RegExp = /[0-9\-]/; + langPattern: RegExp = + /[a-zA-Z]|[\u4e00-\u9fa5]|[\uff08\uff09\u300a\u300b\u2014\u2014\uff1a\uff1b\uff0c\u201c\u201d\u2018\u2019\+\=\{\}\u3001\u3002\u3010\u3011\<\>\uff01\uff1f\/\|]/g; + timer: any; + optionalLabel: string = null; + hasSelection = false; + _precision: number = 0; + displayValue: any; + + isOpenDataList: boolean = false; + dataListClicked: boolean = false; + isOpenSuffixList: boolean = false; + suffixListClicked: boolean = false; + + showUnit: string; + isShowUnitOption: boolean = false; + unitOptionClicked: boolean = false; + + prefixOptionClicked: boolean = false; + isShowPrefixOption = false; + showPrefix: string; + showPassword: boolean = false; + tooltipText: string; + tooltipTexts = { + 'zh': { + 'true': '隐藏', + 'false': '显示', + }, + 'en': { + 'true': 'hidden', + 'false': 'show', + } + }; + isPwdSwithHover: boolean = false; + isPwdSwithClick: boolean = false; + + _autoFocus: boolean = false; + @Input() + set autoFocus(value: boolean) { + this._autoFocus = value; + + const that = this; + if (this._autoFocus) { + setTimeout(() => { + that.inputViewChild.nativeElement.focus(); + }, 0); + } + } + get autoFocus() { + return this._autoFocus; + } + + @Input() + set precision(value: string) { + this._precision = parseInt(value); + } + get precision() { + return this._value; + } + + get inputWidth() { + if (this.prefixOptions && this.prefixOptions.length > 0) { + if (this.unitOptions && this.unitOptions.length > 0) { + return `calc(${this.width} - ${this.prefixOptionWidth} - ${this.unitOptionWidth})`; + } else if (this.unit !== null) { + return `calc(${this.width} - ${this.prefixOptionWidth} - ${this.unitWidth})`; + } else { + return `calc(${this.width} - ${this.prefixOptionWidth})`; + } + } + + if (this.unit !== null && this.prefix !== null) { + return `calc(${this.width} - ${this.unitWidth} - ${this.prefixWidth})`; + } + + if (this.unit !== null) { + return `calc(${this.width} - ${this.unitWidth})`; + } + + if (!!this.unitOptions && this.unitOptions.length !== 0 && + this.prefix !== null) { + return `calc(${this.width} - ${this.unitOptionWidth} - ${ + this.prefixWidth + })`; + } + + if (!!this.unitOptions && this.unitOptions.length !== 0) { + return `calc(${this.width} - ${this.unitOptionWidth})`; + } + if (this.prefix !== null) { + return `calc(${this.width} - ${this.prefixWidth})`; + } + return this.width; + } + + + get hasUnit() { + return this.unit !== null; + } + get hasUnitOption() { + return this.showUnit !== undefined; + } + get hasPrefix() { + return this.prefix !== null; + } + get hasPrefixOption() { + return this.prefixOptions && this.prefixOptions.length > 0; + } + get isFocus() { + return this._focused; + } + + private _blurEmitter: EventEmitter = + new EventEmitter(); + private _focusEmitter: EventEmitter = + new EventEmitter(); + private click = new EventEmitter(); + private unitChange = new EventEmitter(); + @Output() public prefixChange = new EventEmitter(); + + @Output('blur') + get onBlur(): Observable { + return this._blurEmitter.asObservable(); + } + + @Output('focus') + get onFocus(): Observable { + return this._focusEmitter.asObservable(); + } + + @HostListener('focus') + onHostFocus() { + this.renderer.addClass(this.el.nativeElement, 'input-focus'); + this.renderer.removeClass(this.el.nativeElement, 'input-blur'); + } + + @HostListener('blur') + onHostBlur() { + this.renderer.addClass(this.el.nativeElement, 'input-blur'); + this.renderer.removeClass(this.el.nativeElement, 'input-focus'); + } + + @Input() + set value(v: any) { + v = this.filterZhChar(v); + v = this._convertValueForInputType(v); + if (v !== this._value) { + this._value = v; + if (this.type === 'number') { + if (this._value === '') { + this._onChangeCallback(null); + } else if (isNaN(this._value)) { + this._onChangeCallback(this._value); + } else { + this._onChangeCallback(NumberWrapperParseFloat(this._value)); + } + } else { + this._onChangeCallback(this._value); + } + } + } + get value(): any { + return this._value; + } + + constructor( + private el: ElementRef, private renderer: Renderer2) {} + + ngOnInit() { + if (this.shortInput) { + this.width = '120px'; + this.unitWidth = '40px'; + this.prefixWidth = '40px'; + } + this.translateLabel(); + + if (!!this.unitOptions && this.unitOptions.length !== 0) { + this.showUnit = this.unitOptions[0]; + } + + if (!!this.prefixOptions && this.prefixOptions.length !== 0) { + this.showPrefix = this.prefixOptions[0]; + } + } + + ngAfterContentInit() { + if (this.pxTextInputElement) { + Array.from(this.pxTextInputElement.nativeElement.childNodes) + .forEach((node: HTMLElement) => { + if (node.nodeType === 3) { + this.pxTextInputElement.nativeElement.removeChild(node); + } + }); + } + } + private translateLabel() { + if (this.lang === 'zh') { + this.optionalLabel = '(可选)'; + } else { + this.optionalLabel = '(Optional)'; + } + } + + _handleFocus(event: FocusEvent) { + this._focused = true; + this._focusEmitter.emit(event); + } + + _handleBlur(event: FocusEvent) { + this._focused = false; + this._onTouchedCallback(); + this._blurEmitter.emit(event); + } + + _checkValueLimit(value: any) { + if (this.type === 'number') { + if ((value === '' || value === undefined || value === null) && + !this.required) { + return ''; + } else if ( + this.min !== null && + NumberWrapperParseFloat(value) < NumberWrapperParseFloat(this.min)) { + return this.min; + } else if ( + this.max !== null && + NumberWrapperParseFloat(value) > NumberWrapperParseFloat(this.max)) { + return this.max; + } else { + return value; + } + } + return value; + } + + _checkValue() { + this.value = this._checkValueLimit(this.value); + this.displayValue = this.value; + } + + _handleChange(event: Event) { + this.value = (event.target).value; + this._onTouchedCallback(); + } + + openDataList() { + this.dataListClicked = true; + if (this.historyList) { + if (this.value) { + this.filterOption(this.value); + } else { + this.displayDataList = this.historyList; + if (!this.isOpenDataList) { + this.isOpenDataList = true; + } + } + } + } + + _handleClick(event: Event) { + if (this.isShowUnitOption) { + this.isShowUnitOption = false; + } + this.click.emit(event); + + if (this.historyList) { + this.openDataList(); + } + } + + _handleSelect(event: Event) { // 输入框文本被选中时处理 + if (!this.hasSelection) { + this.hasSelection = true; + } + } + deleteSelection() { // 删除选中文本, + document.getSelection().deleteFromDocument(); + this.hasSelection = false; + } + + _onWindowClick(event: Event) { + if (this.historyList) { + if (!this.dataListClicked) { + this.isOpenDataList = false; + } + this.dataListClicked = false; + } + + if (this.suffixList) { + if (!this.suffixListClicked) { + this.isOpenSuffixList = false; + } + this.suffixListClicked = false; + } + + if (this.unitOptions) { + if (!this.unitOptionClicked) { + this.isShowUnitOption = false; + } + this.unitOptionClicked = false; + } + + if (this.prefixOptions) { + if (!this.prefixOptionClicked) { + this.isShowPrefixOption = false; + } + this.prefixOptionClicked = false; + } + } + + _showPrefixOption(event: Event) { + this.isShowPrefixOption = !this.isShowPrefixOption; + this.prefixOptionClicked = true; + } + + _showUnitOption(event: Event) { + this.isShowUnitOption = !this.isShowUnitOption; + this.unitOptionClicked = true; + } + + _setUnit(unitValue: string) { + this.unitOptionClicked = true; + this.showUnit = unitValue; + this.unitChange.emit(unitValue); + this.isShowUnitOption = false; + } + + _setPrefix(value: string) { + if (value !== this.showPrefix) { + this.showPrefix = value; + this.prefixChange.emit(value); + } + this.prefixOptionClicked = true; + this.isShowPrefixOption = false; + } + + filterOption(value: any) { + this.displayDataList = []; + this.displayDataList = this.historyList.filter((data: string) => { + return data.toLowerCase().indexOf(value.toLowerCase()) > -1; + }); + + this.isOpenDataList = this.displayDataList.length !== 0; + } + + concatValueAndSuffix(value: string) { + const that = this; + that.displayDataList = []; + let mark = '@'; + if (value === '') { + that.displayDataList = []; + } else if (value.trim().toLowerCase().indexOf(mark) === -1) { + that.displayDataList.push(value); + that.suffixList.map((item: string) => { + let tempValue = value + mark + item; + that.displayDataList.push(tempValue); + }); + } else { + that.suffixList.map((item: string) => { + let tempValue = value.split(mark)[0] + mark + item; + that.displayDataList.push(tempValue); + }); + that.displayDataList = that.displayDataList.filter((item: string) => { + return item.trim().toLowerCase().indexOf(value) > -1; + }); + } + + that.isOpenSuffixList = that.displayDataList.length !== 0; + } + + _handleInput(event: any) { + let inputValue = event.target.value.trim().toLowerCase(); + + if (this.historyList) { + this.filterOption(inputValue); + } + + if (this.suffixList) { + this.concatValueAndSuffix(inputValue); + } + } + + chooseInputData(data: any) { + this.displayValue = data; + this.value = data; + + this.isOpenDataList = false; + this.dataListClicked = true; + this.isOpenSuffixList = false; + this.suffixListClicked = true; + } + + writeValue(value: any) { + this.displayValue = this._checkValueLimit(value); + this._value = this.displayValue; + } + + registerOnChange(fn: any) { + this._onChangeCallback = fn; + } + + registerOnTouched(fn: any) { + this._onTouchedCallback = fn; + } + + private getConvertValue(v: any) { + this.currentPrecision = v.toString().split('.')[1].length; + if (this.currentPrecision === 0) { // 输入小数点,但小数位数为0时 + return v; + } + if (this.currentPrecision < + this._precision) { // 输入小数点,且小数位数不为0 + return this.toFixed(v, this.currentPrecision); + } else { + return this.toFixed(v, this._precision); + } + } + + private filterZhChar(v: any) { + if (this.type === 'number') { + let reg = /[^0-9.-]/; + while (reg.test(v)) { + v = v.replace(reg, ''); + } + } + return v; + } + + private _convertValueForInputType(v: any): any { + switch (this.type) { + case 'number': { + if (v === '' || v === '-') { + return v; + } + + if (v.toString().indexOf('.') === -1) { // 整数 + return this.toFixed(v, 0); + } else { + return this.getConvertValue(v); + } + } + default: + return v; + } + } + + private toFixed(value: number, precision: number) { + return Number(value).toFixed(precision); + } + + repeat(interval: number, dir: number) { + let i = interval || 500; + + this.clearTimer(); + this.timer = setTimeout(() => { + this.repeat(40, dir); + }, i); + + this.spin(dir); + } + + clearTimer() { + if (this.timer) { + clearInterval(this.timer); + } + } + + spin(dir: number) { + let step = this.step * dir; + let currentValue = this._convertValueForInputType(this.value) || 0; + + this.value = Number(currentValue) + step; + + if (this.maxLength !== null && + this.value.toString().length > this.maxLength) { + this.value = currentValue; + } + + if (this.min !== null && this.value <= NumberWrapperParseFloat(this.min)) { + this.value = this.min; + this.isDisabledDown = true; + } + + if (this.max !== null && this.value >= NumberWrapperParseFloat(this.max)) { + this.value = this.max; + this.isDisabledUp = true; + } + this.displayValue = this.value; + this._onChangeCallback(NumberWrapperParseFloat(this.value)); + } + + onUpButtonMousedown(event: Event, input: HTMLInputElement) { + if (!this.disabled && this.type === 'number') { + input.focus(); + this.repeat(null, 1); + event.preventDefault(); + } + } + + onUpButtonMouseup(event: Event) { + if (!this.disabled) { + this.clearTimer(); + } + } + + onUpButtonMouseleave(event: Event) { + if (!this.disabled) { + this.clearTimer(); + } + } + + onDownButtonMousedown(event: Event, input: HTMLInputElement) { + if (!this.disabled && this.type === 'number') { + input.focus(); + this.repeat(null, -1); + event.preventDefault(); + } + } + + onDownButtonMouseup(event: Event) { + if (!this.disabled) { + this.clearTimer(); + } + } + + onDownButtonMouseleave(event: Event) { + if (!this.disabled) { + this.clearTimer(); + } + } + + onInputKeydown(event: KeyboardEvent) { + if (this.type === 'number') { + if (event.which === 229) { + event.preventDefault(); + return; + } else if (event.which === 38) { + this.spin(1); + event.preventDefault(); + } else if (event.which === 40) { + this.spin(-1); + event.preventDefault(); + } + } + } + onInputKeyPress(event: KeyboardEvent) { + let inputChar = String.fromCharCode(event.charCode); + if (this.type === 'number') { + if (event.which === 8) { + return; + } + + // if (!this.isValueLimit()) { + // this.handleSelection(event); + // } + + if (inputChar === '-' && this.min !== null && + NumberWrapperParseFloat(this.min) >= 0) { + event.preventDefault(); + return; + } + if (this.isIllegalNumberInputChar(event) || + this.isIllegalIntergerInput(inputChar)) { + event.preventDefault(); + return; + } + if (this.isIllegalFloatInput( + inputChar)) { // 当该函数返回true时,执行两种情景 + this.handleSelection(event); + } + if (this.hasSelection) { // 文本被选中,执行文本替换 + this.deleteSelection(); + } + } + } + + private handleSelection(event: any) { + if (this.hasSelection) { // 文本被选中,执行文本替换 + this.deleteSelection(); + } else { // 无选中文本,阻止非法输入 + event.preventDefault(); + } + } + // private isValueLimit() { + // if (this.min !== null && NumberWrapperParseFloat(this.value) !== 0 && + // this.value <= NumberWrapperParseFloat(this.min)) { + // return false; + // } + // if (this.max !== null && NumberWrapperParseFloat(this.value) !== 0 && + // this.value >= NumberWrapperParseFloat(this.max)) { + // return false; + // } + // return true; + // } + + private isIllegalNumberInputChar(event: KeyboardEvent) { + /* 8:backspace, 46:. */ + return !this.keyPattern.test(String.fromCharCode(event.charCode)) && + event.which !== 46 && event.which !== 0; + } + + private isIllegalIntergerInput(inputChar: string) { + return this._precision === 0 && + (inputChar === '.' || + (this._value && this._value && this._value.toString().length > 0 && + inputChar === '-')); + } + + private isIllegalFloatInput(inputChar: string) { + return this._precision > 0 && this._value && + ((this._value.toString().length > 0 && inputChar === '-') || + ((this._value.toString() === '' || + this._value.toString().indexOf('.') > 0) && + inputChar === '.') || + (this._value.toString().indexOf('.') > 0 && + this._value.toString().split('.')[1].length === this._precision)); + } + + onInput(event: Event, inputValue: string) { + this.value = inputValue; + } + + //处理鼠标经过上下箭头时,样式设置 + isEmptyValue() { + if (this.value === undefined || this.value === null || this.value === '') { + return true; + } + return false; + } + + isDisabledUpCaret() { + if (this.isEmptyValue()) { + return true; + } else if ( + this.max !== null && + (NumberWrapperParseFloat(this.value) >= + NumberWrapperParseFloat(this.max))) { + return true; + } + return false; + } + + isDisabledDownCaret() { + if (this.isEmptyValue()) { + return true; + } else if ( + this.min !== null && + (NumberWrapperParseFloat(this.value) <= + NumberWrapperParseFloat(this.min))) { + return true; + } + return false; + } + + _handleMouseEnterUp() { + this.isDisabledUp = this.isDisabledUpCaret(); + } + + _handleMouseEnterDown() { + this.isDisabledDown = this.isDisabledDownCaret(); + } + + public switch(): void { + this.showPassword = !this.showPassword; + this.showPassword?this.inputViewChild.nativeElement.type = + 'text':this.inputViewChild.nativeElement.type = 'password'; + } + + private setPasswordTooltip(): void { + this.tooltipTexts[this.lang][this.showPassword.toString()] + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.html b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.html new file mode 100644 index 00000000..9065badd --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.html @@ -0,0 +1,69 @@ +
+
{{showPrefix}}
+
+
  • {{option}}
  • +
    +
    {{prefix}}
    + + + + + + + + +
    {{unit}}
    + +
    {{showUnit}}
    +
    +
  • {{option}}
  • +
    +
    {{optionalLabel}}
    +
    {{hintLabel}}
    +
    +
  • {{data}}
  • +
    + +
    diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.less new file mode 100644 index 00000000..6a93c1c1 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.less @@ -0,0 +1,423 @@ +@import "../../assets/components/themes/default/theme.less"; +@import "../../assets/components/themes/common/plx-input.less"; + +@input-short-width: 120px; +@padding-left: 10px; +@padding: 10px; +@border-width: 1px; +@unit-span-width: 45px; +@unit-option-width: 84px; +@short-unit-span-width: 40px; +@prefix-span-width: 70px; +@prefix-option-width: 84px; +@short-prefix-span-width: 40px; +@password-switch: 40px; + +.font { + font-family: @font-family; + font-size: @font-size; +} + +.text-input { + //height: @input-height; + //position: relative; + //margin-bottom: 0; + display: inline-block; + + .caret-down { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid lighten(@fonticon-color, 5%); + margin-top: 4px; + margin-bottom: 10px; + + &.caret-down-hover:hover, &.caret-down-hover:active { + border-top: 4px solid @primary-color; + } + } + .caret-up { + display: block; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 4px solid lighten(@fonticon-color, 5%); + margin-top: 10px; + + &.caret-up-hover:hover, &.caret-up-hover:active { + border-bottom: 4px solid @primary-color; + } + } + .toggle { + float: right; + margin-right: 10px; + margin-top: 14px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid lighten(@fonticon-color, 5%); + } + .text-input-dataList { + margin-top: 2px; + position: absolute; + z-index: @z-index-dropdown; + border: 1px solid @gray-grade-7; + background: #fff; + cursor: pointer; + border-radius: @radius; + li { + list-style: none; + height: @input-height; + width: @input-width; + padding-left: @padding-left; + &:hover { + background-color: @hover-bg-color; + } + } + } +} + +.input-span { + display: inline-block; + overflow: visible; + padding: 0; + position: relative; +} + +.text-input-with-hint { + margin-bottom: -8px; + :host(.ng-touched.ng-invalid.input-blur) & { + height: auto; + margin-bottom: 0; + } +} + +.plx-text-input-unit-group, .plx-text-input-prefix-group { + position: absolute; + margin-top: @overlay-margin-top; + width: @unit-option-width; + z-index: @z-index-dropdown; + border-radius: @radius; + background: @component-bg; + border: 1px solid @border-color-base; + .shadow; + cursor: pointer; + li { + padding-left: 10px; + height: @input-height; + list-style: none; + line-height: @input-height; + font-size: @font-size; + &:hover { + background-color: @hover-bg-color; + } + &.group-selected, &.group-selected:hover { + background-color: @selected-bg-color; + color: @text-color; + } + } +} + +.text-input-optional { + display: inline-block; + margin-right: 6px; + padding-left:5px; +} + +.input-right-border .plx-input { + border-right: 1px solid @primary-color; +} + +.input-left-border .plx-input { + border-left: 1px solid @primary-color; +} + +.text-input-hint { + top: 42px; + left: 10px; + font-family: @font-family; + font-size: @font-size; + color: @disabled-text-color; + :host(.ng-touched.ng-invalid.input-blur) & { + display: none; + } +} + +.text-input-prefix { + .font; + display: inline-block; + width: @prefix-span-width; + height: @input-height; + text-align: center; + line-height: @input-height; + border-top-left-radius: @radius; + border-bottom-left-radius: @radius; + color: @disabled-text-color; + border: 1px solid @border-color-base; + border-right: 0; + vertical-align: middle; + .short-text-input & { + width: @short-prefix-span-width; + } + .input-span-focus & { + border-color: @primary-color; + } + .input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur &, + .input-invalid.ng-dirty.ng-invalid.ng-touched.input-blur .input-span-focus:focus & { + border-color: @error-color; + } +} + +.input-unit { + .font; + display: inline-block; + height: @input-height; + text-align: center; + line-height: @input-height; + border-top-right-radius: @radius; + border-bottom-right-radius: @radius; +} + +.text-input-unit { + border: 1px solid @border-color-base; + border-left: 0; + .input-unit; + color: @disabled-text-color; + width: @unit-span-width; + text-align: center; + vertical-align: middle; + .short-text-input & { + width: @short-unit-span-width; + } + .input-span-focus & { + border-color: @primary-color; + } +} + +.text-input-prefix-option { + .font; + display: inline-block; + height: @input-height; + text-align: center; + line-height: @input-height; + border-top-left-radius: @radius; + border-bottom-left-radius: @radius; + width: @prefix-option-width; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid @border-color-base;; + border-right: 0; + vertical-align: middle; + &.prefix-focus { + border-color: @primary-color; + } +} + +.text-input-unit-option { + &:extend(.input-unit); + width: @unit-option-width; + text-align: left; + padding-left: 10px; + cursor: pointer; + border: 1px solid @border-color-base;; + border-left: 0; + vertical-align: middle; + .input-span-focus & { + border-color: @primary-color; + } +} + +.text-input-with-unitOption { + div.unit-focus { + border-color: @primary-color; + } +} + +.plx-input { + .short-text-input & { + width: @input-short-width; + } + + .text-input-with-unit & { + width: @input-width - @unit-span-width; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .text-input-with-unitOption & { + width: @input-width - @unit-option-width; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .text-input-with-prefix & { + width: @input-width - @prefix-span-width; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .text-input-with-prefixOption & { + width: @input-width - @prefix-option-width; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .text-input-with-passwordSwith & { + width: @input-width - @password-switch; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .text-input-with-prefix.text-input-with-unit & { + width: @input-width - @prefix-span-width - @unit-span-width; + } + + .text-input-with-prefix.text-input-with-unitOption & { + width: @input-width - @prefix-span-width - @unit-option-width; + } + + .short-text-input.text-input-with-prefix & { + width: @input-short-width - @short-prefix-span-width; + } + + .short-text-input.text-input-with-unit & { + width: @input-short-width - @short-unit-span-width; + } + + .short-text-input.text-input-with-prefix.text-input-with-unit & { + width: @input-short-width - @short-prefix-span-width - @short-unit-span-width; + } +} + +.input-spinner() { + cursor: pointer; + display: block; + font-size: 12px; + position: absolute; + margin: 0; + right: 0; + overflow: hidden; + border: none; + padding: 0; + text-align: center; + vertical-align: middle; + width: 18px; +} + +.input-spinner-up { + .input-spinner(); + top: 0; +} + +.input-spinner-down { + .input-spinner(); + bottom: 0; +} + +:host(.plx-input-sm) { + .plx-input-sm-common; +} + +.plx-input-sm { + .plx-input-sm-common; +} + +.plx-input-sm-common { + .plx-input { + height: @input-height-sm; + line-height: @input-height-sm; + } + .text-input-prefix, + .text-input-unit, + .text-input-unit-option, + .text-input-prefix-option { + height: @input-height-sm; + line-height: @input-height-sm; + } + div.text-input-dataList { + height: @input-height-sm; + } + .toggle { + margin-top: 11px; + } + .caret-down { + margin-bottom: 8px; + } + .caret-up { + margin-top: 8px; + } + .plx-input-passwordSwitch { + line-height: @input-height-sm - 2px; + } +} + +.plx-input-passwordSwitch { + display: inline-block; + line-height: @input-height - 2px; + width: @password-switch; + text-align: center; + vertical-align: middle; + background-color: @common-color; + border: 1px solid @border-color-base; + border-left: 0; + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; + cursor: pointer; + &:focus, + &:hover { + border-color: @btn-common-color-border-hover; + background-color: @common-color-hover; + &.ict-eye-closed, &.ict-eye { + color: @btn-common-color-text-hover; + } + } + &:active { + background-color: @common-color-click; + border-color: @btn-common-color-border-click; + &.ict-eye-closed, &.ict-eye { + color: @btn-common-color-text-click; + } + } + &.ict-eye-closed, &.ict-eye { + color: @fonticon-color; + font-size: 16px; + } + } +.input-right-border-pwdswith-hover .plx-input { + border-right-color: @btn-common-color-border-hover; +} +.input-right-border-pwdswith-click .plx-input { + border-right-color: @btn-common-color-border-click; +} + +.plx-text-input-ip-dot { + display: inline-block; + vertical-align: bottom; + color: #999; +} + +.plx-text-input-error { + font-size: 12px; + color: @error-color; + margin-top: 5px; +} + +:host(.plx-text-input-ip-invalid) { + .plx-text-input-ip-invalid-common; +} + +.plx-text-input-ip-invalid { + .plx-text-input-ip-invalid-common; +} + +.plx-text-input-ip-invalid-common { + .plx-input { + border-color: @error-color; + } + .input-span-focus .plx-input { + border-color: @primary-color; + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.module.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.module.ts new file mode 100644 index 00000000..4374770a --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/text-input.module.ts @@ -0,0 +1,31 @@ +import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {FormsModule} from '@angular/forms'; + +import {PlxTooltipModule} from '../plx-tooltip/plx-tooltip.module'; +import {Ipv4ValidatorDirective} from './ipv4-validator.directive'; +import {Ipv6ValidatorDirective} from './ipv6-validator.directive'; +import {MaxValidatorDirective} from './max-validator.directive'; +import {MinValidatorDirective} from './min-validator.directive'; +import {PlxTextInputComponent} from './text-input.component'; +import {PlxValidateOnBlurDirective} from './validate-on-blur.directive'; +import {PlxTextInputIpComponent} from './text-input-ip.component'; +import {PlxTextInputIpAddressComponent} from './text-input-ip-address.component'; + + +@NgModule({ + imports: [CommonModule, FormsModule, PlxTooltipModule], + declarations: [ + PlxTextInputComponent, Ipv4ValidatorDirective, Ipv6ValidatorDirective, + MaxValidatorDirective, MinValidatorDirective, PlxValidateOnBlurDirective, + PlxTextInputIpComponent, PlxTextInputIpAddressComponent + ], + exports: [ + PlxTextInputComponent, Ipv4ValidatorDirective, Ipv6ValidatorDirective, + MaxValidatorDirective, MinValidatorDirective, PlxValidateOnBlurDirective, + PlxTextInputIpComponent, PlxTextInputIpAddressComponent + ] +}) + +export class PlxTextInputModule { +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/validate-on-blur.directive.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/validate-on-blur.directive.ts new file mode 100644 index 00000000..b4a940c8 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-text-input/validate-on-blur.directive.ts @@ -0,0 +1,18 @@ +import {Directive, HostListener} from '@angular/core'; +import {NgControl} from '@angular/forms'; + +@Directive({selector: '[validateOnBlur]'}) + +export class PlxValidateOnBlurDirective { + constructor(private formControl: NgControl) {} + + @HostListener('focus') + onFocus() { + // this.formControl.control.markAsUntouched(false); + } + + @HostListener('blur') + onBlur() { + // this.formControl.control.markAsTouched(true); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.spec.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.spec.ts new file mode 100644 index 00000000..4a19dd17 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.spec.ts @@ -0,0 +1,11 @@ +import {PlxTooltipConfig} from './plx-tooltip-config'; + +describe('plx-tooltip-config', () => { + it('should have sensible default values', () => { + const config = new PlxTooltipConfig(); + + expect(config.placement).toBe('top'); + expect(config.triggers).toBe('hover'); + expect(config.container).toBeUndefined(); + }); +}); diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.ts new file mode 100644 index 00000000..dd1cc254 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip-config.ts @@ -0,0 +1,13 @@ +import {Injectable} from '@angular/core'; + +/** + * Configuration service for the PlxTooltip directive. + * You can inject this service, typically in your root component, and customize the values of its properties in + * order to provide default values for all the tooltips used in the application. + */ +@Injectable() +export class PlxTooltipConfig { + public placement: 'top' | 'bottom' | 'left' | 'right' = 'top'; + public triggers = 'hover'; + public container: string; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.less b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.less new file mode 100644 index 00000000..4be58f9a --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.less @@ -0,0 +1,241 @@ +@import "../../assets/components/themes/common/plx-input.less"; + +@tooltip-arrow-border-width: 4px; +@tooltip-arrow-border-width-before: 5px; +@tooltip-arrow-border-height: @tooltip-arrow-border-width-before - @tooltip-arrow-border-width; +@tooltip-arrow-away: 5px; +@tooltip-arrow-background-color: #595959; +@tooltip-arrow-border-color: #595959; +@tooltip-away-host: 3px; + +.plx-tooltip { + font-family: @font-family; + font-size: @font-size; + opacity: 1; + position: absolute; + z-index: 10001; + display: block; + font-style: normal; + font-weight: normal; + letter-spacing: normal; + line-break: auto; + line-height: 1.5; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + white-space: normal; + word-break: normal; + word-spacing: normal; + word-wrap: break-word; + &::before, + &::after { + content: ""; + position: absolute; + display: block; + width: 0; + height: 0; + border: solid transparent; + } + &::before { + border-width: @tooltip-arrow-border-width-before; + } + &::after { + border-width: @tooltip-arrow-border-width; + } +} + +.plx-tooltip-inner { + min-width: 60px; + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; +} + +.plx-tooltip.show { + font-size: @font-size; + opacity: 1; +} +.plx-tooltip.show .plx-tooltip-inner { + background-color: #595959; + border-radius: @radius; + padding: 0px 12px; + height: 30px; + line-height: 30px; +} + +.plx-tooltip-top-common { + margin-top: -(@tooltip-arrow-border-width + @tooltip-away-host); + &::before { + border-top-color: @tooltip-arrow-border-color; + border-bottom-width: 0; + bottom: -@tooltip-arrow-border-width-before; + } + &::after { + border-top-color: @tooltip-arrow-background-color; + border-bottom-width: 0; + bottom: -@tooltip-arrow-border-width; + } +} +.plx-tooltip-top { + .plx-tooltip-top-common; + &::before { + left: 50%; + margin-left: -@tooltip-arrow-border-width-before; + } + &::after { + left: 50%; + margin-left: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-top-left { + .plx-tooltip-top-common; + &::before { + left: @tooltip-arrow-away; + } + &::after { + left: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-top-right { + .plx-tooltip-top-common; + &::before { + right: @tooltip-arrow-away; + } + &::after { + right: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} + +.plx-tooltip-right-common { + margin-left: @tooltip-arrow-border-width + @tooltip-away-host; + &::before { + border-right-color: @tooltip-arrow-border-color; + border-left-width: 0; + left: -@tooltip-arrow-border-width-before; + } + &::after { + border-right-color: @tooltip-arrow-background-color; + border-left-width: 0; + left: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-right { + .plx-tooltip-right-common; + &::before { + top: 50%; + margin-top: -@tooltip-arrow-border-width-before; + } + &::after { + top: 50%; + margin-top: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-right-top { + .plx-tooltip-right-common; + &::before { + top: @tooltip-arrow-away; + } + &::after { + top: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-right-bottom { + .plx-tooltip-right-common; + &::before { + bottom: @tooltip-arrow-away; + } + &::after { + bottom: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} + +.plx-tooltip-bottom-common { + margin-top: @tooltip-arrow-border-width + @tooltip-away-host; + &::before { + border-bottom-color: @tooltip-arrow-border-color; + border-top-width: 0; + top: -@tooltip-arrow-border-width-before; + } + &::after { + border-bottom-color: @tooltip-arrow-background-color; + border-top-width: 0; + top: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-bottom { + .plx-tooltip-bottom-common; + &::before { + left: 50%; + margin-left: -@tooltip-arrow-border-width-before; + } + &::after { + left: 50%; + margin-left: -@tooltip-arrow-border-width; + } +} +.plx-tooltip.plx-tooltip-bottom-left { + .plx-tooltip-bottom-common; + &::before { + left: @tooltip-arrow-away; + } + &::after { + left: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-bottom-right { + .plx-tooltip-bottom-common; + &::before { + right: @tooltip-arrow-away; + } + &::after { + right: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} + +.plx-tooltip-left-common { + margin-left: -(@tooltip-arrow-border-width + @tooltip-away-host); + &::before { + border-left-color: @tooltip-arrow-border-color; + border-right-width: 0; + right: -@tooltip-arrow-border-width-before; + } + &::after { + border-left-color: @tooltip-arrow-background-color; + border-right-width: 0; + right: -@tooltip-arrow-border-width; + } +} + +.plx-tooltip.plx-tooltip-left { + .plx-tooltip-left-common; + &::before { + top: 50%; + margin-top: -@tooltip-arrow-border-width-before; + } + &::after { + top: 50%; + margin-top: -@tooltip-arrow-border-width; + } +} + +.plx-tooltip.plx-tooltip-left-top { + .plx-tooltip-left-common; + &::before { + top: @tooltip-arrow-away; + } + &::after { + top: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} +.plx-tooltip.plx-tooltip-left-bottom { + .plx-tooltip-left-common; + &::before { + bottom: @tooltip-arrow-away; + } + &::after { + bottom: @tooltip-arrow-away + @tooltip-arrow-border-height; + } +} \ No newline at end of file diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.module.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.module.ts new file mode 100644 index 00000000..062ded1c --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.module.ts @@ -0,0 +1,12 @@ +import {NgModule, ModuleWithProviders} from '@angular/core'; + +import {PlxTooltip, PlxTooltipWindow} from './plx-tooltip'; +import {PlxTooltipConfig} from './plx-tooltip-config'; + +export {PlxTooltipConfig} from './plx-tooltip-config'; +export {PlxTooltip} from './plx-tooltip'; + +@NgModule({declarations: [PlxTooltip, PlxTooltipWindow], exports: [PlxTooltip], entryComponents: [PlxTooltipWindow]}) +export class PlxTooltipModule { + public static forRoot(): ModuleWithProviders { return {ngModule: PlxTooltipModule, providers: [PlxTooltipConfig]}; } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.spec.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.spec.ts new file mode 100644 index 00000000..cd2d8a6a --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.spec.ts @@ -0,0 +1,485 @@ +import {TestBed, ComponentFixture, inject} from '@angular/core/testing'; +import {createGenericTestComponent} from '../test/common'; + +import {By} from '@angular/platform-browser'; +import {Component, ViewChild, ChangeDetectionStrategy} from '@angular/core'; + +import {PlxTooltipModule} from './plx-tooltip.module'; +import {PlxTooltipWindow, PlxTooltip} from './plx-tooltip'; +import {PlxTooltipConfig} from './plx-tooltip-config'; + +const createTestComponent = + (html: string) => >createGenericTestComponent(html, TestComponent); + +const createOnPushTestComponent = + (html: string) => >createGenericTestComponent(html, TestOnPushComponent); + +describe('plx-tooltip-window', () => { + beforeEach(() => { TestBed.configureTestingModule({imports: [PlxTooltipModule.forRoot()]}); }); + + it('should render tooltip on top by default', () => { + const fixture = TestBed.createComponent(PlxTooltipWindow); + fixture.detectChanges(); + + expect(fixture.nativeElement).toHaveCssClass('tooltip'); + expect(fixture.nativeElement).toHaveCssClass('tooltip-top'); + expect(fixture.nativeElement.getAttribute('role')).toBe('tooltip'); + }); + + it('should position tooltips as requested', () => { + const fixture = TestBed.createComponent(PlxTooltipWindow); + fixture.componentInstance.placement = 'left'; + fixture.detectChanges(); + expect(fixture.nativeElement).toHaveCssClass('tooltip-left'); + }); +}); + +describe('plx-tooltip', () => { + + beforeEach(() => { + TestBed.configureTestingModule( + {declarations: [TestComponent, TestOnPushComponent], imports: [PlxTooltipModule.forRoot()]}); + }); + + function getWindow(element) { return element.querySelector('plx-tooltip-window'); } + + describe('basic functionality', () => { + + it('should open and close a tooltip - default settings and content as string', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + const defaultConfig = new PlxTooltipConfig(); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + const windowEl = getWindow(fixture.nativeElement); + + expect(windowEl).toHaveCssClass('tooltip'); + expect(windowEl).toHaveCssClass(`tooltip-${defaultConfig.placement}`); + expect(windowEl.textContent.trim()).toBe('Great tip!'); + expect(windowEl.getAttribute('role')).toBe('tooltip'); + expect(windowEl.getAttribute('id')).toBe('plx-tooltip-0'); + expect(windowEl.parentNode).toBe(fixture.nativeElement); + expect(directive.nativeElement.getAttribute('aria-describedby')).toBe('plx-tooltip-0'); + + directive.triggerEventHandler('mouseleave', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + expect(directive.nativeElement.getAttribute('aria-describedby')).toBeNull(); + }); + + it('should open and close a tooltip - default settings and content from a template', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + const windowEl = getWindow(fixture.nativeElement); + + expect(windowEl).toHaveCssClass('tooltip'); + expect(windowEl).toHaveCssClass('tooltip-top'); + expect(windowEl.textContent.trim()).toBe('Hello, World!'); + expect(windowEl.getAttribute('role')).toBe('tooltip'); + expect(windowEl.getAttribute('id')).toBe('plx-tooltip-1'); + expect(windowEl.parentNode).toBe(fixture.nativeElement); + expect(directive.nativeElement.getAttribute('aria-describedby')).toBe('plx-tooltip-1'); + + directive.triggerEventHandler('mouseleave', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + expect(directive.nativeElement.getAttribute('aria-describedby')).toBeNull(); + }); + + it('should open and close a tooltip - default settings, content from a template and context supplied', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.context.tooltip.open({name: 'John'}); + fixture.detectChanges(); + const windowEl = getWindow(fixture.nativeElement); + + expect(windowEl).toHaveCssClass('tooltip'); + expect(windowEl).toHaveCssClass('tooltip-top'); + expect(windowEl.textContent.trim()).toBe('Hello, John!'); + expect(windowEl.getAttribute('role')).toBe('tooltip'); + expect(windowEl.getAttribute('id')).toBe('plx-tooltip-2'); + expect(windowEl.parentNode).toBe(fixture.nativeElement); + expect(directive.nativeElement.getAttribute('aria-describedby')).toBe('plx-tooltip-2'); + + directive.triggerEventHandler('mouseleave', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + expect(directive.nativeElement.getAttribute('aria-describedby')).toBeNull(); + }); + + it('should not open a tooltip if content is falsy', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + const windowEl = getWindow(fixture.nativeElement); + + expect(windowEl).toBeNull(); + }); + + it('should close the tooltip tooltip if content becomes falsy', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + fixture.componentInstance.name = null; + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should allow re-opening previously closed tooltips', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + directive.triggerEventHandler('mouseleave', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + }); + + it('should not leave dangling tooltips in the DOM', () => { + const fixture = createTestComponent(``); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + fixture.componentInstance.show = false; + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should properly cleanup tooltips with manual triggers', () => { + const fixture = createTestComponent(` + `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + fixture.componentInstance.show = false; + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + describe('positioning', () => { + + it('should use requested position', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + const windowEl = getWindow(fixture.nativeElement); + + expect(windowEl).toHaveCssClass('tooltip'); + expect(windowEl).toHaveCssClass('tooltip-left'); + expect(windowEl.textContent.trim()).toBe('Great tip!'); + }); + + it('should properly position tooltips when a component is using the OnPush strategy', () => { + const fixture = createOnPushTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + const windowEl = getWindow(fixture.nativeElement); + + expect(windowEl).toHaveCssClass('tooltip'); + expect(windowEl).toHaveCssClass('tooltip-left'); + expect(windowEl.textContent.trim()).toBe('Great tip!'); + }); + }); + + describe('triggers', () => { + + it('should support toggle triggers', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('click', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + directive.triggerEventHandler('click', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should non-default toggle triggers', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + directive.triggerEventHandler('click', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should support multiple triggers', () => { + const fixture = + createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + directive.triggerEventHandler('click', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should not use default for manual triggers', () => { + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should allow toggling for manual triggers', () => { + const fixture = createTestComponent(` +
    + `); + const button = fixture.nativeElement.querySelector('button'); + + button.click(); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + button.click(); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should allow open / close for manual triggers', () => { + const fixture = createTestComponent(` +
    + + `); + + const buttons = fixture.nativeElement.querySelectorAll('button'); + + buttons[0].click(); // open + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + buttons[1].click(); // close + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + + it('should not throw when open called for manual triggers and open tooltip', () => { + const fixture = createTestComponent(` +
    + `); + const button = fixture.nativeElement.querySelector('button'); + + button.click(); // open + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + + button.click(); // open + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + }); + + it('should not throw when closed called for manual triggers and closed tooltip', () => { + const fixture = createTestComponent(` +
    + `); + + const button = fixture.nativeElement.querySelector('button'); + + button.click(); // close + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + }); + }); + }); + + describe('container', () => { + + it('should be appended to the element matching the selector passed to "container"', () => { + const selector = 'body'; + const fixture = createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + expect(getWindow(document.querySelector(selector))).not.toBeNull(); + }); + + it('should properly destroy tooltips when the "container" option is used', () => { + const selector = 'body'; + const fixture = + createTestComponent(`
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + directive.triggerEventHandler('mouseenter', {}); + fixture.detectChanges(); + + expect(getWindow(document.querySelector(selector))).not.toBeNull(); + fixture.componentRef.instance.show = false; + fixture.detectChanges(); + expect(getWindow(document.querySelector(selector))).toBeNull(); + }); + }); + + describe('visibility', () => { + it('should emit events when showing and hiding popover', () => { + const fixture = createTestComponent( + `
    `); + const directive = fixture.debugElement.query(By.directive(PlxTooltip)); + + let shownSpy = spyOn(fixture.componentInstance, 'shown'); + let hiddenSpy = spyOn(fixture.componentInstance, 'hidden'); + + directive.triggerEventHandler('click', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + expect(shownSpy).toHaveBeenCalled(); + + directive.triggerEventHandler('click', {}); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + expect(hiddenSpy).toHaveBeenCalled(); + }); + + it('should not emit close event when already closed', () => { + const fixture = createTestComponent( + `
    `); + + let shownSpy = spyOn(fixture.componentInstance, 'shown'); + let hiddenSpy = spyOn(fixture.componentInstance, 'hidden'); + + fixture.componentInstance.tooltip.open(); + fixture.detectChanges(); + + fixture.componentInstance.tooltip.open(); + fixture.detectChanges(); + + expect(getWindow(fixture.nativeElement)).not.toBeNull(); + expect(shownSpy).toHaveBeenCalled(); + expect(shownSpy.calls.count()).toEqual(1); + expect(hiddenSpy).not.toHaveBeenCalled(); + }); + + it('should not emit open event when already opened', () => { + const fixture = createTestComponent( + `
    `); + + let shownSpy = spyOn(fixture.componentInstance, 'shown'); + let hiddenSpy = spyOn(fixture.componentInstance, 'hidden'); + + fixture.componentInstance.tooltip.close(); + fixture.detectChanges(); + expect(getWindow(fixture.nativeElement)).toBeNull(); + expect(shownSpy).not.toHaveBeenCalled(); + expect(hiddenSpy).toHaveBeenCalled(); + }); + + it('should report correct visibility', () => { + const fixture = createTestComponent(`
    `); + fixture.detectChanges(); + + expect(fixture.componentInstance.tooltip.isOpen()).toBeFalsy(); + + fixture.componentInstance.tooltip.open(); + fixture.detectChanges(); + expect(fixture.componentInstance.tooltip.isOpen()).toBeTruthy(); + + fixture.componentInstance.tooltip.close(); + fixture.detectChanges(); + expect(fixture.componentInstance.tooltip.isOpen()).toBeFalsy(); + }); + }); + + describe('Custom config', () => { + let config: PlxTooltipConfig; + + beforeEach(() => { + TestBed.configureTestingModule({imports: [PlxTooltipModule.forRoot()]}); + TestBed.overrideComponent(TestComponent, {set: {template: `
    `}}); + }); + + beforeEach(inject([PlxTooltipConfig], (c: PlxTooltipConfig) => { + config = c; + config.placement = 'bottom'; + config.triggers = 'click'; + config.container = 'body'; + })); + + it('should initialize inputs with provided config', () => { + const fixture = TestBed.createComponent(TestComponent); + fixture.detectChanges(); + const tooltip = fixture.componentInstance.tooltip; + + expect(tooltip.placement).toBe(config.placement); + expect(tooltip.triggers).toBe(config.triggers); + expect(tooltip.container).toBe(config.container); + }); + }); + + describe('Custom config as provider', () => { + let config = new PlxTooltipConfig(); + config.placement = 'bottom'; + config.triggers = 'click'; + config.container = 'body'; + + beforeEach(() => { + TestBed.configureTestingModule( + {imports: [PlxTooltipModule.forRoot()], providers: [{provide: PlxTooltipConfig, useValue: config}]}); + }); + + it('should initialize inputs with provided config as provider', () => { + const fixture = createTestComponent(`
    `); + const tooltip = fixture.componentInstance.tooltip; + + expect(tooltip.placement).toBe(config.placement); + expect(tooltip.triggers).toBe(config.triggers); + expect(tooltip.container).toBe(config.container); + }); + }); +}); + +@Component({selector: 'test-cmpt', template: ``}) +export class TestComponent { + name = 'World'; + show = true; + + @ViewChild(PlxTooltip) tooltip: PlxTooltip; + + shown() {} + hidden() {} +} + +@Component({selector: 'test-onpush-cmpt', changeDetection: ChangeDetectionStrategy.OnPush, template: ``}) +export class TestOnPushComponent { +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.ts new file mode 100644 index 00000000..f52cc11d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/plx-tooltip/plx-tooltip.ts @@ -0,0 +1,176 @@ +import { + Component, + Directive, + Input, + Output, + EventEmitter, + ChangeDetectionStrategy, + OnInit, + OnDestroy, + Injector, + Renderer, + ComponentRef, + ElementRef, + TemplateRef, + ViewContainerRef, + ComponentFactoryResolver, + NgZone, ViewEncapsulation +} from '@angular/core'; +import {listenToTriggers} from '../util/triggers'; +import {positionElements, getPlacement} from '../util/positioning'; +import {PopupService} from '../util/popup'; +import {PlxTooltipConfig} from './plx-tooltip-config'; + +let nextId = 0; + +@Component({ + selector: 'plx-tooltip-window', + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, + host: {'[class]': '"plx-tooltip show plx-tooltip-" + placement', 'role': 'tooltip', '[id]': 'id'}, + template: ` +
    + `, + styleUrls: ['./plx-tooltip.less'] +}) +export class PlxTooltipWindow { + @Input() public placement: 'top' | 'bottom' | 'left' | 'right' = 'top'; + @Input() public id: string; +} + +/** + * A lightweight, extensible directive for fancy tooltip creation. + */ +@Directive({selector: '[plxTooltip]', exportAs: 'plxTooltip'}) +export class PlxTooltip implements OnInit, OnDestroy { + /** + * Placement of a tooltip. Accepts: "top", "bottom", "left", "right" + */ + @Input() public placement: 'top' | 'bottom' | 'left' | 'right'; + /** + * Specifies events that should trigger. Supports a space separated list of event names. + */ + @Input() public triggers: string; + /** + * A selector specifying the element the tooltip should be appended to. + * Currently only supports "body". + */ + @Input() public container: string; + /** + * Emits an event when the tooltip is shown + */ + @Output() public shown = new EventEmitter(); + /** + * Emits an event when the tooltip is hidden + */ + @Output() public hidden = new EventEmitter(); + + private _plxTooltip: string | TemplateRef; + private _plxTooltipWindowId = `plx-tooltip-${nextId++}`; + private _popupService: PopupService; + private _windowRef: ComponentRef; + private _unregisterListenersFn; + private _zoneSubscription: any; + + constructor(private _elementRef: ElementRef, private _renderer: Renderer, injector: Injector, + componentFactoryResolver: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, config: PlxTooltipConfig, + ngZone: NgZone) { + this.placement = config.placement; + this.triggers = config.triggers; + this.container = config.container; + this._popupService = new PopupService( + PlxTooltipWindow, injector, viewContainerRef, _renderer, componentFactoryResolver); + + this._zoneSubscription = ngZone.onStable.subscribe(() => { + if (this._windowRef) { + positionElements( + this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement, + this.container === 'body'); + let tmpPlace = getPlacement(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement); + this._windowRef.instance.placement = tmpPlace; + this._windowRef.changeDetectorRef.detectChanges(); + } + }); + } + + /** + * Content to be displayed as tooltip. If falsy, the tooltip won't open. + */ + @Input() + set plxTooltip(value: string | TemplateRef) { + this._plxTooltip = value; + if (!value && this._windowRef) { + this.close(); + } + } + + get plxTooltip() { + return this._plxTooltip; + } + + /** + * Opens an element’s tooltip. This is considered a “manual” triggering of the tooltip. + * The context is an optional value to be injected into the tooltip template when it is created. + */ + public open(context?: any) { + if (!this._windowRef && this._plxTooltip) { + this._windowRef = this._popupService.open(this._plxTooltip, context); + // let tmpPlace = getPlacement(this._elementRef.nativeElement, this._windowRef.location.nativeElement, this.placement); + this._windowRef.instance.placement = this.placement; + this._windowRef.instance.id = this._plxTooltipWindowId; + + this._renderer.setElementAttribute(this._elementRef.nativeElement, 'aria-describedby', this._plxTooltipWindowId); + + if (this.container === 'body') { + window.document.querySelector(this.container).appendChild(this._windowRef.location.nativeElement); + } + + // we need to manually invoke change detection since events registered via + // Renderer::listen() - to be determined if this is a bug in the Angular itself + this._windowRef.changeDetectorRef.markForCheck(); + this.shown.emit(); + } + } + + /** + * Closes an element’s tooltip. This is considered a “manual” triggering of the tooltip. + */ + public close(): void { + if (this._windowRef !== null) { + this._renderer.setElementAttribute(this._elementRef.nativeElement, 'aria-describedby', null); + this._popupService.close(); + this._windowRef = null; + this.hidden.emit(); + } + } + + /** + * Toggles an element’s tooltip. This is considered a “manual” triggering of the tooltip. + */ + public toggle(): void { + if (this._windowRef) { + this.close(); + } else { + this.open(); + } + } + + /** + * Returns whether or not the tooltip is currently being shown + */ + public isOpen(): boolean { + return !!this._windowRef; + } + + public ngOnInit() { + this._unregisterListenersFn = listenToTriggers( + this._renderer, this._elementRef.nativeElement, this.triggers, this.open.bind(this), this.close.bind(this), + this.toggle.bind(this)); + } + + public ngOnDestroy() { + this.close(); + this._unregisterListenersFn(); + this._zoneSubscription.unsubscribe(); + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/popup.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/popup.ts new file mode 100644 index 00000000..dacbc0b9 --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/popup.ts @@ -0,0 +1,59 @@ +import { + Injector, + TemplateRef, + ViewRef, + ViewContainerRef, + Renderer, + ComponentRef, + ComponentFactory, + ComponentFactoryResolver +} from '@angular/core'; + +export class ContentRef { + constructor(public nodes: any[], public viewRef?: ViewRef, public componentRef?: ComponentRef) { + } +} + +export class PopupService { + private _windowFactory: ComponentFactory; + private _windowRef: ComponentRef; + private _contentRef: ContentRef; + + constructor(type: any, private _injector: Injector, private _viewContainerRef: ViewContainerRef, private _renderer: Renderer, + componentFactoryResolver: ComponentFactoryResolver) { + this._windowFactory = componentFactoryResolver.resolveComponentFactory(type); + } + + public open(content?: string | TemplateRef, context?: any): ComponentRef { + if (!this._windowRef) { + this._contentRef = this._getContentRef(content, context); + this._windowRef = + this._viewContainerRef.createComponent(this._windowFactory, 0, this._injector, this._contentRef.nodes); + } + + return this._windowRef; + } + + public close() { + if (this._windowRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView)); + this._windowRef = null; + + if (this._contentRef.viewRef) { + this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef)); + this._contentRef = null; + } + } + } + + private _getContentRef(content: string | TemplateRef, context?: any): ContentRef { + if (!content) { + return new ContentRef([]); + } else if (content instanceof TemplateRef) { + const viewRef = this._viewContainerRef.createEmbeddedView(>content, context); + return new ContentRef([viewRef.rootNodes], viewRef); + } else { + return new ContentRef([[this._renderer.createText(null, `${content}`)]]); + } + } +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/positioning.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/positioning.ts new file mode 100644 index 00000000..79399d6d --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/positioning.ts @@ -0,0 +1,425 @@ +// previous version: +// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js +export class Positioning { + private getStyle(element: HTMLElement, prop: string): string { + return window.getComputedStyle(element)[prop]; + } + + private isStaticPositioned(element: HTMLElement): boolean { + return (this.getStyle(element, 'position') || 'static') === 'static'; + } + + private offsetParent(element: HTMLElement): HTMLElement { + let offsetParentEl = element.offsetParent || document.documentElement; + + while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) { + offsetParentEl = offsetParentEl.offsetParent; + } + + return offsetParentEl || document.documentElement; + } + + public position(element: HTMLElement, round = true): ClientRect { + let elPosition: ClientRect; + let parentOffset: ClientRect = {width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0}; + + if (this.getStyle(element, 'position') === 'fixed') { + elPosition = element.getBoundingClientRect(); + } else { + const offsetParentEl = this.offsetParent(element); + + elPosition = this.offset(element, false); + + if (offsetParentEl !== document.documentElement) { + parentOffset = this.offset(offsetParentEl, false); + } + + parentOffset.top += offsetParentEl.clientTop; + parentOffset.left += offsetParentEl.clientLeft; + } + + elPosition.top -= parentOffset.top; + elPosition.bottom -= parentOffset.top; + elPosition.left -= parentOffset.left; + elPosition.right -= parentOffset.left; + + if (round) { + elPosition.top = Math.round(elPosition.top); + elPosition.bottom = Math.round(elPosition.bottom); + elPosition.left = Math.round(elPosition.left); + elPosition.right = Math.round(elPosition.right); + } + + return elPosition; + } + + public offset(element: HTMLElement, round = true): ClientRect { + const elBcr = element.getBoundingClientRect(); + const viewportOffset = { + top: window.pageYOffset - document.documentElement.clientTop, + left: window.pageXOffset - document.documentElement.clientLeft + }; + + let elOffset = { + height: elBcr.height || element.offsetHeight, + width: elBcr.width || element.offsetWidth, + top: elBcr.top + viewportOffset.top, + bottom: elBcr.bottom + viewportOffset.top, + left: elBcr.left + viewportOffset.left, + right: elBcr.right + viewportOffset.left + }; + + if (round) { + elOffset.height = Math.round(elOffset.height); + elOffset.width = Math.round(elOffset.width); + elOffset.top = Math.round(elOffset.top); + elOffset.bottom = Math.round(elOffset.bottom); + elOffset.left = Math.round(elOffset.left); + elOffset.right = Math.round(elOffset.right); + } + + return elOffset; + } + + + public getPlacementPrimary(hostElement: HTMLElement, targetElement: HTMLElement, placement: string): string { + + // let placementPrimaryArray = ['right', 'bottom', 'left', 'top']; + // placementPrimaryArray.splice(placementPrimaryArray.indexOf(placementPrimary), 1); + // placementPrimaryArray.splice(0, 0, placementPrimary); + + let placementPrimaryArray = this.getTotalPlacementArr(placement); + let placementPrimary; + let placementSecondary; + let rect; + + let result = placementPrimaryArray.find(place => { + placementPrimary = place.split('-')[0] || 'top'; + placementSecondary = place.split('-')[1] || 'center'; + rect = this.getBoundingClientRect(placementPrimary, placementSecondary, hostElement, targetElement); + return this.canDisplay(rect); + }); + + if (!result) { + return placement; + } else { + return result; + } + } + + private getTotalPlacementArr(placement: string): any { + let placementPrimary = placement.split('-')[0] || 'top'; + + let placementBasic = ['right', 'bottom', 'left', 'top']; + placementBasic.splice(placementBasic.indexOf(placementPrimary), 1); + placementBasic.splice(0, 0, placementPrimary); + let placeTotal = { + right: [ + 'right', + 'right-top', + 'right-bottom' + ], + bottom: [ + 'bottom', + 'bottom-left', + 'bottom-right' + ], + left: [ + 'left', + 'left-top', + 'left-bottom' + ], + top: [ + 'top', + 'top-left', + 'top-right' + ] + } + let placeArr = []; + placeArr.push(placement); + placementBasic.forEach(placePri => { + placeTotal[placePri].forEach(palce => { + if (placement !== palce) { + placeArr.push(palce); + } + }); + }); + return placeArr; + } + + private canDisplay(rect): boolean { + if(this.isSheltered(rect, window)) { + return false; + } else { + var pElement = this.getParentElement(window); + if(pElement) { + const shelter = this.getShelter(pElement, window.parent, rect); + if(shelter) { + return false; + } else { + return true; + } + } else { + return true; + } + + } + } + + /** + * 判断当前位置在对应的窗口中是否会被遮挡 + * 用于iframe嵌套的场景 + * @param position + * @param currentWindow + */ + private isSheltered(position, currentWindow) { + if(position.left < 0 || position.top < 0 + || position.right > currentWindow.document.documentElement.clientWidth + || position.bottom > currentWindow.document.documentElement.clientHeight) { + return true; + } else { + return false; + } + } + + /** + * 递归判断当前元素是否会被视口遮挡 + * @param element + * @param currentWindow + * @param position + */ + public getShelter(element, currentWindow, position) { + var rect = element.getBoundingClientRect(); + position.left += rect.left; + position.right += rect.left; + position.top += rect.top; + position.bottom += rect.top; + + if(this.isSheltered(position, currentWindow)) { + return element; + } else { + if(currentWindow.parent != currentWindow) { // 判断是否到达最顶级容器 + var pElement = this.getParentElement(currentWindow); + return this.getShelter(pElement, currentWindow.parent, position); + } else { + return null; + } + } + } + + /** + * 查找当前容器在父窗口中的dom元素 + * 如:iframe场景中,则为在子页面中查找父页面中的iframe节点 + * @param currentWindow + */ + public getParentElement(currentWindow) { + if(currentWindow.parent !== currentWindow) { + var parentWindow = currentWindow.parent; + var frames = parentWindow.document.getElementsByTagName("iframe"); + for(var i=0; i trigger.split(':')).map((triggerPair) => { + let alias = aliases[triggerPair[0]] || triggerPair; + return new Trigger(alias[0], alias[1]); + }); + + const manualTriggers = parsedTriggers.filter(triggerPair => triggerPair.isManual()); + + if (manualTriggers.length > 1) { + throw 'Triggers parse error: only one manual trigger is allowed'; + } + + if (manualTriggers.length === 1 && parsedTriggers.length > 1) { + throw 'Triggers parse error: manual trigger can\'t be mixed with other triggers'; + } + + return parsedTriggers; +} + +const noopFn = () => { + // TO DO +}; + +export function listenToTriggers(renderer: any, nativeElement: any, triggers: string, openFn, closeFn, toggleFn) { + const parsedTriggers = parseTriggers(triggers); + const listeners = []; + + if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) { + return noopFn; + } + + parsedTriggers.forEach((trigger: Trigger) => { + if (trigger.open === trigger.close) { + listeners.push(renderer.listen(nativeElement, trigger.open, toggleFn)); + } else { + listeners.push( + renderer.listen(nativeElement, trigger.open, openFn), renderer.listen(nativeElement, trigger.close, closeFn)); + } + }); + + return () => { + listeners.forEach(unsubscribeFn => unsubscribeFn()); + }; +} diff --git a/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/util.ts b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/util.ts new file mode 100644 index 00000000..5df0381e --- /dev/null +++ b/deprecated-workflow-designer/sdc-workflow-designer-ui/src/app/paletx/util/util.ts @@ -0,0 +1,65 @@ +export function toInteger(value: any): number { + return parseInt(`${value}`, 10); +} + +export function toString(value: any): string { + return (value !== undefined && value !== null) ? `${value}` : ''; +} + +export function getValueInRange(value: number, max: number, min = 0): number { + return Math.max(Math.min(value, max), min); +} + +export function isString(value: any): boolean { + return typeof value === 'string'; +} + +export function isNumber(value: any): boolean { + return !isNaN(toInteger(value)); +} + +export function isInteger(value: any): boolean { + return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; +} + +export function isDefined(value: any): boolean { + return value !== undefined && value !== null; +} + +export function padNumber(value: number) { + if (isNumber(value)) { + return `0${value}`.slice(-2); + } else { + return ''; + } +} + +export function regExpEscape(text) { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +} + + +export function parseDate(date: Date, format) { + let o = { + 'M+': date.getMonth() + 1, // month + 'd+': date.getDate(), // day + 'h+': date.getHours(), // hour + 'm+': date.getMinutes(), // minute + 's+': date.getSeconds(), // second + 'q+': Math.floor((date.getMonth() + 3) / 3), // quarter + 'S': date.getMilliseconds() // millisecond + }; + if (/(y+)/.test(format)) { + format = format.replace(RegExp.$1, + (date.getFullYear() + '').substr(4 - RegExp.$1.length)); + } + for (let k in o) { + if (new RegExp('(' + k + ')').test(format)) { + format = format.replace(RegExp.$1, + RegExp.$1.length === 1 ? o[k] : + ('00' + o[k]).substr(('' + o[k]).length)); + } + } + return format; +} + -- cgit 1.2.3-korg