From 4067a9e3f925c314bdea6433eac5e77fff4320fc Mon Sep 17 00:00:00 2001 From: tsing Date: Mon, 22 Apr 2024 17:46:56 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E7=A7=BB=E5=8A=A8=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=BA=93=E5=B7=A5=E7=A8=8B=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .ls-lint.yml | 10 + .prettierrc | 2 +- lerna.json | 3 +- package.json | 2 - .../themes/default/default/iteration.css | 2 +- .../default/temp/farris-iteration-b.css | 968 +++++++++++++++++ packages/mobile-ui-vue/.eslintrc | 9 + packages/mobile-ui-vue/.gitignore | 24 + packages/mobile-ui-vue/.prettierrc | 13 + .../mobile-ui-vue/.vscode/extensions.json | 3 + packages/mobile-ui-vue/README.md | 18 + .../components/action-sheet/index.ts | 9 + .../components/action-sheet/src/index.html | 48 + .../components/action-sheet/src/index.vue | 110 ++ .../components/adv-uploader/index.ts | 17 + .../src/adv-uploader.component.tsx | 284 +++++ .../adv-uploader/src/adv-uploader.props.ts | 320 ++++++ .../adv-uploader/src/common/to-refs.ts | 27 + .../adv-uploader/src/common/types.ts | 320 ++++++ .../adv-uploader/src/common/upload.ts | 265 +++++ .../components/adv-uploader/src/common/xhr.ts | 149 +++ .../src/components/action-sheet.component.tsx | 87 ++ .../context-menu-list.component.tsx | 76 ++ .../components/file-picker-list.component.tsx | 77 ++ .../src/components/file-picker.tsx | 222 ++++ .../adv-uploader/src/composition/types.ts | 304 ++++++ .../src/composition/use-context-menu.tsx | 232 ++++ .../src/composition/use-popup-handler.ts | 23 + .../src/composition/use-uploader.ts | 303 ++++++ .../mobile-ui-vue/components/button/index.ts | 9 + .../components/button/src/button.vue | 123 +++ .../mobile-ui-vue/components/cell/index.ts | 9 + .../components/cell/src/index.vue | 136 +++ .../components/checkbox/README.md | 30 + .../components/checkbox/index.ts | 13 + .../checkbox/src/checkbox-group.vue | 103 ++ .../components/checkbox/src/checkbox-props.ts | 67 ++ .../components/checkbox/src/checker.vue | 56 + packages/mobile-ui-vue/components/config.ts | 3 + .../mobile-ui-vue/components/hook/index.ts | 18 + .../components/hook/use-back/index.ts | 19 + .../components/hook/use-bem/index.ts | 3 + .../components/hook/use-click-away/index.ts | 34 + .../hook/use-dynamic-template/index.ts | 52 + .../components/hook/use-element-rect/index.ts | 14 + .../hook/use-event-listener/index.ts | 45 + .../components/hook/use-expose/index.ts | 9 + .../components/hook/use-lay-render/index.ts | 17 + .../components/hook/use-locale/index.ts | 5 + .../components/hook/use-lock-scroll/index.ts | 25 + .../components/hook/use-long-press/index.ts | 141 +++ .../components/hook/use-md5/index.ts | 315 ++++++ .../hook/use-mount-component/index.ts | 55 + .../components/hook/use-props/index.ts | 19 + .../components/hook/use-queue/index.ts | 22 + .../components/hook/use-state/index.ts | 14 + .../components/hook/use-touch-move/index.ts | 117 ++ .../components/hook/use-touch/index.ts | 69 ++ .../mobile-ui-vue/components/icon/index.ts | 9 + .../components/icon/src/index.vue | 45 + .../mobile-ui-vue/components/image/index.ts | 9 + .../components/image/src/index.html | 24 + .../components/image/src/index.vue | 89 ++ packages/mobile-ui-vue/components/index.ts | 48 + .../components/listview/README.md | 112 ++ .../components/listview/index.ts | 9 + .../listview/src/listview-container.vue | 134 +++ .../components/listview/src/listview-list.vue | 120 +++ .../components/listview/src/listview-props.ts | 89 ++ .../components/listview/src/listview-types.ts | 48 + .../components/listview/src/listview.tsx | 73 ++ .../components/listview/src/listview.vue | 172 +++ .../components/listview/src/use-data.ts | 56 + .../listview/src/use-scroll-check.ts | 77 ++ .../components/listview/src/use-touch-hold.ts | 27 + .../mobile-ui-vue/components/locale/index.ts | 58 + .../components/locale/lang/en/index.ts | 156 +++ .../components/locale/lang/zh-CHS/index.ts | 154 +++ .../components/locale/lang/zh-CHT/index.ts | 154 +++ .../mobile-ui-vue/components/navbar/index.ts | 9 + .../components/navbar/src/navbar.vue | 75 ++ .../mobile-ui-vue/components/overlay/index.ts | 9 + .../components/overlay/src/index.tsx | 43 + .../mobile-ui-vue/components/popup/index.ts | 9 + .../components/popup/src/index.tsx | 171 +++ .../mobile-ui-vue/components/scroll/index.ts | 9 + .../components/scroll/src/scroll.vue | 83 ++ .../theme/fonts/farris-mobile-icon.ttf | Bin 0 -> 52124 bytes .../mobile-ui-vue/components/theme/index.scss | 59 ++ .../components/theme/src/_animation.scss | 150 +++ .../components/theme/src/_variables.scss | 141 +++ .../components/theme/src/action-bar.scss | 104 ++ .../components/theme/src/action-sheet.scss | 99 ++ .../components/theme/src/attach.scss | 419 ++++++++ .../components/theme/src/badge.scss | 47 + .../components/theme/src/base.scss | 17 + .../components/theme/src/button-group.scss | 66 ++ .../components/theme/src/button.scss | 199 ++++ .../components/theme/src/calendar.scss | 205 ++++ .../components/theme/src/card.scss | 65 ++ .../components/theme/src/cell.scss | 129 +++ .../components/theme/src/checkbox.scss | 22 + .../components/theme/src/checker.scss | 94 ++ .../components/theme/src/collapse.scss | 38 + .../components/theme/src/dialog.scss | 107 ++ .../theme/src/discussion-group.scss | 271 +++++ .../components/theme/src/dropdown.scss | 132 +++ .../components/theme/src/filter.scss | 347 ++++++ .../components/theme/src/html-panel.scss | 35 + .../components/theme/src/icon.scss | 727 +++++++++++++ .../components/theme/src/image-preview.scss | 107 ++ .../components/theme/src/image.scss | 38 + .../components/theme/src/index-list.scss | 33 + .../components/theme/src/input-template.scss | 81 ++ .../components/theme/src/input.scss | 131 +++ .../components/theme/src/listview.scss | 106 ++ .../components/theme/src/loading.scss | 69 ++ .../components/theme/src/lookup.scss | 458 ++++++++ .../theme/src/mixins/_border-radius.scss | 13 + .../theme/src/mixins/_ellipsis.scss | 15 + .../components/theme/src/mixins/_flex.scss | 17 + .../theme/src/mixins/_hairline.scss | 150 +++ .../theme/src/mixins/_safe-area.scss | 9 + .../theme/src/mixins/_splitline.scss | 10 + .../components/theme/src/navbar.scss | 73 ++ .../components/theme/src/notice-bar.scss | 75 ++ .../components/theme/src/notify.scss | 42 + .../components/theme/src/overlay.scss | 9 + .../components/theme/src/pagination.scss | 84 ++ .../components/theme/src/picker.scss | 88 ++ .../components/theme/src/popover.scss | 134 +++ .../components/theme/src/popup.scss | 58 + .../components/theme/src/radio.scss | 21 + .../components/theme/src/rich-editor.scss | 998 ++++++++++++++++++ .../components/theme/src/scheadule.scss | 210 ++++ .../components/theme/src/scroll-view.scss | 52 + .../components/theme/src/scroll.scss | 8 + .../components/theme/src/search.scss | 62 ++ .../components/theme/src/share-sheet.scss | 88 ++ .../components/theme/src/sidebar.scss | 53 + .../components/theme/src/skeleton.scss | 59 ++ .../components/theme/src/steps.scss | 170 +++ .../components/theme/src/swipe.scss | 66 ++ .../components/theme/src/swipecell.scss | 28 + .../components/theme/src/switch.scss | 70 ++ .../components/theme/src/tab-bar.scss | 225 ++++ .../components/theme/src/tab.scss | 46 + .../components/theme/src/tabs.scss | 22 + .../components/theme/src/tag.scss | 37 + .../components/theme/src/tags.scss | 129 +++ .../components/theme/src/text-area.scss | 3 + .../components/theme/src/text.scss | 24 + .../components/theme/src/toast.scss | 76 ++ .../components/theme/src/tree-bar.scss | 102 ++ .../components/theme/src/upload.scss | 276 +++++ .../mobile-ui-vue/components/utils/index.ts | 17 + .../components/utils/src/array.ts | 15 + .../mobile-ui-vue/components/utils/src/bem.ts | 55 + .../components/utils/src/common.ts | 115 ++ .../components/utils/src/date.ts | 44 + .../components/utils/src/debounce.ts | 33 + .../components/utils/src/deep-assign.ts | 28 + .../components/utils/src/dom/element.ts | 120 +++ .../components/utils/src/dom/event.ts | 37 + .../components/utils/src/dom/scroller.ts | 30 + .../components/utils/src/dom/style.ts | 20 + .../components/utils/src/hook.ts | 18 + .../components/utils/src/interceptor.ts | 36 + .../components/utils/src/number.ts | 28 + .../components/utils/src/string.ts | 43 + .../components/utils/src/throttle.ts | 44 + .../components/utils/src/type.ts | 88 ++ .../utils/src/vue-compile/codegen.ts | 553 ++++++++++ .../demos/actionsheet/index.html | 40 + .../mobile-ui-vue/demos/actionsheet/index.js | 54 + .../demos/actionsheet/index.scss | 28 + .../mobile-ui-vue/demos/actionsheet/index.vue | 5 + .../demos/adv-uploader/index.vue | 134 +++ packages/mobile-ui-vue/demos/home/index.vue | 102 ++ packages/mobile-ui-vue/demos/index.vue | 45 + .../demos/listview/filter-bar-panel-enum.vue | 149 +++ .../demos/listview/filter-bar-panel.vue | 42 + .../demos/listview/filter-bar.vue | 107 ++ .../mobile-ui-vue/demos/listview/index.html | 113 ++ .../mobile-ui-vue/demos/listview/index.js | 360 +++++++ .../mobile-ui-vue/demos/listview/index.scss | 85 ++ .../mobile-ui-vue/demos/listview/index.vue | 75 ++ .../mobile-ui-vue/demos/navbar/index.html | 30 + packages/mobile-ui-vue/demos/navbar/index.js | 11 + .../mobile-ui-vue/demos/navbar/index.scss | 8 + packages/mobile-ui-vue/demos/navbar/index.vue | 5 + packages/mobile-ui-vue/demos/popup/index.vue | 73 ++ .../mobile-ui-vue/docs/.vitepress/config.ts | 33 + .../docs/.vitepress/theme/index.ts | 9 + packages/mobile-ui-vue/docs/api-examples.md | 49 + .../docs/assets/farris_design_dark.png | Bin 0 -> 33761 bytes .../docs/assets/farris_design_light.png | Bin 0 -> 80262 bytes packages/mobile-ui-vue/docs/index.md | 25 + .../mobile-ui-vue/docs/markdown-examples.md | 85 ++ packages/mobile-ui-vue/docs/vite.config.ts | 12 + packages/mobile-ui-vue/index.html | 24 + packages/mobile-ui-vue/package.json | 63 ++ .../public/assets/demo/images/city.jpg | Bin 0 -> 200976 bytes .../public/assets/demo/images/ice.jpg | Bin 0 -> 112150 bytes .../public/assets/demo/images/leaf.jpg | Bin 0 -> 17407 bytes .../public/assets/demo/images/sand.jpg | Bin 0 -> 62220 bytes .../public/assets/demo/images/tree.jpg | Bin 0 -> 34185 bytes .../public/assets/farris-mobile-page.css | 1 + packages/mobile-ui-vue/public/vite.svg | 1 + packages/mobile-ui-vue/src/app.vue | 160 +++ packages/mobile-ui-vue/src/assets/vue.svg | 1 + packages/mobile-ui-vue/src/main.ts | 9 + packages/mobile-ui-vue/src/menu-data.ts | 54 + packages/mobile-ui-vue/src/router/index.ts | 38 + packages/mobile-ui-vue/src/style.css | 0 packages/mobile-ui-vue/src/vite-env.d.ts | 9 + packages/mobile-ui-vue/tsconfig.json | 36 + packages/mobile-ui-vue/tsconfig.node.json | 12 + packages/mobile-ui-vue/upload-mock.js | 26 + packages/mobile-ui-vue/vite.config.ts | 12 + yarn.lock | 51 +- 222 files changed, 19123 insertions(+), 16 deletions(-) create mode 100644 packages/farris-theme/src/assets/themes/default/default/temp/farris-iteration-b.css create mode 100644 packages/mobile-ui-vue/.eslintrc create mode 100644 packages/mobile-ui-vue/.gitignore create mode 100644 packages/mobile-ui-vue/.prettierrc create mode 100644 packages/mobile-ui-vue/.vscode/extensions.json create mode 100644 packages/mobile-ui-vue/README.md create mode 100644 packages/mobile-ui-vue/components/action-sheet/index.ts create mode 100644 packages/mobile-ui-vue/components/action-sheet/src/index.html create mode 100644 packages/mobile-ui-vue/components/action-sheet/src/index.vue create mode 100644 packages/mobile-ui-vue/components/adv-uploader/index.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.component.tsx create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.props.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/common/to-refs.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/common/types.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/common/upload.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/common/xhr.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/components/action-sheet.component.tsx create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/components/context-menu-list.component.tsx create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker-list.component.tsx create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker.tsx create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/composition/types.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/composition/use-context-menu.tsx create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/composition/use-popup-handler.ts create mode 100644 packages/mobile-ui-vue/components/adv-uploader/src/composition/use-uploader.ts create mode 100644 packages/mobile-ui-vue/components/button/index.ts create mode 100644 packages/mobile-ui-vue/components/button/src/button.vue create mode 100644 packages/mobile-ui-vue/components/cell/index.ts create mode 100644 packages/mobile-ui-vue/components/cell/src/index.vue create mode 100644 packages/mobile-ui-vue/components/checkbox/README.md create mode 100644 packages/mobile-ui-vue/components/checkbox/index.ts create mode 100644 packages/mobile-ui-vue/components/checkbox/src/checkbox-group.vue create mode 100644 packages/mobile-ui-vue/components/checkbox/src/checkbox-props.ts create mode 100644 packages/mobile-ui-vue/components/checkbox/src/checker.vue create mode 100644 packages/mobile-ui-vue/components/config.ts create mode 100644 packages/mobile-ui-vue/components/hook/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-back/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-bem/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-click-away/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-dynamic-template/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-element-rect/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-event-listener/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-expose/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-lay-render/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-locale/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-lock-scroll/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-long-press/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-md5/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-mount-component/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-props/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-queue/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-state/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-touch-move/index.ts create mode 100644 packages/mobile-ui-vue/components/hook/use-touch/index.ts create mode 100644 packages/mobile-ui-vue/components/icon/index.ts create mode 100644 packages/mobile-ui-vue/components/icon/src/index.vue create mode 100644 packages/mobile-ui-vue/components/image/index.ts create mode 100644 packages/mobile-ui-vue/components/image/src/index.html create mode 100644 packages/mobile-ui-vue/components/image/src/index.vue create mode 100644 packages/mobile-ui-vue/components/index.ts create mode 100644 packages/mobile-ui-vue/components/listview/README.md create mode 100644 packages/mobile-ui-vue/components/listview/index.ts create mode 100644 packages/mobile-ui-vue/components/listview/src/listview-container.vue create mode 100644 packages/mobile-ui-vue/components/listview/src/listview-list.vue create mode 100644 packages/mobile-ui-vue/components/listview/src/listview-props.ts create mode 100644 packages/mobile-ui-vue/components/listview/src/listview-types.ts create mode 100644 packages/mobile-ui-vue/components/listview/src/listview.tsx create mode 100644 packages/mobile-ui-vue/components/listview/src/listview.vue create mode 100644 packages/mobile-ui-vue/components/listview/src/use-data.ts create mode 100644 packages/mobile-ui-vue/components/listview/src/use-scroll-check.ts create mode 100644 packages/mobile-ui-vue/components/listview/src/use-touch-hold.ts create mode 100644 packages/mobile-ui-vue/components/locale/index.ts create mode 100644 packages/mobile-ui-vue/components/locale/lang/en/index.ts create mode 100644 packages/mobile-ui-vue/components/locale/lang/zh-CHS/index.ts create mode 100644 packages/mobile-ui-vue/components/locale/lang/zh-CHT/index.ts create mode 100644 packages/mobile-ui-vue/components/navbar/index.ts create mode 100644 packages/mobile-ui-vue/components/navbar/src/navbar.vue create mode 100644 packages/mobile-ui-vue/components/overlay/index.ts create mode 100644 packages/mobile-ui-vue/components/overlay/src/index.tsx create mode 100644 packages/mobile-ui-vue/components/popup/index.ts create mode 100644 packages/mobile-ui-vue/components/popup/src/index.tsx create mode 100644 packages/mobile-ui-vue/components/scroll/index.ts create mode 100644 packages/mobile-ui-vue/components/scroll/src/scroll.vue create mode 100644 packages/mobile-ui-vue/components/theme/fonts/farris-mobile-icon.ttf create mode 100644 packages/mobile-ui-vue/components/theme/index.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/_animation.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/_variables.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/action-bar.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/action-sheet.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/attach.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/badge.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/base.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/button-group.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/button.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/calendar.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/card.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/cell.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/checkbox.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/checker.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/collapse.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/dialog.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/discussion-group.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/dropdown.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/filter.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/html-panel.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/icon.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/image-preview.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/image.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/index-list.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/input-template.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/input.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/listview.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/loading.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/lookup.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/mixins/_border-radius.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/mixins/_ellipsis.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/mixins/_flex.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/mixins/_hairline.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/mixins/_safe-area.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/mixins/_splitline.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/navbar.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/notice-bar.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/notify.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/overlay.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/pagination.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/picker.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/popover.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/popup.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/radio.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/rich-editor.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/scheadule.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/scroll-view.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/scroll.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/search.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/share-sheet.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/sidebar.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/skeleton.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/steps.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/swipe.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/swipecell.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/switch.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/tab-bar.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/tab.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/tabs.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/tag.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/tags.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/text-area.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/text.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/toast.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/tree-bar.scss create mode 100644 packages/mobile-ui-vue/components/theme/src/upload.scss create mode 100644 packages/mobile-ui-vue/components/utils/index.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/array.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/bem.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/common.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/date.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/debounce.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/deep-assign.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/dom/element.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/dom/event.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/dom/scroller.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/dom/style.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/hook.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/interceptor.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/number.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/string.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/throttle.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/type.ts create mode 100644 packages/mobile-ui-vue/components/utils/src/vue-compile/codegen.ts create mode 100644 packages/mobile-ui-vue/demos/actionsheet/index.html create mode 100644 packages/mobile-ui-vue/demos/actionsheet/index.js create mode 100644 packages/mobile-ui-vue/demos/actionsheet/index.scss create mode 100644 packages/mobile-ui-vue/demos/actionsheet/index.vue create mode 100644 packages/mobile-ui-vue/demos/adv-uploader/index.vue create mode 100644 packages/mobile-ui-vue/demos/home/index.vue create mode 100644 packages/mobile-ui-vue/demos/index.vue create mode 100644 packages/mobile-ui-vue/demos/listview/filter-bar-panel-enum.vue create mode 100644 packages/mobile-ui-vue/demos/listview/filter-bar-panel.vue create mode 100644 packages/mobile-ui-vue/demos/listview/filter-bar.vue create mode 100644 packages/mobile-ui-vue/demos/listview/index.html create mode 100644 packages/mobile-ui-vue/demos/listview/index.js create mode 100644 packages/mobile-ui-vue/demos/listview/index.scss create mode 100644 packages/mobile-ui-vue/demos/listview/index.vue create mode 100644 packages/mobile-ui-vue/demos/navbar/index.html create mode 100644 packages/mobile-ui-vue/demos/navbar/index.js create mode 100644 packages/mobile-ui-vue/demos/navbar/index.scss create mode 100644 packages/mobile-ui-vue/demos/navbar/index.vue create mode 100644 packages/mobile-ui-vue/demos/popup/index.vue create mode 100644 packages/mobile-ui-vue/docs/.vitepress/config.ts create mode 100644 packages/mobile-ui-vue/docs/.vitepress/theme/index.ts create mode 100644 packages/mobile-ui-vue/docs/api-examples.md create mode 100644 packages/mobile-ui-vue/docs/assets/farris_design_dark.png create mode 100644 packages/mobile-ui-vue/docs/assets/farris_design_light.png create mode 100644 packages/mobile-ui-vue/docs/index.md create mode 100644 packages/mobile-ui-vue/docs/markdown-examples.md create mode 100644 packages/mobile-ui-vue/docs/vite.config.ts create mode 100644 packages/mobile-ui-vue/index.html create mode 100644 packages/mobile-ui-vue/package.json create mode 100644 packages/mobile-ui-vue/public/assets/demo/images/city.jpg create mode 100644 packages/mobile-ui-vue/public/assets/demo/images/ice.jpg create mode 100644 packages/mobile-ui-vue/public/assets/demo/images/leaf.jpg create mode 100644 packages/mobile-ui-vue/public/assets/demo/images/sand.jpg create mode 100644 packages/mobile-ui-vue/public/assets/demo/images/tree.jpg create mode 100644 packages/mobile-ui-vue/public/assets/farris-mobile-page.css create mode 100644 packages/mobile-ui-vue/public/vite.svg create mode 100644 packages/mobile-ui-vue/src/app.vue create mode 100644 packages/mobile-ui-vue/src/assets/vue.svg create mode 100644 packages/mobile-ui-vue/src/main.ts create mode 100644 packages/mobile-ui-vue/src/menu-data.ts create mode 100644 packages/mobile-ui-vue/src/router/index.ts create mode 100644 packages/mobile-ui-vue/src/style.css create mode 100644 packages/mobile-ui-vue/src/vite-env.d.ts create mode 100644 packages/mobile-ui-vue/tsconfig.json create mode 100644 packages/mobile-ui-vue/tsconfig.node.json create mode 100644 packages/mobile-ui-vue/upload-mock.js create mode 100644 packages/mobile-ui-vue/vite.config.ts diff --git a/.gitignore b/.gitignore index 823fa54176b..b75792848b1 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ dist-ssr # Editor directories and files .idea .DS_Store +.vscode *.suo *.ntvs* *.njsproj diff --git a/.ls-lint.yml b/.ls-lint.yml index 4e9dea31fc4..4ac1a74fcb4 100644 --- a/.ls-lint.yml +++ b/.ls-lint.yml @@ -40,6 +40,16 @@ ignore: - packages/ui-vue/package - packages/ui-vue/demos - packages/ui-vue/designer + # mobile-ui-vue + - packages/mobile-ui-vue/.vscode + - packages/mobile-ui-vue/docs/.vitepress + - packages/mobile-ui-vue/node_modules + - packages/mobile-ui-vue/dist + - packages/mobile-ui-vue/public + - packages/mobile-ui-vue/docs + - packages/mobile-ui-vue/package + - packages/mobile-ui-vue/demos + - packages/mobile-ui-vue/designer # eslint-config - packages/eslint-config/node_modules - packages/eslint-config/test diff --git a/.prettierrc b/.prettierrc index b387dad3396..bedfc16c83e 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,7 +3,7 @@ "jsxBracketSameLine": true, "jsxSingleQuote": false, "printWidth": 140, - "semi": true, + "semi": false, "useTabs": false, "trailingComma": "none", "singleQuote": true, diff --git a/lerna.json b/lerna.json index 8bd8090d93f..c599682e451 100644 --- a/lerna.json +++ b/lerna.json @@ -4,7 +4,8 @@ "packages/f-theme-editor-project", "packages/farris-theme", "packages/renderer", - "packages/ui-vue" + "packages/ui-vue", + "packages/mobile-ui-vue" ], "version": "0.0.0", "useWorkspaces": true, diff --git a/package.json b/package.json index a16cc27eb82..155a80a8dca 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ "cors": "^2.8.4", "cpy-cli": "^2.0.0", "crypto-js": "^4.2.0", - "crypto-js": "^4.2.0", "date-fns": "^2.16.1", "del-cli": "^1.1.0", "esbuild-register": "^3.3.0", @@ -102,7 +101,6 @@ "tslint": "~5.11.0", "typescript": "^4.9.5", "urlencode": "^2.0.0", - "urlencode": "^2.0.0", "vite": "^4.4.1", "vite-plugin-dts": "2.1.0", "vite-plugin-md": "^0.20.0", diff --git a/packages/farris-theme/src/assets/themes/default/default/iteration.css b/packages/farris-theme/src/assets/themes/default/default/iteration.css index 201a8e8c709..171531320b7 100644 --- a/packages/farris-theme/src/assets/themes/default/default/iteration.css +++ b/packages/farris-theme/src/assets/themes/default/default/iteration.css @@ -1 +1 @@ -@charset "UTF-8";article,aside,figcaption,figure,footer,header,hgroup,legend,main,nav,section{display:block}.dropdown-menu,.form-control,body{font-size:.8125rem}.popover,.tooltip,address{font-style:normal}.collapsing,.dropdown-divider,.modal-open,.progress,svg{overflow:hidden}img,svg{vertical-align:middle}.dropdown-menu,body,caption{text-align:left}.popover,.tooltip,button,select{text-transform:none}pre,textarea{overflow:auto}progress,sub,sup{vertical-align:baseline}label,output{display:inline-block}.close:not(:disabled):not(.disabled),.dropdown-item,.navbar-toggler:not(:disabled):not(.disabled),.page-link:not(:disabled):not(.disabled),summary{cursor:pointer}:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#2A87FF;--secondary:#6c757d;--success:#6CC77F;--info:#5EA4FF;--warning:#F5A144;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:888px;--breakpoint-xl:1200px;--breakpoint-el:1690px;--font-family-sans-serif:f-inspect(-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--font-family-monospace:f-inspect(SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;line-height:1.4286;color:#2D2F33;background-color:#fff}.f-text-monospace,code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.close,.f-alert-link,dt,kbd kbd{font-weight:700}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;line-height:inherit}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}a{color:#2A87FF;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#529DFF;text-decoration:none}a:not([href]):not([tabindex]),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}code,kbd,pre,samp{font-size:1em}pre{margin-top:0;margin-bottom:1rem;-ms-overflow-style:scrollbar}img{border-style:none}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#A8ADB8;caption-side:bottom}th{text-align:inherit}label{margin-bottom:.3125rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button [type=reset],button [type=submit],button button,button html [type=button],select [type=reset],select [type=submit],select button,select html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}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{width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}summary{display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:400;line-height:1.2;color:inherit}.blockquote,.table,hr{margin-bottom:1rem}.display-1,.display-2,.display-3,.display-4,.lead{font-weight:300}.h1,h1{font-size:1.625rem}.h2,h2{font-size:1.5rem}.h3,h3{font-size:1.375rem}.h4,h4{font-size:1.25rem}.h5,h5{font-size:1rem}.h6,h6{font-size:.875rem}.lead{font-size:1.01562rem}.display-1{font-size:6rem;line-height:1.2}.display-2{font-size:5.5rem;line-height:1.2}.display-3{font-size:4.5rem;line-height:1.2}.display-4{font-size:3.5rem;line-height:1.2}hr{box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{font-size:1.01562rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd{font-size:87.5%}.f-alert-dismissible .f-close,.f-alert-heading,.popover-header,a>code,pre code{color:inherit}code{color:#e83e8c;word-break:break-word}kbd{padding:.2rem .4rem;color:#fff;background-color:#212529;border-radius:3px;box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}.table,.table .table{background-color:#fff}kbd kbd{padding:0;font-size:100%;box-shadow:none}.container,.container-fluid{padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto;width:100%}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;word-break:normal}.pre-scrollable{max-height:21.25rem;overflow-y:scroll}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:888px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-14px;margin-left:-14px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-el,.col-el-1,.col-el-10,.col-el-11,.col-el-12,.col-el-2,.col-el-3,.col-el-4,.col-el-5,.col-el-6,.col-el-7,.col-el-8,.col-el-9,.col-el-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.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-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.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-auto{position:relative;width:100%;min-height:1px;padding-right:14px;padding-left:14px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.f-area-response [class*=col-xs]{flex:none;max-width:none}.f-area-response.f-area-response--xs .col-xs-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--xs .col-xs-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--xs .col-xs-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--xs .col-xs-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--xs .col-xs-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--xs .col-xs-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--xs .col-xs-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--xs .col-xs-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--xs .col-xs-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--xs .col-xs-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--xs .col-xs-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--xs .col-xs-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-sm-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-sm-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-sm-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-sm-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-sm-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-sm-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-sm-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-sm-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-sm-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-sm-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-sm-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-sm-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}.f-area-response [class*=col-sm]{flex:none;max-width:none}.f-area-response.f-area-response--sm .col-sm-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--sm .col-sm-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--sm .col-sm-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--sm .col-sm-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--sm .col-sm-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--sm .col-sm-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--sm .col-sm-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--sm .col-sm-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--sm .col-sm-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--sm .col-sm-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--sm .col-sm-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--sm .col-sm-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-md-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-md-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-md-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-md-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-md-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-md-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-md-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-md-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-md-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-md-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-md-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-md-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}.f-area-response [class*=col-md]{flex:none;max-width:none}.f-area-response.f-area-response--md .col-md-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--md .col-md-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--md .col-md-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--md .col-md-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--md .col-md-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--md .col-md-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--md .col-md-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--md .col-md-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--md .col-md-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--md .col-md-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--md .col-md-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--md .col-md-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:888px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-lg-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-lg-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-lg-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-lg-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-lg-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-lg-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-lg-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-lg-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-lg-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-lg-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-lg-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-lg-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}.f-area-response [class*=col-lg]{flex:none;max-width:none}.f-area-response.f-area-response--lg .col-lg-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--lg .col-lg-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--lg .col-lg-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--lg .col-lg-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--lg .col-lg-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--lg .col-lg-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--lg .col-lg-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--lg .col-lg-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--lg .col-lg-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--lg .col-lg-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--lg .col-lg-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--lg .col-lg-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-xl-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-xl-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-xl-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-xl-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-xl-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-xl-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-xl-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-xl-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-xl-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-xl-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-xl-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-xl-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.f-area-response [class*=col-xl]{flex:none;max-width:none}.f-area-response.f-area-response--xl .col-xl-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--xl .col-xl-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--xl .col-xl-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--xl .col-xl-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--xl .col-xl-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--xl .col-xl-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--xl .col-xl-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--xl .col-xl-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--xl .col-xl-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--xl .col-xl-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--xl .col-xl-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--xl .col-xl-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:1690px){.col-el{flex-basis:0;flex-grow:1;max-width:100%}.col-el-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-el-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-el-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-el-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-el-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-el-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-el-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-el-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-el-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-el-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-el-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-el-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-el-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-el-first{order:-1}.order-el-last{order:13}.order-el-0{order:0}.order-el-1{order:1}.order-el-2{order:2}.order-el-3{order:3}.order-el-4{order:4}.order-el-5{order:5}.order-el-6{order:6}.order-el-7{order:7}.order-el-8{order:8}.order-el-9{order:9}.order-el-10{order:10}.order-el-11{order:11}.order-el-12{order:12}.offset-el-0{margin-left:0}.offset-el-1{margin-left:8.33333%}.offset-el-2{margin-left:16.66667%}.offset-el-3{margin-left:25%}.offset-el-4{margin-left:33.33333%}.offset-el-5{margin-left:41.66667%}.offset-el-6{margin-left:50%}.offset-el-7{margin-left:58.33333%}.offset-el-8{margin-left:66.66667%}.offset-el-9{margin-left:75%}.offset-el-10{margin-left:83.33333%}.offset-el-11{margin-left:91.66667%}}.f-area-response [class*=col-el]{flex:none;max-width:none}.f-area-response.f-area-response--el .col-el-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--el .col-el-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--el .col-el-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--el .col-el-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--el .col-el-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--el .col-el-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--el .col-el-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--el .col-el-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--el .col-el-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--el .col-el-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--el .col-el-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--el .col-el-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.table{width:100%}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #EAECF3}.table thead th{vertical-align:middle;border-bottom:2px solid #EAECF3}.table tbody+tbody{border-top:2px solid #EAECF3}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #EAECF3}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(even){background-color:#F7F8FB}.table-hover tbody tr:hover{background-color:#EDF5FF}.table-primary,.table-primary>td,.table-primary>th{background-color:#c3ddff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#aacfff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#d6efdb}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#c4e8cb}.table-info,.table-info>td,.table-info>th{background-color:#d2e6ff}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b9d8ff}.table-warning,.table-warning>td,.table-warning>th{background-color:#fce5cb}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fbd9b3}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:#EDF5FF}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#d4e7ff}.table .thead-dark th{color:#fff;background-color:#212529;border-color:f-color-offset(#212529,7.5%,"lighten")}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#EAECF3}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:f-color-offset(#212529,7.5%,"lighten")}.table-dark.table-bordered,.table-responsive>.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:887.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}@media (max-width:1689.98px){.table-responsive-el{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-el>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.form-control{display:block;width:100%;height:calc(1.5rem + .125rem);padding:.1875rem .5rem;line-height:1.4286;color:#2D2F33;background-color:#fff;background-clip:padding-box;border:1px solid #D8DCE6;border-radius:3px;box-shadow:0 0 0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#2D2F33;background-color:#fff;border-color:#529DFF;outline:0;box-shadow:0 0 0,0 0 4px 2px rgba(82,157,255,.12)}.form-control::-moz-placeholder{color:#B4BCCC;opacity:1}.form-control::placeholder{color:#B4BCCC;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#fff;opacity:1}select.form-control:focus::-ms-value{color:#2D2F33;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.1875rem + 1px);padding-bottom:calc(.1875rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.4286}.col-form-label-lg{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.4286}.col-form-label-sm{padding-top:calc(.125rem + 1px);padding-bottom:calc(.125rem + 1px);font-size:.75rem;line-height:1.4286}.form-control-plaintext{display:block;width:100%;padding-top:.1875rem;padding-bottom:.1875rem;margin-bottom:0;line-height:1.4286;color:#000;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-lg,.form-control-sm{line-height:1.4286;border-radius:3px}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.32145rem + 1px);padding:.125rem .4375rem;font-size:.75rem}.form-control-lg{height:calc(1.75003rem + 1px);padding:.25rem .3125rem;font-size:.875rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:.375rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-.3125rem;margin-left:-.3125rem}.form-row>.col,.form-row>[class*=col-]{padding-right:.3125rem;padding-left:.3125rem}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#A8ADB8}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.invalid-tooltip,.valid-tooltip{max-width:100%;padding:.5rem .625rem;line-height:1.4286;border-radius:3px;top:100%}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#6CC77F}.valid-tooltip{position:absolute;z-index:5;display:none;margin-top:.1rem;font-size:.75rem;color:#212529;background-color:#6cc77f}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.form-check-input.is-valid~.form-check-label,.was-validated .custom-control-input:valid~.custom-control-label,.was-validated .form-check-input:valid~.form-check-label{color:#6CC77F}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#6CC77F}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#6CC77F;box-shadow:0 0 0 .2rem rgba(108,199,127,.25)}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#c8eacf}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#91d59f}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(108,199,127,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#6CC77F}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(108,199,127,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;z-index:5;display:none;margin-top:.1rem;font-size:.75rem;color:#fff;background-color:#dc3545}.collapsing,.dropdown,.dropdown-left,.dropleft,.dropleft-up,.dropright,.dropright-up,.dropup,.dropup-left{position:relative}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.form-check-input.is-invalid~.form-check-label,.was-validated .custom-control-input:invalid~.custom-control-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex-grow:0;flex-shrink:0;flex-basis:auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.125rem;vertical-align:.125rem;content:"";border-top:.25rem solid;border-right:.25rem solid transparent;border-bottom:0;border-left:.25rem solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:300;display:none;float:left;min-width:10rem;padding:.25rem;margin:.25rem 0 0;color:#2D2F33;background-color:#fff;background-clip:padding-box;border:0 solid rgba(0,0,0,.15);border-radius:3px;box-shadow:0 2px 8px 0 rgba(0,0,0,.15)}.dropup .dropdown-toggle::after,.dropup-left .dropdown-toggle::after{display:inline-block;width:0;height:0;vertical-align:.125rem;content:"";border-top:0;border-right:.25rem solid transparent;border-bottom:.25rem solid;border-left:.25rem solid transparent}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.25rem}.dropup .dropdown-toggle::after{margin-left:.125rem}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropup-left .dropdown-menu{top:auto;right:0;left:auto;bottom:100%;margin-top:0;margin-bottom:.25rem}.dropup-left .dropdown-toggle::after{margin-left:.125rem}.dropright .dropdown-toggle::after,.dropright-up .dropdown-toggle::after{display:inline-block;width:0;height:0;content:"";border-top:.25rem solid transparent;border-right:0;border-left:.25rem solid;vertical-align:0}.dropup-left .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.25rem}.dropright .dropdown-toggle::after{margin-left:.125rem;border-bottom:.25rem solid transparent}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright-up .dropdown-menu{top:auto;right:auto;left:100%;bottom:0;margin-top:0;margin-left:.25rem}.dropright-up .dropdown-toggle::after{margin-left:.125rem;border-bottom:.25rem solid transparent}.dropleft .dropdown-toggle::before,.dropleft-up .dropdown-toggle::before{width:0;content:"";border-top:.25rem solid transparent;border-right:.25rem solid;border-bottom:.25rem solid transparent;height:0}.dropright-up .dropdown-toggle:empty::after{margin-left:0}.dropleft-up .dropdown-menu{top:auto;right:100%;left:auto;bottom:0;margin-top:0;margin-bottom:.25rem}.dropleft-up .dropdown-toggle::after{width:0;height:0;margin-left:.125rem;vertical-align:.125rem;content:"";display:none}.dropleft-up .dropdown-toggle::before{display:inline-block;margin-right:.125rem;vertical-align:0}.dropleft-up .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.25rem}.dropleft .dropdown-toggle::after{width:0;height:0;margin-left:.125rem;vertical-align:.125rem;content:"";display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.125rem;vertical-align:0}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropdown-menu[x-placement^=top],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:null 0;border-top:1px solid #E6E9F0}.dropdown-item{display:block;line-height:1.25rem;padding:.25rem .5rem;clear:both;font-weight:400;color:#5A5E66;text-align:inherit;white-space:nowrap;background-color:transparent;border:0;border-radius:3px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after,.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child),.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-item:focus,.dropdown-item:hover{color:#2D2F33;text-decoration:none;background-color:#EDF5FF}.dropdown-item.active,.dropdown-item:active{color:#2D2F33;text-decoration:none;background-color:#DAE9FF}.dropdown-item.disabled,.dropdown-item:disabled{color:#B4BCCC;background-color:transparent;cursor:default}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.25rem .5rem;margin-bottom:0;font-size:.75rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem .5rem;color:#5A5E66}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex-grow:0;flex-shrink:1;flex-basis:auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.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:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.dropdown-toggle-split{padding-right:.65625rem;padding-left:.65625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropright-top .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropup-left .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before,.dropleft-up .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.84375rem;padding-left:.84375rem}.btn-group.show .dropdown-toggle{box-shadow:0 1px 0 0 rgba(31,35,41,.12)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.input-group,.nav,.navbar{flex-wrap:wrap}.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}.input-group-append,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text,.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.page-link{margin-left:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;flex-grow:1;flex-shrink:1;flex-basis:0;width:1%;margin-bottom:0}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-file{display:flex;align-items:center}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-prepend{margin-right:-1px}.input-group-text{display:flex;align-items:center;padding:.1875rem .5rem;margin-bottom:0;font-size:.8125rem;font-weight:400;line-height:1.4286;color:#2D2F33;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #D8DCE6;border-radius:3px}.input-group-text input[type=radio],.input-group-text input[type=checkbox]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(1.75003rem + 1px);padding:.25rem .3125rem;font-size:.875rem;line-height:1.4286;border-radius:3px}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.32145rem + 1px);padding:.125rem .4375rem;font-size:.75rem;line-height:1.4286;border-radius:3px}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.16074rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#2A87FF;background-color:#fff;box-shadow:none}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12);color:#2A87FF}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:f-color-offset(#2A87FF,35%,"lighten");box-shadow:none}.custom-checkbox .custom-control-input:checked~.custom-control-label::before,.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before,.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before,.custom-control-input:disabled~.custom-control-label::before,.custom-control-label::before,.custom-radio .custom-control-input:checked~.custom-control-label::before,.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:#fff}.custom-control-input:disabled~.custom-control-label{color:#E6E9F0}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::after,.custom-control-label::before{position:absolute;top:.08037rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label::before{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;box-shadow:0 0 0}.custom-control-label::after{background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:3px}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:none}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{box-shadow:none}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:none}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:none}.custom-select{display:inline-block;width:100%;height:calc(1.5rem + .125rem);padding:.1875rem 1.5rem .1875rem .5rem;line-height:1.4286;color:#2D2F33;vertical-align:middle;background:f-str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") ,"#","%23") right .5rem center no-repeat #fff;background-size:.5rem .625rem;border:1px solid #D8DCE6;border-radius:3px;box-shadow:0 0 0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select-lg,.custom-select-sm{padding-top:.1875rem;padding-bottom:.1875rem}.custom-select:focus{border-color:#529DFF;outline:0;box-shadow:0 0 0,0 0 4px 2px rgba(82,157,255,.12)}.custom-select:focus::-ms-value{color:#2D2F33;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.5rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-file-input:disabled~.custom-file-label,.custom-file-label{background-color:#fff}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.32145rem + 1px);font-size:75%}.custom-select-lg{height:calc(1.75003rem + 1px);font-size:125%}.custom-file,.custom-file-input,.custom-file-label{height:calc(1.5rem + .125rem)}.custom-file-label,.custom-file-label::after{padding:.1875rem .5rem;color:#2D2F33;right:0;line-height:1.4286}.custom-file{position:relative;display:inline-block;width:100%;margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#529DFF;box-shadow:0 0 4px 2px rgba(82,157,255,.12)}.custom-file-input:focus~.custom-file-label::after{border-color:#529DFF}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;left:0;z-index:1;border:1px solid #D8DCE6;border-radius:3px;box-shadow:0 0 0}.custom-file-label::after{position:absolute;top:0;bottom:0;z-index:3;display:block;height:1.5rem;content:"Browse";background-color:#e9ecef;border-left:1px solid #D8DCE6;border-radius:0 3px 3px 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#2A87FF;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:f-color-offset(#2A87FF,35%,"lighten")}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#2A87FF;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:f-color-offset(#2A87FF,35%,"lighten")}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#2A87FF;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:f-color-offset(#2A87FF,35%,"lighten")}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:.9375rem;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;padding-left:0;margin-bottom:0;list-style:none}.nav-link,.navbar{padding:.5rem 1rem}.nav-link{display:block}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background:#2A87FF}.nav-fill .nav-item{flex-grow:1;flex-shrink:1;flex-basis:auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;align-items:center;justify-content:space-between}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.45536rem;padding-bottom:.45536rem;margin-right:1rem;font-size:.875rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:.875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:3px}.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:center center no-repeat;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:887.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:888px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (max-width:1689.98px){.navbar-expand-el>.container,.navbar-expand-el>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1690px){.navbar-expand-el{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-el .navbar-nav{flex-direction:row}.navbar-expand-el .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-el .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-el>.container,.navbar-expand-el>.container-fluid{flex-wrap:nowrap}.navbar-expand-el .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-el .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.modal,.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:f-str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' 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 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") ,"#","%23")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:f-str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' 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 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") ,"#","%23")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:3px}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.card-body{flex-grow:1;flex-shrink:1;flex-basis:auto;padding:1.25rem}.card-footer,.card-header{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03)}.card-title{margin-bottom:.75rem}.card-header,.card-subtitle,.card-text:last-child{margin-bottom:0}.card-subtitle{margin-top:-.375rem}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-header{border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(3px - 1px) calc(3px - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(3px - 1px) calc(3px - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(3px - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(3px - 1px);border-top-right-radius:calc(3px - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(3px - 1px);border-bottom-left-radius:calc(3px - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:14px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-14px;margin-left:-14px}.card-deck .card{display:flex;flex-grow:1;flex-shrink:0;flex-basis:0%;flex-direction:column;margin-right:14px;margin-bottom:0;margin-left:14px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:14px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex-grow:1;flex-shrink:0;flex-basis:0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:3px}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:3px;border-top-right-radius:3px}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.card-columns .card{margin-bottom:.75rem}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.pagination,.progress{border-radius:3px;display:flex}.pagination{padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:.1875rem;line-height:1rem;color:#2D2F33;background-color:#fff;border:1px solid #EAECF3}.page-item:first-child .page-link,.pagination-lg .f-page-item:first-child .f-page-link,.pagination-sm .f-page-item:first-child .f-page-link{border-top-left-radius:3px;border-bottom-left-radius:3px}.page-item:last-child .page-link,.pagination-lg .f-page-item:last-child .f-page-link,.pagination-sm .f-page-item:last-child .f-page-link{border-top-right-radius:3px;border-bottom-right-radius:3px}.page-link:hover{z-index:2;color:#529DFF;text-decoration:none;background-color:#fff;border-color:#529DFF}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 4px 2px rgba(82,157,255,.12)}.page-item:first-child .page-link{margin-left:0}.page-item.active .page-link{z-index:1;color:#2A87FF;background:#EFF5FF!important;border-color:#EFF5FF}.page-item.disabled .page-link{color:#878D99;pointer-events:none;cursor:auto;background:#F4F5F9;border-color:#DEE1EA;box-shadow:none}.pagination-lg .f-page-link{font-size:.875rem;line-height:1.5;padding:.75rem}.pagination-sm .f-page-link{font-size:.75rem;line-height:1.5;padding:.1875rem}.f-alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:3px}.f-alert-dismissible{padding-right:3.71875rem}.f-alert-dismissible .f-close{position:absolute;top:0;right:0;padding:.75rem 1.25rem}.alert-primary{background-color:#d4e7ff;border-color:#c3ddff;color:#164685}.alert-primary .f-alert-link{color:#0f2f59}.alert-primary hr{border-top-color:#aacfff}.alert-secondary{background-color:#e2e3e5;border-color:#d6d8db;color:#383d41}.alert-secondary .f-alert-link{color:#202326}.alert-secondary hr{border-top-color:#c8cbcf}.alert-success{background-color:#e2f4e5;border-color:#d6efdb;color:#386742}.alert-success .f-alert-link{color:#26462d}.alert-success hr{border-top-color:#c4e8cb}.alert-info{background-color:#dfedff;border-color:#d2e6ff;color:#315585}.alert-info .f-alert-link{color:#233d60}.alert-info hr{border-top-color:#b9d8ff}.alert-warning{background-color:#fdecda;border-color:#fce5cb;color:#7f5423}.alert-warning .f-alert-link{color:#573a18}.alert-warning hr{border-top-color:#fbd9b3}.alert-danger{background-color:#f8d7da;border-color:#f5c6cb;color:#721c24}.alert-danger .f-alert-link{color:#491217}.alert-danger hr{border-top-color:#f1b0b7}.alert-light{background-color:#fefefe;border-color:#fdfdfe;color:#818182}.alert-light .f-alert-link{color:#686868}.alert-light hr{border-top-color:#ececf6}.alert-dark{background-color:#d6d8d9;border-color:#c6c8ca;color:#1b1e21}.alert-dark .f-alert-link{color:#040505}.alert-dark hr{border-top-color:#b9bbbe}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;font-size:.60938rem;background-color:#e9ecef;box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#2A87FF;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.25),transparent 25%,transparent 50%,rgba(255,255,255,.5),rgba(255,255,255,.75),transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex-grow:1;flex-shrink:1;flex-basis:0%}.f-list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.f-list-group-item-action{width:100%;color:#495057;text-align:inherit}.f-list-group-item-action:focus,.f-list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.f-list-group-item-action:active{color:#2D2F33;background-color:#e9ecef}.f-list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.f-list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.f-list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.f-list-group-item:focus,.f-list-group-item:hover{z-index:1;text-decoration:none}.f-list-group-item.disabled,.f-list-group-item:disabled{color:#6c757d;background-color:#fff}.f-list-group-item.active{z-index:2;color:#fff;background-color:#2A87FF;border-color:#2A87FF}.f-list-group-flush .f-list-group-item{border-right:0;border-left:0;border-radius:0}.f-list-group-flush:first-child .f-list-group-item:first-child{border-top:0}.f-list-group-flush:last-child .f-list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#164685;background-color:#c3ddff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#164685;background-color:#aacfff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#164685;border-color:#164685}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#386742;background-color:#d6efdb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#386742;background-color:#c4e8cb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#386742;border-color:#386742}.list-group-item-info{color:#315585;background-color:#d2e6ff}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#315585;background-color:#b9d8ff}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#315585;border-color:#315585}.list-group-item-warning{color:#7f5423;background-color:#fce5cb}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#7f5423;background-color:#fbd9b3}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7f5423;border-color:#7f5423}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.21875rem;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.popover,.tooltip{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;text-decoration:none;letter-spacing:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.75rem;word-wrap:break-word}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:translate(0,0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:0 solid #E5E9EF;border-radius:3px;box-shadow:0 .125rem .75rem rgba(0,0,0,.06);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:.15}.modal-title{margin-bottom:0;line-height:1.375rem}.modal-body{position:relative;flex-grow:1;flex-shrink:1;flex-basis:auto;padding:.625rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:3.125rem;height:3.125rem;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:31.25rem;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-content{box-shadow:0 .125rem .75rem 0 rgba(0,0,0,.06)}.modal-sm{max-width:18.75rem}}@media (min-width:888px){.modal-lg{max-width:50rem}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;line-height:1.4286;text-align:left;text-align:start;text-shadow:none;word-break:normal;opacity:0}.tooltip.show{opacity:1}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.f-bs-tooltip-auto[x-placement^=top],.f-bs-tooltip-top{padding:.4rem 0}.f-bs-tooltip-auto[x-placement^=top] .arrow,.f-bs-tooltip-top .arrow{bottom:0}.f-bs-tooltip-auto[x-placement^=top] .arrow::before,.f-bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#303C53}.f-bs-tooltip-auto[x-placement^=right],.f-bs-tooltip-right{padding:0 .4rem}.f-bs-tooltip-auto[x-placement^=right] .arrow,.f-bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.f-bs-tooltip-auto[x-placement^=right] .arrow::before,.f-bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#303C53}.f-bs-tooltip-auto[x-placement^=bottom],.f-bs-tooltip-bottom{padding:.4rem 0}.f-bs-tooltip-auto[x-placement^=bottom] .arrow,.f-bs-tooltip-bottom .arrow{top:0}.f-bs-tooltip-auto[x-placement^=bottom] .arrow::before,.f-bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#303C53}.f-bs-tooltip-auto[x-placement^=left],.f-bs-tooltip-left{padding:0 .4rem}.f-bs-tooltip-auto[x-placement^=left] .arrow,.f-bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.f-bs-tooltip-auto[x-placement^=left] .arrow::before,.f-bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#303C53}.tooltip-inner{max-width:18.75rem;max-height:6.25rem;overflow:hidden;padding:.5rem .625rem;color:#fff;text-align:left;background-color:#303C53;box-shadow:0 2px 8px 0 rgba(0,0,0,.15);border-radius:3px}.tooltip-inner-lg{max-width:37.5rem;max-height:initial;overflow:initial}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;line-height:1.4286;text-align:left;text-align:start;text-shadow:none;word-break:normal;background-color:#fff;background-clip:padding-box;border:1px solid #fff;border-radius:4px;box-shadow:0 2px 8px 0 rgba(0,32,74,.15)}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 3px}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.f-bs-popover-auto[x-placement^=top],.f-bs-popover-top{margin-bottom:.5rem}.f-bs-popover-auto[x-placement^=top] .arrow,.f-bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.f-bs-popover-auto[x-placement^=top] .arrow::after,.f-bs-popover-auto[x-placement^=top] .arrow::before,.f-bs-popover-top .arrow::after,.f-bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.f-bs-popover-auto[x-placement^=top] .arrow::before,.f-bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=top] .arrow::after,.f-bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.f-bs-popover-auto[x-placement^=right],.f-bs-popover-right{margin-left:.5rem}.f-bs-popover-auto[x-placement^=right] .arrow,.f-bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:3px 0}.f-bs-popover-auto[x-placement^=right] .arrow::after,.f-bs-popover-auto[x-placement^=right] .arrow::before,.f-bs-popover-right .arrow::after,.f-bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.f-bs-popover-auto[x-placement^=right] .arrow::before,.f-bs-popover-right .arrow::before{left:0;border-right-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=right] .arrow::after,.f-bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.f-bs-popover-auto[x-placement^=bottom],.f-bs-popover-bottom{margin-top:.5rem}.f-bs-popover-auto[x-placement^=bottom] .arrow,.f-bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.f-bs-popover-auto[x-placement^=bottom] .arrow::after,.f-bs-popover-auto[x-placement^=bottom] .arrow::before,.f-bs-popover-bottom .arrow::after,.f-bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem}.f-bs-popover-auto[x-placement^=bottom] .arrow::before,.f-bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=bottom] .arrow::after,.f-bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.f-bs-popover-auto[x-placement^=bottom] .popover-header::before,.f-bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.f-bs-popover-auto[x-placement^=left],.f-bs-popover-left{margin-right:.5rem}.f-bs-popover-auto[x-placement^=left] .arrow,.f-bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:3px 0}.f-bs-popover-auto[x-placement^=left] .arrow::after,.f-bs-popover-auto[x-placement^=left] .arrow::before,.f-bs-popover-left .arrow::after,.f-bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.f-bs-popover-auto[x-placement^=left] .arrow::before,.f-bs-popover-left .arrow::before{right:0;border-left-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=left] .arrow::after,.f-bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.8125rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(3px - 1px);border-top-right-radius:calc(3px - 1px)}.popover-header:empty{display:none}.popover-body{max-width:17.25rem;padding:.5rem .75rem;color:#2D2F33}.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-primary{background-color:#2A87FF!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#006bf6!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#6CC77F!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#47b95f!important}.bg-info{background-color:#5EA4FF!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#2b87ff!important}.bg-warning{background-color:#F5A144!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#f28914!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #E6E9F0!important}.border-top{border-top:1px solid #E6E9F0!important}.border-right{border-right:1px solid #E6E9F0!important}.border-bottom{border-bottom:1px solid #E6E9F0!important}.border-left{border-left:1px solid #E6E9F0!important}.border-0{border:0!important}.rounded-right,.rounded-top{border-top-right-radius:3px!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:3px!important}.rounded-left,.rounded-top{border-top-left-radius:3px!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:3px!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}.border-primary{border-color:#2A87FF!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#6CC77F!important}.border-info{border-color:#5EA4FF!important}.border-warning{border-color:#F5A144!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:3px!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.f-clearfix::after{display:block;clear:both;content:""}.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-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-top{top:0}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}.f-text-justify{text-align:justify!important}.f-text-nowrap{white-space:nowrap!important}.f-text-overflow{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){.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-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}.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){.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-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:888px){.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-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}.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){.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-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1690px){.d-el-none{display:none!important}.d-el-inline{display:inline!important}.d-el-inline-block{display:inline-block!important}.d-el-block{display:block!important}.d-el-table{display:table!important}.d-el-table-row{display:table-row!important}.d-el-table-cell{display:table-cell!important}.d-el-flex{display:flex!important}.d-el-inline-flex{display:inline-flex!important}.flex-el-row{flex-direction:row!important}.flex-el-column{flex-direction:column!important}.flex-el-row-reverse{flex-direction:row-reverse!important}.flex-el-column-reverse{flex-direction:column-reverse!important}.flex-el-wrap{flex-wrap:wrap!important}.flex-el-nowrap{flex-wrap:nowrap!important}.flex-el-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-el-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-el-grow-0{flex-grow:0!important}.flex-el-grow-1{flex-grow:1!important}.flex-el-shrink-0{flex-shrink:0!important}.flex-el-shrink-1{flex-shrink:1!important}.justify-content-el-start{justify-content:flex-start!important}.justify-content-el-end{justify-content:flex-end!important}.justify-content-el-center{justify-content:center!important}.justify-content-el-between{justify-content:space-between!important}.justify-content-el-around{justify-content:space-around!important}.align-items-el-start{align-items:flex-start!important}.align-items-el-end{align-items:flex-end!important}.align-items-el-center{align-items:center!important}.align-items-el-baseline{align-items:baseline!important}.align-items-el-stretch{align-items:stretch!important}.align-content-el-start{align-content:flex-start!important}.align-content-el-end{align-content:flex-end!important}.align-content-el-center{align-content:center!important}.align-content-el-between{align-content:space-between!important}.align-content-el-around{align-content:space-around!important}.align-content-el-stretch{align-content:stretch!important}.align-self-el-auto{align-self:auto!important}.align-self-el-start{align-self:flex-start!important}.align-self-el-end{align-self:flex-end!important}.align-self-el-center{align-self:center!important}.align-self-el-baseline{align-self:baseline!important}.align-self-el-stretch{align-self:stretch!important}.float-el-left{float:left!important}.float-el-right{float:right!important}.float-el-none{float:none!important}.m-el-0{margin:0!important}.mt-el-0,.my-el-0{margin-top:0!important}.mr-el-0,.mx-el-0{margin-right:0!important}.mb-el-0,.my-el-0{margin-bottom:0!important}.ml-el-0,.mx-el-0{margin-left:0!important}.m-el-1{margin:.25rem!important}.mt-el-1,.my-el-1{margin-top:.25rem!important}.mr-el-1,.mx-el-1{margin-right:.25rem!important}.mb-el-1,.my-el-1{margin-bottom:.25rem!important}.ml-el-1,.mx-el-1{margin-left:.25rem!important}.m-el-2{margin:.5rem!important}.mt-el-2,.my-el-2{margin-top:.5rem!important}.mr-el-2,.mx-el-2{margin-right:.5rem!important}.mb-el-2,.my-el-2{margin-bottom:.5rem!important}.ml-el-2,.mx-el-2{margin-left:.5rem!important}.m-el-3{margin:1rem!important}.mt-el-3,.my-el-3{margin-top:1rem!important}.mr-el-3,.mx-el-3{margin-right:1rem!important}.mb-el-3,.my-el-3{margin-bottom:1rem!important}.ml-el-3,.mx-el-3{margin-left:1rem!important}.m-el-4{margin:1.5rem!important}.mt-el-4,.my-el-4{margin-top:1.5rem!important}.mr-el-4,.mx-el-4{margin-right:1.5rem!important}.mb-el-4,.my-el-4{margin-bottom:1.5rem!important}.ml-el-4,.mx-el-4{margin-left:1.5rem!important}.m-el-5{margin:3rem!important}.mt-el-5,.my-el-5{margin-top:3rem!important}.mr-el-5,.mx-el-5{margin-right:3rem!important}.mb-el-5,.my-el-5{margin-bottom:3rem!important}.ml-el-5,.mx-el-5{margin-left:3rem!important}.p-el-0{padding:0!important}.pt-el-0,.py-el-0{padding-top:0!important}.pr-el-0,.px-el-0{padding-right:0!important}.pb-el-0,.py-el-0{padding-bottom:0!important}.pl-el-0,.px-el-0{padding-left:0!important}.p-el-1{padding:.25rem!important}.pt-el-1,.py-el-1{padding-top:.25rem!important}.pr-el-1,.px-el-1{padding-right:.25rem!important}.pb-el-1,.py-el-1{padding-bottom:.25rem!important}.pl-el-1,.px-el-1{padding-left:.25rem!important}.p-el-2{padding:.5rem!important}.pt-el-2,.py-el-2{padding-top:.5rem!important}.pr-el-2,.px-el-2{padding-right:.5rem!important}.pb-el-2,.py-el-2{padding-bottom:.5rem!important}.pl-el-2,.px-el-2{padding-left:.5rem!important}.p-el-3{padding:1rem!important}.pt-el-3,.py-el-3{padding-top:1rem!important}.pr-el-3,.px-el-3{padding-right:1rem!important}.pb-el-3,.py-el-3{padding-bottom:1rem!important}.pl-el-3,.px-el-3{padding-left:1rem!important}.p-el-4{padding:1.5rem!important}.pt-el-4,.py-el-4{padding-top:1.5rem!important}.pr-el-4,.px-el-4{padding-right:1.5rem!important}.pb-el-4,.py-el-4{padding-bottom:1.5rem!important}.pl-el-4,.px-el-4{padding-left:1.5rem!important}.p-el-5{padding:3rem!important}.pt-el-5,.py-el-5{padding-top:3rem!important}.pr-el-5,.px-el-5{padding-right:3rem!important}.pb-el-5,.py-el-5{padding-bottom:3rem!important}.pl-el-5,.px-el-5{padding-left:3rem!important}.m-el-auto{margin:auto!important}.mt-el-auto,.my-el-auto{margin-top:auto!important}.mr-el-auto,.mx-el-auto{margin-right:auto!important}.mb-el-auto,.my-el-auto{margin-bottom:auto!important}.ml-el-auto,.mx-el-auto{margin-left:auto!important}.text-el-left{text-align:left!important}.text-el-right{text-align:right!important}.text-el-center{text-align:center!important}}.f-text-lowercase{text-transform:lowercase!important}.f-text-uppercase{text-transform:uppercase!important}.f-text-capitalize{text-transform:capitalize!important}.f-font-weight-light{font-weight:300!important}.f-font-weight-normal{font-weight:400!important}.f-font-weight-bold{font-weight:700!important}.f-font-italic{font-style:italic!important}.f-text-white{color:#fff!important}.text-primary{color:#2A87FF!important}a.text-primary:focus,a.text-primary:hover{color:#006bf6!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#6CC77F!important}a.text-success:focus,a.text-success:hover{color:#47b95f!important}.text-info{color:#5EA4FF!important}a.text-info:focus,a.text-info:hover{color:#2b87ff!important}.text-warning{color:#F5A144!important}a.text-warning:focus,a.text-warning:hover{color:#f28914!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.f-text-body{color:#2D2F33!important}.f-text-muted{color:#A8ADB8!important}.f-text-black-50{color:rgba(0,0,0,.5)!important}.f-text-white-50{color:rgba(255,255,255,.5)!important}.f-text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}blockquote,img,pre,tr{page-break-inside:avoid}*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" f-attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd}thead{display:table-header-group}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.container,body{min-width:888px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#EAECF3}.table .thead-dark th{color:inherit;border-color:#EAECF3}} \ No newline at end of file +@charset "UTF-8";article,aside,figcaption,figure,footer,header,hgroup,legend,main,nav,section{display:block}.dropdown-menu,.form-control,body{font-size:.8125rem}.popover,.tooltip,address{font-style:normal}.collapsing,.dropdown-divider,.modal-open,.progress,svg{overflow:hidden}img,svg{vertical-align:middle}.dropdown-menu,body,caption{text-align:left}.popover,.tooltip,button,select{text-transform:none}pre,textarea{overflow:auto}progress,sub,sup{vertical-align:baseline}label,output{display:inline-block}.close:not(:disabled):not(.disabled),.dropdown-item,.navbar-toggler:not(:disabled):not(.disabled),.page-link:not(:disabled):not(.disabled),summary{cursor:pointer}:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#2A87FF;--secondary:#6c757d;--success:#6CC77F;--info:#5EA4FF;--warning:#F5A144;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:888px;--breakpoint-xl:1200px;--breakpoint-el:1690px;--font-family-sans-serif:f-inspect(-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");--font-family-monospace:f-inspect(SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace)}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;line-height:1.4286;color:#2D2F33;background-color:#fff}.f-text-monospace,code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.close,.f-alert-link,dt,kbd kbd{font-weight:700}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}dl,ol,p,ul{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;line-height:inherit}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dd{margin-bottom:.5rem;margin-left:0}blockquote,figure{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0}sub{bottom:-.25em}sup{top:-.5em}a{color:#2A87FF;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#529DFF;text-decoration:none}a:not([href]):not([tabindex]),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}code,kbd,pre,samp{font-size:1em}pre{margin-top:0;margin-bottom:1rem;-ms-overflow-style:scrollbar}img{border-style:none}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#A8ADB8;caption-side:bottom}th{text-align:inherit}label{margin-bottom:.3125rem}button{border-radius:0}button:focus{outline:dotted 1px;outline:-webkit-focus-ring-color auto 5px}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button [type=reset],button [type=submit],button button,button html [type=button],select [type=reset],select [type=submit],select button,select html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}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{width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}summary{display:list-item}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:400;line-height:1.2;color:inherit}.blockquote,.table,hr{margin-bottom:1rem}.display-1,.display-2,.display-3,.display-4,.lead{font-weight:300}.h1,h1{font-size:1.625rem}.h2,h2{font-size:1.5rem}.h3,h3{font-size:1.375rem}.h4,h4{font-size:1.25rem}.h5,h5{font-size:1rem}.h6,h6{font-size:.875rem}.lead{font-size:1.01563rem}.display-1{font-size:6rem;line-height:1.2}.display-2{font-size:5.5rem;line-height:1.2}.display-3{font-size:4.5rem;line-height:1.2}.display-4{font-size:3.5rem;line-height:1.2}hr{box-sizing:content-box;height:0;overflow:visible;margin-top:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{font-size:1.01563rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:3px;box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd{font-size:87.5%}.f-alert-dismissible .f-close,.f-alert-heading,.popover-header,a>code,pre code{color:inherit}code{color:#e83e8c;word-break:break-word}kbd{padding:.2rem .4rem;color:#fff;background-color:#212529;border-radius:3px;box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}.table,.table .table{background-color:#fff}kbd kbd{padding:0;font-size:100%;box-shadow:none}.container,.container-fluid{padding-right:14px;padding-left:14px;margin-right:auto;margin-left:auto;width:100%}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;word-break:normal}.pre-scrollable{max-height:21.25rem;overflow-y:scroll}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:888px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-14px;margin-left:-14px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-el,.col-el-1,.col-el-10,.col-el-11,.col-el-12,.col-el-2,.col-el-3,.col-el-4,.col-el-5,.col-el-6,.col-el-7,.col-el-8,.col-el-9,.col-el-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.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-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.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-auto{position:relative;width:100%;min-height:1px;padding-right:14px;padding-left:14px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.f-area-response [class*=col-xs]{flex:none;max-width:none}.f-area-response.f-area-response--xs .col-xs-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--xs .col-xs-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--xs .col-xs-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--xs .col-xs-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--xs .col-xs-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--xs .col-xs-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--xs .col-xs-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--xs .col-xs-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--xs .col-xs-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--xs .col-xs-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--xs .col-xs-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--xs .col-xs-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-sm-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-sm-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-sm-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-sm-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-sm-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-sm-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-sm-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-sm-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-sm-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-sm-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-sm-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-sm-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}.f-area-response [class*=col-sm]{flex:none;max-width:none}.f-area-response.f-area-response--sm .col-sm-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--sm .col-sm-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--sm .col-sm-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--sm .col-sm-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--sm .col-sm-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--sm .col-sm-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--sm .col-sm-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--sm .col-sm-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--sm .col-sm-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--sm .col-sm-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--sm .col-sm-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--sm .col-sm-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-md-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-md-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-md-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-md-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-md-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-md-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-md-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-md-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-md-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-md-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-md-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-md-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}.f-area-response [class*=col-md]{flex:none;max-width:none}.f-area-response.f-area-response--md .col-md-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--md .col-md-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--md .col-md-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--md .col-md-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--md .col-md-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--md .col-md-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--md .col-md-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--md .col-md-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--md .col-md-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--md .col-md-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--md .col-md-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--md .col-md-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:888px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-lg-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-lg-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-lg-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-lg-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-lg-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-lg-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-lg-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-lg-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-lg-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-lg-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-lg-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-lg-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}.f-area-response [class*=col-lg]{flex:none;max-width:none}.f-area-response.f-area-response--lg .col-lg-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--lg .col-lg-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--lg .col-lg-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--lg .col-lg-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--lg .col-lg-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--lg .col-lg-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--lg .col-lg-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--lg .col-lg-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--lg .col-lg-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--lg .col-lg-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--lg .col-lg-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--lg .col-lg-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-xl-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-xl-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-xl-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-xl-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-xl-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-xl-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-xl-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-xl-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-xl-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-xl-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-xl-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-xl-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.f-area-response [class*=col-xl]{flex:none;max-width:none}.f-area-response.f-area-response--xl .col-xl-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--xl .col-xl-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--xl .col-xl-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--xl .col-xl-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--xl .col-xl-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--xl .col-xl-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--xl .col-xl-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--xl .col-xl-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--xl .col-xl-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--xl .col-xl-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--xl .col-xl-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--xl .col-xl-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}@media (min-width:1690px){.col-el{flex-basis:0;flex-grow:1;max-width:100%}.col-el-auto{flex-grow:0;flex-shrink:0;flex-basis:auto;width:auto;max-width:none}.col-el-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.col-el-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.col-el-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.col-el-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.col-el-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.col-el-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.col-el-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.col-el-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.col-el-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.col-el-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.col-el-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.col-el-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.order-el-first{order:-1}.order-el-last{order:13}.order-el-0{order:0}.order-el-1{order:1}.order-el-2{order:2}.order-el-3{order:3}.order-el-4{order:4}.order-el-5{order:5}.order-el-6{order:6}.order-el-7{order:7}.order-el-8{order:8}.order-el-9{order:9}.order-el-10{order:10}.order-el-11{order:11}.order-el-12{order:12}.offset-el-0{margin-left:0}.offset-el-1{margin-left:8.33333%}.offset-el-2{margin-left:16.66667%}.offset-el-3{margin-left:25%}.offset-el-4{margin-left:33.33333%}.offset-el-5{margin-left:41.66667%}.offset-el-6{margin-left:50%}.offset-el-7{margin-left:58.33333%}.offset-el-8{margin-left:66.66667%}.offset-el-9{margin-left:75%}.offset-el-10{margin-left:83.33333%}.offset-el-11{margin-left:91.66667%}}.f-area-response [class*=col-el]{flex:none;max-width:none}.f-area-response.f-area-response--el .col-el-1{flex-grow:0;flex-shrink:0;flex-basis:8.33333%;max-width:8.33333%}.f-area-response.f-area-response--el .col-el-2{flex-grow:0;flex-shrink:0;flex-basis:16.66667%;max-width:16.66667%}.f-area-response.f-area-response--el .col-el-3{flex-grow:0;flex-shrink:0;flex-basis:25%;max-width:25%}.f-area-response.f-area-response--el .col-el-4{flex-grow:0;flex-shrink:0;flex-basis:33.33333%;max-width:33.33333%}.f-area-response.f-area-response--el .col-el-5{flex-grow:0;flex-shrink:0;flex-basis:41.66667%;max-width:41.66667%}.f-area-response.f-area-response--el .col-el-6{flex-grow:0;flex-shrink:0;flex-basis:50%;max-width:50%}.f-area-response.f-area-response--el .col-el-7{flex-grow:0;flex-shrink:0;flex-basis:58.33333%;max-width:58.33333%}.f-area-response.f-area-response--el .col-el-8{flex-grow:0;flex-shrink:0;flex-basis:66.66667%;max-width:66.66667%}.f-area-response.f-area-response--el .col-el-9{flex-grow:0;flex-shrink:0;flex-basis:75%;max-width:75%}.f-area-response.f-area-response--el .col-el-10{flex-grow:0;flex-shrink:0;flex-basis:83.33333%;max-width:83.33333%}.f-area-response.f-area-response--el .col-el-11{flex-grow:0;flex-shrink:0;flex-basis:91.66667%;max-width:91.66667%}.f-area-response.f-area-response--el .col-el-12{flex-grow:0;flex-shrink:0;flex-basis:100%;max-width:100%}.table{width:100%}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #EAECF3}.table thead th{vertical-align:middle;border-bottom:2px solid #EAECF3}.table tbody+tbody{border-top:2px solid #EAECF3}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #EAECF3}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(even){background-color:#F7F8FB}.table-hover tbody tr:hover{background-color:#EDF5FF}.table-primary,.table-primary>td,.table-primary>th{background-color:#c3ddff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#aacfff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#d6efdb}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#c4e8cb}.table-info,.table-info>td,.table-info>th{background-color:#d2e6ff}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#b9d8ff}.table-warning,.table-warning>td,.table-warning>th{background-color:#fce5cb}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fbd9b3}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:#EDF5FF}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#d4e7ff}.table .thead-dark th{color:#fff;background-color:#212529;border-color:f-color-offset(#212529,7.5%,"lighten")}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#EAECF3}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:f-color-offset(#212529,7.5%,"lighten")}.table-dark.table-bordered,.table-responsive>.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:887.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}@media (max-width:1689.98px){.table-responsive-el{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-el>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.form-control{display:block;width:100%;height:calc(1.5rem + .125rem);padding:.1875rem .5rem;line-height:1.4286;color:#2D2F33;background-color:#fff;background-clip:padding-box;border:1px solid #D8DCE6;border-radius:3px;box-shadow:0 0 0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#2D2F33;background-color:#fff;border-color:#529DFF;outline:0;box-shadow:0 0 0,0 0 4px 2px rgba(82,157,255,.12)}.form-control::-moz-placeholder{color:#B4BCCC;opacity:1}.form-control::placeholder{color:#B4BCCC;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#fff;opacity:1}select.form-control:focus::-ms-value{color:#2D2F33;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.1875rem + 1px);padding-bottom:calc(.1875rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.4286}.col-form-label-lg{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.4286}.col-form-label-sm{padding-top:calc(.125rem + 1px);padding-bottom:calc(.125rem + 1px);font-size:.75rem;line-height:1.4286}.form-control-plaintext{display:block;width:100%;padding-top:.1875rem;padding-bottom:.1875rem;margin-bottom:0;line-height:1.4286;color:#000;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-lg,.form-control-sm{line-height:1.4286;border-radius:3px}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.32145rem + 1px);padding:.125rem .4375rem;font-size:.75rem}.form-control-lg{height:calc(1.75003rem + 1px);padding:.25rem .3125rem;font-size:.875rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:.375rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-.3125rem;margin-left:-.3125rem}.form-row>.col,.form-row>[class*=col-]{padding-right:.3125rem;padding-left:.3125rem}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#A8ADB8}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.invalid-tooltip,.valid-tooltip{max-width:100%;padding:.5rem .625rem;line-height:1.4286;border-radius:3px;top:100%}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#6CC77F}.valid-tooltip{position:absolute;z-index:5;display:none;margin-top:.1rem;font-size:.75rem;color:#212529;background-color:#6cc77f}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.form-check-input.is-valid~.form-check-label,.was-validated .custom-control-input:valid~.custom-control-label,.was-validated .form-check-input:valid~.form-check-label{color:#6CC77F}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#6CC77F}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#6CC77F;box-shadow:0 0 0 .2rem rgba(108,199,127,.25)}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#c8eacf}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#91d59f}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(108,199,127,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#6CC77F}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(108,199,127,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;z-index:5;display:none;margin-top:.1rem;font-size:.75rem;color:#fff;background-color:#dc3545}.collapsing,.dropdown,.dropdown-left,.dropleft,.dropleft-up,.dropright,.dropright-up,.dropup,.dropup-left{position:relative}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.form-check-input.is-invalid~.form-check-label,.was-validated .custom-control-input:invalid~.custom-control-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex-grow:0;flex-shrink:0;flex-basis:auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.125rem;vertical-align:.125rem;content:"";border-top:.25rem solid;border-right:.25rem solid transparent;border-bottom:0;border-left:.25rem solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:300;display:none;float:left;min-width:10rem;padding:.25rem;margin:.25rem 0 0;color:#2D2F33;background-color:#fff;background-clip:padding-box;border:0 solid rgba(0,0,0,.15);border-radius:3px;box-shadow:0 2px 8px 0 rgba(0,0,0,.15)}.dropup .dropdown-toggle::after,.dropup-left .dropdown-toggle::after{display:inline-block;width:0;height:0;vertical-align:.125rem;content:"";border-top:0;border-right:.25rem solid transparent;border-bottom:.25rem solid;border-left:.25rem solid transparent}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.25rem}.dropup .dropdown-toggle::after{margin-left:.125rem}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropup-left .dropdown-menu{top:auto;right:0;left:auto;bottom:100%;margin-top:0;margin-bottom:.25rem}.dropup-left .dropdown-toggle::after{margin-left:.125rem}.dropright .dropdown-toggle::after,.dropright-up .dropdown-toggle::after{display:inline-block;width:0;height:0;content:"";border-top:.25rem solid transparent;border-right:0;border-left:.25rem solid;vertical-align:0}.dropup-left .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.25rem}.dropright .dropdown-toggle::after{margin-left:.125rem;border-bottom:.25rem solid transparent}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright-up .dropdown-menu{top:auto;right:auto;left:100%;bottom:0;margin-top:0;margin-left:.25rem}.dropright-up .dropdown-toggle::after{margin-left:.125rem;border-bottom:.25rem solid transparent}.dropleft .dropdown-toggle::before,.dropleft-up .dropdown-toggle::before{width:0;content:"";border-top:.25rem solid transparent;border-right:.25rem solid;border-bottom:.25rem solid transparent;height:0}.dropright-up .dropdown-toggle:empty::after{margin-left:0}.dropleft-up .dropdown-menu{top:auto;right:100%;left:auto;bottom:0;margin-top:0;margin-bottom:.25rem}.dropleft-up .dropdown-toggle::after{width:0;height:0;margin-left:.125rem;vertical-align:.125rem;content:"";display:none}.dropleft-up .dropdown-toggle::before{display:inline-block;margin-right:.125rem;vertical-align:0}.dropleft-up .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.25rem}.dropleft .dropdown-toggle::after{width:0;height:0;margin-left:.125rem;vertical-align:.125rem;content:"";display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.125rem;vertical-align:0}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropdown-menu[x-placement^=top],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:null 0;border-top:1px solid #E6E9F0}.dropdown-item{display:block;line-height:1.25rem;padding:.25rem .5rem;clear:both;font-weight:400;color:#5A5E66;text-align:inherit;white-space:nowrap;background-color:transparent;border:0;border-radius:3px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after,.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child),.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-item:focus,.dropdown-item:hover{color:#2D2F33;text-decoration:none;background-color:#EDF5FF}.dropdown-item.active,.dropdown-item:active{color:#2D2F33;text-decoration:none;background-color:#DAE9FF}.dropdown-item.disabled,.dropdown-item:disabled{color:#B4BCCC;background-color:transparent;cursor:default}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.25rem .5rem;margin-bottom:0;font-size:.75rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem .5rem;color:#5A5E66}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex-grow:0;flex-shrink:1;flex-basis:auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.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:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.dropdown-toggle-split{padding-right:.65625rem;padding-left:.65625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropright-top .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropup-left .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before,.dropleft-up .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.84375rem;padding-left:.84375rem}.btn-group.show .dropdown-toggle{box-shadow:0 1px 0 0 rgba(31,35,41,.12)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.input-group,.nav,.navbar{flex-wrap:wrap}.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}.input-group-append,.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text,.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.page-link{margin-left:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;flex-grow:1;flex-shrink:1;flex-basis:0;width:1%;margin-bottom:0}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-file{display:flex;align-items:center}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-prepend{margin-right:-1px}.input-group-text{display:flex;align-items:center;padding:.1875rem .5rem;margin-bottom:0;font-size:.8125rem;font-weight:400;line-height:1.4286;color:#2D2F33;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #D8DCE6;border-radius:3px}.input-group-text input[type=radio],.input-group-text input[type=checkbox]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(1.75003rem + 1px);padding:.25rem .3125rem;font-size:.875rem;line-height:1.4286;border-radius:3px}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.32145rem + 1px);padding:.125rem .4375rem;font-size:.75rem;line-height:1.4286;border-radius:3px}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.16074rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#2A87FF;background-color:#fff;box-shadow:none}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12);color:#2A87FF}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:f-color-offset(#2A87FF,35%,"lighten");box-shadow:none}.custom-checkbox .custom-control-input:checked~.custom-control-label::before,.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before,.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before,.custom-control-input:disabled~.custom-control-label::before,.custom-control-label::before,.custom-radio .custom-control-input:checked~.custom-control-label::before,.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:#fff}.custom-control-input:disabled~.custom-control-label{color:#E6E9F0}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::after,.custom-control-label::before{position:absolute;top:.08037rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label::before{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;box-shadow:0 0 0}.custom-control-label::after{background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:3px}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:none}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{box-shadow:none}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:none}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:none}.custom-select{display:inline-block;width:100%;height:calc(1.5rem + .125rem);padding:.1875rem 1.5rem .1875rem .5rem;line-height:1.4286;color:#2D2F33;vertical-align:middle;background:f-str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") ,"#","%23") right .5rem center no-repeat #fff;background-size:.5rem .625rem;border:1px solid #D8DCE6;border-radius:3px;box-shadow:0 0 0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select-lg,.custom-select-sm{padding-top:.1875rem;padding-bottom:.1875rem}.custom-select:focus{border-color:#529DFF;outline:0;box-shadow:0 0 0,0 0 4px 2px rgba(82,157,255,.12)}.custom-select:focus::-ms-value{color:#2D2F33;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.5rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-file-input:disabled~.custom-file-label,.custom-file-label{background-color:#fff}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.32145rem + 1px);font-size:75%}.custom-select-lg{height:calc(1.75003rem + 1px);font-size:125%}.custom-file,.custom-file-input,.custom-file-label{height:calc(1.5rem + .125rem)}.custom-file-label,.custom-file-label::after{padding:.1875rem .5rem;color:#2D2F33;right:0;line-height:1.4286}.custom-file{position:relative;display:inline-block;width:100%;margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#529DFF;box-shadow:0 0 4px 2px rgba(82,157,255,.12)}.custom-file-input:focus~.custom-file-label::after{border-color:#529DFF}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;left:0;z-index:1;border:1px solid #D8DCE6;border-radius:3px;box-shadow:0 0 0}.custom-file-label::after{position:absolute;top:0;bottom:0;z-index:3;display:block;height:1.5rem;content:"Browse";background-color:#e9ecef;border-left:1px solid #D8DCE6;border-radius:0 3px 3px 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 4px 2px rgba(82,157,255,.12)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#2A87FF;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:f-color-offset(#2A87FF,35%,"lighten")}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#2A87FF;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{-moz-transition:none;transition:none}}.custom-range::-moz-range-thumb:active{background-color:f-color-offset(#2A87FF,35%,"lighten")}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#2A87FF;border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-ms-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{-ms-transition:none;transition:none}}.custom-range::-ms-thumb:active{background-color:f-color-offset(#2A87FF,35%,"lighten")}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem;box-shadow:inset 0 .25rem .25rem rgba(0,0,0,.1)}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:.9375rem;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;padding-left:0;margin-bottom:0;list-style:none}.nav-link,.navbar{padding:.5rem 1rem}.nav-link{display:block}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background:#2A87FF}.nav-fill .nav-item{flex-grow:1;flex-shrink:1;flex-basis:auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;align-items:center;justify-content:space-between}.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.45536rem;padding-bottom:.45536rem;margin-right:1rem;font-size:.875rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:.875rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:3px}.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:center center no-repeat;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:887.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:888px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}@media (max-width:1689.98px){.navbar-expand-el>.container,.navbar-expand-el>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1690px){.navbar-expand-el{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-el .navbar-nav{flex-direction:row}.navbar-expand-el .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-el .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-el>.container,.navbar-expand-el>.container-fluid{flex-wrap:nowrap}.navbar-expand-el .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-el .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.modal,.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:f-str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' 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 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") ,"#","%23")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:f-str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' 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 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") ,"#","%23")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:3px}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.card-body{flex-grow:1;flex-shrink:1;flex-basis:auto;padding:1.25rem}.card-footer,.card-header{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03)}.card-title{margin-bottom:.75rem}.card-header,.card-subtitle,.card-text:last-child{margin-bottom:0}.card-subtitle{margin-top:-.375rem}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-header{border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(3px - 1px) calc(3px - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(3px - 1px) calc(3px - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(3px - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(3px - 1px);border-top-right-radius:calc(3px - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(3px - 1px);border-bottom-left-radius:calc(3px - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:14px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-14px;margin-left:-14px}.card-deck .card{display:flex;flex-grow:1;flex-shrink:0;flex-basis:0%;flex-direction:column;margin-right:14px;margin-bottom:0;margin-left:14px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:14px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex-grow:1;flex-shrink:0;flex-basis:0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:3px}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:3px;border-top-right-radius:3px}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}.card-columns{-moz-column-count:3;column-count:3;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.card-columns .card{margin-bottom:.75rem}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.pagination,.progress{border-radius:3px;display:flex}.pagination{padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:.1875rem;line-height:1rem;color:#2D2F33;background-color:#fff;border:1px solid #EAECF3}.page-item:first-child .page-link,.pagination-lg .f-page-item:first-child .f-page-link,.pagination-sm .f-page-item:first-child .f-page-link{border-top-left-radius:3px;border-bottom-left-radius:3px}.page-item:last-child .page-link,.pagination-lg .f-page-item:last-child .f-page-link,.pagination-sm .f-page-item:last-child .f-page-link{border-top-right-radius:3px;border-bottom-right-radius:3px}.page-link:hover{z-index:2;color:#529DFF;text-decoration:none;background-color:#fff;border-color:#529DFF}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 4px 2px rgba(82,157,255,.12)}.page-item:first-child .page-link{margin-left:0}.page-item.active .page-link{z-index:1;color:#2A87FF;background:#EFF5FF!important;border-color:#EFF5FF}.page-item.disabled .page-link{color:#878D99;pointer-events:none;cursor:auto;background:#F4F5F9;border-color:#DEE1EA;box-shadow:none}.pagination-lg .f-page-link{font-size:.875rem;line-height:1.5;padding:.75rem}.pagination-sm .f-page-link{font-size:.75rem;line-height:1.5;padding:.1875rem}.f-alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:3px}.f-alert-dismissible{padding-right:3.71875rem}.f-alert-dismissible .f-close{position:absolute;top:0;right:0;padding:.75rem 1.25rem}.alert-primary{background-color:#d4e7ff;border-color:#c3ddff;color:#164685}.alert-primary .f-alert-link{color:#0f2f59}.alert-primary hr{border-top-color:#aacfff}.alert-secondary{background-color:#e2e3e5;border-color:#d6d8db;color:#383d41}.alert-secondary .f-alert-link{color:#202326}.alert-secondary hr{border-top-color:#c8cbcf}.alert-success{background-color:#e2f4e5;border-color:#d6efdb;color:#386742}.alert-success .f-alert-link{color:#26462d}.alert-success hr{border-top-color:#c4e8cb}.alert-info{background-color:#dfedff;border-color:#d2e6ff;color:#315585}.alert-info .f-alert-link{color:#233d60}.alert-info hr{border-top-color:#b9d8ff}.alert-warning{background-color:#fdecda;border-color:#fce5cb;color:#7f5423}.alert-warning .f-alert-link{color:#573a18}.alert-warning hr{border-top-color:#fbd9b3}.alert-danger{background-color:#f8d7da;border-color:#f5c6cb;color:#721c24}.alert-danger .f-alert-link{color:#491217}.alert-danger hr{border-top-color:#f1b0b7}.alert-light{background-color:#fefefe;border-color:#fdfdfe;color:#818182}.alert-light .f-alert-link{color:#686868}.alert-light hr{border-top-color:#ececf6}.alert-dark{background-color:#d6d8d9;border-color:#c6c8ca;color:#1b1e21}.alert-dark .f-alert-link{color:#040505}.alert-dark hr{border-top-color:#b9bbbe}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;font-size:.60938rem;background-color:#e9ecef;box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#2A87FF;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.25),transparent 25%,transparent 50%,rgba(255,255,255,.5),rgba(255,255,255,.75),transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex-grow:1;flex-shrink:1;flex-basis:0%}.f-list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.f-list-group-item-action{width:100%;color:#495057;text-align:inherit}.f-list-group-item-action:focus,.f-list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.f-list-group-item-action:active{color:#2D2F33;background-color:#e9ecef}.f-list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.f-list-group-item:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.f-list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.f-list-group-item:focus,.f-list-group-item:hover{z-index:1;text-decoration:none}.f-list-group-item.disabled,.f-list-group-item:disabled{color:#6c757d;background-color:#fff}.f-list-group-item.active{z-index:2;color:#fff;background-color:#2A87FF;border-color:#2A87FF}.f-list-group-flush .f-list-group-item{border-right:0;border-left:0;border-radius:0}.f-list-group-flush:first-child .f-list-group-item:first-child{border-top:0}.f-list-group-flush:last-child .f-list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#164685;background-color:#c3ddff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#164685;background-color:#aacfff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#164685;border-color:#164685}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#386742;background-color:#d6efdb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#386742;background-color:#c4e8cb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#386742;border-color:#386742}.list-group-item-info{color:#315585;background-color:#d2e6ff}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#315585;background-color:#b9d8ff}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#315585;border-color:#315585}.list-group-item-warning{color:#7f5423;background-color:#fce5cb}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#7f5423;background-color:#fbd9b3}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7f5423;border-color:#7f5423}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.21875rem;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.popover,.tooltip{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;text-decoration:none;letter-spacing:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.75rem;word-wrap:break-word}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:translate(0,0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:0 solid #E5E9EF;border-radius:3px;box-shadow:0 .125rem .75rem rgba(0,0,0,.06);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:.15}.modal-title{margin-bottom:0;line-height:1.375rem}.modal-body{position:relative;flex-grow:1;flex-shrink:1;flex-basis:auto;padding:.625rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:3.125rem;height:3.125rem;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:31.25rem;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-content{box-shadow:0 .125rem .75rem 0 rgba(0,0,0,.06)}.modal-sm{max-width:18.75rem}}@media (min-width:888px){.modal-lg{max-width:50rem}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;line-height:1.4286;text-align:left;text-align:start;text-shadow:none;word-break:normal;opacity:0}.tooltip.show{opacity:1}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.f-bs-tooltip-auto[x-placement^=top],.f-bs-tooltip-top{padding:.4rem 0}.f-bs-tooltip-auto[x-placement^=top] .arrow,.f-bs-tooltip-top .arrow{bottom:0}.f-bs-tooltip-auto[x-placement^=top] .arrow::before,.f-bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#303C53}.f-bs-tooltip-auto[x-placement^=right],.f-bs-tooltip-right{padding:0 .4rem}.f-bs-tooltip-auto[x-placement^=right] .arrow,.f-bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.f-bs-tooltip-auto[x-placement^=right] .arrow::before,.f-bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#303C53}.f-bs-tooltip-auto[x-placement^=bottom],.f-bs-tooltip-bottom{padding:.4rem 0}.f-bs-tooltip-auto[x-placement^=bottom] .arrow,.f-bs-tooltip-bottom .arrow{top:0}.f-bs-tooltip-auto[x-placement^=bottom] .arrow::before,.f-bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#303C53}.f-bs-tooltip-auto[x-placement^=left],.f-bs-tooltip-left{padding:0 .4rem}.f-bs-tooltip-auto[x-placement^=left] .arrow,.f-bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.f-bs-tooltip-auto[x-placement^=left] .arrow::before,.f-bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#303C53}.tooltip-inner{max-width:18.75rem;max-height:6.25rem;overflow:hidden;padding:.5rem .625rem;color:#fff;text-align:left;background-color:#303C53;box-shadow:0 2px 8px 0 rgba(0,0,0,.15);border-radius:3px}.tooltip-inner-lg{max-width:37.5rem;max-height:initial;overflow:initial}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;line-height:1.4286;text-align:left;text-align:start;text-shadow:none;word-break:normal;background-color:#fff;background-clip:padding-box;border:1px solid #fff;border-radius:4px;box-shadow:0 2px 8px 0 rgba(0,32,74,.15)}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 3px}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.f-bs-popover-auto[x-placement^=top],.f-bs-popover-top{margin-bottom:.5rem}.f-bs-popover-auto[x-placement^=top] .arrow,.f-bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.f-bs-popover-auto[x-placement^=top] .arrow::after,.f-bs-popover-auto[x-placement^=top] .arrow::before,.f-bs-popover-top .arrow::after,.f-bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.f-bs-popover-auto[x-placement^=top] .arrow::before,.f-bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=top] .arrow::after,.f-bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.f-bs-popover-auto[x-placement^=right],.f-bs-popover-right{margin-left:.5rem}.f-bs-popover-auto[x-placement^=right] .arrow,.f-bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:3px 0}.f-bs-popover-auto[x-placement^=right] .arrow::after,.f-bs-popover-auto[x-placement^=right] .arrow::before,.f-bs-popover-right .arrow::after,.f-bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.f-bs-popover-auto[x-placement^=right] .arrow::before,.f-bs-popover-right .arrow::before{left:0;border-right-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=right] .arrow::after,.f-bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.f-bs-popover-auto[x-placement^=bottom],.f-bs-popover-bottom{margin-top:.5rem}.f-bs-popover-auto[x-placement^=bottom] .arrow,.f-bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.f-bs-popover-auto[x-placement^=bottom] .arrow::after,.f-bs-popover-auto[x-placement^=bottom] .arrow::before,.f-bs-popover-bottom .arrow::after,.f-bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem}.f-bs-popover-auto[x-placement^=bottom] .arrow::before,.f-bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=bottom] .arrow::after,.f-bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.f-bs-popover-auto[x-placement^=bottom] .popover-header::before,.f-bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.f-bs-popover-auto[x-placement^=left],.f-bs-popover-left{margin-right:.5rem}.f-bs-popover-auto[x-placement^=left] .arrow,.f-bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:3px 0}.f-bs-popover-auto[x-placement^=left] .arrow::after,.f-bs-popover-auto[x-placement^=left] .arrow::before,.f-bs-popover-left .arrow::after,.f-bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.f-bs-popover-auto[x-placement^=left] .arrow::before,.f-bs-popover-left .arrow::before{right:0;border-left-color:rgba(255,255,255,.4)}.f-bs-popover-auto[x-placement^=left] .arrow::after,.f-bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:.8125rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(3px - 1px);border-top-right-radius:calc(3px - 1px)}.popover-header:empty{display:none}.popover-body{max-width:17.25rem;padding:.5rem .75rem;color:#2D2F33}.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-primary{background-color:#2A87FF!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#006bf6!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#6CC77F!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#47b95f!important}.bg-info{background-color:#5EA4FF!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#2b87ff!important}.bg-warning{background-color:#F5A144!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#f28914!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #E6E9F0!important}.border-top{border-top:1px solid #E6E9F0!important}.border-right{border-right:1px solid #E6E9F0!important}.border-bottom{border-bottom:1px solid #E6E9F0!important}.border-left{border-left:1px solid #E6E9F0!important}.border-0{border:0!important}.rounded-right,.rounded-top{border-top-right-radius:3px!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:3px!important}.rounded-left,.rounded-top{border-top-left-radius:3px!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:3px!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}.border-primary{border-color:#2A87FF!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#6CC77F!important}.border-info{border-color:#5EA4FF!important}.border-warning{border-color:#F5A144!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:3px!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.f-clearfix::after{display:block;clear:both;content:""}.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-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-top{top:0}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}.f-text-justify{text-align:justify!important}.f-text-nowrap{white-space:nowrap!important}.f-text-overflow{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){.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-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}.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){.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-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:888px){.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-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}.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){.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-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}@media (min-width:1690px){.d-el-none{display:none!important}.d-el-inline{display:inline!important}.d-el-inline-block{display:inline-block!important}.d-el-block{display:block!important}.d-el-table{display:table!important}.d-el-table-row{display:table-row!important}.d-el-table-cell{display:table-cell!important}.d-el-flex{display:flex!important}.d-el-inline-flex{display:inline-flex!important}.flex-el-row{flex-direction:row!important}.flex-el-column{flex-direction:column!important}.flex-el-row-reverse{flex-direction:row-reverse!important}.flex-el-column-reverse{flex-direction:column-reverse!important}.flex-el-wrap{flex-wrap:wrap!important}.flex-el-nowrap{flex-wrap:nowrap!important}.flex-el-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-el-fill{flex-grow:1!important;flex-shrink:1!important;flex-basis:auto!important}.flex-el-grow-0{flex-grow:0!important}.flex-el-grow-1{flex-grow:1!important}.flex-el-shrink-0{flex-shrink:0!important}.flex-el-shrink-1{flex-shrink:1!important}.justify-content-el-start{justify-content:flex-start!important}.justify-content-el-end{justify-content:flex-end!important}.justify-content-el-center{justify-content:center!important}.justify-content-el-between{justify-content:space-between!important}.justify-content-el-around{justify-content:space-around!important}.align-items-el-start{align-items:flex-start!important}.align-items-el-end{align-items:flex-end!important}.align-items-el-center{align-items:center!important}.align-items-el-baseline{align-items:baseline!important}.align-items-el-stretch{align-items:stretch!important}.align-content-el-start{align-content:flex-start!important}.align-content-el-end{align-content:flex-end!important}.align-content-el-center{align-content:center!important}.align-content-el-between{align-content:space-between!important}.align-content-el-around{align-content:space-around!important}.align-content-el-stretch{align-content:stretch!important}.align-self-el-auto{align-self:auto!important}.align-self-el-start{align-self:flex-start!important}.align-self-el-end{align-self:flex-end!important}.align-self-el-center{align-self:center!important}.align-self-el-baseline{align-self:baseline!important}.align-self-el-stretch{align-self:stretch!important}.float-el-left{float:left!important}.float-el-right{float:right!important}.float-el-none{float:none!important}.m-el-0{margin:0!important}.mt-el-0,.my-el-0{margin-top:0!important}.mr-el-0,.mx-el-0{margin-right:0!important}.mb-el-0,.my-el-0{margin-bottom:0!important}.ml-el-0,.mx-el-0{margin-left:0!important}.m-el-1{margin:.25rem!important}.mt-el-1,.my-el-1{margin-top:.25rem!important}.mr-el-1,.mx-el-1{margin-right:.25rem!important}.mb-el-1,.my-el-1{margin-bottom:.25rem!important}.ml-el-1,.mx-el-1{margin-left:.25rem!important}.m-el-2{margin:.5rem!important}.mt-el-2,.my-el-2{margin-top:.5rem!important}.mr-el-2,.mx-el-2{margin-right:.5rem!important}.mb-el-2,.my-el-2{margin-bottom:.5rem!important}.ml-el-2,.mx-el-2{margin-left:.5rem!important}.m-el-3{margin:1rem!important}.mt-el-3,.my-el-3{margin-top:1rem!important}.mr-el-3,.mx-el-3{margin-right:1rem!important}.mb-el-3,.my-el-3{margin-bottom:1rem!important}.ml-el-3,.mx-el-3{margin-left:1rem!important}.m-el-4{margin:1.5rem!important}.mt-el-4,.my-el-4{margin-top:1.5rem!important}.mr-el-4,.mx-el-4{margin-right:1.5rem!important}.mb-el-4,.my-el-4{margin-bottom:1.5rem!important}.ml-el-4,.mx-el-4{margin-left:1.5rem!important}.m-el-5{margin:3rem!important}.mt-el-5,.my-el-5{margin-top:3rem!important}.mr-el-5,.mx-el-5{margin-right:3rem!important}.mb-el-5,.my-el-5{margin-bottom:3rem!important}.ml-el-5,.mx-el-5{margin-left:3rem!important}.p-el-0{padding:0!important}.pt-el-0,.py-el-0{padding-top:0!important}.pr-el-0,.px-el-0{padding-right:0!important}.pb-el-0,.py-el-0{padding-bottom:0!important}.pl-el-0,.px-el-0{padding-left:0!important}.p-el-1{padding:.25rem!important}.pt-el-1,.py-el-1{padding-top:.25rem!important}.pr-el-1,.px-el-1{padding-right:.25rem!important}.pb-el-1,.py-el-1{padding-bottom:.25rem!important}.pl-el-1,.px-el-1{padding-left:.25rem!important}.p-el-2{padding:.5rem!important}.pt-el-2,.py-el-2{padding-top:.5rem!important}.pr-el-2,.px-el-2{padding-right:.5rem!important}.pb-el-2,.py-el-2{padding-bottom:.5rem!important}.pl-el-2,.px-el-2{padding-left:.5rem!important}.p-el-3{padding:1rem!important}.pt-el-3,.py-el-3{padding-top:1rem!important}.pr-el-3,.px-el-3{padding-right:1rem!important}.pb-el-3,.py-el-3{padding-bottom:1rem!important}.pl-el-3,.px-el-3{padding-left:1rem!important}.p-el-4{padding:1.5rem!important}.pt-el-4,.py-el-4{padding-top:1.5rem!important}.pr-el-4,.px-el-4{padding-right:1.5rem!important}.pb-el-4,.py-el-4{padding-bottom:1.5rem!important}.pl-el-4,.px-el-4{padding-left:1.5rem!important}.p-el-5{padding:3rem!important}.pt-el-5,.py-el-5{padding-top:3rem!important}.pr-el-5,.px-el-5{padding-right:3rem!important}.pb-el-5,.py-el-5{padding-bottom:3rem!important}.pl-el-5,.px-el-5{padding-left:3rem!important}.m-el-auto{margin:auto!important}.mt-el-auto,.my-el-auto{margin-top:auto!important}.mr-el-auto,.mx-el-auto{margin-right:auto!important}.mb-el-auto,.my-el-auto{margin-bottom:auto!important}.ml-el-auto,.mx-el-auto{margin-left:auto!important}.text-el-left{text-align:left!important}.text-el-right{text-align:right!important}.text-el-center{text-align:center!important}}.f-text-lowercase{text-transform:lowercase!important}.f-text-uppercase{text-transform:uppercase!important}.f-text-capitalize{text-transform:capitalize!important}.f-font-weight-light{font-weight:300!important}.f-font-weight-normal{font-weight:400!important}.f-font-weight-bold{font-weight:700!important}.f-font-italic{font-style:italic!important}.f-text-white{color:#fff!important}.text-primary{color:#2A87FF!important}a.text-primary:focus,a.text-primary:hover{color:#006bf6!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#6CC77F!important}a.text-success:focus,a.text-success:hover{color:#47b95f!important}.text-info{color:#5EA4FF!important}a.text-info:focus,a.text-info:hover{color:#2b87ff!important}.text-warning{color:#F5A144!important}a.text-warning:focus,a.text-warning:hover{color:#f28914!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.f-text-body{color:#2D2F33!important}.f-text-muted{color:#A8ADB8!important}.f-text-black-50{color:rgba(0,0,0,.5)!important}.f-text-white-50{color:rgba(255,255,255,.5)!important}.f-text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}blockquote,img,pre,tr{page-break-inside:avoid}*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" f-attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd}thead{display:table-header-group}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.container,body{min-width:888px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#EAECF3}.table .thead-dark th{color:inherit;border-color:#EAECF3}} \ No newline at end of file diff --git a/packages/farris-theme/src/assets/themes/default/default/temp/farris-iteration-b.css b/packages/farris-theme/src/assets/themes/default/default/temp/farris-iteration-b.css new file mode 100644 index 00000000000..c59cd004b92 --- /dev/null +++ b/packages/farris-theme/src/assets/themes/default/default/temp/farris-iteration-b.css @@ -0,0 +1,968 @@ +@charset "UTF-8"; +/** 暗黑主题新增变量——————开始*/ +/** 暗黑主题新增变量——————结束*/ +/** 暗黑主题新增变量——————开始*/ +/** 暗黑主题新增变量——————结束*/ +/** 暗黑主题新增变量——————开始*/ +/** 暗黑主题新增变量——————结束*/ +/** 暗黑主题新增变量——————开始*/ +/** 暗黑主题新增变量——————结束*/ +/******************************* + 页头(S M) +*******************************/ +/******************************* + 表单 +*******************************/ +/******************************* + 带筛选方案 +*******************************/ +/******************************* + 按钮 +*******************************/ +/******************************* + Tabs +*******************************/ +/******************************* + Tabs +*******************************/ +/******************************* + OnePage(S M) +*******************************/ +/******************************* + 左右页面(S M) +*******************************/ +/******************************* + Section(S M) +*******************************/ +/******************************* + 导航页 (S M) +*******************************/ +/******************************* + 简单查询页 +*******************************/ +/*表格分页高度*/ +/******************************* + 多选 +*******************************/ +/******************************* + 单选 +*******************************/ +/*按钮——————开始*/ +/*按钮——————结束*/ +/*输入控件按钮icon图标*/ +body { + background: #f0f3f6; } + +input::-ms-clear { + display: none; } + +h1, +.h1 { + line-height: 2.125rem; } + +h2, +.h2 { + line-height: 2; } + +h3, +.h3 { + line-height: 1.875rem; } + +h4, +.h4 { + line-height: 1.75rem; } + +h5, +.h5 { + line-height: 1.375rem; } + +h6, +.h6 { + line-height: 1.25rem; } + +.text-dark { + color: #000; } + +.text-danger { + color: #F46160 !important; } + +.text-info { + color: #529DFF !important; } + +.pagination { + font-size: 0.75rem; + padding: 0.625rem 0.625rem; } + +.page-link { + border-radius: 3px; + min-width: calc(1rem + 0.375rem + 2px); + height: calc(1rem + 0.375rem + 2px); + text-align: center; + margin-left: 0px; + overflow: hidden; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .page-link .k-icon { + vertical-align: top; } + .page-link:focus { + color: #0E6DED; + border-color: #0E6DED; } + .page-link.disabled { + color: #878D99; + background-color: #F4F5F9; + border-color: #DEE1EA; + box-shadow: none; } + .page-link:hover { + color: #529DFF; + background-color: #fff; + border-color: #529DFF; } + .page-link:active { + color: #0E6DED; + background-color: #fff; + border-color: #0E6DED; } + +.page-item { + margin: 0rem 0.25rem; } + +.pagination-lg .page-link { + height: auto; + width: auto; } + +.table { + table-layout: fixed; } + .table thead { + background: #F4F5F9; + color: #5A5E66; } + .table thead th { + padding: 0.4375rem 0.75rem; + line-height: 1.25rem; + border-width: 0 0 1px 0; + font-weight: normal; + border-color: #E4E7EF; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + position: relative; } + .table thead th::after { + content: ''; + position: absolute; + right: 0; + top: 50%; + margin-top: calc(-1.125rem / 2); + display: block; + height: 1.125rem; + width: 1px; + background-color: #E6E9F0; } + .table thead th:last-child::after { + display: none; } + .table td { + border-top-width: 0; + border-bottom: 1px solid #EAECF3; + border-color: #EAECF3; + padding: 0.25rem 0.75rem; + height: calc( 0.5rem + 1px + 1.16074rem); + line-height: 1.25rem; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .table tr.selected, + .table td.selected, + .table th.selected { + border-color: #95BEF1; + color: #424347; + background-color: #DAE9FF; } + +.form-control:disabled, .form-control:disabled:hover { + border-color: #D8DCE6; + color: #2D2F33; + background: #fff; } + +.form-control[readonly], .form-control[readonly]:hover { + border-color: #D8DCE6; + color: #2D2F33; + background: #fff; } + +.form-control:hover { + background-color: #fff; + color: #2D2F33; + border-color: #529DFF; + box-shadow: none; } + +.form-control[readonly]:focus { + box-shadow: none; } + +.custom-control { + padding-left: 0; } + .custom-control.custom-checkbox, .custom-control.custom-radio { + padding-right: 0.8125rem; + margin-bottom: 0.25rem; } + .custom-control .custom-control-label::before { + color: #AEB5C6; } + .custom-control .custom-control-label:hover { + cursor: pointer; } + .custom-control .custom-control-label:hover::before { + color: #529DFF; } + .custom-control .custom-control-input:checked ~ .custom-control-label::before { + color: #2A87FF; } + .custom-control .custom-control-input[readonly] ~ .custom-control-label { + color: #2D2F33; } + .custom-control .custom-control-input[readonly] ~ .custom-control-label::before { + color: #E6E9F0; } + .custom-control .custom-control-input[readonly] ~ .custom-control-label:hover { + cursor: default; } + .custom-control .custom-control-input:disabled ~ .custom-control-label { + color: #2D2F33; } + .custom-control .custom-control-input:disabled ~ .custom-control-label::before { + color: #E6E9F0; } + .custom-control .custom-control-input:disabled ~ .custom-control-label:hover { + cursor: default; } + .custom-control .custom-control-input[readonly]:checked ~ .custom-control-label::before, + .custom-control .custom-control-input[disabled]:checked ~ .custom-control-label::before { + color: rgba(42, 135, 255, 0.2); } + +.custom-control-input { + clip: rect(0, 0, 0, 0); + overflow: hidden; + opacity: 0; } + +.custom-control-label { + padding-left: 1.5rem; + color: #2D2F33; + display: inline; } + .custom-control-label::before { + width: 1em; + height: 1em; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-size: 1rem; + font-family: "FarrisIcons"; + font-style: normal; + font-variant: normal; + font-weight: 400; + line-height: 1; + speak: none; + text-transform: none; + display: inline-block; + vertical-align: middle; + color: #AEB5C6; + font-size: 14px; + line-height: 1; + top: 2px; + left: 0; + top: 3px; + left: 0; + position: absolute; } + .custom-control-label::after { + display: none; + content: ''; } + +.custom-checkbox .custom-control-label::before { + content: '\e304'; } + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before { + content: '\e305'; } + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + font-family: 'FarrisIcons'; + content: '\e306'; + color: #2A87FF; } + +.custom-radio .custom-control-label::before { + content: '\e309'; } + +.custom-radio .custom-control-input:checked ~ .custom-control-label::before { + content: '\e30a'; } + +.was-validated .farris-input-wrap .form-control:valid, .farris-input-wrap .form-control.is-valid, .was-validated +.farris-input-wrap .custom-select:valid, +.farris-input-wrap .custom-select.is-valid { + border-color: #D8DCE6; } + .was-validated .farris-input-wrap .form-control:valid:focus, .farris-input-wrap .form-control.is-valid:focus, .was-validated + .farris-input-wrap .custom-select:valid:focus, + .farris-input-wrap .custom-select.is-valid:focus { + border-color: #D8DCE6; + box-shadow: 0 0 0 0.2rem rgba(216, 220, 230, 0.25); } + +.was-validated .farris-input-wrap .form-check-input:valid ~ .form-check-label { + color: #D8DCE6; } + +.was-validated .farris-input-wrap .form-check-input:valid ~ .valid-feedback, +.was-validated .farris-input-wrap .form-check-input:valid ~ .valid-tooltip { + display: block; } + +.was-validated .farris-input-wrap .custom-control-input:valid ~ .custom-control-label { + color: #D8DCE6; } + .was-validated .farris-input-wrap .custom-control-input:valid ~ .custom-control-label::before { + background-color: white; } + +.was-validated .farris-input-wrap .custom-control-input:valid:checked ~ .custom-control-label::before { + background-color: #f7f8fa; } + +.was-validated .farris-input-wrap .custom-control-input:valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(216, 220, 230, 0.25); } + +.was-validated .farris-input-wrap .custom-file-input:valid ~ .custom-file-label { + border-color: #D8DCE6; } + .was-validated .farris-input-wrap .custom-file-input:valid ~ .custom-file-label::after { + border-color: inherit; } + +.was-validated .farris-input-wrap .custom-file-input:valid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(216, 220, 230, 0.25); } + +.was-validated .farris-input-wrap .form-control:invalid, .farris-input-wrap .form-control.is-invalid, .was-validated +.farris-input-wrap .custom-select:invalid, +.farris-input-wrap .custom-select.is-invalid { + border-color: #D8DCE6; } + .was-validated .farris-input-wrap .form-control:invalid:focus, .farris-input-wrap .form-control.is-invalid:focus, .was-validated + .farris-input-wrap .custom-select:invalid:focus, + .farris-input-wrap .custom-select.is-invalid:focus { + border-color: #D8DCE6; + box-shadow: 0 0 0 0.2rem rgba(216, 220, 230, 0.25); } + +.was-validated .farris-input-wrap .form-check-input:invalid ~ .form-check-label { + color: #D8DCE6; } + +.was-validated .farris-input-wrap .form-check-input:invalid ~ .invalid-feedback, +.was-validated .farris-input-wrap .form-check-input:invalid ~ .invalid-tooltip { + display: block; } + +.was-validated .farris-input-wrap .custom-control-input:invalid ~ .custom-control-label { + color: #D8DCE6; } + .was-validated .farris-input-wrap .custom-control-input:invalid ~ .custom-control-label::before { + background-color: white; } + +.was-validated .farris-input-wrap .custom-control-input:invalid:checked ~ .custom-control-label::before { + background-color: #f7f8fa; } + +.was-validated .farris-input-wrap .custom-control-input:invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(216, 220, 230, 0.25); } + +.was-validated .farris-input-wrap .custom-file-input:invalid ~ .custom-file-label { + border-color: #D8DCE6; } + .was-validated .farris-input-wrap .custom-file-input:invalid ~ .custom-file-label::after { + border-color: inherit; } + +.was-validated .farris-input-wrap .custom-file-input:invalid:focus ~ .custom-file-label { + box-shadow: 0 0 0 0.2rem rgba(216, 220, 230, 0.25); } + +.modal-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + flex-shrink: 0; + padding: 0.75rem 0.5rem 0.75rem 1.125rem; + background: #fff; + color: #000; + align-items: center; + border-top-left-radius: 3px; + border-top-right-radius: 3px; + border-bottom: none; } + .modal-header .close { + color: #000; + opacity: 1; + padding: 0.1875rem 0.1875rem; + margin: -0.25rem 0; + border: 1px solid transparent; + font-size: 1rem; + width: 1.66074rem; + height: 1.66074rem; } + .modal-header .close:not(:disabled):not(.disabled):hover, .modal-header .close:not(:disabled):not(.disabled):focus { + color: #000; } + +.modal-title { + font-size: 1rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } + +.modal-footer, +.showtype-modal .fe-modal-footer-base { + display: flex; + align-items: center; + justify-content: flex-end; + flex-shrink: 0; + background: #fff; + padding: 0.875rem 1.5rem; + box-shadow: none; } + .modal-footer > :not(:first-child), + .showtype-modal .fe-modal-footer-base > :not(:first-child) { + margin-left: 0.3125rem; } + .modal-footer > :not(:last-child), + .showtype-modal .fe-modal-footer-base > :not(:last-child) { + margin-right: 0.3125rem; } + +.modal-open .modal { + overflow-x: auto; } + +.form-row { + margin-right: -0.5rem; + margin-left: -0.5rem; } + .form-row > .col, + .form-row > [class*='col-'] { + padding-right: 0.5rem; + padding-left: 0.5rem; } + +.col-form-label { + padding-top: 0; + padding-bottom: 0; + margin-bottom: 0.375rem; + margin-left: 0; } + +.farris-form-inline .col-form-label, +.farris-form-controls-inline .farris-group-wrap .col-form-label { + padding-top: calc(0.1875rem + 1px); + padding-bottom: calc(0.1875rem + 1px); + margin-bottom: 0; } + +.form-control { + height: calc(1.5rem + 0.125rem); + padding: 0.1875rem 0.5rem; } + .form-control.k-textarea { + padding: .1875rem .8rem; } + +.btn { + display: inline-block; + font-weight: 400; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: 1px solid transparent; + padding: 0.1875rem 0.875rem; + font-size: 0.8125rem; + line-height: 1.4286; + border-radius: 3px; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } + @media screen and (prefers-reduced-motion: reduce) { + .btn { + transition: none; } } + .btn:hover, .btn:focus { + text-decoration: none; } + .btn:focus, .btn.focus { + outline: 0; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn.disabled, .btn:disabled { + opacity: 1; + box-shadow: none; } + .btn:not(:disabled):not(.disabled) { + cursor: pointer; } + .btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn:not(:disabled):not(.disabled):active:focus, .btn:not(:disabled):not(.disabled).active:focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; } + +.btn-primary { + color: #fff; + background: #2A87FF; + border-color: #2A87FF; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-primary:hover { + color: #fff; + background: #529DFF; + border-color: #529DFF; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-primary:not(:disabled):not(.disabled):focus, .btn-primary:not(:disabled):not(.disabled).focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-primary.disabled, .btn-primary:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, + .show > .btn-primary.dropdown-toggle { + color: #fff; + background: #0E6DED; + border-color: #0E6DED; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-primary.dropdown-toggle:focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + +.btn-secondary { + color: #2D2F33; + background: #FFFFFF; + border-color: #EAECF3; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-secondary:hover { + color: #529DFF; + background: #FFFFFF; + border-color: #529DFF; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-secondary:not(:disabled):not(.disabled):focus, .btn-secondary:not(:disabled):not(.disabled).focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-secondary.disabled, .btn-secondary:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, + .show > .btn-secondary.dropdown-toggle { + color: #0E6DED; + background: #FFFFFF; + border-color: #0E6DED; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-secondary.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-danger { + color: #F46160; + background: #fff; + border-color: #F9B0AF; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-danger:hover { + color: #F46160; + background: rgba(244, 97, 96, 0.06); + border-color: #F46160; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-danger:not(:disabled):not(.disabled):focus, .btn-danger:not(:disabled):not(.disabled).focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-danger.disabled, .btn-danger:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, + .show > .btn-danger.dropdown-toggle { + color: #F46160; + background: rgba(244, 97, 96, 0.1); + border-color: #F46160; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-danger.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-success { + color: #fff; + background: #6CC77F; + border-color: #6CC77F; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-success:hover { + color: #fff; + background: #6CC77F; + border-color: #6CC77F; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-success:not(:disabled):not(.disabled):focus, .btn-success:not(:disabled):not(.disabled).focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-success.disabled, .btn-success:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, + .show > .btn-success.dropdown-toggle { + color: #fff; + background: #6CC77F; + border-color: #6CC77F; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-success.dropdown-toggle:focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + +.btn-warning { + color: #fff; + background: #F5A144; + border-color: #F5A144; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-warning:hover { + color: #fff; + background: #F5A144; + border-color: #F5A144; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-warning:not(:disabled):not(.disabled):focus, .btn-warning:not(:disabled):not(.disabled).focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-warning.disabled, .btn-warning:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, + .show > .btn-warning.dropdown-toggle { + color: #fff; + background: #F5A144; + border-color: #F5A144; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-warning.dropdown-toggle:focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + +.btn-dark { + color: #fff; + background: #343a40; + border-color: #343a40; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-dark:hover { + color: #fff; + background: #23272b; + border-color: #23272b; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-dark:not(:disabled):not(.disabled):focus, .btn-dark:not(:disabled):not(.disabled).focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-dark.disabled, .btn-dark:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, + .show > .btn-dark.dropdown-toggle { + color: #fff; + background: #1d2124; + border-color: #171a1d; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-dark.dropdown-toggle:focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + +.btn-light { + color: #212529; + background: #f8f9fa; + border-color: #f8f9fa; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-light:hover { + color: #212529; + background: #e2e6ea; + border-color: #dae0e5; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-light:not(:disabled):not(.disabled):focus, .btn-light:not(:disabled):not(.disabled).focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-light.disabled, .btn-light:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, + .show > .btn-light.dropdown-toggle { + color: #212529; + background: #dae0e5; + border-color: #d3d9df; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-light.dropdown-toggle:focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + +.btn-info { + color: #fff; + background: #2A87FF; + border-color: #2A87FF; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-info:hover { + color: #fff; + background: #529DFF; + border-color: #529DFF; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-info:not(:disabled):not(.disabled):focus, .btn-info:not(:disabled):not(.disabled).focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-info.disabled, .btn-info:disabled { + color: #878D99; + background: #EAECF3; + border-color: #DEE1EA; + box-shadow: none; } + .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, + .show > .btn-info.dropdown-toggle { + color: #fff; + background: #0E6DED; + border-color: #0E6DED; + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-info.dropdown-toggle:focus { + box-shadow: 0px 1px 0px 0px rgba(31, 35, 41, 0.12); } + +.btn-outline-primary { + color: #2A87FF; + background-color: transparent; + background-image: none; + border-color: #2A87FF; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-primary:hover { + color: #fff; + background-color: #2A87FF; + border-color: #2A87FF; } + .btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-primary:active, .btn-outline-primary.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #2A87FF; + background-color: transparent; } + .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, + .show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #2A87FF; + border-color: #2A87FF; } + .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-outline-secondary { + color: #6c757d; + background-color: transparent; + background-image: none; + border-color: #6c757d; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-secondary:hover { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; } + .btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-secondary:active, .btn-outline-secondary.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #6c757d; + background-color: transparent; } + .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, + .show > .btn-outline-secondary.dropdown-toggle { + color: #fff; + background-color: #6c757d; + border-color: #6c757d; } + .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-outline-success { + color: #6CC77F; + background-color: transparent; + background-image: none; + border-color: #6CC77F; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-success:hover { + color: #212529; + background-color: #6CC77F; + border-color: #6CC77F; } + .btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-success:active, .btn-outline-success.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-success.disabled, .btn-outline-success:disabled { + color: #6CC77F; + background-color: transparent; } + .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, + .show > .btn-outline-success.dropdown-toggle { + color: #212529; + background-color: #6CC77F; + border-color: #6CC77F; } + .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-outline-info { + color: #5EA4FF; + background-color: transparent; + background-image: none; + border-color: #5EA4FF; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-info:hover { + color: #212529; + background-color: #5EA4FF; + border-color: #5EA4FF; } + .btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-info:active, .btn-outline-info.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-info.disabled, .btn-outline-info:disabled { + color: #5EA4FF; + background-color: transparent; } + .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, + .show > .btn-outline-info.dropdown-toggle { + color: #212529; + background-color: #5EA4FF; + border-color: #5EA4FF; } + .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-outline-warning { + color: #F5A144; + background-color: transparent; + background-image: none; + border-color: #F5A144; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-warning:hover { + color: #212529; + background-color: #F5A144; + border-color: #F5A144; } + .btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-warning:active, .btn-outline-warning.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #F5A144; + background-color: transparent; } + .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, + .show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #F5A144; + border-color: #F5A144; } + .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-outline-danger { + color: #dc3545; + background-color: transparent; + background-image: none; + border-color: #dc3545; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-danger:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; } + .btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-danger:active, .btn-outline-danger.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #dc3545; + background-color: transparent; } + .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, + .show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; } + .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-outline-light { + color: #f8f9fa; + background-color: transparent; + background-image: none; + border-color: #f8f9fa; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-light:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-light:active, .btn-outline-light.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f8f9fa; + background-color: transparent; } + .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, + .show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; } + .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-outline-dark { + color: #343a40; + background-color: transparent; + background-image: none; + border-color: #343a40; + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-dark:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; } + .btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-dark:active, .btn-outline-dark.active { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + .btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #343a40; + background-color: transparent; } + .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, + .show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #343a40; + border-color: #343a40; } + .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, + .show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: 0px 2px 6px 0px rgba(31, 35, 41, 0.06); } + +.btn-link { + font-weight: 400; + color: #2A87FF; + background-color: transparent; + padding: 0; + border: 0; + line-height: 1.25rem; } + .btn-link:hover { + color: #529DFF; + text-decoration: none; + background-color: transparent; + border-color: transparent; } + .btn-link:focus, .btn-link.focus { + text-decoration: none; + border-color: transparent; + box-shadow: none; + color: #0E6DED; + box-shadow: none; } + .btn-link:active, .btn-link.active { + box-shadow: none !important; + color: #0E6DED; } + .btn-link:disabled, .btn-link.disabled { + color: #878D99; + pointer-events: none; } + .btn-link + .btn-link { + margin-right: 0.875rem; } + +.btn-lg { + padding: 0.25rem 1.125rem; + font-size: 0.875rem; + line-height: 1.4286; + border-radius: 3px; } + +.btn-sm { + padding: 0.125rem 0.5rem; + font-size: 0.75rem; + line-height: 1.4286; + border-radius: 3px; } + +.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%; } + +.btn-warning { + color: #fff; } + +.btn-outline-primary.disabled, .btn-outline-primary:disabled, +.btn-outline-secondary.disabled, +.btn-outline-secondary:disabled, +.btn-outline-success.disabled, +.btn-outline-success:disabled, +.btn-outline-danger.disabled, +.btn-outline-danger:disabled, +.btn-outline-warning.disabled, +.btn-outline-warning:disabled, +.btn-outline-info.disabled, +.btn-outline-info:disabled, +.btn-outline-light.disabled, +.btn-outline-light:disabled, +.btn-outline-dark.disabled, +.btn-outline-dark:disabled, +.btn-outline-link.disabled, +.btn-outline-link:disabled { + color: #878D99; + border-color: #DEE1EA; + background: transparent; } + +.dropdown-divider { + margin: 0.25rem 0; } + +.btn-group .btn + .dropdown-toggle-split { + margin-left: -1px; } + +.btn-group .btn-primary + .dropdown-toggle-split { + margin-left: -1px; + border-left-color: #E6E9F0; } + +.dropdown-item { + padding: 0.25rem 0.5rem; } diff --git a/packages/mobile-ui-vue/.eslintrc b/packages/mobile-ui-vue/.eslintrc new file mode 100644 index 00000000000..66f0bf50a04 --- /dev/null +++ b/packages/mobile-ui-vue/.eslintrc @@ -0,0 +1,9 @@ +{ + "root": true, + "extends": ["@farris"], + "rules": { + "semi": "off", + "prefer-object-spread": "off", + "@typescript-eslint/indent": ["error", 2] + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/.gitignore b/packages/mobile-ui-vue/.gitignore new file mode 100644 index 00000000000..a547bf36d8d --- /dev/null +++ b/packages/mobile-ui-vue/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/packages/mobile-ui-vue/.prettierrc b/packages/mobile-ui-vue/.prettierrc new file mode 100644 index 00000000000..e34771e9cce --- /dev/null +++ b/packages/mobile-ui-vue/.prettierrc @@ -0,0 +1,13 @@ +{ + "bracketSpacing": true, + "jsxBracketSameLine": true, + "jsxSingleQuote": false, + "printWidth": 140, + "semi": true, + "useTabs": false, + "trailingComma": "none", + "singleQuote": true, + "tabWidth": 2, + "endOfLine": "auto", + "proseWrap": "preserve" +} diff --git a/packages/mobile-ui-vue/.vscode/extensions.json b/packages/mobile-ui-vue/.vscode/extensions.json new file mode 100644 index 00000000000..c0a6e5a4811 --- /dev/null +++ b/packages/mobile-ui-vue/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/packages/mobile-ui-vue/README.md b/packages/mobile-ui-vue/README.md new file mode 100644 index 00000000000..ef72fd52424 --- /dev/null +++ b/packages/mobile-ui-vue/README.md @@ -0,0 +1,18 @@ +# Vue 3 + TypeScript + Vite + +This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` diff --git a/packages/mobile-ui-vue/components/adv-uploader/index.ts b/packages/mobile-ui-vue/components/adv-uploader/index.ts new file mode 100644 index 00000000000..92a76ae2e91 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/index.ts @@ -0,0 +1,17 @@ +import type { App } from 'vue'; +import AdvUploader from './src/adv-uploader.component'; +import { FilePicker } from './src/components/file-picker'; +import { defaultFilePickerInjectKey, defaultUploadFileContextMenuInjectKey } from './src/composition/types'; + +export { + AdvUploader, + FilePicker, + defaultFilePickerInjectKey, + defaultUploadFileContextMenuInjectKey, +}; + +export default { + install(app: App): void { + app.component(AdvUploader.name, AdvUploader); + } +}; diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.component.tsx b/packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.component.tsx new file mode 100644 index 00000000000..d3371381120 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.component.tsx @@ -0,0 +1,284 @@ +/** + * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * defination + */ +import { defineComponent, ComputedRef, computed, withModifiers, withDirectives, getCurrentInstance, ref } from 'vue'; +import { advUploaderProps, AdvUploaderProps } from './adv-uploader.props'; +import useUploader from './composition/use-uploader'; +import usePopupHandler from './composition/use-popup-handler'; +import useContextMenu from './composition/use-context-menu'; +import { FileItemCtx } from './composition/types'; +import config from '../../config'; +import { UploadFileItem } from './common/types'; +import { useLocale, vOnLongPress } from '../../hook'; +import { formatFileSize } from './common/upload'; +import { toRefsWithOverrideValue } from './common/to-refs'; + +export default defineComponent({ + name: 'FmAdvUploader', + + props: advUploaderProps, + + emit: [ + 'update:files', + 'validate', + 'progress', + 'oneFileSuccess', + 'oneFileFail', + 'uploadFinish', + 'delete', + 'popupOpen', + 'popupClose', + 'longPress', + 'fileItemClick', + ], + + setup(originalProps: AdvUploaderProps, context) { + const { prefix } = config; + const t = useLocale(`advUploader`); + const name = `${prefix}-adv-uploader`; + const { attrs, slots, expose, emit } = context; + + const overrideValue = ref<{ [key: string]: any }>({}); + const setPropValue = (key: string, val: any) => { + overrideValue.value = { ...overrideValue.value, [key]: val }; + }; + const props = toRefsWithOverrideValue(originalProps, overrideValue); + + const { popupHandler } = usePopupHandler(props, context); + + const { + displayFiles, + toUploadFiles, + uploading, + uploaderContext, + triggerUpload, + uploadFiles, + handleInnerDelete, + } = useUploader(props, context, popupHandler); + + const { + renderContextMenuList, + openContextMenuList, + executeContextMenuItem: innerExecContextMenuItem, + handleLongPress, + } = useContextMenu(props, context, popupHandler); + + const isImageCardList: ComputedRef = computed(() => { + return props.listType.value === 'image-card'; + }); + + const getFileItemCtx = (file: UploadFileItem, index: number): FileItemCtx => { + return { file, index, fileList: displayFiles.value, ctx: uploaderContext }; + }; + + const executeContextMenuItem = (file: UploadFileItem, ...keys: string[]): boolean => { + const index = displayFiles.value.findIndex((f) => { + if (file.id) { + return file.id === f.id; + } + return file.name === f.name; + }); + const ctx = getFileItemCtx(file, index); + return innerExecContextMenuItem(ctx, ...keys); + }; + + const handleDeleteClick = (item: UploadFileItem, index: number, e?: MouseEvent) => { + handleInnerDelete(getFileItemCtx(item, index), e); + }; + + const doDefaultPreview = (item: UploadFileItem, index: number) => { + if (!props.preventDefaultPreview.value) { + console.log(`[@todo] Default file preview:`, item, index); + } + }; + + const handleFileItemClick = (item: UploadFileItem, index: number, e: MouseEvent) => { + doDefaultPreview(item, index); + props.onFileItemClick?.value?.({ ctx: getFileItemCtx(item, index), e }); + emit("fileItemClick", { ctx: getFileItemCtx(item, index), e }); + }; + + const handleMoreBtnClick = (item: UploadFileItem, index: number, e: MouseEvent) => { + e.stopPropagation(); + openContextMenuList(getFileItemCtx(item, index)); + }; + + const renderImage = (item: UploadFileItem, _index: number) => { + return ( + + ); + }; + + const renderFileName = (item: UploadFileItem, _index: number) => { + return ( +
{item.name}
+ ); + }; + + const renderImageCardItem = (item: UploadFileItem, index: number) => { + const imageCard = ( +
+ {item.thumbnailUrl ? renderImage(item, index) : renderFileName(item, index)} + {(item.status === "waiting" || item.status === "progress" || item.status === "fail") && ( +
+ {item.status === "waiting" && ( +
{t('waiting')}
+ )} + {item.status === "progress" && ( + <> + +
+ {item.percent ? `${item.percent}%` : t('uploading')} +
+ + )} + {item.status === "fail" && ( + <> + +
{t('failed')}
+ + )} +
+ )} +
+ ); + return ( +
handleFileItemClick(item, index, e), + }}> + {withDirectives(imageCard, [[ + vOnLongPress, + (evt: TouchEvent) => handleLongPress(getFileItemCtx(item, index), evt), + '', + { interceptClick: true, preventDefaultContextMenu: props.longPressAction.value !== 'none' }, + ]])} + {!props.readonly.value && ( +
!props.disabled.value && handleDeleteClick(item, index, e), ["stop"]) + }>
+ )} +
+ ); + }; + + const renderDetailItem = (item: UploadFileItem, index: number) => { + const detailItem = ( +
+
+ +
+
+
+ {item.name || t('unnamedFile')} +
+
+ {item.status === "waiting" ? ( + {t('waiting')} + ) : item.status === "progress" ? ( + + {t('uploading') + (item.percent ? ` - ${item.percent}%` : "")} + + ) : item.status === "fail" ? ( + {t('failed')} + ) : ( + <> + {item.size && {formatFileSize(item.size)}} + {item.uploadTime && {item.uploadTime || ""}} + + )} +
+
+
+ ); + return ( +
handleFileItemClick(item, index, e), + }}> + {withDirectives(detailItem, [[ + vOnLongPress, + (evt: TouchEvent) => handleLongPress(getFileItemCtx(item, index), evt), + '', + { interceptClick: true, preventDefaultContextMenu: props.longPressAction.value !== 'none' }, + ]])} +
handleMoreBtnClick(item, index, e)}> + +
+
+ ); + }; + + const renderAddBtn = () => { + if (props.readonly.value || props.maxCount.value > 0 && props.maxCount.value <= displayFiles.value.length) { + return; + } + const defaultAddBtn = ( +
+ {slots.addBtnContent ? slots.addBtnContent() : ( +
+ )} +
+ ); + return ( +
+ {slots.addBtn ? slots.addBtn() : (slots.default ? slots.default : defaultAddBtn)} +
+ ); + }; + + expose({ + displayFiles, + toUploadFiles, + uploading, + uploaderContext, + triggerUpload, + uploadFiles, + executeContextMenuItem, + + setPropValue, + instance: getCurrentInstance(), + }); + + return () => { + return ( + <> +
+
+ {props.addBtnPosition.value === "start" && renderAddBtn()} + {displayFiles.value.map((item, index) => + isImageCardList.value ? renderImageCardItem(item, index) : renderDetailItem(item, index) + )} + {props.addBtnPosition.value !== "start" && renderAddBtn()} +
+
+ {renderContextMenuList({ + onDelete: (ctx) => handleDeleteClick(ctx.file, ctx.index), + onPreview: (ctx) => doDefaultPreview(ctx.file, ctx.index), + })} + + ); + }; + } + +}); diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.props.ts b/packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.props.ts new file mode 100644 index 00000000000..2adff988555 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/adv-uploader.props.ts @@ -0,0 +1,320 @@ +/** + * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ExtractPropTypes, PropType } from 'vue'; +import { + UploadFileItem, FileValidationProblem, HttpMethod, UploadResponseData, CustomUploadFileContext, + FileReadType, UploadResult, UploadResponseContext, UploadProgressContext, +} from './common/types'; +import { + FilePickerItem, ListType, UploaderContext, FileContextMenuItem, FileItemCtx, UploaderPopupType, +} from './composition/types'; + +export const advUploaderProps = { + + /** + * 已上传文件列表 + * @description 支持语法糖`v-model:files` + */ + files: { type: Array as PropType, default: () => [] }, + + /** + * 是否只读 + * @description 只读状态下将隐藏上传按钮和删除按钮 + */ + readonly: { type: Boolean, default: false }, + + /** + * 是否禁用 + * @description 禁用状态下将禁用上传按钮和删除按钮,优先级低于`readonly`属性 + */ + disabled: { type: Boolean, default: false }, + + /** + * 文件列表的内建样式 + * @description 支持两种基础样式:`details`(文件详情列表)、`image-card`(图片列表) + */ + listType: { type: String as PropType, default: "details" }, + + /** + * 上传按钮的位置 + * @description 默认在图片列表的右侧或文件详情列表的下方 + */ + addBtnPosition: { type: String as PropType<"start" | "end">, default: "end" }, + + /** + * 图片属性 + * @description 透传给缩略图的图片相关属性 + */ + imageProps: { type: Object as PropType>, default: {} }, + + /** + * 文件读取的结果类型 + * @description 指定用户所选文件是以`File`对象的形式返回,还是以base64格式的字符串的形式返回 + */ + fileReadType: { type: String as PropType, default: "file" }, + + /** + * 自定义的文件获取方式列表 + * @description 如果为空,则用户点击上传按钮后通过h5选择文件,如果非空,则通过列表中定义的方式获取文件 + */ + filePickerItems: { type: Array as PropType, default: undefined }, + + /** + * 自定义的上下文菜单 + * @description + * 1. 当`listType='details'`时,长按文件条目或者点击`更多`按钮,弹出上下文菜单; + * 2. 传入`longPressAction`属性,可以使得长按文件条目时弹出上下文菜单。 + */ + contextMenuItems: { type: Array as PropType, default: undefined }, + + /** + * 阻止默认的预览行为 + * @description 默认情况下,如果点击了图片类型的文件条目,则进行预览,其它类型的文件没有默认的预览。 + * 可以将本属性置为`true`,然后通过`fileItemClick`事件或回调方法实现自定义的文件预览。 + */ + preventDefaultPreview: { type: Boolean, default: false }, + + /** + * 获取文件的预览图片地址 + * @description 用户选择文件后,被选择的文件将被加入到文件列表中,此时文件的预览图地址可以根据本回调方法指定 + */ + getThumbnailUrl: { type: Function as PropType<(file: UploadFileItem) => string | Promise>, default: undefined }, + + /** + * 是否将原图作为缩略图 + * @description 如果文件是图片类型,则直接将之作为缩略图显示出来,不再调用`getThumbnailUrl`方法 + */ + useOriginalImageAsThumbnail: { type: Boolean, default: true }, + + /** + * 接受上传的文件类型 + * @description 仅影响默认的文件获取方式,自定义的文件获取方式可以读取该属性,但是不一定受约束 + */ + accept: { type: String, default: undefined }, + + /** + * 是否启用文件多选 + * @description 仅影响默认的文件获取方式,自定义的文件获取方式可以读取该属性,但是不一定受约束 + */ + multiple: { type: Boolean, default: true }, + + /** + * 文件数量上限 + * @description 值小于等于0则不限制 + */ + maxCount: { type: Number, default: -1 }, + + /** + * 单个文件的大小上限 + * @description 值小于等于0则不限制,单位:字节 + */ + maxSize: { type: Number, default: -1 }, + + /** + * 是否允许上传同名文件 + * @description 如果值为`false`,则过滤掉被选择的重名文件 + */ + allowDuplicateFile: { type: Boolean, default: true }, + + /** + * 单文件上传前回调 + * @description 如果返回`false`则将文件过滤掉 + */ + beforeUpload: { + type: Function as PropType<(file: UploadFileItem, ctx: UploaderContext) => boolean | Promise>, + default: undefined, + }, + + /** + * 处理校验问题的回调方法 + * @description 通常用来向用户提示错误信息 + */ + onValidate: { type: Function as PropType<(problems: FileValidationProblem[]) => void>, default: undefined }, + + /** + * 是否在选择文件后自动上传 + * @description 默认自动上传,如果手动上传,则文件被选中后处于等待状态,调用组件的上传方法后上传 + */ + autoUpload: { type: Boolean, default: true }, + + /** + * 上传请求的地址 + * @description `action`非空且`customUploadMethod`为空时,启用内置的文件上传方式 + */ + action: { type: String, default: "" }, + + /** + * HTTP的请求方法 + * @description 随`action`生效,可选值:POST/GET/PUT/OPTION/PATCH/post/get/put/option/patch + */ + method: { + type: String as PropType, + default: "POST", + validator(val: string): boolean { + if (!val) return true; + return ['POST', 'GET', 'PUT', 'OPTION', 'PATCH', 'post', 'get', 'put', 'option', 'patch'].includes(val); + }, + }, + + /** + * 文件在上传请求数据中的字段名 + * @description 随`action`生效,指定文件在请求数据中的字段名。 + * 如果`fileReadType`的值为`file`(默认)则文件作为`File`对象上传,如果`fileReadType`的值为`dataUrl`则文件作为base64格式的字符串上传。 + * 如果`singleRequestUpload=true`且用户选择了多个文件,所有文件将使用相同的字段名。 + * 如果默认的规则不能满足业务需求,请使用`formatRequestData`属性来自定义请求数据,或者通过`customUploadMethod`属性自定义上传方法。 + */ + name: { type: String, default: "file" }, + + /** + * 上传请求所需的额外字段 + * @description 随`action`生效,用于添加文件字段之外的其它字段。 + * 如果默认的规则不能满足业务需求,请使用`formatRequestData`属性来自定义请求数据。 + */ + data: { type: Object as PropType<{ [key: string]: any }>, default: undefined }, + + /** + * 自定义HTTP请求头 + * @description 随`action`生效 + */ + headers: { type: Object as PropType<{ [key: string]: string }>, default: undefined }, + + /** + * 是否携带cookie + * @description 随`action`生效,默认不携带 + */ + withCredentials: { type: Boolean, default: false }, + + /** + * 上传请求的超时时间 + * @description 随`action`生效,单位:毫秒,默认不设置 + */ + timeout: { type: Number, default: undefined }, + + /** + * 自定义上传请求的参数 + * @description 随`action`生效,用于自定义上传请求参数,本方法非空时,`name`和`data`字段均失效 + */ + formatRequestData: { + type: Function as PropType<(files: UploadFileItem[], data: { [key: string]: any }) => { [key: string]: any }>, + default: undefined, + }, + + /** + * 格式化上传请求的响应数据 + * @description 随`action`生效,用于将上传请求返回的数据格式化为规定的结构。 + * 如果请求失败或者`error`字段非空,则认为文件上传失败。 + * 如果请求成功并且`error`字段为空,则认为文件上传成功。 + * 如果未设置本回调方法,则根据请求是否成功以及请求的原始响应数据中的`error`字段是否为空判断文件是否上传成功。 + * 如果`singleRequestUpload=true`单次请求上传多个文件,则所有上传的文件只能一起成功或者一起失败。 + * 如果既要单次请求上传多个文件,又要单独记录每个文件的上传成功和失败状态,请通过自定义上传方法`customUploadMethod`实现。 + */ + formatResponseData: { + type: Function as PropType<(response: any, uploadFiles: UploadFileItem[]) => UploadResponseData>, + default: undefined, + }, + + /** + * 自定义上传方法 + * @description 如果非空,则使用本方法进行自定义上传,`action`等内置上传的相关字段均失效。 + * 本属性受`singleRequestUpload`字段影响:如果`singleRequestUpload=true`则用户选择多个文件时只会调用一次`customUploadMethod`,否则将调用多次。 + */ + customUploadMethod: { + type: Function as PropType<(uploadCtx: CustomUploadFileContext | CustomUploadFileContext[]) => void>, + default: undefined, + }, + + /** + * 单次请求上传所有文件 + * @description 如果有多个文件需要上传,若启用该属性则通过一个请求上传所有文件,否则每个文件发一次请求 + */ + singleRequestUpload: { type: Boolean, default: false }, + + /** + * 是否模拟上传进度 + */ + useMockProgress: { type: Boolean, default: true }, + + /** + * 单文件上传成功回调方法 + * @description 每个文件上传成功后都会调用该方法(`singleRequestUpload=true`时无效) + */ + onOneFileSuccess: { type: Function as PropType<(ctx: UploadResponseContext) => void>, default: undefined }, + + /** + * 单文件上传失败回调方法 + * @description 每个文件上传失败后都会调用该方法(`singleRequestUpload=true`时无效) + */ + onOneFileFail: { type: Function as PropType<(ctx: UploadResponseContext) => void>, default: undefined }, + + /** + * 上传进度变化回调方法 + * @description 当文件的上传进度发生变化时回调该方法 + */ + onProgress: { type: Function as PropType<(ctx: UploadProgressContext) => void>, default: undefined }, + + /** + * 上传完成后回调方法 + * @description 将用户单次选择的文件全部上传结束后回调 + */ + onUploadFinish: { type: Function as PropType<(res: UploadResult) => void>, default: undefined }, + + /** + * 文件条目点击事件回调方法 + * @description 当文件条目被点击时回调该方法,注意:点击文件条目上的删除按钮、菜单按钮不会回调该方法 + */ + onFileItemClick: { type: Function as PropType<(p: { ctx: FileItemCtx; e: MouseEvent }) => void>, default: undefined }, + + /** + * 文件条目长按事件回调方法 + * @description 允许定制文件条目被长按后的具体行为。 + * 1. `none`(不进行处理):可能会弹出浏览器默认的上下文菜单; + * 2. `preventDefault`(阻止默认行为):阻止浏览器默认的上下文菜单; + * 3. `showMenu`(显示自定义的上下文菜单):通过下方弹出的动作列表显示自定义的上下文菜单; + * 4. `showMenuInTooltip`(显示自定义的上下文菜单):通过`Tooltip`组件显示自定义的上下文菜单。 + */ + longPressAction: { type: String as PropType<"none" | "preventDefault" | "showMenu" | "showMenuInTooltip">, default: "none" }, + + /** + * 文件条目长按事件回调方法 + */ + onLongPress: { type: Function as PropType<(p: { ctx: FileItemCtx; e: TouchEvent }) => void>, default: undefined }, + + /** + * 删除回调方法 + * @description 当用户点击文件条目上的删除按钮时回调该方法 + */ + onDelete: { type: Function as PropType<(p: { ctx: FileItemCtx; e?: MouseEvent }) => void>, default: undefined }, + + /** + * 打开弹层时回调方法 + * @description 调用`close`方法可以主动关闭对应的弹层,且不会触发关闭弹层事件或回调。 + * 结合`onPopupOpen`和`onPopupClose`,可以实现对弹层的原生返回处理。 + */ + onPopupOpen: { + type: Function as PropType<(p: { close: () => void; type: UploaderPopupType; uid: string }) => void>, + default: undefined, + }, + + /** + * 关闭弹层时回调方法 + */ + onPopupClose: { + type: Function as PropType<(p: { type: UploaderPopupType; uid: string }) => void>, + default: undefined, + }, +}; + +export type AdvUploaderProps = ExtractPropTypes; diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/common/to-refs.ts b/packages/mobile-ui-vue/components/adv-uploader/src/common/to-refs.ts new file mode 100644 index 00000000000..2f6bce0a2fa --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/common/to-refs.ts @@ -0,0 +1,27 @@ +import { ComputedRef, computed, Ref, toRefs } from 'vue'; + +type IfAny = 0 extends 1 & T ? Y : N; + +type ToComputedRef = IfAny, [T] extends [ComputedRef] ? T : ComputedRef>; + +export type ToComputedRefs = { + [K in keyof T]: ToComputedRef +}; + +export function toRefsWithOverrideValue(object: T, overrideValue: Ref<{ [key: string]: any }>): ToComputedRefs { + if (typeof overrideValue.value !== "object") { + throw new Error("The value of overrideValue should be an object."); + } + const refs = toRefs(object); + const ret: any = Array.isArray(object) ? new Array(object.length) : {}; + Object.keys(refs).forEach((key) => { + ret[key] = computed(() => { + if (overrideValue.value[key] !== undefined) { + return overrideValue.value[key]; + } + const ogRef = (refs as any)[key]; + return typeof ogRef === "object" ? ogRef.value : ogRef; + }); + }); + return ret; +} diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/common/types.ts b/packages/mobile-ui-vue/components/adv-uploader/src/common/types.ts new file mode 100644 index 00000000000..fd0a8f2ca32 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/common/types.ts @@ -0,0 +1,320 @@ +/** + * 文件读取的结果类型 + * @description 值为`file`时返回文件的`File`对象,值为`dataUrl`时返回文件对应的base64编码 + */ +export type FileReadType = "file" | "dataUrl"; + +export type HttpMethod = 'POST' | 'GET' | 'PUT' | 'OPTION' | 'PATCH' | 'post' | 'get' | 'put' | 'option' | 'patch'; + +/** + * 文件条目 + */ +export interface FileItem { + + /** + * 文件名称 + */ + name?: string; + + /** + * 原始文件对象 + */ + rawFile?: File; + + /** + * base64格式的文件内容 + */ + dataUrl?: string; + + /** 原始文件的MIME类型 */ + type?: string; + + /** + * 文件的大小 + * @description 单位:字节 + */ + size?: number; + + /** 上次修改时间 */ + lastModified?: number; +} + +/** + * 上传文件条目 + */ +export interface UploadFileItem extends FileItem { + + /** + * 文件名称 + * @description 将根据文件的后缀名判断文件类型,影响预览等功能 + */ + name?: string; + + /** 文件的预览图片的地址 */ + thumbnailUrl?: string; + + /** 文件的下载地址 */ + url?: string; + + /** 文件的上传时间 */ + uploadTime?: string; + + /** + * 文件的大小 + * @description 单位:字节 + */ + size?: number; + + /** + * 文件上传状态 + * @description 上传成功、上传失败、上传中、等待上传 + */ + status?: 'success' | 'fail' | 'progress' | 'waiting'; + + /** + * 文件上传进度 + * @description [0, 100] + */ + percent?: number; + + /** + * 文件ID + * @description 用于在文件名称重复时唯一标识一个文件,允许为空 + */ + id?: string; + + /** 用户自定义的上下文数据 */ + [key: string]: any; +} + +/** 文件上传前校验参数 */ +export interface BeforeUploadValidationParam { + /** 待上传的(需要校验的)文件列表 */ + files: FileItem[]; + /** 已上传的文件列表 */ + uploadedFiles?: UploadFileItem[]; + /** 文件数量上限 */ + maxCount?: number; + /** 单个文件的大小上限 */ + maxSize?: number; + /** 是否允许重名文件 */ + allowDuplicateFile?: boolean; + /** 单个文件上传前回调 */ + beforeUpload?: (file: UploadFileItem, context: any) => boolean | Promise; + /** 上下文 */ + context?: any; +} + +/** 校验发现问题的类型 */ +export type FileValidationProblemType = + | 'SINGLE_FILE_OVER_SIZE_LIMIT' + | 'FILE_LIST_OVER_LENGTH_LIMIT' + | 'DUPLICATE_FILE_NAMES' + | 'BEFORE_UPLOAD_CALLBACK'; + +/** 校验发现的问题 */ +export interface FileValidationProblem { + + /** 问题类型 */ + type: FileValidationProblemType; + + /** + * 相关的文件列表 + * @description + * 1. 当`type="SINGLE_FILE_OVER_SIZE_LIMIT"`时,是本次所选文件中所有超过单文件大小上限的文件 + * 2. 当`type="FILE_LIST_OVER_LENGTH_LIMIT"`时,是本次所选的所有文件 + * 3. 当`type="DUPLICATE_FILE_NAMES"`时,是本次所选的文件中所有重名的文件 + * 4. 当`type="BEFORE_UPLOAD_CALLBACK"`时,是本次所选的文件中所有未通过`beforeUpload`自定义校验的文件 + */ + files: UploadFileItem[]; + + /** + * 校验参数 + * @description 包含本次校验的上下文参数,禁止修改 + */ + validationParam: BeforeUploadValidationParam; +} + +/** 文件上传前校验结果 */ +export interface BeforeUploadValidationResult { + + /** 通过校验的文件列表 */ + validFiles: UploadFileItem[]; + + /** 检测到的问题列表 */ + problems?: FileValidationProblem[]; +} + +export interface UploadProgressContext { + + /** 上传进度类型 */ + type: 'real' | 'mock'; + + /** + * 相关文件 + * @description 如果单请求上传多个文件,则长度大于一 + */ + files: UploadFileItem[]; + + /** 进度值 */ + percent: number; + + [key: string]: any; +} + +/** + * 上传请求响应数据 + * @description 后端上传接口响应的数据 + */ +export interface UploadResponseData { + + /** + * 错误信息 + * @description 如果本字段非空,则认为文件上传失败了 + */ + error?: string; + + /** + * 上传后的文件访问地址 + * @description 将被赋值给对应文件的`url`字段(单请求上传多个文件`singleRequestUpload=true`时无效) + */ + url?: string; + + /** + * 上传后的文件缩略图地址 + * @description 将被赋值给对应文件的`thumbnailUrl`字段(单请求上传多个文件`singleRequestUpload=true`时无效) + */ + thumbnailUrl?: string; + + [key: string]: any; +} + +/** + * 单个文件上传结果的上下文 + */ +export interface UploadResponseContext { + + /** + * 上传的文件 + */ + file: UploadFileItem; + + /** + * 是否上传成功 + */ + success: boolean; + + /** + * 上传请求的响应数据 + * @description 如果是单请求上传多个文件的模式(`singleRequestUpload=true`时),则该字段为空 + */ + responseData?: UploadResponseData; +} + +/** + * 自定义文件上传上下文 + * @description 当用户自定义文件上传方法时,可以通过本上下文中的回调方法通知文件的上传状态 + */ +export interface CustomUploadFileContext { + + /** 待上传的文件 */ + file: UploadFileItem; + + /** + * 更新上传进度回调 + * @description 用于更新当前文件的上传进度 + */ + onProgress: (e: { percent: number } & Record) => void; + + /** + * 上传成功回调 + * @description 文件上传成功后回调,允许将请求响应数据作为参数 + */ + onSuccess: (e?: UploadResponseData) => void; + + /** + * 上传失败回调 + * @description 文件上传失败后回调,允许将请求响应数据作为参数 + */ + onFail: (e?: UploadResponseData) => void; +} + +export interface UploadRequestContext { + /** 待上传的文件 */ + toUploadFiles: UploadFileItem[]; + /** 文件格式 */ + fileReadType?: FileReadType; + /** 上传请求所需的额外字段 */ + data?: { [key: string]: any }; + /** 单次请求上传所有文件 */ + singleRequestUpload?: boolean; + /** 上传请求的地址 */ + action?: string; + /** 文件在上传请求数据中的字段名 */ + name?: string; + /** 是否模拟上传进度 */ + useMockProgress?: boolean; + /** 自定义HTTP请求头 */ + headers?: { [key: string]: string }; + /** 是否携带cookie */ + withCredentials?: boolean; + /** HTTP的请求方法 */ + method?: HttpMethod; + /** 自定义上传请求的参数 */ + formatRequestData?: (files: UploadFileItem[], data: { [key: string]: any }) => { [key: string]: any }; + /** 格式化上传请求的响应数据 */ + formatResponseData?: (response: any, uploadFiles: UploadFileItem[]) => UploadResponseData; + /** 自定义上传方法 */ + customUploadMethod?: (uploadCtx: CustomUploadFileContext | CustomUploadFileContext[]) => void; + /** 单文件上传成功回调方法 */ + onOneFileSuccess?: (ctx: UploadResponseContext) => void; + /** 单文件上传失败回调方法 */ + onOneFileFail?: (ctx: UploadResponseContext) => void; + /** 上传进度变化回调方法 */ + onProgress?: (ctx?: UploadProgressContext) => void; +} + +export interface UploadResult { + + /** + * 单请求多文件上传的响应数据 + * @description 上传请求的响应数据,仅当单请求上传多个文件`singleRequestUpload=true`时非空 + */ + responseData?: UploadResponseData; + + /** + * 上传成功的文件及其响应数据 + * @description 如果没有文件上传成功,则为空 + */ + successItems?: UploadResponseContext[]; + + /** + * 上传失败的文件及其响应数据 + * @description 如果没有文件上传失败,则为空 + */ + failedItems?: UploadResponseContext[]; +} + +export interface XhrResponseContext { + event?: ProgressEvent; + files?: UploadFileItem[]; + XMLHttpRequest?: XMLHttpRequest; + response?: any; +} + +export interface XhrOptions { + action: string; + method?: string; + fileReadType?: FileReadType; + withCredentials?: boolean; + headers?: { [key: string]: string }; + data?: { [key: string]: any }; + name?: string; + files?: UploadFileItem[]; + useMockProgress?: boolean; + mockProgressDuration?: number; + formatRequestData?: (files: UploadFileItem[], data: { [key: string]: any }) => { [key: string]: any }; + onError: (context: XhrResponseContext) => void; + onSuccess: (context: XhrResponseContext) => void; + onProgress?: (context: UploadProgressContext) => void; +} diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/common/upload.ts b/packages/mobile-ui-vue/components/adv-uploader/src/common/upload.ts new file mode 100644 index 00000000000..62b56d453ac --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/common/upload.ts @@ -0,0 +1,265 @@ +import { + FileItem, UploadFileItem, BeforeUploadValidationParam, BeforeUploadValidationResult, FileReadType, + UploadRequestContext, UploadResult, CustomUploadFileContext, XhrResponseContext, +} from './types'; +import xhr from './xhr'; + +export function initUploadFileItems(fileItems: FileItem[]): UploadFileItem[] { + fileItems.forEach((item: UploadFileItem) => { + item.status = "waiting"; + item.percent = 0; + }); + return fileItems; +} + +/** + * 校验待上传的文件 + * @param params 上传前校验上下文 + * @returns 上传前校验结果 + */ +export function validateFiles(params: BeforeUploadValidationParam): Promise { + const files = initUploadFileItems(params.files); + // @todo 对待上传的文件列表进行校验 + return Promise.resolve({ + validFiles: files + }); +} + +function file2DataUrl(fileItem: UploadFileItem): Promise { + return new Promise((resolve) => { + const reader = new FileReader(); + reader.onload = (event) => { + fileItem.dataUrl = (event.target as FileReader).result as string; + resolve(fileItem); + }; + reader.onerror = () => { + resolve(fileItem); + }; + const file = fileItem.rawFile as File; + reader.readAsDataURL(file); + }); +} + +function dataUrl2File(fileItem: UploadFileItem): Promise { + const base64 = fileItem.dataUrl as string; + const strArr = base64.split(','); + const bstr = atob(strArr[1]); + const u8arr = new Uint8Array(bstr.length); + let n = bstr.length; + while (n--) { + u8arr[n] = bstr.charCodeAt(n); + } + fileItem.rawFile = new File([u8arr], fileItem.name || "", { type: fileItem.type || undefined }); + return Promise.resolve(fileItem); +} + +export function readFile(fileItem: UploadFileItem, type: FileReadType): Promise { + if (type === "dataUrl" && fileItem && fileItem.rawFile && !fileItem.dataUrl) { + return file2DataUrl(fileItem); + } + if (type === "file" && fileItem && fileItem.dataUrl && !fileItem.rawFile) { + return dataUrl2File(fileItem); + } + return Promise.resolve(fileItem); +} + +function getFileTypeFromDataUrl(dataUrl: string): string | null { + if (!dataUrl || !dataUrl.startsWith("data:")) { + return null; + } + const parts = dataUrl.split(";"); + if (parts.length < 2) { + return null; + } + const mimeType = parts[0].substring(5); + return mimeType || null; +} + +/** + * 获取文件的MIME类型 + * @param fileItem 文件条目 + * @returns 文件的MIME类型 + */ +export function getFileType(fileItem: UploadFileItem): string | null { + return fileItem?.type || fileItem?.rawFile?.type || getFileTypeFromDataUrl(fileItem?.dataUrl || ""); +} + +/** 判断文件是否为图片 */ +export function isImage(fileItem: UploadFileItem): boolean { + const mimeType = getFileType(fileItem); + return !!mimeType && mimeType.includes("image"); +} + +function handleXhrResponseContext(xhrResponseContext: XhrResponseContext, error: boolean, uploadCtx: UploadRequestContext): UploadResult { + const files = xhrResponseContext.files || []; + let responseData = xhrResponseContext.response; + if (uploadCtx.formatResponseData) { + responseData = uploadCtx.formatResponseData(responseData, files); + } + if (responseData.error) { + error = true; + } + const res: UploadResult = {}; + if (files.length > 1 || uploadCtx.singleRequestUpload) { + res.responseData = responseData; + } + if (error) { + files.forEach(file => { file.status = "fail"; }); + res.failedItems = []; + } else { + files.forEach(file => { file.status = "success"; file.percent = 100; }); + res.successItems = []; + } + const tgtItemArr = error ? res.failedItems : res.successItems; + files.forEach(file => { + tgtItemArr?.push({ file, success: !error, responseData: files.length > 1 ? undefined : responseData }); + }); + if (files.length === 1 && !uploadCtx.singleRequestUpload) { + if (error) { + uploadCtx.onOneFileFail && uploadCtx.onOneFileFail({ file: files[0], success: false, responseData }); + } else { + uploadCtx.onOneFileSuccess && uploadCtx.onOneFileSuccess({ file: files[0], success: true, responseData }); + } + } + return res; +} + +/** + * 单次请求上传所有文件 + * @param ctx 文件上传上下文 + * @returns 上传结果 + */ +export function uploadAllAtOnce(ctx: UploadRequestContext): Promise { + const { toUploadFiles, action, customUploadMethod, singleRequestUpload } = ctx; + return new Promise((resolve) => { + if (!action && !customUploadMethod) { + console.error(`[FmAdvUploader] Upload failed, 'action' and 'customUploadMethod' cannot both be empty.`); + resolve({}); + return; + } + if (!toUploadFiles || !toUploadFiles.length) { + resolve({}); + return; + } + toUploadFiles.forEach((file) => { + file.status = 'progress'; + file.percent = 0; + }); + ctx.onProgress?.(); + if (customUploadMethod) { + const uploadResult: UploadResult = {}; + const uploadCtxArr: CustomUploadFileContext[] = []; + const uploadPromiseArr: Promise[] = []; + toUploadFiles.forEach((file) => { + let resolveFunc: (value: void | PromiseLike) => void; + const uploadPromise = new Promise((_resolve) => { + resolveFunc = _resolve; + }); + const uploadCtx: CustomUploadFileContext = { + file, + onSuccess: (responseData) => { + uploadResult.successItems = uploadResult.successItems || []; + uploadResult.successItems.push({ file, success: true, responseData }); + file.status = "success"; + file.percent = 100; + file.thumbnailUrl = responseData?.thumbnailUrl || file.thumbnailUrl; + file.url = responseData?.url || file.url; + ctx.onOneFileSuccess?.({ file, success: true, responseData }); + resolveFunc(); + }, + onFail: (responseData) => { + uploadResult.failedItems = uploadResult.failedItems || []; + uploadResult.failedItems.push({ file, success: false, responseData }); + file.status = "fail"; + ctx.onOneFileFail?.({ file, success: false, responseData }); + resolveFunc(); + }, + onProgress: (e) => { + if (!e.percent || typeof e.percent !== "number") { + return; + } + file.percent = e.percent; + ctx.onProgress?.({ ...e, type: 'real', files: [file] }); + }, + }; + uploadCtxArr.push(uploadCtx); + uploadPromiseArr.push(uploadPromise); + }); + customUploadMethod(singleRequestUpload ? uploadCtxArr : uploadCtxArr[0]); + Promise.all(uploadPromiseArr).then(() => { + resolve(uploadResult); + }).catch(() => { + resolve({}); + }); + } else { + xhr({ + action: action || "", + method: ctx.method, + fileReadType: ctx.fileReadType, + withCredentials: ctx.withCredentials, + headers: ctx.headers, + data: ctx.data, + files: ctx.toUploadFiles, + name: ctx.name, + useMockProgress: ctx.useMockProgress, + formatRequestData: ctx.formatRequestData, + onSuccess: (p) => { + const res = handleXhrResponseContext(p, false, ctx); + resolve(res); + }, + onError: (p) => { + const res = handleXhrResponseContext(p, true, ctx); + resolve(res); + }, + onProgress: ctx.onProgress, + }); + } + }); +} + +/** + * 上传多个文件 + * @description 根据`singleRequestUpload`参数决定分多次请求上传每个文件还是一次请求上传所有文件 + * @param ctx 文件上传上下文 + * @returns 上传结果 + */ +export function upload(ctx: UploadRequestContext): Promise { + const { singleRequestUpload, toUploadFiles } = ctx; + return new Promise((resolve) => { + if (singleRequestUpload) { + uploadAllAtOnce(ctx).then((res) => { + resolve(res); + }); + } else { + const pList = toUploadFiles.map((file) => ( + uploadAllAtOnce({ ...ctx, toUploadFiles: [file] }) + )); + Promise.all(pList).then(resArr => { + const result: UploadResult = {}; + resArr.forEach(r => { + if (r.failedItems && r.failedItems.length) { + result.failedItems = result.failedItems || []; + result.failedItems.push(...r.failedItems); + } + if (r.successItems && r.successItems.length) { + result.successItems = result.successItems || []; + result.successItems.push(...r.successItems); + } + }); + resolve(result); + }); + } + }); +} + +export const formatFileSize = (size: number): string => { + if (typeof size !== "number") { + return ""; + } + if (size < 1024 ** 2) { + return (size / 1024).toFixed(2) + "KB"; + } if (size >= 1024 ** 2 && size < 1024 ** 3) { + return (size / 1024 ** 2).toFixed(2) + "MB"; + } + return (size / 1024 ** 3).toFixed(2) + "GB"; +}; diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/common/xhr.ts b/packages/mobile-ui-vue/components/adv-uploader/src/common/xhr.ts new file mode 100644 index 00000000000..5ded6cd5dad --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/common/xhr.ts @@ -0,0 +1,149 @@ +import { UploadFileItem, XhrOptions } from './types'; + +export function xhr({ + action, + method = 'POST', + fileReadType = 'file', + withCredentials = false, + headers = {}, + data = {}, + files = [], + name = 'file', + useMockProgress = true, + mockProgressDuration = 300, + formatRequestData, + onSuccess, + onError, + onProgress, +}: XhrOptions) { + // support files + const innerFiles: UploadFileItem[] = files || []; + let percent = 0; + + // eslint-disable-next-line no-shadow + const xhr = new XMLHttpRequest(); + if (withCredentials) { + xhr.withCredentials = true; + } + + let timer1: NodeJS.Timeout; + let timer2: NodeJS.Timeout; + if (useMockProgress && files[0]?.status === 'progress') { + // 超过 500 毫秒再开启虚拟进度 + const timer2 = setTimeout(() => { + // 只有真实进度一直不存在时才需要模拟进度 + timer1 = setInterval(() => { + if (percent + 10 < 100) { + percent = Math.max(percent + 10, percent); + if (files[0] && percent !== files[0].percent) { + files[0].percent = percent; + onProgress && onProgress({ + percent, + files: innerFiles.map((file) => ({ ...file, percent })), + type: 'mock', + XMLHttpRequest: xhr, + }); + } + } else { + clearInterval(timer1); + } + }, mockProgressDuration) as NodeJS.Timeout; + clearTimeout(timer2); + }, mockProgressDuration); + } + + // set send data + const formData = new FormData(); + if (formatRequestData) { + const requestData = formatRequestData(innerFiles, { ...data }) || { ...data }; + Object.keys(requestData).forEach((key) => { + formData.append(key, requestData[key]); + }); + } else { + Object.keys(data).forEach((key) => { + formData.append(key, data[key]); + }); + innerFiles.forEach(file => { + formData.append(name, (fileReadType === "dataUrl" ? file.dataUrl : file.rawFile) || ""); + }); + } + + xhr.open(method, action, true); + // custom request headers + Object.keys(headers).forEach((key) => { + xhr.setRequestHeader(key, headers[key]); + }); + + xhr.onerror = (event: ProgressEvent) => { + onError({ event, files: innerFiles, XMLHttpRequest: xhr }); + clearInterval(timer1); + clearTimeout(timer2); + }; + + xhr.ontimeout = (event) => { + onError({ event, files: innerFiles, XMLHttpRequest: xhr }); + }; + + if (xhr.upload) { + xhr.upload.onprogress = (event: ProgressEvent) => { + let realPercent = 0; + if (event.total > 0) { + realPercent = Math.round((event.loaded / event.total) * 100); + } + percent = Math.max(realPercent, percent); + if (percent !== realPercent && innerFiles[0]?.percent !== percent) { + const progressFiles = innerFiles.map((item) => ({ ...item, percent })); + onProgress && onProgress({ + event, + percent, + files: progressFiles, + type: 'real', + XMLHttpRequest: xhr, + }); + } + }; + } + + // eslint-disable-next-line consistent-return + xhr.onload = (event: ProgressEvent) => { + let response: { [key: string]: any } = {}; + response.XMLHttpRequest = xhr; + const isFail = xhr.status < 200 || xhr.status >= 300; + if (isFail) { + return onError({ + event, + files: innerFiles, + response, + XMLHttpRequest: xhr, + }); + } + const text = xhr.responseText || xhr.response; + try { + response = JSON.parse(text); + } catch (e) { + response = text; + console.error(`Upload response is not a valid json`); + } + clearInterval(timer1); + clearTimeout(timer2); + innerFiles.forEach((file) => { + file.percent = 100; + file.status = 'success'; + file.uploadTime = response?.uploadTime; + }); + if (typeof response === 'object') { + response.XMLHttpRequest = xhr; + } + onSuccess({ + event, + files: [...innerFiles], + XMLHttpRequest: xhr, + response, + }); + }; + + xhr.send(formData); + return xhr; +} + +export default xhr; diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/components/action-sheet.component.tsx b/packages/mobile-ui-vue/components/adv-uploader/src/components/action-sheet.component.tsx new file mode 100644 index 00000000000..bf7debf9d1b --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/components/action-sheet.component.tsx @@ -0,0 +1,87 @@ +import { PropType, defineComponent, withModifiers } from 'vue'; +import { ActionSheetItem } from '../composition/types'; +import config from '../../../config'; +import { ActionSheet } from '../../../action-sheet'; + +export default defineComponent({ + name: 'FmAdvUploaderActionSheet', + + components: { + [ActionSheet.name]: ActionSheet, + }, + + props: { + show: { type: Boolean, default: false }, + + actions: { type: Array as PropType, default: () => [] }, + + cancelText: { type: String }, + + zIndex: [Number, String], + + teleport: null, + }, + + emits: { + 'update:show': function (_value: boolean) { + return true; + }, + + select(_item: ActionSheetItem) { + return true; + } + }, + + setup(props, { emit }) { + const { prefix } = config; + const name = `${prefix}-adv-uploader-actionsheet`; + + const onUpdateShow = (show: boolean) => { + emit("update:show", show); + }; + + const handleItemClick = (item: ActionSheetItem) => { + if (!item.__disabled__) { + emit('select', item); + } + }; + + const handleCancelBtnClick = () => { + onUpdateShow(false); + }; + + return () => ( + + +
+ {props.actions.filter((item) => + item.__visible__ !== false && item.__name__ + ).map((item, index) => ( +
handleItemClick(item), ['stop'])} + class={[ + `${name}__item`, + item.__disabled__ ? `${name}__item--disabled` : null, + item.__tip__ ? `${name}__item--has-tip` : null + ]}> +
{item.__name__}
+ {item.__tip__ &&
{item.__tip__}
} +
+ ))} + + {props.cancelText && ( +
+ +
+ {props.cancelText} +
+
+ )} +
+ +
+ ); + } +}); diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/components/context-menu-list.component.tsx b/packages/mobile-ui-vue/components/adv-uploader/src/components/context-menu-list.component.tsx new file mode 100644 index 00000000000..91d4ab7d57f --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/components/context-menu-list.component.tsx @@ -0,0 +1,76 @@ +import { defineComponent, PropType } from 'vue'; +import { useLocale } from '../../../hook'; +import { FileContextMenuItem, FileItemCtx } from '../composition/types'; +import FmAdvUploaderActionSheet from './action-sheet.component'; + +export default defineComponent({ + name: 'FmFileContextMenuList', + + props: { + show: { type: Boolean, default: false }, + + contextMenuItems: { type: Array as PropType }, + + fileItemCtx: { type: Object as PropType }, + + teleport: { type: null, default: "body" }, + + zIndex: { type: Number, default: 110 }, + }, + + emits: { + cancel() { + return true; + }, + + 'update:show': function (_value: boolean) { + return true; + }, + + delete(_ctx: FileItemCtx) { + return true; + }, + + preview(_ctx: FileItemCtx) { + return true; + }, + }, + + setup(props, { emit }) { + const t = useLocale('adv-uploader'); + + const onUpdateShow = (show: boolean) => { + emit("update:show", show); + }; + + const handleSelect = (menuItem: FileContextMenuItem) => { + onUpdateShow(false); + if (!props.fileItemCtx) { + return; + } + if (menuItem.handler) { + const uploaderCtx = props.fileItemCtx.ctx || {}; + uploaderCtx.options = menuItem.options || {}; + menuItem.handler({ ...props.fileItemCtx, ctx: uploaderCtx }); + } + if (menuItem.key === "delete") { + emit("delete", props.fileItemCtx); + } + if (menuItem.key === "preview") { + emit("preview", props.fileItemCtx); + } + }; + + return () => ( + handleSelect(item as FileContextMenuItem) + }}> + + ); + } + +}); diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker-list.component.tsx b/packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker-list.component.tsx new file mode 100644 index 00000000000..4eade91d463 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker-list.component.tsx @@ -0,0 +1,77 @@ +import { defineComponent, PropType } from 'vue'; +import { isPromise } from '../../../utils'; +import { useLocale } from '../../../hook'; +import { FileItem } from '../common/types'; +import { FilePickerItem, UploaderContext } from '../composition/types'; +import FmAdvUploaderActionSheet from './action-sheet.component'; + +export default defineComponent({ + name: 'FmFilePickerList', + + props: { + show: { type: Boolean, default: false }, + + filePickerItems: { type: Array as PropType }, + + ctx: { type: Object as PropType, default: () => { } }, + + teleport: { type: null, default: "body" }, + + zIndex: { type: Number, default: 110 }, + }, + + emits: { + cancel() { + return true; + }, + + 'update:show': function (_value: boolean) { + return true; + }, + + chooseFile(_files: FileItem[] | null) { + return true; + }, + + needChooseLocalFile() { + return true; + }, + }, + + setup(props, { emit }) { + const t = useLocale('adv-uploader'); + + const onUpdateShow = (show: boolean) => { + emit("update:show", show); + }; + + const handleSelect = (item: FilePickerItem) => { + onUpdateShow(false); + if (!item || !item.handler) { + emit("needChooseLocalFile"); + return; + } + const result = item.handler({ ...props.ctx, options: item.options || {} }); + if (!isPromise(result)) { + return; + } + result.then((files) => { + emit('chooseFile', files || null); + }).catch(() => { + emit('chooseFile', null); + }); + }; + + return () => ( + handleSelect(item as FilePickerItem), + }}> + + ); + } + +}); diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker.tsx b/packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker.tsx new file mode 100644 index 00000000000..80f0b154ee5 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/components/file-picker.tsx @@ -0,0 +1,222 @@ +import { ComponentPublicInstance, reactive, defineComponent, ref } from 'vue'; +import { isFunction } from '../../../utils'; +import { mountComponent, useCurrentLang } from '../../../hook'; +import { FileItem } from '../common/types'; +import { FilePickerItem, FilePickerOption, UploaderContext } from '../composition/types'; +import FmFilePickerList from './file-picker-list.component'; + +export class FilePicker { + + /** 文件选取后回调 */ + public onChooseFile: ((files: FileItem[]) => void) | undefined; + + /** 显示文件选取列表后回调 */ + public onOpen: ((close: () => void, uid: string) => void) | undefined; + + /** 关闭文件选取列表后回调 */ + public onClose: ((uid: string) => void) | undefined; + + private pickerListState: { + show: boolean; + filePickerItems: FilePickerItem[]; + ctx: FilePickerOption; + teleport: HTMLElement; + zIndex: number; + }; + + private fileInputState: { + accept: string; + multiple: boolean; + }; + + private filePickerInstance: ComponentPublicInstance | undefined; + + private chooseLocalFile: (() => void) | undefined; + + private popupUID: string; + + constructor() { + this.popupUID = ""; + this.pickerListState = reactive({ + show: false, + filePickerItems: [], + ctx: {}, + teleport: document.body, + zIndex: 110, + }); + this.fileInputState = reactive({ + accept: "*", + multiple: true, + }); + } + + private close(): void { + this.pickerListState.show = false; + } + + private toggle(show: boolean): void { + if (!!this.pickerListState.show === !!show) { + return; + } + this.pickerListState.show = !!show; + if (show) { + this.popupUID = (new Date()).getTime().toString(); + this.onOpen?.(() => this.close(), this.popupUID); + } else { + this.onClose?.(this.popupUID); + } + } + + private handleFileChoosed(files: FileItem[] | null): void { + if (!files) { + files = []; + } + this.onChooseFile?.(files); + } + + /** + * 设置文件获取方式列表 + * @param items 文件获取方式列表 + */ + public setFilePickerItems(items: FilePickerItem[]): void { + if (!items || !Array.isArray(items)) { + return; + } + this.pickerListState.filePickerItems = [...items]; + if (items.length === 0) { + this.toggle(false); + } + } + + /** + * 触发本地文件选取 + * @description 通过h5方式选取本地文件 + */ + public triggerChooseLocalFile(): void { + this.chooseLocalFile?.(); + } + + /** + * 选取文件 + * @description + * 1. 如果文件获取方式列表非空,则调用本方法后将弹出文件获取方式列表,用户可以从列表中选择一种文件获取方式 + * 2. 如果文件获取方式列表为空,则调用本方法后,将通过h5方式获取文件(由于浏览器安全限制,需要在用户操作的上下文调用本方法,否则无效) + * 3. 用户通过任意一种方式选取文件后,回调方法`onChooseFile`将被调用 + * @param options 文件获取相关参数 + * @param zIndex 文件获取方式列表的`z-index`,默认为`110` + * @param teleportDest 弹出的文件获取方式列表将被挂到哪个元素上,默认为`document.body` + */ + public pickFile(options?: FilePickerOption, zIndex?: number, teleportDest?: HTMLElement): void { + if (options) { + this.pickerListState.ctx = options; + options.accept && (this.fileInputState.accept = options.accept); + (typeof options.multiple === "boolean") && (this.fileInputState.multiple = options.multiple); + } + (typeof zIndex === 'number') && (this.pickerListState.zIndex = zIndex); + teleportDest && (this.pickerListState.teleport = teleportDest); + + if (!this.filePickerInstance) { + const self = this; + const mountResult = mountComponent(defineComponent({ + setup() { + const inputRef = ref(); + + const resetInput = () => { + if (inputRef.value) { + inputRef.value.value = ''; + } + }; + + const toResolve = (files: File[]) => { + const results: FileItem[] = []; + files.forEach((file) => { + results.push({ + name: file.name, + rawFile: file, + type: file.type, + size: file.size, + lastModified: file.lastModified, + }); + }); + self.handleFileChoosed(results); + }; + + const onChange = (event: Event) => { + const { files } = event.target as HTMLInputElement; + if (!files || !files.length) { + return; + } + const fileArr = Array.from(files); + toResolve(fileArr); + resetInput(); + }; + + const handleInputClick = (evt: MouseEvent) => { + evt?.stopPropagation?.(); + }; + + const chooseLocalFile = () => { + if (inputRef.value) { + inputRef.value.click(); + } + }; + + self.chooseLocalFile = chooseLocalFile; + + return () => ( + <> + + + + + ); + } + })); + this.filePickerInstance = mountResult.instance; + } + this.updateActionSheetProps(); + if (this.pickerListState.filePickerItems.length > 0) { + this.toggle(true); + } else { + this.triggerChooseLocalFile(); + } + } + + private updateActionSheetProps(): void { + const items = this.pickerListState.filePickerItems || []; + const lang = useCurrentLang(); + const ctx: UploaderContext = { ...this.pickerListState.ctx }; + ctx.lang = lang.value; + items.forEach((item) => { + ctx.options = item.options || {}; + let name = item.nameI18n?.[lang.value] || item.name; + if (isFunction(name)) { + name = name(ctx); + } + let visible = typeof item.visible === "boolean" ? item.visible : true; + if (isFunction(item.visible)) { + visible = item.visible(ctx); + } + const tip = isFunction(item.tip) ? item.tip(ctx) : item.tip || ""; + + item.__key__ = item.key; + item.__name__ = name; + item.__visible__ = visible; + item.__disabled__ = false; + item.__tip__ = tip; + }); + } + +} diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/composition/types.ts b/packages/mobile-ui-vue/components/adv-uploader/src/composition/types.ts new file mode 100644 index 00000000000..a04069b4d31 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/composition/types.ts @@ -0,0 +1,304 @@ +import { InjectionKey } from 'vue'; +import { FileItem, UploadFileItem, FileReadType } from '../common/types'; + +/** + * 内建的列表样式 + * @description `文件详情列表`或者`图片列表` + */ +export type ListType = "details" | "image-card"; + +/** + * 文件获取相关参数 + */ +export interface FilePickerOption { + + /** + * 接受上传的文件类型 + * @description 默认不限制 + */ + accept?: string; + + /** + * 是否启用文件多选 + * @description 是否允许用户一次选择多个文件 + */ + multiple?: boolean; + + /** + * 文件读取的结果类型 + * @description 用户选择的文件将被转化为本字段所指定的格式 + */ + fileReadType?: FileReadType; + + /** + * 单个文件的大小限制 + * @description 单位:字节 + */ + maxSize?: number; + + /** + * 最大文件数量 + * @description 最多可以上传多少个文件 + */ + maxCount?: number; + + /** + * 已上传文件的数量 + * @description 已经上传了多少个文件,用`maxCount - uploadedFileCount`可以得到还能上传的最大文件数量 + */ + uploadedFileCount?: number; + + [key: string]: any; +} + +/** + * 上下文参数 + * @description 组件的相关属性,只读,禁止修改 + */ +export interface UploaderContext extends FilePickerOption { + + /** + * 当前环境的语言代码 + * @description 如果需要支持国际化,请根据语言代码使用对应的国际化资源 + */ + lang?: string; + + /** + * 文件列表的内建样式 + * @description 值来源:组件的`listType`属性 + */ + listType?: ListType; + + /** + * 组件是否处于只读状态 + * @description 值来源:组件的`readonly`属性 + */ + readonly?: boolean; + + /** + * 组件是否处于禁用状态 + * @description 值来源:组件的`disabled`属性 + */ + disabled?: boolean; + + /** + * 接受上传的文件类型 + * @description 值来源:组件的`accept`属性 + */ + accept?: string; + + /** + * 是否启用文件多选 + * @description 值来源:组件的`multiple`属性 + */ + multiple?: boolean; + + /** + * 文件读取的结果类型 + * @description 值来源:组件的`fileReadType`属性 + */ + fileReadType?: FileReadType; + + /** + * 单个文件的大小限制 + * @description 单位:字节,值来源:组件的`maxSize`属性 + */ + maxSize?: number; + + /** + * 最大文件数量 + * @description 值来源:组件的`maxCount`属性 + */ + maxCount?: number; + + /** + * 已上传文件的数量 + * @description 值来源:组件的`files`的长度,即`files.length` + */ + uploadedFileCount?: number; + + /** + * 显示的文件列表 + * @description 值来源:组件正在显示的文件列表 + */ + displayFiles?: UploadFileItem[]; + + /** + * 触发本地文件选择 + * @description 触发h5本地文件选择,只能在用户操作上下文调用 + */ + chooseLocalFile?: () => void; + + /** + * 自定义选项 + */ + options?: Record; +} + +/** 动作列表条目 */ +export interface ActionSheetItem { + __key__?: string; + __name__?: string; + __visible__?: boolean; + __disabled__?: boolean; + __tip__?: string; + [key: string]: any; +} + +/** + * 自定义文件获取方式 + */ +export interface FilePickerItem extends ActionSheetItem { + + /** + * 方式编号 + * @description 唯一标识,不可重复 + */ + key: string; + + /** + * 显示的名称 + */ + name?: string | ((ctx: UploaderContext) => string); + + /** + * 显示的名称(国际化) + * @description 优先级高于字符串类型的`name`字段,低于回调方法类型的`name`字段 + */ + nameI18n?: { [lang: string]: string }; + + /** + * 文件获取的实现方法 + * @description 当用户选择本方式后,将调用本方法来获取文件。 + * 如果`handler`字段为空,且不存在默认配置,则用户选择此方式后将通过h5方式选取文件。 + * 当存在默认配置时,`handler`方法返回`值为空的Promise`和返回`undefined`是有区别的: + * 1. 当返回`值为空的Promise`时,认为用户选取了0个文件 + * 2. 当返回`undefined`时,认为当前`handler`方法希望通过默认的配置来获取文件,此时将执行默认配置的`handler`方法并返回其返回值 + */ + handler?: (ctx: UploaderContext) => (Promise | undefined); + + /** + * 是否显示 + * @description 如果本方式仅部分平台支持,则应该根据平台的能力决定是否显示本方式 + */ + visible?: boolean | ((ctx: UploaderContext) => boolean); + + /** + * 提示文本 + * @description 显示在名称下方的一行文本 + */ + tip?: string | ((ctx: UploaderContext) => string); + + /** + * 自定义选项 + * @description 将被赋值给`UploaderContext`中的`options`字段,一般不需要配置 + */ + options?: Record; +} + +/** 文件条目的上下文数据 */ +export interface FileItemCtx { + + /** 被选中的文件 */ + file: UploadFileItem; + + /** 在文件列表中的下标 */ + index: number; + + /** 文件列表 */ + fileList: UploadFileItem[]; + + /** 上传组件的上下文 */ + ctx: UploaderContext; +} + +/** + * 文件条目的上下文菜单项 + */ +export interface FileContextMenuItem extends ActionSheetItem { + + /** + * 选项编号 + * @description + * 唯一标识,不可重复。 + * 1. 当`key='preview'`时,点击选项将触发预览,组件将进行默认的预览(可通过`preventDefaultPreview`禁用)并抛出预览事件; + * 2. 当`key='delete'`时,点击选项将触发删除,组件将向外抛出删除事件; + * 3. 当`key`等于其它值时,没有默认行为。 + */ + key: "preview" | "delete" | string; + + /** + * 显示的名称 + */ + name?: string | ((options: FileItemCtx) => string); + + /** + * 显示的名称(国际化) + * @description 优先级高于字符串类型的`name`字段,低于回调方法类型的`name`字段 + */ + nameI18n?: { [lang: string]: string }; + + /** + * 选项行为的实现方法 + * @description 当用户选择本选项后,将调用本方法 + */ + handler?: ((options: FileItemCtx) => boolean | void); + + /** + * 是否显示 + * @description 默认显示,可以用来隐藏不被支持的选项 + */ + visible?: boolean | ((options: FileItemCtx) => boolean | void); + + /** + * 是否禁用 + * @description 默认不禁用,当回调方法返回`true`或非空字符串时禁用,返回的字符串将被作为提示文本显示在名称下方,具有比`tip`更高的优先级 + */ + disabled?: boolean | ((options: FileItemCtx) => boolean | string | void); + + /** + * 提示文本 + * @description 显示在名称下方的一行文本 + */ + tip?: string | ((options: FileItemCtx) => string); + + /** + * 自定义选项 + * @description 将被赋值给`UploaderContext`中的`options`字段,一般不需要配置 + */ + options?: Record; +} + +/** 文件获取方式缺省实现的注入标识 */ +export const defaultFilePickerInjectKey: InjectionKey> = Symbol("defaultFilePicker"); + +/** 文件上下文菜单选项默认实现的注入标识 */ +export const defaultUploadFileContextMenuInjectKey: InjectionKey> + = Symbol("defaultUploadFileContextMenu"); + +export type UploaderPopupType = "FilePickerActionSheet" | "ContextMenuActionSheet" | "ContextMenuTooltip"; + +export interface PopupHandler { + + /** + * 打开弹层时回调 + * @description 调用`close`方法可以主动关闭弹层,且不会触发`onClose`回调 + */ + onOpen: (p: { close: () => void; type: UploaderPopupType; uid: string }) => void; + + /** + * 关闭弹层时回调 + */ + onClose: (p: { type: UploaderPopupType; uid: string }) => void; +} + +export interface FileListUpdateContext { + + /** + * 变更来源 + * @description + * 1. `add` 上传后新增文件 + * 2. `delete` 点击删除按钮或者上下文菜单中的删除选项后删除文件 + */ + trigger: "add" | "delete"; +} diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-context-menu.tsx b/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-context-menu.tsx new file mode 100644 index 00000000000..1a5826a968c --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-context-menu.tsx @@ -0,0 +1,232 @@ +/* eslint-disable no-continue, no-use-before-define */ +import { SetupContext, computed, ref, inject, Ref } from 'vue'; +import { isPromise, isFunction } from '../../../utils'; +import { useCurrentLang } from '../../../hook'; +import { AdvUploaderProps } from '../adv-uploader.props'; +import { FileContextMenuItem, FileItemCtx, defaultUploadFileContextMenuInjectKey, PopupHandler } from './types'; +import FmFileContextMenuList from '../components/context-menu-list.component'; +import { ToComputedRefs } from '../common/to-refs'; + +export default function useContextMenu(props: ToComputedRefs, context: SetupContext, popupHandler: PopupHandler) { + + const _defaultMenuItems = inject(defaultUploadFileContextMenuInjectKey, []); + + const defaultMenuItems: Ref = ref([]); + + const waitingDefaultMenuItemsResolve = ref(false); + + if (isPromise(_defaultMenuItems)) { + waitingDefaultMenuItemsResolve.value = true; + _defaultMenuItems.then((items) => { + defaultMenuItems.value = items; + waitingDefaultMenuItemsResolve.value = false; + }).catch(() => { + defaultMenuItems.value = []; + waitingDefaultMenuItemsResolve.value = false; + }); + } else if (Array.isArray(_defaultMenuItems)) { + defaultMenuItems.value = _defaultMenuItems; + } + + const setComponentDefaultAction = (menuItem: FileContextMenuItem): void => { + if (menuItem.key !== "delete") { + return; + } + if (menuItem.visible === undefined || menuItem.visible === null) { + menuItem.visible = (itemCtx) => { + return !itemCtx.ctx.readonly; + }; + } + if (menuItem.disabled === undefined || menuItem.disabled === null) { + menuItem.disabled = (itemCtx) => { + return !!itemCtx.ctx.disabled; + }; + } + }; + + const fileItemCtx = ref(); + + /** + * 根据当前文件条目更新菜单选项状态 + * @param menuItem 文件的上下文菜单选项 + * @param curFileItemCtx 当前被选中的文件条目 + */ + const updateMenuItemState = (menuItem: FileContextMenuItem, curFileItemCtx: FileItemCtx | undefined): void => { + if (!curFileItemCtx) { + return; + } + const lang = useCurrentLang(); + const uploaderContext = { ...curFileItemCtx.ctx }; + const itemCtx: FileItemCtx = { ...curFileItemCtx, ctx: uploaderContext }; + uploaderContext.options = menuItem.options || {}; + let name = menuItem.nameI18n?.[lang.value] || menuItem.name; + if (isFunction(name)) { + name = name(itemCtx); + } + let visible = typeof menuItem.visible === "boolean" ? menuItem.visible : true; + if (isFunction(menuItem.visible)) { + visible = menuItem.visible(itemCtx) !== false; + } + const tip = isFunction(menuItem.tip) ? menuItem.tip(itemCtx) : menuItem.tip || ""; + let disabled: string | boolean = typeof menuItem.disabled === "boolean" ? menuItem.disabled : false; + if (isFunction(menuItem.disabled)) { + disabled = menuItem.disabled(itemCtx) === true; + } + + menuItem.__key__ = menuItem.key; + menuItem.__name__ = name; + menuItem.__visible__ = visible; + menuItem.__disabled__ = !!disabled; + menuItem.__tip__ = typeof disabled === "string" ? (disabled || tip) : tip; + }; + + const mergedMenuItems = computed(() => { + waitingDefaultMenuItemsResolve.value; + const items: FileContextMenuItem[] = []; + const userCusItems = props.contextMenuItems?.value || []; + userCusItems.forEach((userCusItem) => { + if (!userCusItem || !userCusItem.key) { + return; + } + const newItem: FileContextMenuItem = { ...userCusItem }; + const defaultItem = defaultMenuItems.value.find(i => i && i.key === newItem.key); + if (defaultItem) { + newItem.name = newItem.name || defaultItem.name; + newItem.nameI18n = Object.assign({}, defaultItem.nameI18n || {}, newItem.nameI18n || {}); + if (newItem.handler && defaultItem.handler) { + const cusHandler = newItem.handler; + const defaultHandler = defaultItem.handler; + newItem.handler = (ctx) => { + const success = cusHandler(ctx); + if (success === false) { + return defaultHandler(ctx); + } + return success; + }; + } else { + newItem.handler = newItem.handler || defaultItem.handler; + } + if (isFunction(newItem.visible)) { + const cusVisibleFunc = newItem.visible; + newItem.visible = (ctx) => { + const val = cusVisibleFunc(ctx); + if (val === undefined) { + return isFunction(defaultItem.visible) ? defaultItem.visible(ctx) : defaultItem.visible; + } + return val; + }; + } else { + newItem.visible = (newItem.visible === false) ? false : (newItem.visible || defaultItem.visible); + } + if (isFunction(newItem.disabled)) { + const cusDisabledFunc = newItem.disabled; + newItem.disabled = (ctx) => { + const val = cusDisabledFunc(ctx); + if (val === undefined) { + return isFunction(defaultItem.disabled) ? defaultItem.disabled(ctx) : defaultItem.disabled; + } + return val; + }; + } else { + newItem.disabled = (newItem.disabled === false) ? false : (newItem.disabled || defaultItem.disabled); + } + newItem.tip = newItem.tip || defaultItem.tip; + newItem.options = Object.assign({}, defaultItem.options || {}, newItem.options || {}); + } + setComponentDefaultAction(newItem); + updateMenuItemState(newItem, fileItemCtx.value); + items.push(newItem); + }); + return items; + }); + + const show = ref(false); + + const popupUID = ref(""); + + const close = (): void => { + show.value = false; + }; + + const toggle = (val: boolean): void => { + if (!!show.value === !!val) { + return; + } + show.value = !!val; + if (val) { + popupUID.value = (new Date()).getTime().toString(); + popupHandler.onOpen({ close, type: "ContextMenuActionSheet", uid: popupUID.value }); + } else { + popupHandler.onClose({ type: "ContextMenuActionSheet", uid: popupUID.value }); + } + }; + + const openContextMenuList = (ctx: FileItemCtx): void => { + fileItemCtx.value = { ...ctx }; + toggle(true); + }; + + const renderContextMenuList = (p: { + onDelete: (ctx: FileItemCtx) => void; + onPreview: (ctx: FileItemCtx) => void; + }) => { + return ( + + + ); + }; + + /** + * 执行指定的菜单项操作 + * @description + * 最多只执行一个菜单项操作,如果传入了多个编号,则依次尝试执行,如果成功则返回 + * (菜单项隐藏、禁用或者回调方法返回`false`都认为执行失败) + * @param ctx 文件条目上下文 + * @param key 菜单选项编号 + * @returns 是否执行成功 + */ + const executeContextMenuItem = (ctx: FileItemCtx, ...keys: string[]): boolean => { + if (!ctx || !keys || keys.length === 0) { + return false; + } + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const menuItem = mergedMenuItems.value.find(item => item.key === key); + if (!menuItem) { + continue; + } + const copyItem: FileContextMenuItem = { ...menuItem }; + updateMenuItemState(copyItem, ctx); + if (!copyItem.__disabled__ || copyItem.__visible__ !== false) { + const success = copyItem.handler?.(ctx); + if (success !== false) { + return true; + } + } + } + return false; + }; + + const handleLongPress = (ctx: FileItemCtx, e: TouchEvent): void => { + props.onLongPress?.value?.({ ctx, e }); + context.emit('longPress', { ctx, e }); + const longPressAction = props.longPressAction.value; + if (longPressAction === 'showMenu' || longPressAction === 'showMenuInTooltip') { + openContextMenuList(ctx); + } + }; + + return { + openContextMenuList, + renderContextMenuList, + executeContextMenuItem, + handleLongPress, + }; +} diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-popup-handler.ts b/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-popup-handler.ts new file mode 100644 index 00000000000..fb7adc334b4 --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-popup-handler.ts @@ -0,0 +1,23 @@ +import { SetupContext } from 'vue'; +import { AdvUploaderProps } from '../adv-uploader.props'; +import { PopupHandler } from './types'; +import { ToComputedRefs } from '../common/to-refs'; + +export default function usePopupHandler(props: ToComputedRefs, context: SetupContext) { + + const popupHandler: PopupHandler = { + onOpen: (p) => { + props.onPopupOpen?.value?.(p); + context.emit("popupOpen", p); + }, + + onClose: (p) => { + props.onPopupClose?.value?.(p); + context.emit("popupClose", p); + }, + }; + + return { + popupHandler, + }; +} diff --git a/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-uploader.ts b/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-uploader.ts new file mode 100644 index 00000000000..e2e2a367bfc --- /dev/null +++ b/packages/mobile-ui-vue/components/adv-uploader/src/composition/use-uploader.ts @@ -0,0 +1,303 @@ +/* eslint-disable no-use-before-define */ +import { SetupContext, computed, ref, inject, Ref } from 'vue'; +import { useCurrentLang } from '../../../hook'; +import { isPromise } from '../../../utils'; +import { AdvUploaderProps } from '../adv-uploader.props'; +import { FileItem, UploadFileItem, UploadProgressContext, UploadResponseContext } from '../common/types'; +import { + FilePickerItem, UploaderContext, defaultFilePickerInjectKey, PopupHandler, FileItemCtx, FileListUpdateContext, +} from './types'; +import { FilePicker } from '../components/file-picker'; +import { validateFiles, readFile, isImage, upload } from '../common/upload'; +import { ToComputedRefs } from '../common/to-refs'; + +export default function useUploader(props: ToComputedRefs, context: SetupContext, popupHandler: PopupHandler) { + + const { files: uploadFileList, autoUpload } = props; + + const setUploadFileList = (newValue: UploadFileItem[], updateContext: FileListUpdateContext) => { + context.emit(`update:files`, newValue, updateContext); + }; + + const _defaultFilePickers = inject(defaultFilePickerInjectKey, []); + + const defaultFilePickers: Ref = ref([]); + + const waitingDefaultFilePickersResolve = ref(false); + + if (isPromise(_defaultFilePickers)) { + waitingDefaultFilePickersResolve.value = true; + _defaultFilePickers.then((pickers) => { + defaultFilePickers.value = pickers; + waitingDefaultFilePickersResolve.value = false; + }).catch(() => { + defaultFilePickers.value = []; + waitingDefaultFilePickersResolve.value = false; + }); + } else if (Array.isArray(_defaultFilePickers)) { + defaultFilePickers.value = _defaultFilePickers; + } + + const mergedFilePickers = computed(() => { + waitingDefaultFilePickersResolve.value; + const items: FilePickerItem[] = []; + const userCusItems = props.filePickerItems?.value || []; + userCusItems.forEach((userCusItem) => { + if (!userCusItem || !userCusItem.key) { + return; + } + const newItem: FilePickerItem = { ...userCusItem }; + const defaultItem = defaultFilePickers.value.find(p => p && p.key === newItem.key); + if (defaultItem) { + newItem.name = newItem.name || defaultItem.name; + newItem.nameI18n = Object.assign({}, defaultItem.nameI18n || {}, newItem.nameI18n || {}); + if (newItem.handler && defaultItem.handler) { + const cusHandler = newItem.handler; + const defaultHandler = defaultItem.handler; + newItem.handler = (ctx) => { + const result = cusHandler(ctx); + return result || defaultHandler(ctx); + }; + } else { + newItem.handler = newItem.handler || defaultItem.handler; + } + newItem.visible = (newItem.visible === false) ? false : (newItem.visible || defaultItem.visible); + newItem.tip = newItem.tip || defaultItem.tip; + newItem.options = Object.assign({}, defaultItem.options || {}, newItem.options || {}); + } + items.push(newItem); + }); + return items; + }); + + /** + * 待上传的文件列表 + * @description + * 自动上传模式下`autoUpload=true`,用户选中的文件将首先作为`待上传的文件`添加到`toUploadFiles`中,待上传完毕后再移到`files`中 + */ + const toUploadFiles = ref([]); + + /** 是否正在上传 */ + const uploading = ref(false); + + /** 显示的文件列表 */ + const displayFiles = computed(() => { + // 手动上传模式下,`files`作为`文件列表`,完全受控 + if (!autoUpload.value) { + return uploadFileList.value || []; + } + // 自动上传模式下,`files`仅作为`已上传的文件列表`,而`待上传的文件列表`是不受控的 + return (uploadFileList.value || []).concat(toUploadFiles.value || []); + }); + + const disableAddBtn = computed(() => { + return props.disabled.value || props.readonly.value || waitingDefaultFilePickersResolve.value; + }); + + const uploaderContext = computed(() => { + const lang = useCurrentLang(); + return { + lang: lang.value, + accept: props.accept?.value, + multiple: props.multiple.value, + fileReadType: props.fileReadType.value, + maxSize: props.maxSize.value, + maxCount: props.maxCount.value, + uploadedFileCount: displayFiles.value.length, + listType: props.listType.value, + readonly: props.readonly.value, + disabled: props.disabled.value, + displayFiles: displayFiles.value, + chooseLocalFile: () => filePicker?.triggerChooseLocalFile(), + }; + }); + + const addWaitingFiles = async (files: UploadFileItem[]) => { + // 转化文件格式 + await Promise.all(files.map((fileItem) => readFile(fileItem, props.fileReadType.value))); + // 获取文件的临时缩略图 + const pList = files.map((fileItem) => ( + new Promise((resolve) => { + const setResult = (url?: string) => { + fileItem.thumbnailUrl = url; + resolve(fileItem); + }; + if (props.useOriginalImageAsThumbnail.value && isImage(fileItem)) { + readFile(fileItem, "dataUrl").then(() => { + setResult(fileItem.dataUrl); + }); + } else { + const thumbnail = props.getThumbnailUrl?.value?.(fileItem); + if (typeof thumbnail === "string") { + setResult(thumbnail); + } else if (isPromise(thumbnail)) { + thumbnail.then((url) => { + setResult(url); + }).catch(() => { + setResult(); + }); + } else { + setResult(); + } + } + }) + )); + const toFiles = await Promise.all(pList); + // 更新文件列表 + if (autoUpload.value) { + toUploadFiles.value = toFiles; + } else { + const newFileList = uploadFileList.value.concat(toFiles); + setUploadFileList(newFileList, { trigger: "add" }); + } + }; + + const onChooseFile = async (files: FileItem[]) => { + if (props.disabled.value || props.readonly.value) { + return; + } + const { validFiles, problems } = await validateFiles({ + files: [...files], + uploadedFiles: uploadFileList.value, + maxCount: props.maxCount.value, + maxSize: props.maxSize.value, + allowDuplicateFile: props.allowDuplicateFile.value, + beforeUpload: props.beforeUpload?.value, + context: uploaderContext.value, + }); + if (problems && problems.length) { + props.onValidate?.value?.(problems); + context.emit("validate", problems); + } + await addWaitingFiles(validFiles); + if (props.autoUpload.value) { + uploadFiles(validFiles); + } + }; + + const triggerFileProgressUpdate = () => { + // 仅处理自动上传模式下的进度更新,手动上传模式下需要调用者自行处理 + if (props.autoUpload.value) { + toUploadFiles.value = [...toUploadFiles.value]; + } + }; + + const handleProgress = (ctx?: UploadProgressContext) => { + triggerFileProgressUpdate(); + if (ctx) { + props.onProgress?.value?.(ctx); + context.emit("progress", ctx); + } + }; + + const handleOneFileSuccess = (ctx: UploadResponseContext) => { + triggerFileProgressUpdate(); + if (!props.singleRequestUpload.value) { + props.onOneFileSuccess?.value?.(ctx); + context.emit("oneFileSuccess", ctx); + } + }; + + const handleOneFileFail = (ctx: UploadResponseContext) => { + triggerFileProgressUpdate(); + if (!props.singleRequestUpload.value) { + props.onOneFileFail?.value?.(ctx); + context.emit("oneFileFail", ctx); + } + }; + + /** + * 上传文件 + * @description 在手动上传`autoUpload=false`模式下,调用本方法使得文件上传 + * @param files 指定要上传的文件 + */ + function uploadFiles(files?: UploadFileItem[]) { + const notUploadedFiles = uploadFileList.value.filter(f => f.status !== 'success'); + const toFiles = autoUpload.value ? files || toUploadFiles.value : notUploadedFiles; + if (!toFiles || !toFiles.length) { + return; + } + uploading.value = true; + upload({ + toUploadFiles: toFiles, + data: props.data?.value, + singleRequestUpload: props.singleRequestUpload.value, + action: props.action.value, + name: props.name.value, + useMockProgress: props.useMockProgress.value, + headers: props.headers?.value, + withCredentials: props.withCredentials.value, + method: props.method.value, + fileReadType: props.fileReadType.value, + formatRequestData: props.formatRequestData?.value, + formatResponseData: props.formatResponseData?.value, + customUploadMethod: props.customUploadMethod?.value, + onOneFileSuccess: handleOneFileSuccess, + onOneFileFail: handleOneFileFail, + onProgress: handleProgress, + }).then((result) => { + uploading.value = false; + if (autoUpload.value) { + const newUploadFileList = uploadFileList.value.concat( + (result.successItems || []).map(item => item.file) + ); + setUploadFileList(newUploadFileList, { trigger: "add" }); + toUploadFiles.value = (result.failedItems || []).map(item => item.file); + } + props.onUploadFinish?.value?.(result); + context.emit("uploadFinish", result); + }).catch(() => { + uploading.value = false; + }); + } + + const filePicker = new FilePicker(); + filePicker.onChooseFile = onChooseFile; + filePicker.onOpen = (close, uid) => { + popupHandler.onOpen({ close, type: 'FilePickerActionSheet', uid }); + }; + filePicker.onClose = (uid) => { + popupHandler.onClose({ type: 'FilePickerActionSheet', uid }); + }; + + const triggerUpload = () => { + if (disableAddBtn.value) { + return; + } + filePicker.setFilePickerItems(mergedFilePickers.value); + filePicker.pickFile(uploaderContext.value, 110, document.body); + }; + + const handleInnerDelete = (fileItemCtx: FileItemCtx, e?: MouseEvent) => { + e?.stopPropagation(); + const { index } = fileItemCtx; + const updateContext: FileListUpdateContext = { trigger: "delete" }; + if (props.autoUpload.value) { + if (index < uploadFileList.value.length) { + const newFileList = [...uploadFileList.value]; + newFileList.splice(index, 1); + setUploadFileList(newFileList, updateContext); + } else { + toUploadFiles.value.splice(index - uploadFileList.value.length, 1); + toUploadFiles.value = [...toUploadFiles.value]; + } + } else { + const newFileList = [...uploadFileList.value]; + newFileList.splice(index, 1); + setUploadFileList(newFileList, updateContext); + } + props.onDelete?.value?.({ ctx: fileItemCtx, e }); + context.emit("delete", { ctx: fileItemCtx, e }); + }; + + return { + displayFiles, + toUploadFiles, + uploading, + disableAddBtn, + uploaderContext, + triggerUpload, + uploadFiles, + handleInnerDelete, + }; +} diff --git a/packages/mobile-ui-vue/components/button/index.ts b/packages/mobile-ui-vue/components/button/index.ts new file mode 100644 index 00000000000..39c0c78173e --- /dev/null +++ b/packages/mobile-ui-vue/components/button/index.ts @@ -0,0 +1,9 @@ +import { App } from 'vue'; +import Button from './src/button.vue'; + +Button.install = (app: App) => { + app.component(Button.name || 'FmButton', Button); +}; + +export { Button }; +export default Button; diff --git a/packages/mobile-ui-vue/components/button/src/button.vue b/packages/mobile-ui-vue/components/button/src/button.vue new file mode 100644 index 00000000000..efbf0abdc2c --- /dev/null +++ b/packages/mobile-ui-vue/components/button/src/button.vue @@ -0,0 +1,123 @@ + + diff --git a/packages/mobile-ui-vue/components/cell/index.ts b/packages/mobile-ui-vue/components/cell/index.ts new file mode 100644 index 00000000000..b3f0838892e --- /dev/null +++ b/packages/mobile-ui-vue/components/cell/index.ts @@ -0,0 +1,9 @@ +import { App } from 'vue'; +import Cell from './src/index.vue'; + +Cell.install = (app: App) => { + app.component(Cell.name || 'FmCell', Cell); +}; + +export { Cell }; +export default Cell; diff --git a/packages/mobile-ui-vue/components/cell/src/index.vue b/packages/mobile-ui-vue/components/cell/src/index.vue new file mode 100644 index 00000000000..314522b3ae4 --- /dev/null +++ b/packages/mobile-ui-vue/components/cell/src/index.vue @@ -0,0 +1,136 @@ + + + + diff --git a/packages/mobile-ui-vue/components/checkbox/README.md b/packages/mobile-ui-vue/components/checkbox/README.md new file mode 100644 index 00000000000..816486b842b --- /dev/null +++ b/packages/mobile-ui-vue/components/checkbox/README.md @@ -0,0 +1,30 @@ +# fm-checkbox +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | +| :--: | :--: | :--: | :--: | +|name|名称|any|-| +|shape|形状|string|'square'| +|checked-color|选中时颜色|string|'#189fa'| + +# fm-cgroup +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | +| :--: | :--: | :--: | :--: | +|v-model(value)|绑定值|any|-| +|label|标题|any|-| +|disabled|禁用|boolean|false| +|required|必需|boolean|false| +|direction|排列方向|string|'vertical'| + +### Events + +| 事件 | 说明 | 回调参数 | +| :--: | :--: | :--: | +| input | 选择选项时触发 | value: 选择的选项值 | +| change | 选项改变时触发 | value: 改变值 | diff --git a/packages/mobile-ui-vue/components/checkbox/index.ts b/packages/mobile-ui-vue/components/checkbox/index.ts new file mode 100644 index 00000000000..2f88d40aed3 --- /dev/null +++ b/packages/mobile-ui-vue/components/checkbox/index.ts @@ -0,0 +1,13 @@ +import { App } from 'vue'; +import CheckboxGroup from './src/checkbox-group.vue'; +import Checker from './src/checker.vue'; + +CheckboxGroup.install = function (app: App) { + app.component(CheckboxGroup.name || 'FmCheckboxGroup', CheckboxGroup); +}; +Checker.install = function (app: App) { + app.component(Checker.name || 'FmChecker', Checker); +}; + +export { CheckboxGroup, Checker }; +export default CheckboxGroup; diff --git a/packages/mobile-ui-vue/components/checkbox/src/checkbox-group.vue b/packages/mobile-ui-vue/components/checkbox/src/checkbox-group.vue new file mode 100644 index 00000000000..4fac2956a92 --- /dev/null +++ b/packages/mobile-ui-vue/components/checkbox/src/checkbox-group.vue @@ -0,0 +1,103 @@ + + + diff --git a/packages/mobile-ui-vue/components/checkbox/src/checkbox-props.ts b/packages/mobile-ui-vue/components/checkbox/src/checkbox-props.ts new file mode 100644 index 00000000000..5fbed35df04 --- /dev/null +++ b/packages/mobile-ui-vue/components/checkbox/src/checkbox-props.ts @@ -0,0 +1,67 @@ +import { CSSProperties, PropType } from "vue"; + +export const checkerProps = { + label: { + type: String, + default: '', + }, + labelLimit: Number, + disabled: { + type: Boolean, + default: false, + }, + readonly: { + type: Boolean, + default: false, + }, + shape: { + type: String, + default: 'round', + }, + modelValue: { + type: Boolean, + default: false, + }, + checkedColor: { + type: String, + default: '#3A90FF', + }, + role: { + type: String, + default: 'check', + }, + labelClass: String, + size: { + type: String, + default: 'normal', + }, +} +export const checkboxInputProps = { + ...checkerProps, + shape: { + type: String, + default: 'square', + }, + type: { + type: String, + default: 'check', + }, + direction: { + type: String, + default: 'vertical', + }, + valueField: { + type: String, + default: 'value', + }, + textField: { + type: String, + default: 'text', + }, + showDisabledItem: { + type: Boolean, + default: true + }, + items: Array as PropType>, + checkerStyle: Object as PropType, +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/checkbox/src/checker.vue b/packages/mobile-ui-vue/components/checkbox/src/checker.vue new file mode 100644 index 00000000000..9cb2462fefe --- /dev/null +++ b/packages/mobile-ui-vue/components/checkbox/src/checker.vue @@ -0,0 +1,56 @@ + + + diff --git a/packages/mobile-ui-vue/components/config.ts b/packages/mobile-ui-vue/components/config.ts new file mode 100644 index 00000000000..d4a96f605f6 --- /dev/null +++ b/packages/mobile-ui-vue/components/config.ts @@ -0,0 +1,3 @@ +export default { + prefix: 'fm' +}; diff --git a/packages/mobile-ui-vue/components/hook/index.ts b/packages/mobile-ui-vue/components/hook/index.ts new file mode 100644 index 00000000000..56003f650d0 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/index.ts @@ -0,0 +1,18 @@ +export * from './use-lay-render'; +export * from './use-event-listener'; +export * from './use-click-away'; +export * from './use-lock-scroll'; +export * from './use-expose'; +export * from './use-mount-component'; +export * from './use-touch-move'; +export * from './use-element-rect'; +export * from './use-dynamic-template'; +export * from './use-bem'; +export * from './use-touch'; +export * from './use-back'; +export * from './use-state'; +export * from './use-md5'; +export * from './use-props'; +export * from './use-queue'; +export * from './use-locale'; +export * from './use-long-press'; diff --git a/packages/mobile-ui-vue/components/hook/use-back/index.ts b/packages/mobile-ui-vue/components/hook/use-back/index.ts new file mode 100644 index 00000000000..e953de5ca6c --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-back/index.ts @@ -0,0 +1,19 @@ +/* eslint-disable dot-notation */ +export function useBack(enableShow?: any) { + const pushBack = (cb: () => void) => { + // @ts-ignore + window['MOBILE_ORIGIN_BACK'] && window['MOBILE_ORIGIN_BACK'].pushOriginGoback(cb); + }; + const popBack = () => { + // @ts-ignore + window['MOBILE_ORIGIN_BACK'] && window['MOBILE_ORIGIN_BACK'].popOriginGoback(); + }; + const pushOrPop = (cb = () => { enableShow.value = false; }) => { + if (enableShow.value) { + pushBack(cb); + } else { + popBack(); + } + }; + return { pushBack, popBack, pushOrPop }; +} diff --git a/packages/mobile-ui-vue/components/hook/use-bem/index.ts b/packages/mobile-ui-vue/components/hook/use-bem/index.ts new file mode 100644 index 00000000000..db696149885 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-bem/index.ts @@ -0,0 +1,3 @@ +export function useBem(prefix: string) { + return (className: string) => `${prefix}-${className}`; +} diff --git a/packages/mobile-ui-vue/components/hook/use-click-away/index.ts b/packages/mobile-ui-vue/components/hook/use-click-away/index.ts new file mode 100644 index 00000000000..408c25b0ce9 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-click-away/index.ts @@ -0,0 +1,34 @@ +import { Ref, unref } from 'vue'; +import { inBrowser, initNodePath } from '../../utils'; +import { useEventListener } from '../use-event-listener'; + +export type UseClickAwayOptions = { + eventName?: string; + active?: Ref | boolean; +}; + +export function useClickAway( + target: Element | Ref, + listener: EventListener, + options: UseClickAwayOptions = {}, +) { + if (!inBrowser) { + return; + } + + const { eventName = 'click', active = true } = options; + + const onClick = (event: Event | any) => { + const _active = unref(active); + const element = unref(target); + let flag = _active && element && !element.contains(event.target as Node); + if (flag) { + const path = event.path ? event.path : initNodePath(event); + flag = !path.find((item: Element) => item === element); + } + if (flag) { + listener(event); + } + }; + useEventListener(eventName, onClick, { target: document }); +} diff --git a/packages/mobile-ui-vue/components/hook/use-dynamic-template/index.ts b/packages/mobile-ui-vue/components/hook/use-dynamic-template/index.ts new file mode 100644 index 00000000000..ec41379182a --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-dynamic-template/index.ts @@ -0,0 +1,52 @@ +/* eslint-disable no-new-func */ +import { + baseParse, + getBaseTransformPreset, + transform, +} from '@vue/compiler-core'; +import * as Vue from 'vue'; +import { isHTMLTag, VueCodeGenerate } from '../../utils'; + +export const dynamicTemplate = Vue.defineComponent({ + name: 'dynamic-template', + props: { + props: { + type: Object, + default: () => { + return {}; + }, + }, + }, + render() { }, +}); + +function createFunction(code: string) { + try { + return new Function('Vue', code); + } catch (err) { + console.warn(err, code); + return () => { }; + } +} + +export function useDynamicTemplate(template: string) { + const ast = baseParse(template, { + // 判断是否是元素标签 + isNativeTag: isHTMLTag, + }); + const prefixIdentifiers = true; + + const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(prefixIdentifiers); + + transform(ast, { + prefixIdentifiers, + nodeTransforms: [...nodeTransforms], + directiveTransforms + }); + const dynamicRender = VueCodeGenerate(ast); + dynamicTemplate.render = createFunction(dynamicRender.code)(Vue); + return { + dynamicRender, + dynamicTemplate, + }; +} diff --git a/packages/mobile-ui-vue/components/hook/use-element-rect/index.ts b/packages/mobile-ui-vue/components/hook/use-element-rect/index.ts new file mode 100644 index 00000000000..64b1f228db4 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-element-rect/index.ts @@ -0,0 +1,14 @@ +import { ref, Ref, unref } from "vue"; +import { onMountedOrActivated } from "../../utils"; + +export const useElementRect = (el: Ref) => { + const rect: Ref = ref(); + const hook = () => { + const target: Element | undefined = unref(el); + rect.value = target?.getBoundingClientRect(); + }; + onMountedOrActivated(hook); + return { + rect + }; +}; diff --git a/packages/mobile-ui-vue/components/hook/use-event-listener/index.ts b/packages/mobile-ui-vue/components/hook/use-event-listener/index.ts new file mode 100644 index 00000000000..729c8b335f2 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-event-listener/index.ts @@ -0,0 +1,45 @@ +import { onMountedOrActivated, inBrowser } from '../../utils'; +import { unref, onUnmounted, onDeactivated, Ref } from 'vue'; + +export const supportsPassive = false; + +export type UseEventListenerOptions = { + target?: EventTarget | Ref; + capture?: boolean; + passive?: boolean; + immediate?: boolean; +}; + +export function useEventListener(type: string, listener: EventListener, options: UseEventListenerOptions = {}) { + if (!inBrowser) { + return; + } + + const { target = window, passive = false, capture = false, immediate = false } = options; + let attached = false; + + const add = () => { + const element = unref(target); + + if (element && !attached) { + element.addEventListener(type, listener, supportsPassive ? { + capture, + passive + } : capture); + attached = true; + } + }; + + const remove = () => { + const element = unref(target); + + if (element && attached) { + element.removeEventListener(type, listener, capture); + attached = false; + } + }; + + immediate ? add() : onMountedOrActivated(add); + onUnmounted(remove); + onDeactivated(remove); +} diff --git a/packages/mobile-ui-vue/components/hook/use-expose/index.ts b/packages/mobile-ui-vue/components/hook/use-expose/index.ts new file mode 100644 index 00000000000..b7d83800c79 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-expose/index.ts @@ -0,0 +1,9 @@ +import { getCurrentInstance } from 'vue'; + +// expose public api +export function useExpose(apis: Record) { + const instance = getCurrentInstance(); + if (instance) { + Object.assign(instance.proxy as any, apis); + } +} diff --git a/packages/mobile-ui-vue/components/hook/use-lay-render/index.ts b/packages/mobile-ui-vue/components/hook/use-lay-render/index.ts new file mode 100644 index 00000000000..3f505e7a0ad --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-lay-render/index.ts @@ -0,0 +1,17 @@ +import { ref, watch, WatchSource } from 'vue'; + +export function useLazyRender(show: WatchSource) { + const inited = ref(false); + + watch( + show, + (value) => { + if (value) { + inited.value = value; + } + }, + { immediate: true } + ); + + return (render: () => JSX.Element) => () => (inited.value ? render() : null); +} diff --git a/packages/mobile-ui-vue/components/hook/use-locale/index.ts b/packages/mobile-ui-vue/components/hook/use-locale/index.ts new file mode 100644 index 00000000000..a2373f51990 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-locale/index.ts @@ -0,0 +1,5 @@ +import Locale from "../../locale"; + +export const useLocale = (name: string) => Locale.createTranslate(name); + +export const useCurrentLang = () => Locale.getCurrentLang(); diff --git a/packages/mobile-ui-vue/components/hook/use-lock-scroll/index.ts b/packages/mobile-ui-vue/components/hook/use-lock-scroll/index.ts new file mode 100644 index 00000000000..ac2888dbc29 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-lock-scroll/index.ts @@ -0,0 +1,25 @@ +let count = 0; + +const CLASSNAME = 'fm-overflow-hidden'; + +export function useLockScroll(shouldLock: () => boolean) { + const lock = () => { + if (shouldLock()) { + if (!count) { + document.body.classList.add(CLASSNAME); + } + count++; + } + }; + + const unlock = () => { + if (shouldLock() && count) { + count--; + if (!count) { + document.body.classList.remove(CLASSNAME); + } + } + }; + + return [lock, unlock]; +} diff --git a/packages/mobile-ui-vue/components/hook/use-long-press/index.ts b/packages/mobile-ui-vue/components/hook/use-long-press/index.ts new file mode 100644 index 00000000000..c029294f2e5 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-long-press/index.ts @@ -0,0 +1,141 @@ +/* eslint-disable no-use-before-define */ +import { ObjectDirective } from 'vue'; + +const DEFAULT_DELAY = 600; +const DEFAULT_THRESHOLD = 10; + +export interface OnLongPressModifiers { + stop?: boolean; + once?: boolean; + prevent?: boolean; + capture?: boolean; + self?: boolean; + preventDefaultContextMenu?: boolean; + interceptClick?: boolean; +} + +export interface OnLongPressOptions { + + delay?: number; + + modifiers?: OnLongPressModifiers; + + distanceThreshold?: number | false; +} + +interface Position { + x: number; + y: number; +} + +function addEventListener(el: HTMLElement, event: string, listener: any, options: any): () => void { + el.addEventListener(event, listener, options); + return () => el.removeEventListener(event, listener, options); +} + +export function onLongPress( + target: HTMLElement, + handler: (evt: TouchEvent) => void, + options?: OnLongPressOptions, +) { + let timeout: ReturnType | undefined; + let posStart: Position | undefined; + + function clear() { + if (timeout) { + clearTimeout(timeout); + timeout = undefined; + } + posStart = undefined; + } + + function onStart(ev: TouchEvent) { + if (options?.modifiers?.self && ev.target !== target) { + return; + } + + clear(); + + options?.modifiers?.prevent && ev.preventDefault(); + options?.modifiers?.stop && ev.stopPropagation(); + + posStart = { + x: ev.touches[0].pageX, + y: ev.touches[0].pageY, + }; + timeout = setTimeout( + () => { + timeout = undefined; + handler(ev); + }, + options?.delay ?? DEFAULT_DELAY, + ); + } + + function onMove(ev: TouchEvent) { + if (options?.modifiers?.self && ev.target !== target) { + return; + } + + if (!posStart || options?.distanceThreshold === false) { + return; + } + + options?.modifiers?.prevent && ev.preventDefault(); + options?.modifiers?.stop && ev.stopPropagation(); + + const dx = ev.touches[0].pageX - posStart.x; + const dy = ev.touches[0].pageY - posStart.y; + const distance = Math.sqrt(dx * dx + dy * dy); + if (distance >= (options?.distanceThreshold ?? DEFAULT_THRESHOLD)) { + clear(); + } + } + + function onEnd() { + if (options?.modifiers?.interceptClick && !timeout) { + addAutoDisappearMask(); + } + clear(); + } + + function onContextmenu(ev: Event) { + options?.modifiers?.preventDefaultContextMenu && ev.preventDefault(); + } + + const listenerOptions = { + capture: options?.modifiers?.capture, + once: options?.modifiers?.once, + }; + const cleanup = [ + addEventListener(target, 'touchstart', onStart, listenerOptions), + addEventListener(target, 'touchmove', onMove, listenerOptions), + addEventListener(target, 'touchend', onEnd, listenerOptions), + addEventListener(target, 'touchcancel', clear, listenerOptions), + addEventListener(target, 'contextmenu', onContextmenu, listenerOptions), + ]; + const stop = () => cleanup.forEach(fn => fn()); + return stop; +} + +type BindingValue = (evt: TouchEvent) => void; + +export const vOnLongPress: ObjectDirective = { + mounted(el, binding) { + onLongPress(el, binding.value, { modifiers: binding.modifiers }); + } +}; + +function addAutoDisappearMask(duration?: number): void { + const mask = document.createElement('div'); + mask.style.position = 'fixed'; + mask.style.top = '0'; + mask.style.right = '0'; + mask.style.bottom = '0'; + mask.style.left = '0'; + mask.style.zIndex = '99999'; + document.body.appendChild(mask); + setTimeout(() => { + document.body.removeChild(mask); + }, duration || 25); +} diff --git a/packages/mobile-ui-vue/components/hook/use-md5/index.ts b/packages/mobile-ui-vue/components/hook/use-md5/index.ts new file mode 100644 index 00000000000..3e609cfe7ed --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-md5/index.ts @@ -0,0 +1,315 @@ +/* eslint-disable camelcase */ +/* eslint-disable no-use-before-define */ +/* + * Configurable variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + */ +const hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ +const b64pad = ''; /* base-64 pad character. "=" for strict RFC compliance */ +const chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ + +export const useMd5 = () => { + return { + md5, + hex_md5, + b64_md5, + str_md5, + hex_hmac_md5, + b64_hmac_md5, + str_hmac_md5 + }; +}; +const md5 = (s: string, type = 'hex') => { + let result = ''; + switch (type) { + case 'hex': + result = hex_md5(s); + break; + case 'b64': + result = b64_md5(s); + break; + case 'str': + result = str_md5(s); + return; + default: + result = hex_md5(s); + break; + } + return result; +}; +/* + * These are the functions you'll usually want to call + * They take string arguments and return either hex or base-64 encoded strings + */ +function hex_md5(s: string) { + return binl2hex(core_md5(str2binl(s), s.length * chrsz)); +} +function b64_md5(s: string) { + return binl2b64(core_md5(str2binl(s), s.length * chrsz)); +} +function str_md5(s: string) { + return binl2str(core_md5(str2binl(s), s.length * chrsz)); +} +function hex_hmac_md5(key: string, data: string) { + return binl2hex(core_hmac_md5(key, data)); +} +function b64_hmac_md5(key: string, data: string) { + return binl2b64(core_hmac_md5(key, data)); +} +function str_hmac_md5(key: string, data: string) { + return binl2str(core_hmac_md5(key, data)); +} + +/* + * Perform a simple self-test to see if the VM is working + */ +// function md5_vm_test() { +// return hex_md5('abc') == '900150983cd24fb0d6963f7d28e17f72' +// } + +/* + * Calculate the MD5 of an array of little-endian words, and a bit length + */ +function core_md5(x: number[], len: number) { + /* append padding */ + x[len >> 5] |= 0x80 << len % 32; + x[(((len + 64) >>> 9) << 4) + 14] = len; + + let a = 1732584193; + let b = -271733879; + let c = -1732584194; + let d = 271733878; + + for (let i = 0; i < x.length; i += 16) { + const olda = a; + const oldb = b; + const oldc = c; + const oldd = d; + + a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); + d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); + d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return [a, b, c, d]; +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ +function md5_cmn( + q: number, + a: number, + b: number, + x: number, + s: number, + t: number, +) { + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); +} +function md5_ff( + a: number, + b: number, + c: number, + d: number, + x: number, + s: number, + t: number, +) { + return md5_cmn((b & c) | (~b & d), a, b, x, s, t); +} +function md5_gg( + a: number, + b: number, + c: number, + d: number, + x: number, + s: number, + t: number, +) { + return md5_cmn((b & d) | (c & ~d), a, b, x, s, t); +} +function md5_hh( + a: number, + b: number, + c: number, + d: number, + x: number, + s: number, + t: number, +) { + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5_ii( + a: number, + b: number, + c: number, + d: number, + x: number, + s: number, + t: number, +) { + return md5_cmn(c ^ (b | ~d), a, b, x, s, t); +} + +/* + * Calculate the HMAC-MD5, of a key and some data + */ +function core_hmac_md5(key: string, data: string) { + let bkey = str2binl(key); + if (bkey.length > 16) { + bkey = core_md5(bkey, key.length * chrsz); + } + + const ipad = Array(16); + const opad = Array(16); + for (let i = 0; i < 16; i++) { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5c5c5c5c; + } + + const hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); + return core_md5(opad.concat(hash), 512 + 128); +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x: number, y: number) { + const lsw = (x & 0xffff) + (y & 0xffff); + const msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xffff); +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ +function bit_rol(num: number, cnt: number) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* + * Convert a string to an array of little-endian words + * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. + */ +function str2binl(str: string) { + const bin: number[] = []; + const mask = (1 << chrsz) - 1; + for (let i = 0; i < str.length * chrsz; i += chrsz) { + bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << i % 32; + } + return bin; +} + +/* + * Convert an array of little-endian words to a string + */ +function binl2str(bin: number[]) { + let str = ''; + const mask = (1 << chrsz) - 1; + for (let i = 0; i < bin.length * 32; i += chrsz) + {str += String.fromCharCode((bin[i >> 5] >>> i % 32) & mask);} + return str; +} + +/* + * Convert an array of little-endian words to a hex string. + */ +function binl2hex(binarray: number[]) { + const hex_tab = hexcase ? '0123456789ABCDEF' : '0123456789abcdef'; + let str = ''; + for (let i = 0; i < binarray.length * 4; i++) { + str += + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xf) + + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xf); + } + return str; +} + +/* + * Convert an array of little-endian words to a base-64 string + */ +function binl2b64(binarray: number[]) { + const tab = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + let str = ''; + for (let i = 0; i < binarray.length * 4; i += 3) { + const triplet = + (((binarray[i >> 2] >> (8 * (i % 4))) & 0xff) << 16) | + (((binarray[(i + 1) >> 2] >> (8 * ((i + 1) % 4))) & 0xff) << 8) | + ((binarray[(i + 2) >> 2] >> (8 * ((i + 2) % 4))) & 0xff); + for (let j = 0; j < 4; j++) { + if (i * 8 + j * 6 > binarray.length * 32) str += b64pad; + else str += tab.charAt((triplet >> (6 * (3 - j))) & 0x3f); + } + } + return str; +} diff --git a/packages/mobile-ui-vue/components/hook/use-mount-component/index.ts b/packages/mobile-ui-vue/components/hook/use-mount-component/index.ts new file mode 100644 index 00000000000..34b274715cd --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-mount-component/index.ts @@ -0,0 +1,55 @@ +import { useExpose } from "../use-expose"; +import { Component, createApp, nextTick, reactive, App } from "vue"; + +export function usePopupState() { + const state = reactive({ + show: false, + }); + + const toggle = (show: boolean) => { + state.show = show; + }; + + const open = (props: Record) => { + Object.assign(state, props); + + nextTick(() => { + toggle(true); + }); + }; + + const close = () => { + toggle(false); + }; + + useExpose({ open, close, toggle }); + + return { + open, + close, + state, + toggle, + }; +} + +export function mountComponent(RootComponent: Component, props?: Record, enhanceApp?: (app: App) => void) { + const app = createApp(RootComponent, props); + if (enhanceApp && typeof enhanceApp === "function") { + try { + enhanceApp(app); + } catch (err) { + console.error(`[mountComponent] Error occurred during enhanceApp`, err); + } + } + const root = document.createElement('div'); + + document.body.appendChild(root); + + return { + instance: app.mount(root), + unmount() { + app.unmount(); + document.body.removeChild(root); + }, + }; +} diff --git a/packages/mobile-ui-vue/components/hook/use-props/index.ts b/packages/mobile-ui-vue/components/hook/use-props/index.ts new file mode 100644 index 00000000000..d130c811f66 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-props/index.ts @@ -0,0 +1,19 @@ +import { inject, provide } from "vue"; + +export const useRootProps = (key: string | symbol, props?: Record)=> { + const setProps = (value: Record)=>{ + provide(key,value); + }; + const getProps = (defaultValue: Record = {}): Record=>{ + return inject(key, defaultValue); + }; + if(props) { + setProps(props); + } + const rootProps = props || getProps(); + return { + rootProps, + setProps, + getProps + }; +}; diff --git a/packages/mobile-ui-vue/components/hook/use-queue/index.ts b/packages/mobile-ui-vue/components/hook/use-queue/index.ts new file mode 100644 index 00000000000..c97d319ec76 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-queue/index.ts @@ -0,0 +1,22 @@ +export const useQueue = (options: any) => { + const { queueStartCb, queueEndCb } = options; + const queue = new Map(); + const taskStart = (key: any) => { + queue.set(key, null); + queueStartCb(); + }; + const taskEnd = (key: any) => { + queue.delete(key); + if (queue.size === 0) { + queueEndCb(); + } + }; + const taskClear = () => { + queue.clear(); + }; + return { + taskStart, + taskEnd, + taskClear + }; +}; diff --git a/packages/mobile-ui-vue/components/hook/use-state/index.ts b/packages/mobile-ui-vue/components/hook/use-state/index.ts new file mode 100644 index 00000000000..8726ea77518 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-state/index.ts @@ -0,0 +1,14 @@ +import { reactive, provide, inject } from 'vue'; + +export const stateSymbol = Symbol('state'); +export const createState = (initState: Record) => reactive(initState); + +export const useState: (arg: string | symbol) => T = (key?: string | symbol) => inject(key || stateSymbol, { a: 1 }); +export const provideState = (key?: string | symbol, initState: Record = {}) => { + const state = createState(initState); + provide( + key || stateSymbol, + initState + ); + return state; +}; diff --git a/packages/mobile-ui-vue/components/hook/use-touch-move/index.ts b/packages/mobile-ui-vue/components/hook/use-touch-move/index.ts new file mode 100644 index 00000000000..d79873a031e --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-touch-move/index.ts @@ -0,0 +1,117 @@ +import { throttle } from '../../utils'; +import { reactive, ref, Ref } from 'vue'; +import { useEventListener } from '../use-event-listener'; + +const MIN_DISTANCE = 10; + +type TouchDirection = 'horizontal' | 'vertical' | ''; + +export type TouchOffset = { + startX: number; + startY: number; + endX: number; + endY: number; + offsetX: number; + offsetY: number; + direction: TouchDirection; +}; + +type TouchListener = { + onTouchStart?: (event: Event) => void; + onTouchMove?: (event: Event) => void; + onTouchEnd?: (event: Event) => void; + onTouchCancel?: (event: Event) => void; +}; + +function getDirection(x: number, y: number): TouchDirection { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +const defaultTouchOffset: () => TouchOffset = () => { + return { + startX: 0, + startY: 0, + endX: 0, + endY: 0, + offsetX: 0, + offsetY: 0, + direction: '', + }; +}; + +export enum DragStatus { + NotStarted, + Started, + Dragging, + End, +} + +export function useTouchMove( + target: Ref, + listener?: TouchListener, + wait = 0 +) { + let beginOffset = { offsetX: 0, offsetY: 0 }; + const offset: TouchOffset = reactive(defaultTouchOffset()); + const dragStatus = ref(DragStatus.NotStarted); + + const touchStart = (event: any) => { + if (!event.touches || !event.touches[0]) { + return; + } + offset.startX = event.touches[0].clientX; + offset.startY = event.touches[0].clientY; + listener?.onTouchStart && listener.onTouchStart(event); + dragStatus.value = DragStatus.Started; + }; + + const touchMove = (event: any) => { + if (!event.touches || !event.touches[0]) { + return; + } + const touch = event.touches[0]; + offset.offsetX = touch.clientX - offset.startX + beginOffset.offsetX; + offset.offsetY = touch.clientY - offset.startY + beginOffset.offsetY; + offset.endX = event.touches[0].clientX; + offset.endY = event.touches[0].clientY; + offset.direction = getDirection(offset.offsetX, offset.offsetY); + listener?.onTouchMove && listener.onTouchMove(event); + dragStatus.value = DragStatus.Dragging; + }; + + const touchEnd = (event: Event) => { + beginOffset = { offsetX: offset.offsetX, offsetY: offset.offsetY }; + listener?.onTouchEnd && listener.onTouchEnd(event); + listener?.onTouchCancel && listener.onTouchCancel(event); + dragStatus.value = DragStatus.End; + }; + + const resetTouchStatus = () => { + offset.endX = 0; + offset.endY = 0; + offset.offsetX = 0; + offset.offsetY = 0; + offset.direction = ''; + beginOffset = { offsetX: 0, offsetY: 0 }; + dragStatus.value = DragStatus.NotStarted; + }; + + if (target) { + useEventListener('touchstart', touchStart, { target }); + useEventListener('touchmove', wait > 0 ? throttle(touchMove, wait) : touchMove, { target, passive: false }); + useEventListener('touchend', touchEnd, { target }); + } + + return { + offset, + dragStatus, + resetTouchStatus, + }; +} diff --git a/packages/mobile-ui-vue/components/hook/use-touch/index.ts b/packages/mobile-ui-vue/components/hook/use-touch/index.ts new file mode 100644 index 00000000000..824161b9563 --- /dev/null +++ b/packages/mobile-ui-vue/components/hook/use-touch/index.ts @@ -0,0 +1,69 @@ +import { ref } from 'vue'; + +const MIN_DISTANCE = 10; + +type Direction = '' | 'vertical' | 'horizontal'; + +function getDirection(x: number, y: number) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +export function useTouch() { + const startX = ref(0); + const startY = ref(0); + const deltaX = ref(0); + const deltaY = ref(0); + const offsetX = ref(0); + const offsetY = ref(0); + const direction = ref(''); + + const isVertical = () => direction.value === 'vertical'; + const isHorizontal = () => direction.value === 'horizontal'; + + const reset = () => { + deltaX.value = 0; + deltaY.value = 0; + offsetX.value = 0; + offsetY.value = 0; + direction.value = ''; + }; + + const start = ((event: TouchEvent) => { + reset(); + startX.value = event.touches[0].clientX; + startY.value = event.touches[0].clientY; + }) as EventListener; + + const move = ((event: TouchEvent) => { + const touch = event.touches[0]; + deltaX.value = touch.clientX - startX.value; + deltaY.value = touch.clientY - startY.value; + offsetX.value = Math.abs(deltaX.value); + offsetY.value = Math.abs(deltaY.value); + + if (!direction.value) { + direction.value = getDirection(offsetX.value, offsetY.value); + } + }) as EventListener; + + return { + move, + start, + reset, + startX, + startY, + deltaX, + deltaY, + offsetX, + offsetY, + direction, + isVertical, + isHorizontal, + }; +} diff --git a/packages/mobile-ui-vue/components/icon/index.ts b/packages/mobile-ui-vue/components/icon/index.ts new file mode 100644 index 00000000000..d4b3b1987ff --- /dev/null +++ b/packages/mobile-ui-vue/components/icon/index.ts @@ -0,0 +1,9 @@ +import type { App } from 'vue'; +import Icon from './src/index.vue'; + +Icon.install = (app: App) => { + app.component(Icon.name || 'FmIcon', Icon); +}; + +export { Icon }; +export default Icon; diff --git a/packages/mobile-ui-vue/components/icon/src/index.vue b/packages/mobile-ui-vue/components/icon/src/index.vue new file mode 100644 index 00000000000..3f22c75cfd7 --- /dev/null +++ b/packages/mobile-ui-vue/components/icon/src/index.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/packages/mobile-ui-vue/components/image/index.ts b/packages/mobile-ui-vue/components/image/index.ts new file mode 100644 index 00000000000..901cc7b19fd --- /dev/null +++ b/packages/mobile-ui-vue/components/image/index.ts @@ -0,0 +1,9 @@ +import { App } from 'vue'; +import Image from './src/index.vue'; + +Image.install = (app: App) => { + app.component(Image.name || 'FmImage', Image); +}; + +export { Image }; +export default Image; diff --git a/packages/mobile-ui-vue/components/image/src/index.html b/packages/mobile-ui-vue/components/image/src/index.html new file mode 100644 index 00000000000..3fae970df40 --- /dev/null +++ b/packages/mobile-ui-vue/components/image/src/index.html @@ -0,0 +1,24 @@ +
+ +
+ + + +
+
+ + + +
+
diff --git a/packages/mobile-ui-vue/components/image/src/index.vue b/packages/mobile-ui-vue/components/image/src/index.vue new file mode 100644 index 00000000000..06e635d771e --- /dev/null +++ b/packages/mobile-ui-vue/components/image/src/index.vue @@ -0,0 +1,89 @@ + + + diff --git a/packages/mobile-ui-vue/components/index.ts b/packages/mobile-ui-vue/components/index.ts new file mode 100644 index 00000000000..a23272632f5 --- /dev/null +++ b/packages/mobile-ui-vue/components/index.ts @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { App } from 'vue'; + +import Scroll from './scroll'; +import Navbar from './navbar'; +import Overlay from './overlay'; +import Popup from './popup'; +import ActionSheet from './action-sheet'; +import Icon from './icon'; +import Image from './image'; +import Cell from './cell'; +import Button from './button'; +import AdvUploader from './adv-uploader'; +import ListView from './listview'; +import Locale from './locale'; +import { Checker } from "./checkbox"; + +const Components = [Scroll, Navbar, Overlay, Popup, ActionSheet, Icon, Image, Cell, Button, AdvUploader, Locale, ListView, Checker]; + +const install = (app: App): void => { + Components.forEach((component: any) => { + if (component.install) { + app.use(component); + } else { + app.component(component.name, component); + } + }); +}; + +export { Scroll, Navbar, Overlay, Popup, ActionSheet, Icon, Image, Cell, Button, AdvUploader, Locale, ListView , Checker}; + +export default { + install +}; diff --git a/packages/mobile-ui-vue/components/listview/README.md b/packages/mobile-ui-vue/components/listview/README.md new file mode 100644 index 00000000000..d36ee8d0f0e --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/README.md @@ -0,0 +1,112 @@ +# fm-listview 列表 + +### 介绍 + +瀑布流滚动加载,用于展示长列表,当列表即将滚动到底部时,会触发事件并加载更多列表项。 + +### 基础用法 + +List 组件通过`loading`和`finished`两个变量控制加载状态,当组件滚动到底部时,会触发`load`事件并将`loading`设置成`true`。此时可以发起异步操作并更新数据,数据更新完毕后,将`loading`设置成`false`即可。若数据已全部加载完毕,则直接将`finished`设置成`true`即可。 + +## API + +### Props + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| list-data | 列表数据 | Array | - +| multiple | 是否支持多选 | boolean | `false`| +| loading | 是否处于加载状态,加载过程中不触发`load`事件,支持`v-model` | boolean | `false` | +| finished | 是否已加载完成,加载完成后不再触发`load`事件 | boolean | `false` | +| error | 是否加载失败,加载失败后点击错误提示可以重新
触发`load`事件,必须使用`sync`修饰符,支持`v-model` | boolean | `false` | +| offset | 滚动条与底部距离小于 offset 时触发`load`事件 | number | `30` | +| loadingText | 加载过程中的提示文案 | string | `加载中...` | +| finishedText | 加载完成后的提示文案 | string | `没有更多了` | +| errorText | 加载失败后的提示文案 | string | `加载错误,请重试...` | +| immediateCheck | 是否在初始化时立即执行滚动位置检查 | boolean | `true` | +| direction | 滚动触发加载的方向,可选值为`up` | string | `down` | +| btns | 多选操作按钮组 | Array\ | `[]`| +| initMultiSelect | 初始化多选 | boolean | `false` | +| fill | 是否填充模式 | boolean | `false` | +| enablePullRefresh | 是否开启上拉加载下页 | boolean | `false` | +| idField | 判定是否选中得标识 | string | `id` | +| textField | 开启子级列表得菜单文本 | string | `-` | +| childField | 子级列表得标识字段 | string | `-` | + +#### ListviewBtnOptions Props + +| 属性 | 说明 | 类型 | 默认值 | +| ---| ----- | ------ | ------ | +| text | 按钮文案 | string | - | +| handler | 点击回调 | function() | - | +| plain | 是否为线框按钮 | boolean | `false` | +| disabled | 禁用按钮 | boolean | `false` | + +### Events + +| 事件名 | 说明 | 回调参数 | +| ------ | ---------------------------------- | -------- | +| load | 滚动条与底部距离小于 offset 时触发 | - | +| itemClick | 行点击触发 | `{data:当前行数据,index:当前行索引值}` | +| selectChange | 选中事件 | `{data:当前行数据,index:当前行索引值}` | +| refresh | 下拉刷新事件 | `-` | + +### 方法 + +通过 ref 可以获取到 List 实例并调用实例方法 + +| 方法名 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| check | 检查当前的滚动位置,若已滚动至底部,则会触发 load 事件 | - | - | +| listCheckStart | 列表多选 | - | -| +| listCheckCancel | 取消多选 | - | - | +| listCheckAll | 列表全选| - | - | +| listCheckAllCancel | 取消全选 | - | - | +| getCheckeds | 获取选中值 | - | Array\ | + +### Slots + +| 名称 | 说明 | +| -------- | -------------------------- | +| default | 列表内容 | +| loading | 自定义底部加载中提示 | +| finished | 自定义加载完成后的提示文案 | +| error | 自定义加载失败后的提示文案 | + +## 常见问题 + +### List 的运行机制是什么? + +List 会监听浏览器的滚动事件并计算列表的位置,当列表底部与可视区域的距离小于`offset`时,List 会触发一次 load 事件。 + +### 为什么 List 初始化后会立即触发 load 事件? + +List 初始化后会触发一次 load 事件,用于加载第一屏的数据,这个特性可以通过`immediate-check`属性关闭。 + +### 为什么会连续触发 load 事件? + +如果一次请求加载的数据条数较少,导致列表内容无法铺满当前屏幕,List 会继续触发 load 事件,直到内容铺满屏幕或数据全部加载完成。因此你需要调整每次获取的数据条数,理想情况下每次请求获取的数据条数应能够填满一屏高度。 + +### loading 和 finished 分别是什么含义? + +`List`有以下三种状态,理解这些状态有助于你正确地使用`List`组件: + +- 非加载中,`loading`为`false`,此时会根据列表滚动位置判断是否触发`load`事件(列表内容不足一屏幕时,会直接触发) +- 加载中,`loading`为`true`,表示正在发送异步请求,此时不会触发`load`事件 +- 加载完成,`finished`为`true`,此时不会触发`load`事件 + +在每次请求完毕后,需要手动将`loading`设置为`false`,表示加载结束 + + +### 在 html、body 上设置 overflow 后一直触发加载? + +如果在 html 和 body 标签上设置了`overflow-x: hidden`样式,会导致 List 一直触发加载。 + +```css +html, +body { + overflow-x: hidden; +} +``` + +这个问题的原因是当元素设置了`overflow-x: hidden`样式时,该元素的`overflow-y`会被浏览器设置为`auto`,而不是默认值`visible`,导致 List 无法正确地判断滚动容器。解决方法是去除该样式,或者在 html 和 body 标签上添加`height: 100%`样式。 diff --git a/packages/mobile-ui-vue/components/listview/index.ts b/packages/mobile-ui-vue/components/listview/index.ts new file mode 100644 index 00000000000..5978dc7e5f3 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/index.ts @@ -0,0 +1,9 @@ +import { App } from 'vue'; +import Listview from './src/listview'; + +Listview.install = function (app: App) { + app.component(Listview.name || 'FmListview', Listview); +}; + +export { Listview }; +export default Listview; diff --git a/packages/mobile-ui-vue/components/listview/src/listview-container.vue b/packages/mobile-ui-vue/components/listview/src/listview-container.vue new file mode 100644 index 00000000000..d2b509191bd --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/listview-container.vue @@ -0,0 +1,134 @@ + + + diff --git a/packages/mobile-ui-vue/components/listview/src/listview-list.vue b/packages/mobile-ui-vue/components/listview/src/listview-list.vue new file mode 100644 index 00000000000..dcc5302b896 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/listview-list.vue @@ -0,0 +1,120 @@ + + + diff --git a/packages/mobile-ui-vue/components/listview/src/listview-props.ts b/packages/mobile-ui-vue/components/listview/src/listview-props.ts new file mode 100644 index 00000000000..26443446ef8 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/listview-props.ts @@ -0,0 +1,89 @@ +import { PropType } from 'vue'; +import { Direction, ListViewToolbarItem } from './listview-types'; + +export const listViewProps = { + listData: { + type: Array as PropType[]>, + default() { + return []; + } + }, + error: { + type: Boolean, + default: false + }, + finished: { + type: Boolean, + default: false + }, + loading: { + type: Boolean, + default: false + }, + errorText: String, + loadingText: { + type: String, + default: '' + }, + finishedText: String, + showFinishedText: { + type: Boolean, + default: false + }, + immediateCheck: { + type: Boolean, + default: true + }, + offset: { + type: Number, + default: 30 + }, + direction: { + type: String as PropType, + default: 'down' + }, + multiple: { + type: Boolean, + default: false + }, + btns: { + type: Array as PropType, + default() { + return []; + } + }, + showSubmitBtn: { + type: Boolean, + default: true + }, + className: { + type: String + }, + idField: { + type: String, + default: 'id' + }, + fill: { + type: Boolean, + default: false + }, + initMultiSelect: { + type: Boolean, + default: false + }, + enablePullRefresh: { + type: Boolean, + default: false + }, + listRefreshing: { + type: Boolean, + default: false + }, + childField: { + type: String + }, + textField: { + type: String + }, + selecteds: Object as PropType +}; diff --git a/packages/mobile-ui-vue/components/listview/src/listview-types.ts b/packages/mobile-ui-vue/components/listview/src/listview-types.ts new file mode 100644 index 00000000000..39cbd936f74 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/listview-types.ts @@ -0,0 +1,48 @@ +import { ComputedRef, Ref } from 'vue'; + +export type Direction = 'up' | 'down'; + +export type ListViewContainerProps = { + finished: boolean; + loading: boolean; + error: boolean; + listRefreshing: boolean; + direction: Direction; + contentClass?: string; + errorText: string; + finishedText: string; + loadingText: string; + showFinishedText: boolean; +}; + +export type LsitViewItemProps = { + multiple: boolean; + initMultiSelect: boolean; + textField?: string; + idField: string; +}; + +export type ListViewState = { + listData: Ref[]>; + notEmptyListData: ComputedRef; + selecteds: Ref[]>; + isSelected: (item: Record) => boolean; + toggleSelected: (item: Record) => void; + clearSelecteds: () => void; + selectedAll: () => void; + selecte: (id: string) => void; +}; + +export type ListViewToolbarItem = { + text: string; + type: string; + handler: (btn: ListViewToolbarItem, value: any) => void; + disabled: boolean; + visible: boolean; + plain: boolean; +}; + +export type ScrollerPosition = { + scrollLeft: number; + scrollTop: number; +}; diff --git a/packages/mobile-ui-vue/components/listview/src/listview.tsx b/packages/mobile-ui-vue/components/listview/src/listview.tsx new file mode 100644 index 00000000000..6243c6d1cd7 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/listview.tsx @@ -0,0 +1,73 @@ +import { useExpose } from '@/hook'; +import { defineComponent, ref } from 'vue'; +import { listViewProps } from './listview-props'; +import ListView from './listview.vue'; +import { ScrollerPosition } from './listview-types'; + +export default defineComponent({ + name: 'FmListview', + components: { + listview: ListView + }, + inheritAttrs: false, + props: listViewProps, + emits: ['refresh', 'load', 'itemClick', 'selectChange', 'update:loading', 'update:error'], + setup(props, { emit, attrs, slots }) { + const listviewRef = ref(); + const pullRefreshDisabled = ref(false); + + // get listviewRef 暴露的函数 + const getlistviewRefFC = (name: string) => { + return () => listviewRef.value && listviewRef.value[name](); + }; + const checkSubmit = () => { + listviewRef.value.checkCancel(); + return listviewRef.value.getCheckeds(); + }; + // 暴露内部函数 + useExpose({ + checkSubmit, + checkCancel: getlistviewRefFC('checkCancel'), + listCheckStart: getlistviewRefFC('checkStart'), + listCheckCancel: getlistviewRefFC('checkCancel'), + listCheckAll: getlistviewRefFC('checkAll'), + listCheckAllCancel: getlistviewRefFC('checkAllCancel'), + getCheckeds: getlistviewRefFC('getCheckeds'), + getSelectDataList: getlistviewRefFC('getCheckeds'), + check: getlistviewRefFC('check'), + setScrollerPosition: (position: ScrollerPosition) => listviewRef.value && listviewRef.value.setScrollerPosition(position), + getScrollerPosition: getlistviewRefFC('getScrollerPosition') + }); + + const { onRefresh, ...listviewAttrs } = attrs; + + const listviewProps = { + ...listviewAttrs, + onLoad: () => emit('load'), + onItemClick: (event: any) => emit('itemClick', event), + onSelectChange: (event: any) => emit('selectChange', event), + 'onUpdate:error': (value: boolean) => emit('update:error', value), + 'onUpdate:loading': (value: boolean) => emit('update:loading', value), + onScroll: (event: number) => { pullRefreshDisabled.value = !!event; } + }; + + const renderListView = () => { + return ; + }; + + const renderPullRrefresh = () => { + const className = props.fill ? 'fm-pull-refresh-wrapper fm-pull-refresh-fill' : 'fm-pull-refresh-wrapper'; + return ( + emit('refresh')} + loading-text=" "> + {renderListView()} + + ); + }; + return props.enablePullRefresh ? renderPullRrefresh : renderListView; + } +}); diff --git a/packages/mobile-ui-vue/components/listview/src/listview.vue b/packages/mobile-ui-vue/components/listview/src/listview.vue new file mode 100644 index 00000000000..449e6665225 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/listview.vue @@ -0,0 +1,172 @@ + + + diff --git a/packages/mobile-ui-vue/components/listview/src/use-data.ts b/packages/mobile-ui-vue/components/listview/src/use-data.ts new file mode 100644 index 00000000000..f275c29fae5 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/use-data.ts @@ -0,0 +1,56 @@ +import { provideState } from '@/hook'; +import { getValue, notEmptyArray } from '@/utils'; +import { computed, ref, Ref } from 'vue'; +import { ListViewState } from './listview-types'; + +export const ListViewToken = Symbol('list-view'); +export const useData = (listData: Ref[]>, idField = 'id') => { + const selecteds = ref[]>([]); + + const isSelected = (item: Record) => { + return !!selecteds.value.find((selected) => { + return getValue(idField, selected) && getValue(idField, selected) === getValue(idField, item); + }); + }; + + const toggleSelected = (item: Record) => { + if (isSelected(item)) { + selecteds.value = selecteds.value.filter((selected) => getValue(idField, selected) !== getValue(idField, item)); + } else { + selecteds.value.push(item); + } + }; + + const selectedAll = () => { + selecteds.value = listData.value; + }; + + const selecte = (id: string) => { + const target = listData.value.find((item) => getValue(idField, item) === id); + if (target) { + selecteds.value.push(target); + } + }; + + const clearSelecteds = () => { + selecteds.value = []; + }; + + const notEmptyListData = computed(() => { + return notEmptyArray(listData.value); + }); + + const state: ListViewState = { + listData, + notEmptyListData, + selecteds, + isSelected, + toggleSelected, + clearSelecteds, + selecte, + selectedAll + }; + provideState(ListViewToken, state); + + return state; +}; diff --git a/packages/mobile-ui-vue/components/listview/src/use-scroll-check.ts b/packages/mobile-ui-vue/components/listview/src/use-scroll-check.ts new file mode 100644 index 00000000000..dbddd724020 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/use-scroll-check.ts @@ -0,0 +1,77 @@ +import { useEventListener } from '@/hook'; +import { getScroller, throttle } from '@/utils'; +import { nextTick, onMounted, Ref, ref } from 'vue'; +import { Direction, ScrollerPosition } from './listview-types'; + +export const useScrollCheck = ( + options: { + containerRef: Ref; + placeholderRef: Ref; + direction?: Direction; + offset?: number; + }, + listener: () => void +) => { + const { containerRef, placeholderRef, direction = 'down', offset = 30 } = options; + let actived = true; + let scroller: Element | Window; + const isReachEdge = ref(false); + const scrollTop = ref(0); + console.log('useScrollCheck'); + + const check = () => { + nextTick(() => { + scrollTop.value = (scroller as Element).scrollTop; + + if (!actived || !placeholderRef.value) { + return; + } + + const scrollerRect = (scroller as Element).getBoundingClientRect + ? (scroller as Element).getBoundingClientRect() + : { top: 0, bottom: (scroller as Window).innerHeight }; + + // 在界面上隐藏,不需要处理 + if (scrollerRect.bottom === 0) { + return; + } + + const placeholderRect = placeholderRef.value?.getBoundingClientRect(); + + isReachEdge.value = + direction === 'up' ? scrollerRect.top - placeholderRect.top <= offset : placeholderRect.bottom - scrollerRect.bottom <= offset; + isReachEdge.value && listener(); + }); + }; + + onMounted(() => { + scroller = getScroller(containerRef.value); + useEventListener('scroll', throttle(check, 300), { + target: scroller, + immediate: true + }); + }); + + const setActived = (value: boolean) => { + actived = value; + }; + + const setScrollerPosition = (scrollerPosition: ScrollerPosition) => { + scrollerPosition?.scrollLeft && ((scroller as Element).scrollLeft = scrollerPosition.scrollLeft); + scrollerPosition?.scrollTop && ((scroller as Element).scrollTop = scrollerPosition.scrollTop); + }; + + const getScrollerPosition = (): ScrollerPosition => { + const { scrollLeft = 0, scrollTop = 0 } = scroller ? (scroller as Element) : {}; + return { scrollLeft, scrollTop }; + }; + + return { + isReachEdge, + scrollTop, + check, + setActived, + setScrollerPosition, + getScrollerPosition + }; +}; diff --git a/packages/mobile-ui-vue/components/listview/src/use-touch-hold.ts b/packages/mobile-ui-vue/components/listview/src/use-touch-hold.ts new file mode 100644 index 00000000000..ae50f26c5a7 --- /dev/null +++ b/packages/mobile-ui-vue/components/listview/src/use-touch-hold.ts @@ -0,0 +1,27 @@ +import { useEventListener } from '@/hook'; +import { throttle } from '@/utils'; +import { Ref } from 'vue'; + +export function useTouchHold(target: Element | Ref, listener: () => void, wait = 200) { + let timer = 0; + const onTouchStart = () => { + timer = window.setTimeout(() => { + listener(); + }, 700); + return false; + }; + const onTouchMove = () => { + clearTimeout(timer); + timer = 0; + }; + const onTouchEnd = () => { + clearTimeout(timer); + }; + if (target) { + useEventListener('touchstart', onTouchStart, { target }); + useEventListener('touchmove', throttle(onTouchMove, wait), { + target + }); + useEventListener('touchend', onTouchEnd, { target }); + } +} diff --git a/packages/mobile-ui-vue/components/locale/index.ts b/packages/mobile-ui-vue/components/locale/index.ts new file mode 100644 index 00000000000..d6c08a50f8a --- /dev/null +++ b/packages/mobile-ui-vue/components/locale/index.ts @@ -0,0 +1,58 @@ +import { ref, reactive, App } from 'vue'; +import zhCHS from './lang/zh-CHS'; +import zhCHT from './lang/zh-CHT'; +import en from './lang/en'; +import { deepAssign, isFunction } from '../utils'; + +type Message = Record; +type Messages = Record; + +const lang = ref('zh-CHS'); +const messages = reactive({ + 'zh-CHS': zhCHS, + 'zh-CHT': zhCHT, + en +}); + +export const Locale = { + messages(): Message { + return messages[lang.value] ? messages[lang.value] : messages['zh-CHS']; + }, + message(key: string): Message { + return this.messages()[key]; + }, + use(newLang: string, newMessages?: Message) { + lang.value = newLang; + this.add({ [newLang]: newMessages }); + }, + + add(newMessages: Message = {}) { + deepAssign(messages, newMessages); + }, + getCurrentLang() { + return lang; + }, + createTranslate(name: string) { + return (path: string, ...args: any[]) => { + const messages = this.messages(); + const message = messages[name] ? messages[name] : messages.common; + const text = isFunction(message[path]) ? message[path](...args) : message[path]; + if (!text) { + const commonMessage = messages.common; + return isFunction(commonMessage) ? message(path, args) : commonMessage[path]; + } + return text; + }; + }, + install(app: App) { + app.config.globalProperties.$t = (name: string, path: string, ...args: any[]) => this.createTranslate(name)(path, ...args); + } +}; + +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + $t: (name: string, path: string, ...args: any[]) => string; + } +} + +export default Locale; diff --git a/packages/mobile-ui-vue/components/locale/lang/en/index.ts b/packages/mobile-ui-vue/components/locale/lang/en/index.ts new file mode 100644 index 00000000000..a2d95b61c3f --- /dev/null +++ b/packages/mobile-ui-vue/components/locale/lang/en/index.ts @@ -0,0 +1,156 @@ +/* eslint-disable max-len */ +export default { + common: { + cancelText: 'Cancel', + confirmText: 'Confirm', + continueText: 'Continue', + loaddingText: 'Loadding', + selecteText: 'Click to select', + selectedText: 'Selected', + emptyText: 'No data available', + moreText: 'More', + etcText: 'etc.', + sendText: "Send", + resetText: "Reset", + }, + advUploader: { + uploading: 'Uploading', + failed: 'Failed', + waiting: 'Waiting', + unnamedFile: 'Unnamed file', + }, + calendar: { + todayText: 'Today', + yearText: 'Year', + monthText: 'Month', + dayLabelsText: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], + monthLabelsText: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + defaultTitle: (year: number, month: number) => { + const monthTextArr = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; + return `${monthTextArr[month - 1]} ${year}`; + }, + }, + collapse: { + expandText: 'Expand', + collapseText: 'Collapse', + }, + datetimePicker: { + placeholder: 'Click to choose date', + }, + filter: { + placeholder: 'Search', + startText: (value: string) => `From ${value}`, + endText: (value: string) => `To ${value}`, + start2EndText: (start: string, end: string) => `${start} to ${end}`, + }, + input: { + placeholder: { + number: 'Please enter the number', + text: 'Please enter the text', + common: 'Please enter', + }, + }, + listview: { + errorText: 'Request failed, click to reload', + finishedText: 'No more' + }, + search: { + placeholder: "Enter keywords", + }, + lookupPanel: { + placeholder: 'Search', + navTitle: 'Unnamed', + breadcrumbRootText: 'All', + recentText: 'Recent', + favoriteText: 'Favorites', + clearText: 'Clear', + SelectAllText: 'All', + clearAllText: 'Cancel All', + emptyText: 'No Data', + httpError: 'Unexcepted return value', + httpResponseError: (name: string) => `Data service not found ${name}`, + selectedAppendText: (_count: number) => `etc.`, + selectedLimitText: (selectedLimit: number) => `No more than ${selectedLimit} items can be selected`, + totalNumberOfPeople: (count: number) => `${count} people`, + }, + upload: { + title: 'Attachment', + unnamedFile: 'Unnamed file', + previewTitle: 'Preview attachment', + previewActName: 'Online preview', + deleteActName: 'Delete', + downloadActName: 'Download', + noFileSelectionMethod: 'File selection method is not defined.', + cannotPreview: 'The file cannot be previewed online', + separator: ', ', + warning: 'Warning', + fileOversizeTip: ( + sizeLimit: string, + amount: number, + invalidNames: string + ) => + `The size of each file is limited to ${sizeLimit}. ${amount} files exceed the limit and cannot be uploaded (${invalidNames}). Do you want to continue uploading other files?`, + allFileOversizeTip: (sizeLimit: string) => + `The size limit for a single file is ${sizeLimit}. The selected files are all larger than the limit and cannot be uploaded. Please select again.`, + }, + attach: { + defaultTitle: "Attachment", + onlinePreview: "Online preview", + downloadOnlyTip: "The current file does not support preview, please download!", + download: "Download", + delete: "Delete", + preview: "Preview", + selectFromAlbum: "Select from Album", + takePhoto: "Take photo", + takeShortVideo: "Take short video", + selectFile: "Select from local files", + uploadFailedTipTitle: "Upload failed", + uploadFailedTip: "The file is too large. Please choose again!", + uploadingText: "Uploading attachment", + attachmentPreviewTitle: "Attachment Preview", + goToDownload: "Download", + }, + text: { + trueText: "True", + falseText: "False", + }, + discussionGroup: { + comments: "Comments", + reply: "Reply", + noComments: "No comments yet", + commentCountSuffix: " replies", + allReplies: "All replies", + colon: ": ", + writeComment: "Write comment", + defaultPlaceholder: "Leave a comment", + cannotBeEmptyTip: "Comment field cannot be empty", + replyTo: "Reply to ", + }, + filterPanel: { + validationFailedTip: "Validation failed", + fieldNotEmptyTip: (fieldName: string) => `${fieldName} cannot be empty`, + lastWeek: "Last week", + lastMonth: "Last month", + lastThreeMonths: "Last three months", + lastSixMonths: "Last six months", + datePickerTitle: "Select Date", + more: "More", + numberDefaultPlaceholder: "Please enter a number", + }, + pagination: { + defaultPrevText: "Previous page", + defaultNextText: "Next page", + }, + scheadule: { + title: (count: number) => `${count} Agenda Items`, + allDay: "All day", + beforeDawn: "Before dawn", + morning: "Morning", + afternoon: "Afternoon", + }, + tags: { + add: "Add", + placeholder: "Please enter", + }, + shareSheet: {}, +}; diff --git a/packages/mobile-ui-vue/components/locale/lang/zh-CHS/index.ts b/packages/mobile-ui-vue/components/locale/lang/zh-CHS/index.ts new file mode 100644 index 00000000000..464e9ba6fe3 --- /dev/null +++ b/packages/mobile-ui-vue/components/locale/lang/zh-CHS/index.ts @@ -0,0 +1,154 @@ +export default { + common: { + cancelText: '取消', + confirmText: '确定', + continueText: '继续', + loaddingText: '加载中', + selectedText: '已选择', + selecteText: '点击选择', + emptyText: '暂无数据', + moreText: '更多', + etcText: '等', + sendText: '发送', + resetText: "重置", + }, + advUploader: { + uploading: '上传中', + failed: '上传失败', + waiting: '准备上传', + unnamedFile: '未命名文件', + }, + calendar: { + todayText: '今', + yearText: '年', + monthText: '月', + dayLabelsText: ['一', '二', '三', '四', '五', '六', '日'], + monthLabelsText: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + defaultTitle: (year: number, month: number) => { + return `${year}年${month}月`; + }, + }, + collapse: { + expandText: '展开', + collapseText: '收起', + }, + datetimePicker: { + placeholder: '点击选择日期', + }, + filter: { + placeholder: '搜索', + startText: (value: string) => `从${value}起`, + endText: (value: string) => `到${value}止`, + start2EndText: (start: string, end: string) => `${start} 至 ${end}`, + }, + input: { + placeholder: { + number: '请输入数字', + text: '请输入文本', + common: '请输入', + } + }, + listview: { + errorText: '请求失败,点击重新加载', + finishedText: '没有更多了' + }, + search: { + placeholder: '请输入搜索关键词', + }, + lookupPanel: { + placeholder: '搜索', + navTitle: '未命名', + breadcrumbRootText: '全部', + recentText: '最近联系人', + favoriteText: '我的收藏', + clearText: '清空选择', + SelectAllText: '全选', + clearAllText: '取消全选', + emptyText: '暂无数据', + httpError: 'Http服务返回值异常', + httpResponseError: (name: string) => `Http服务缺少${name}方法`, + selectedAppendText: (count: number) => `等${count}个`, + selectedLimitText: (selectedLimit: number) => `最多选中${selectedLimit}条`, + totalNumberOfPeople: (count: number) => `${count}人`, + }, + upload: { + title: '附件', + unnamedFile: '未命名文件', + previewTitle: '附件预览', + previewActName: '在线预览', + deleteActName: '删除', + downloadActName: '下载', + noFileSelectionMethod: '文件选择方式未定义', + cannotPreview: '不支持在线预览该文件', + separator: '、', + warning: '警告', + fileOversizeTip: ( + sizeLimit: string, + amount: number, + invalidNames: string + ) => + `单个文件大小限制为${sizeLimit},有${amount}个文件的大小超过限制(${invalidNames}),无法上传,是否继续上传其它文件?`, + allFileOversizeTip: (sizeLimit: string) => + `单个文件大小限制为${sizeLimit},所选文件的大小都超过了限制,无法上传,请重新选择。`, + }, + attach: { + defaultTitle: "附件", + onlinePreview: "在线预览", + downloadOnlyTip: "当前文件不支持预览,请下载", + download: "下载", + delete: "删除", + preview: "预览", + selectFromAlbum: "从相册选择", + takePhoto: "相机", + takeShortVideo: "短视频", + selectFile: "手机文件", + uploadFailedTipTitle: "上传失败", + uploadFailedTip: "上传文件太大,请重新选择!", + uploadingText: "附件上传中", + attachmentPreviewTitle: "附件预览", + goToDownload: "去下载", + }, + text: { + trueText: "是", + falseText: "否", + }, + discussionGroup: { + comments: "评论", + reply: "回复", + noComments: "暂无评论", + commentCountSuffix: "条回复", + allReplies: "全部回复", + colon: ":", + writeComment: "写评论", + defaultPlaceholder: "评一下", + cannotBeEmptyTip: "评论区内容不能为空", + replyTo: "回复 ", + }, + filterPanel: { + validationFailedTip: "校验失败", + fieldNotEmptyTip: (fieldName: string) => `${fieldName}不允许为空`, + lastWeek: "近一周", + lastMonth: "近一月", + lastThreeMonths: "近三月", + lastSixMonths: "近半年", + datePickerTitle: "选择年月日", + more: "更多", + numberDefaultPlaceholder: "请输入数字", + }, + pagination: { + defaultPrevText: "上一页", + defaultNextText: "下一页", + }, + scheadule: { + title: (count: number) => `${count}项日程`, + allDay: "全天", + beforeDawn: "凌晨", + morning: "上午", + afternoon: "下午", + }, + tags: { + add: "添加", + placeholder: "请输入", + }, + shareSheet: {}, +}; diff --git a/packages/mobile-ui-vue/components/locale/lang/zh-CHT/index.ts b/packages/mobile-ui-vue/components/locale/lang/zh-CHT/index.ts new file mode 100644 index 00000000000..74f21fa8476 --- /dev/null +++ b/packages/mobile-ui-vue/components/locale/lang/zh-CHT/index.ts @@ -0,0 +1,154 @@ +export default { + common: { + cancelText: '取消', + confirmText: '確定', + continueText: '繼續', + loaddingText: '加載中', + selectedText: '已選擇', + selecteText: '點擊選擇', + emptyText: '暫無數據', + moreText: '更多', + etcText: '等', + sendText: '發送', + resetText: "重置", + }, + advUploader: { + uploading: '上傳中', + failed: '上傳失敗', + waiting: '准備上傳', + unnamedFile: '未命名文件', + }, + calendar: { + todayText: '今', + yearText: '年', + monthText: '月', + dayLabelsText: ['一', '二', '三', '四', '五', '六', '日'], + monthLabelsText: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], + defaultTitle: (year: number, month: number) => { + return `${year}年${month}月`; + }, + }, + collapse: { + expandText: '展開', + collapseText: '收起', + }, + datetimePicker: { + placeholder: '點擊選擇日期', + }, + filter: { + placeholder: '搜尋', + startText: (value: string) => `從${value}起`, + endText: (value: string) => `到${value}止`, + start2EndText: (start: string, end: string) => `${start} 至 ${end}`, + }, + input: { + placeholder: { + number: '請輸入數字', + text: '請輸入文本', + common: '請輸入', + } + }, + listview: { + errorText: '請求失敗,點擊重新加載', + finishedText: '沒有更多了' + }, + search: { + placeholder: "請輸入搜索關鍵詞", + }, + lookupPanel: { + placeholder: '搜索', + navTitle: '未命名', + breadcrumbRootText: '全部', + recentText: '最近聯繫人', + favoriteText: '我的收藏', + clearText: '清空選擇', + SelectAllText: '全選', + clearAllText: '取消全選', + emptyText: '暫無數據', + httpError: 'Http服務返回值異常', + httpResponseError: (name: string) => `Http服務缺少${name}方法`, + selectedAppendText: (count: number) => `等${count}個`, + selectedLimitText: (selectedLimit: number) => `最多選中${selectedLimit}條`, + totalNumberOfPeople: (count: number) => `${count}人`, + }, + upload: { + title: '附件', + unnamedFile: '未命名文件', + previewTitle: '附件預覽', + previewActName: '在線預覽', + deleteActName: '删除', + downloadActName: '下載', + noFileSelectionMethod: '文件選擇方式未定義', + cannotPreview: '不支持在線預覽該文件', + separator: '、', + warning: '警告', + fileOversizeTip: ( + sizeLimit: string, + amount: number, + invalidNames: string + ) => + `單個文件大小限制爲${sizeLimit},有${amount}個文件的大小超過限制(${invalidNames}),無法上傳,是否繼續上傳其它文件?`, + allFileOversizeTip: (sizeLimit: string) => + `單個文件大小限制爲${sizeLimit},所選文件的大小都超過了限制,無法上傳,請重新選擇。`, + }, + attach: { + defaultTitle: "附件", + onlinePreview: "在線預覽", + downloadOnlyTip: "當前文件不支持預覽,請下載", + download: "下載", + delete: "刪除", + preview: "預覽", + selectFromAlbum: "從相冊選擇", + takePhoto: "相機", + takeShortVideo: "短視頻", + selectFile: "手機文件", + uploadFailedTipTitle: "上傳失敗", + uploadFailedTip: "上傳文件太大,請重新選擇!", + uploadingText: "附件上傳中", + attachmentPreviewTitle: "附件預覽", + goToDownload: "去下載", + }, + text: { + trueText: "是", + falseText: "否", + }, + discussionGroup: { + comments: "評論", + reply: "回複", + noComments: "暫無評論", + commentCountSuffix: "條回複", + allReplies: "全部回複", + colon: ":", + writeComment: "寫評論", + defaultPlaceholder: "評一下", + cannotBeEmptyTip: "評論區內容不能爲空", + replyTo: "回複 ", + }, + filterPanel: { + validationFailedTip: "校驗失敗", + fieldNotEmptyTip: (fieldName: string) => `${fieldName}不允許爲空`, + lastWeek: "近一周", + lastMonth: "近一月", + lastThreeMonths: "近三月", + lastSixMonths: "近半年", + datePickerTitle: "選擇年月日", + more: "更多", + numberDefaultPlaceholder: "請輸入數字", + }, + pagination: { + defaultPrevText: "上一頁", + defaultNextText: "下一頁", + }, + scheadule: { + title: (count: number) => `${count}項日程`, + allDay: "全天", + beforeDawn: "淩晨", + morning: "上午", + afternoon: "下午", + }, + tags: { + add: "添加", + placeholder: "請輸入", + }, + shareSheet: {}, +}; diff --git a/packages/mobile-ui-vue/components/navbar/index.ts b/packages/mobile-ui-vue/components/navbar/index.ts new file mode 100644 index 00000000000..01080a5016c --- /dev/null +++ b/packages/mobile-ui-vue/components/navbar/index.ts @@ -0,0 +1,9 @@ +import type { App } from 'vue'; +import Navbar from './src/navbar.vue'; + +Navbar.install = function (app: App) { + app.component(Navbar.name || 'FmNavbar', Navbar); +}; + +export { Navbar }; +export default Navbar; diff --git a/packages/mobile-ui-vue/components/navbar/src/navbar.vue b/packages/mobile-ui-vue/components/navbar/src/navbar.vue new file mode 100644 index 00000000000..4d8309e042a --- /dev/null +++ b/packages/mobile-ui-vue/components/navbar/src/navbar.vue @@ -0,0 +1,75 @@ + + + + diff --git a/packages/mobile-ui-vue/components/overlay/index.ts b/packages/mobile-ui-vue/components/overlay/index.ts new file mode 100644 index 00000000000..fda22ac7c19 --- /dev/null +++ b/packages/mobile-ui-vue/components/overlay/index.ts @@ -0,0 +1,9 @@ +import type { App } from 'vue'; +import Overlay from './src/index'; + +Overlay.install = function (app: App) { + app.component(Overlay.name || 'FmOverlay', Overlay); +}; + +export { Overlay }; +export default Overlay; diff --git a/packages/mobile-ui-vue/components/overlay/src/index.tsx b/packages/mobile-ui-vue/components/overlay/src/index.tsx new file mode 100644 index 00000000000..3183b4957f6 --- /dev/null +++ b/packages/mobile-ui-vue/components/overlay/src/index.tsx @@ -0,0 +1,43 @@ +import { useLazyRender } from '../../hook'; +import { CSSProperties, defineComponent, PropType, Transition } from 'vue'; +import { preventDefault, noop } from '../../utils'; + +export default defineComponent({ + name: 'FmOverlay', + props: { + show: Boolean, + zIndex: [Number, String], + duration: [Number, String], + className: null, + customStyle: Object as PropType, + lockScroll: { + type: Boolean, + default: true, + }, + }, + setup(props, { slots }) { + const lazyRender = useLazyRender(() => props.show); + const preventTouchMove = (event: TouchEvent) => { + preventDefault(event, true); + }; + + const renderOverlay = lazyRender(() => { + const style: CSSProperties = { + zIndex: props.zIndex !== undefined ? +props.zIndex : undefined, + animationDuration: props.duration ? `${props.duration}s` : '', + ...props.customStyle, + }; + return ( +
+ {slots.default?.()} +
+ ); + }); + return () => {renderOverlay()}; + }, +}); diff --git a/packages/mobile-ui-vue/components/popup/index.ts b/packages/mobile-ui-vue/components/popup/index.ts new file mode 100644 index 00000000000..452b525a44b --- /dev/null +++ b/packages/mobile-ui-vue/components/popup/index.ts @@ -0,0 +1,9 @@ +import type { App } from 'vue'; +import Popup from './src/index'; + +Popup.install = function (app: App) { + app.component(Popup.name || 'FmPopup', Popup); +}; + +export { Popup }; +export default Popup; diff --git a/packages/mobile-ui-vue/components/popup/src/index.tsx b/packages/mobile-ui-vue/components/popup/src/index.tsx new file mode 100644 index 00000000000..fbbe8fb709f --- /dev/null +++ b/packages/mobile-ui-vue/components/popup/src/index.tsx @@ -0,0 +1,171 @@ +import { useClickAway, useLockScroll } from '../../hook'; +import { + CSSProperties, + defineComponent, + Transition, + Teleport, + watch, + ref, +} from 'vue'; +import { Overlay } from '../../overlay'; + +export default defineComponent({ + name: 'FmPopup', + components: { + [Overlay.name]: Overlay, + }, + inheritAttrs: false, + props: { + show: Boolean, + // z-index + zIndex: [Number, String], + width: String, + height: String, + // transition duration + duration: [Number, String], + // teleport + teleport: null, + position: String, + overlay: { + type: Boolean, + default: true, + }, + closeOnClickOverlay: { + type: Boolean, + default: true, + }, + lockScroll: { + type: Boolean, + default: true, + }, + round: { + type: Boolean, + default: false, + }, + useClickAway: { + type: Boolean, + default: true, + }, + transition: String, + overlayClass: String, + className: String, + overlayStyle: Object, + + }, + emit: ['click', 'opened', 'closed', 'update:show'], + setup(props, { emit, attrs, slots }) { + const getTransitionName = (position: string | undefined) => { + switch (position) { + case 'bottom': + return 'fm-slide-up'; + case 'top': + return 'fm-slide-down'; + case 'left': + return 'fm-slide-left'; + case 'right': + return 'fm-slide-right'; + default: + return 'fm-fade'; + } + }; + + const className = { + 'fm-popup': true, + 'fm-popup-round': props.round, + [`fm-popup-${props.position}`]: props.position, + [`${props.className}`]: !!props.className + }; + + const [lockScroll, unlockScroll] = useLockScroll(() => props.lockScroll); + + const close = () => { + props.show && emit('update:show', false); + }; + + const clickAwayActive = ref(false); + const popupRef = ref(); + props.useClickAway && useClickAway(popupRef, close, { active: clickAwayActive }); + + watch( + () => props.show, + (value) => { + if (value) { + lockScroll(); + setTimeout(() => { + clickAwayActive.value = true; + }); + } else { + unlockScroll(); + clickAwayActive.value = false; + } + }, + ); + + const renderTransition = () => { + const name = getTransitionName(props.position); + const style: CSSProperties = { + width: props.width ? props.width : undefined, + height: props.height ? props.height : undefined, + zIndex: props.zIndex !== undefined ? +props.zIndex : undefined, + transitionDuration: `${props.duration}s`, + }; + return ( + emit('opened')} + onAfterLeave={() => emit('closed')} + > +
emit('click', evt)} + {...attrs} + > + {slots.default?.()} +
+
+ ); + }; + + const onOverlayClick = (event: Event) => { + event.stopPropagation(); + props.closeOnClickOverlay && close(); + }; + + const renderOverlay = () => { + const overlayIndex = + props.zIndex !== undefined ? Number(props.zIndex) - 1 : undefined; + if (props.overlay) { + return ( + + ); + } + }; + + return () => { + if (props.teleport) { + return ( + + {renderOverlay()} + {renderTransition()} + + ); + } + return ( + <> + {renderOverlay()} + {renderTransition()} + + ); + }; + }, +}); diff --git a/packages/mobile-ui-vue/components/scroll/index.ts b/packages/mobile-ui-vue/components/scroll/index.ts new file mode 100644 index 00000000000..98c90e3bf4e --- /dev/null +++ b/packages/mobile-ui-vue/components/scroll/index.ts @@ -0,0 +1,9 @@ +import type { App } from 'vue'; +import Scroll from './src/scroll.vue'; + +Scroll.install = function (app: App) { + app.component(Scroll.name || 'FmScroll', Scroll); +}; + +export { Scroll }; +export default Scroll; diff --git a/packages/mobile-ui-vue/components/scroll/src/scroll.vue b/packages/mobile-ui-vue/components/scroll/src/scroll.vue new file mode 100644 index 00000000000..520a3463e0b --- /dev/null +++ b/packages/mobile-ui-vue/components/scroll/src/scroll.vue @@ -0,0 +1,83 @@ + + + diff --git a/packages/mobile-ui-vue/components/theme/fonts/farris-mobile-icon.ttf b/packages/mobile-ui-vue/components/theme/fonts/farris-mobile-icon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7d450d9876c7df282718db3dab7ab1c38a21b725 GIT binary patch literal 52124 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 G@P7eOTc>OQ literal 0 HcmV?d00001 diff --git a/packages/mobile-ui-vue/components/theme/index.scss b/packages/mobile-ui-vue/components/theme/index.scss new file mode 100644 index 00000000000..7738cdd9c79 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/index.scss @@ -0,0 +1,59 @@ +@import './src/animation'; +@import './src/variables'; +@import './src/action-bar.scss'; +@import './src/action-sheet.scss'; +@import './src/attach.scss'; +@import './src/badge.scss'; +@import './src/base.scss'; +@import './src/button.scss'; +@import "./src/calendar.scss"; +@import './src/card.scss'; +@import './src/cell.scss'; +@import './src/checkbox.scss'; +@import './src/checker.scss'; +@import './src/collapse.scss'; +@import './src/dialog.scss'; +@import './src/discussion-group.scss'; +@import './src/dropdown.scss'; +@import './src/filter.scss'; +@import './src/html-panel.scss'; +@import './src/icon.scss'; +@import './src/image-preview.scss'; +@import './src/image.scss'; +@import './src/index-list.scss'; +@import './src/input-template.scss'; +@import './src/input.scss'; +@import './src/listview.scss'; +@import './src/loading.scss'; +@import './src/lookup.scss'; +@import './src/navbar.scss'; +@import './src/notice-bar.scss'; +@import './src/notify.scss'; +@import './src/overlay.scss'; +@import './src/pagination.scss'; +@import './src/picker.scss'; +@import './src/popup.scss'; +@import './src/popover.scss'; +@import './src/radio.scss'; +@import './src/rich-editor.scss'; +@import './src/scheadule.scss'; +@import './src/scroll-view.scss'; +@import './src/scroll.scss'; +@import './src/search.scss'; +@import './src/share-sheet.scss'; +@import './src/sidebar.scss'; +@import './src/skeleton.scss'; +@import './src/steps.scss'; +@import './src/swipe.scss'; +@import './src/swipecell.scss'; +@import './src/switch.scss'; +@import './src/tab-bar.scss'; +@import './src/tab.scss'; +@import './src/tabs.scss'; +@import './src/tag.scss'; +@import './src/tags.scss'; +@import './src/text-area.scss'; +@import './src/text.scss'; +@import './src/toast.scss'; +@import './src/tree-bar.scss'; +@import './src/upload.scss'; diff --git a/packages/mobile-ui-vue/components/theme/src/_animation.scss b/packages/mobile-ui-vue/components/theme/src/_animation.scss new file mode 100644 index 00000000000..891caf7a2fe --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/_animation.scss @@ -0,0 +1,150 @@ +@keyframes fm-fade-in { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fm-fade-out { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fm-fade { + &-enter-active { + animation: 0.3s fm-fade-in both ease-out; + } + + &-leave-active { + animation: 0.3s fm-fade-out both ease-in; + } +} + +.fm-slide-up { + &-enter-from, + &-leave-to { + transform: translate3d(0, 100%, 0); + } +} + +.fm-slide-down { + &-enter-from, + &-leave-to { + transform: translate3d(0, -100%, 0); + } +} + +.fm-slide-left { + &-enter-from, + &-leave-to { + transform: translate3d(-100%, 0, 0); + } +} + +.fm-slide-right { + &-enter-from, + &-leave-to { + transform: translate3d(100%, 0, 0); + } +} + +.fm-slide-up-enter-active, +.fm-slide-down-enter-active, +.fm-slide-left-enter-active, +.fm-slide-right-enter-active { + transition-timing-function: ease-out; +} +.fm-slide-up-leave-active, +.fm-slide-down-leave-active, +.fm-slide-left-leave-active, +.fm-slide-right-leave-active { + transition-timing-function: ease-in; +} + +.fm-slide-in-enter-active, +.fm-slide-in-leave-active, +.fm-slide-out-enter-active, +.fm-slide-out-leave-active { + will-change: transform; + transition: all 0.3s; + height: 100%; + width: 100%; + top: 0px; + position: absolute; + backface-visibility: hidden; + perspective: 1000; +} + +.fm-slide-in-leave-to, +.fm-slide-out-enter-from { + transform: translateX(-100%); + opacity: 0; +} +.fm-slide-in-enter-from, +.fm-slide-out-leave-to { + transform: translateX(100%); + opacity: 0; +} + +@keyframes fm-drop-down-in { + from { + height: 0; + opacity: 0; + } + + to { + opacity: 1; + } +} +@keyframes fm-drop-down-out { + from { + opacity: 1; + } + to { + height: 0; + opacity: 0; + } +} +.fm-drop-down { + &-enter-active { + animation: 0.3s fm-drop-down-in both ease-out; + } + &-leave-active { + animation: 0.3s fm-drop-down-out both ease-in; + } +} +@keyframes fm-circular { + 0% { + stroke-dasharray: 1, 200; + stroke-dashoffset: 0 + } + + 50% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -40 + } + + 100% { + stroke-dasharray: 90, 150; + stroke-dashoffset: -120 + } +} +@keyframes fm-rotate { + from { + -webkit-transform: rotate(0); + transform: rotate(0) + } + + to { + -webkit-transform: rotate(360deg); + transform: rotate(360deg) + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/_variables.scss b/packages/mobile-ui-vue/components/theme/src/_variables.scss new file mode 100644 index 00000000000..39d0462ceba --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/_variables.scss @@ -0,0 +1,141 @@ +:root { + // Color Palette + --fm-black: #000; + --fm-white: #fff; + --fm-gray-1: #f7f8fa; + --fm-gray-2: #f2f3f5; + --fm-gray-3: #eee; + --fm-gray-4: #ddd; + --fm-gray-5: #ccc; + --fm-gray-6: #999; + --fm-gray-7: #666; + --fm-gray-8: #333; + --fm-red: #F24645; + --fm-red-light: #f9e8e8; + --fm-blue: #3A90FF; + --fm-blue-2: #65a7ff; + --fm-blue-light: #ecf2fe; + --fm-green: #5CC171; + --fm-green-2: #5AC1C3; + --fm-green-light: #e9f5ed; + --fm-orange: #FF9800; + --fm-orange-2: #FA6400; + --fm-orange-light: #faf0e1; + --fm-orange-dark: #ed6a0c; + + + // Component Colors + --fm-primary-color: var(--fm-blue); + --fm-success-color: var(--fm-green); + --fm-danger-color: var(--fm-red); + --fm-warning-color: var(--fm-orange); + --fm-submit-color: var(--fm-green-2); + --fm-primary-color-light: var(--fm-blue-light); + --fm-success-color-light: var(--fm-green-light); + --fm-danger-color-light: var(--fm-red-light); + --fm-warning-color-light: var(--fm-orange-light); + --fm-text-color: var(--fm-gray-8); + --fm-text-color-2: var(--fm-gray-6); + --fm-text-color-3: var(--fm-gray-5); + --fm-text-color-light: var(--fm-gray-7); + --fm-active-color: var(--fm-gray-2); + --fm-disabled-color: var(--fm-gray-5); + --fm-active-opacity: 0.7; + --fm-readonly-opacity: 0.6; + --fm-disabled-opacity: 0.5; + --fm-background: var(--fm-gray-1); + --fm-background-2: var(--fm-white); + --fm-background-3: var(--fm-gray-2); + --fm-box-shadow-color: var(--fm-gray-2); + --fm-box-shadow-color-2: var(--fm-gray-6); + + // Padding + --fm-padding-base: 4px; + --fm-padding-xs: 8px; + --fm-padding-sm: 12px; + --fm-padding-md: 16px; + --fm-padding-lg: 24px; + --fm-padding-xl: 32px; + --fm-padding-horizontal-xs: 0 var(--fm-padding-xs); + --fm-padding-horizontal-sm: 0 var(--fm-padding-sm); + --fm-padding-horizontal-md: 0 var(--fm-padding-md); + --fm-padding-horizontal-lg: 0 var(--fm-padding-lg); + // Margin + --fm-margin-base: 4px; + --fm-margin-xs: 8px; + --fm-margin-sm: 12px; + --fm-margin-md: 16px; + --fm-margin-lg: 24px; + --fm-margin-xl: 32px; + --fm-margin-horizontal-xs: 0 var(--fm-margin-xs); + --fm-margin-horizontal-sm: 0 var(--fm-margin-sm); + --fm-margin-horizontal-md: 0 var(--fm-margin-md); + --fm-margin-horizontal-lg: 0 var(--fm-margin-lg); + + // Font + --fm-font-bold-light: 500; + --fm-font-bold: 600; + --fm-font-size-base: 16px; + --fm-font-size-xs: 10px; + --fm-font-size-sm: 12px; + --fm-font-size-md: 14px; + --fm-font-size-lg: 18px; + --fm-line-height-xs: 14px; + --fm-line-height-sm: 18px; + --fm-line-height-md: 20px; + --fm-line-height-lg: 22px; + --fm-line-height: 1.2; + + --fm-font-size-icon-1: 10px; + --fm-font-size-icon-2: 12px; + --fm-font-size-icon-3: 14px; + --fm-font-size-icon-4: 16px; + --fm-font-size-icon-5: 18px; + --fm-font-size-icon-6: 20px; + + // Gradient Colors + --fm-gradient-blue: linear-gradient(-45deg,var(--fm-blue-2) 0%, var(--fm-blue) 100%); + --fm-gradient-orange: linear-gradient(-45deg,var(--fm-orange) 0%, var(--fm-orange-2) 100%); + + /* stylelint-disable */ + --fm-base-font: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', + Helvetica, Segoe UI, Arial, Roboto, 'PingFang SC', 'miui', + 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif; + --fm-price-font: avenir-heavy, 'PingFang SC', helvetica neue, arial, + sans-serif; + /* stylelint-enable */ + + // Animation + --fm-duration-base: 0.3s; + --fm-duration-fast: 0.2s; + --fm-ease-out: ease-out; + --fm-ease-in: ease-in; + + // Border + --fm-border-color: var(--fm-gray-4); + --fm-border-color-2: var(--fm-gray-3); + --fm-border-width: 1px; + --fm-noborder: none; + --fm-radius-sm: 2px; + --fm-radius-md: 4px; + --fm-radius-lg: 8px; + --fm-radius-max: 999px; + + --fm-zindex-1: 9; + --fm-zindex-2: 10; + --fm-zindex-3: 99; + --fm-zindex-4: 100; + --fm-zindex-5: 999; + --fm-zindex-6: 1000; +} + +.fm-theme-dark { + --fm-text-color: #f5f5f5; + --fm-text-color-2: #707070; + --fm-text-color-3: #4d4d4d; + --fm-border-color: #3a3a3c; + --fm-active-color: #3a3a3c; + --fm-background: #000; + --fm-background-2: #1c1c1e; + --fm-background-3: #37363b; +} diff --git a/packages/mobile-ui-vue/components/theme/src/action-bar.scss b/packages/mobile-ui-vue/components/theme/src/action-bar.scss new file mode 100644 index 00000000000..4486789d108 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/action-bar.scss @@ -0,0 +1,104 @@ +@import './mixins/hairline'; + +:root { + --fm-action-bar-border-color: var(--fm-border-color); + --fm-action-bar-btn-icon-font-size: var(--fm-font-size-icon-6); + --fm-action-bar-btn-color: var(--fm-gray-7); + --fm-action-bar-btn-color-white: var(--fm-white); + --fm-action-bar-btn-color-disabled: var(--fm-disabled-color); + --fm-action-bar-btn-font-size: var(--fm-font-size-xs); + --fm-action-bar-btn-margin-top: var(--fm-margin-base); + --fm-action-bar-btn-padding: var(--fm-padding-xs) 0; +} + +.fm-action-bar { + width: 100%; +} +.fm-action-bar-btns { + @include hairline('top', var(--fm-action-bar-border-color)); + display: flex; + align-items: center; + flex-wrap: nowrap; + text-align: center; + .fm-action-bar-btn-item { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex: 1; + padding: var(--fm-action-bar-btn-padding); + .btn-item-icon { + .fm-icon { + font-size: var(--fm-action-bar-btn-icon-font-size); + } + } + .btn-item-text { + margin-top: var(--fm-action-bar-btn-margin-top); + font-size: var(--fm-action-bar-btn-font-size); + color: var(--fm-action-bar-btn-color); + } + &-primary, + &-danger, + &-warning, + &-success, + &.fm-action-bar-btn-item-has-color + { + .btn-item-icon, + .btn-item-text { + color: var(--fm-action-bar-btn-color-white); + } + } + &-primary { + background-color: var(--fm-primary-color); + } + &-danger { + background-color: var(--fm-danger-color); + } + &-warning { + background-color: var(--fm-warning-color); + } + &-success { + background-color: var(--fm-success-color); + } + + &.fm-action-bar-btn-item-disabled { + .btn-item-icon, + .btn-item-text { + color: var(--fm-action-bar-btn-color-disabled); + } + } + &:not(.fm-action-bar-btn-item-disabled):active { + background-color: var(--fm-active-color); + } + &.fm-action-bar-btn-item-primary:active { + background-color: var(--fm-primary-color); + } + } +} +.fm-action-bar-popover { + .fm-popover-arrow { + display: none; + } + .fm-popover-item-container { + &-primary, + &-primary .fm-popover-item-content { + color: var(--fm-primary-color); + } + &-danger, + &-danger .fm-popover-item-content { + color: var(--fm-danger-color); + } + &-warning, + &-warning .fm-popover-item-content { + color: var(--fm-warning-color); + } + &-success, + &-success .fm-popover-item-content { + color: var(--fm-success-color); + } + &-disabled, + &-disabled .fm-popover-item-content { + color: var(--fm-action-bar-btn-color-disabled); + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/action-sheet.scss b/packages/mobile-ui-vue/components/theme/src/action-sheet.scss new file mode 100644 index 00000000000..53f4cec7c24 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/action-sheet.scss @@ -0,0 +1,99 @@ +@import './mixins/hairline'; +:root { + --fm-actionsheet-max-height: 80%; + --fm-actionsheet-color: var(--fm-text-color); + --fm-actionsheet-background-color: var(--fm-gray-2); + --fm-actionsheet-font-size: var(--fm-font-size-base); + --fm-actionsheet-sub-font-size: var(--fm-font-size-sm); + --fm-actionsheet-sub-color: var(--fm-text-color-2); + --fm-actionsheet-round: 16px 16px 0 0 ; + --fm-actionsheet-header-height: 48px; + --fm-actionsheet-header-height: 48px; + --fm-actionsheet-item-height: 22px; + --fm-actionsheet-sub-height: 20px; +} + +.fm-actionsheet{ + display: flex; + flex-direction: column; + overflow: hidden; + max-height: var(--fm-actionsheet-max-height); + color: var(--fm-actionsheet-color); + font-size: var(--fm-actionsheet-font-size); + background-color: var(--fm-actionsheet-background-color); + &.fm-actionsheet-round{ + border-radius: var(--fm-actionsheet-round); + } + &-header { + flex-shrink: 0; + height: var(--fm-actionsheet-header-height); + line-height: var(--fm-actionsheet-header-height); + text-align: center; + background-color: var(--fm-white); + &-title{ + font-weight: 500; + } + &-close{ + position: absolute; + top: 0; + right: 0; + line-height: inherit; + padding: var(--fm-padding-horizontal-md); + .fm-icon{ + color: var(--fm-gray-5); + font-size: var(--fm-font-size-icon-5); + } + &:active{ + .fm-icon{ + color: var(--fm-gray-7); + } + } + } + } + .fm-actionsheet-item,.fm-actionsheet-cancel-inner{ + display: block; + width: 100%; + padding: 14px 16px; + text-align: center; + background-color: var(--fm-white); + border: none; + cursor: pointer; + &:active{ + background-color: var(--fm-actionsheet-background-color); + } + } + &-content{ + flex: 1 auto; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + .fm-actionsheet-item{ + line-height: var(--fm-actionsheet-item-height); + &-subname{ + margin-top: var(--fm-margin-xs); + color: var(--fm-actionsheet-sub-color); + font-size: var(--fm-actionsheet-sub-font-size); + line-height: var(--fm-actionsheet-sub-font-size); + } + &.fm-actionsheet-item-disabled{ + color: var(--fm-disabled-color); + } + } + } + &-cancel{ + flex-shrink: 0; + margin-top: var(--fm-margin-xs); + background-color: var(--fm-white); + } + &-description{ + background-color: var(--fm-white); + &-inner{ + @include hairline('bottom', var(--fm-border-color)); + flex-shrink: 0; + padding: var(--fm-padding-md); + color: var(--fm-actionsheet-sub-color); + font-size: var(--fm-actionsheet-sub-font-size); + line-height: var(--fm-actionsheet-sub-height); + text-align: center; + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/attach.scss b/packages/mobile-ui-vue/components/theme/src/attach.scss new file mode 100644 index 00000000000..331e964f06b --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/attach.scss @@ -0,0 +1,419 @@ +.attachment-bg { + background: #fff; + user-select: none; + -webkit-user-select: none; + + .fm-button { + user-select: none; + -webkit-user-select: none; + } + + div { + user-select: none; + -webkit-user-select: none; + } + + span { + user-select: none; + -webkit-user-select: none; + } + + img { + -webkit-user-select: none; + -webkit-touch-callout: none; + user-select: none; + } + + button { + user-select: none; + -webkit-user-select: none; + } +} + +.listview-content { + .fm-listview-item { + margin: 12px 0; + } + + .fm-tmpl-attachment-img { + width: 48px; + height: 48px; + margin: auto 0; + + .item-img { + width: 100%; + height: 100%; + } + + img { + border-radius: 3px; + width: 48px; + height: 48px; + } + } + + .attachment-text { + flex: 1; + margin: auto 12px; + + &>div { + display: flex; + justify-content: space-between; + margin-bottom: 5px; + } + } + + .fm-tmpl-attachment-name { + line-height: 22px; + font-family: PingFangSC-Regular; + font-size: 16px; + color: #333333; + letter-spacing: 0.21px; + margin-bottom: 2px; + word-break: break-all; + } + + .fm-tmpl-attachment-footer { + line-height: 18px; + font-family: PingFangSC-Regular; + font-size: 12px; + color: #888888; + letter-spacing: 0; + } + + .fm-tmpl-listview-attachment { + padding: 0; + display: flex; + justify-content: space-between; + -webkit-user-select: none; + user-select: none; + } + + .attachment-button { + .attachment-button-custom { + padding: 0; + width: 50px; + height: 20px; + font-family: PingFangSC-Regular; + font-size: 12px; + letter-spacing: 0; + border-radius: 10px; + } + } + + .attachment-icon { + margin: auto 0; + width: 16px; + height: 16px; + transform: rotate(90deg); + } +} + +.panzoom { + transform: none; + backface-visibility: hidden; + transform-origin: 50% 50% 0px; + display: flex; + justify-content: center; + flex-wrap: wrap; +} + +.page { + display: inline-block; + background-color: #ffffff; + margin: 20px; + -webkit-box-shadow: 0px 4px 12px -4px rgba(0, 0, 0, 0.38); + -moz-box-shadow: 0px 4px 12px -4px rgba(0, 0, 0, 0.38); + box-shadow: 0px 4px 12px -4px rgba(0, 0, 0, 0.38); + transition: all 0.3s; +} + +.farris-attachment-entry-vertical { + flex-direction: column; +} + +.farris-attachment-entry { + display: flex; + clear: both; + + & .fm-attachment-disabled { + cursor: not-allowed; + pointer-events: none; + } + + & .attachment-navigation { + overflow: inherit; + white-space: nowrap; + } + + & .attachment-navigation .attachment-navigation-item { + position: relative; + display: inline-block; + + & .item-img { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + } + + & .item-icon-delete { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + right: 0; + top: 0; + width: 16px; + height: 16px; + background: #888; + + & .fm-icon { + color: #fff; + font-size: 12px; + } + } + + & .item-icon { + position: absolute; + } + } + + & .fm-attachment-container { + box-sizing: border-box; + float: left; + position: relative; + margin: 0 100px 0 0; + padding: 0 52px 0 0; + max-width: 100%; + height: 54px; + + & .fm-attachment-files-list { + padding-top: 6px; + overflow: auto; + max-width: 100%; + } + + & .fm-attachment-files-item { + position: relative; + width: 48px; + height: 48px; + margin-right: 20px; + + & .item-icon-delete { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + right: -6px; + top: -6px; + width: 16px; + height: 16px; + background: #888; + border-radius: 50%; + + & .fm-icon { + color: #fff; + font-size: 12px; + } + } + + & .van-image__img { + border-radius: 5px; + } + } + + & .fm-attachment-upload-btn-container { + position: absolute; + right: 0; + top: 50%; + margin-top: -20px; + z-index: 8; + width: 48px; + height: 48px; + background: #f6f6f6; + border-radius: 3px; + + & .fm-attachment-upload-btn { + & .fm-icon { + display: block; + font-size: 20px; + color: #ddd; + line-height: 48px; + margin: 0 auto; + } + } + } + } + + & .fm-attachment-upload-listview-btn-container { + z-index: 8; + width: 48px; + height: 48px; + background: #f6f6f6; + border-radius: 3px; + + & .fm-attachment-upload-btn { + & .fm-icon { + display: block; + font-size: 20px; + color: #ddd; + line-height: 48px; + margin: 0 auto; + } + } + } +} + + +.attachment-actionsheet-content { + flex: 1 auto; + overflow-y: auto; + + .attachment-actionsheet-item-disabled { + color: #ccc; + padding: 0; + } + + .attachment-actionsheet-item { + font-family: PingFangSC-Regular; + letter-spacing: 0; + display: block; + width: 100%; + padding: 14px 0; + font-size: 16px; + background-color: #fff; + border: none; + cursor: pointer; + text-align: center; + } +} + +.actionsheet-content__remark { + font-family: PingFangSC-Regular; + font-size: 12px; + color: #999999; + letter-spacing: 0; + margin-top: 5px; +} + +.tooltip-container { + position: absolute; + z-index: 3000; + min-width: 150px; + margin: 0; + background: #333333; + border-radius: 5px; + font-family: PingFangSC-Medium; + font-size: 13px; + color: #cccccc; + letter-spacing: 0; + + div { + user-select: none; + -webkit-user-select: none; + } + + span { + user-select: none; + -webkit-user-select: none; + } + + .tooltip-content__item { + line-height: 3; + margin: 0 10px; + } + + .tooltip-content__item-first { + line-height: 3; + margin: 0 10px; + } + + .tooltip-content__item:not(:last-child) { + border-bottom: 1px solid rgba(102, 102, 102, 0.5); + } + + .tooltip-content__line { + background: rgba(102, 102, 102, 0.5); + height: 1px; + margin: 0 10px; + } + + .tooltip-container__arrow { + position: absolute; + border: 5px solid transparent; + width: 0; + height: 0; + } + + .tooltip-content__remark { + font-size: 10px; + margin-top: -20px; + } + + .tooltip-content__first-item { + line-height: 2; + } + + .tooltip-content__item__preview { + line-height: 3; + margin: 0 10px; + } + + .tooltip-content__item__disabled { + opacity: 0.4; + } + + .tooltip-arrow__top { + border-top-color: #333333; + left: 50%; + top: 100%; + } + + .tooltip-arrow__top-start { + border-top-color: #333333; + left: 80%; + top: 100%; + } + + .tooltip-arrow__top-end { + border-top-color: #333; + left: 20%; + top: 100%; + } + + .tooltip-arrow__right {} + + .tooltip-arrow__right-start { + border-right-color: #333; + right: 100%; + top: 30px; + } + + .tooltip-arrow__right-end { + border-right-color: #333; + right: 100%; + bottom: 30px; + } + + .tooltip-arrow__bottom {} + + .tooltip-arrow__bottom-start {} + + .tooltip-arrow__bottom-end {} + + .tooltip-arrow__left {} + + .tooltip-arrow__left-start { + border-left-color: #333; + left: 100%; + top: 30px; + } + + .tooltip-arrow__left-end { + border-left-color: #333; + left: 100%; + bottom: 30px; + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/badge.scss b/packages/mobile-ui-vue/components/theme/src/badge.scss new file mode 100644 index 00000000000..63b46716e61 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/badge.scss @@ -0,0 +1,47 @@ +:root { + --fm-badge-padding: 2px 4px; + --fm-badge-font-size: var(--fm-font-size-xs); + --fm-badge-text-color: var(--fm-white); + --fm-badge-primary-color: var(--fm-primary-color); + --fm-badge-secondary-color: var(--fm-blue-light); + --fm-badge-success-color: var(--fm-success-color); + --fm-badge-danger-color: var(--fm-danger-color); + --fm-badge-warning-color: var(--fm-warning-color); +} + +.fm-badge { + position: relative; + display: inline-block; + color: var(--fm-badge-text-color); + font-size: var(--fm-badge-font-size); + &-content { + position: absolute; + right: 0; + top: 0; + z-index: 99; + transform: translate(50%,-50%); + padding: var(--fm-badge-padding); + border-radius: 99px; + &-primary, + &-info { + background: var(--fm-badge-primary-color); + } + + &-secondary { + color: var(--fm-badge-primary-color); + background: var(--fm-badge-secondary-color); + } + + &-danger { + background-color: var(--fm-danger-color); + } + + &-warning { + background-color: var(--fm-warning-color); + } + + &-success { + background-color: var(--fm-success-color); + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/base.scss b/packages/mobile-ui-vue/components/theme/src/base.scss new file mode 100644 index 00000000000..6d4885e06f1 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/base.scss @@ -0,0 +1,17 @@ +@import './mixins/hairline'; + +.fm-overflow-hidden { + overflow: hidden !important; +} +.fm-hairline { + @include hairline('all'); +} +.fm-hairline-top { + @include hairline('top'); +} +.fm-hairline-bottom { + @include hairline('bottom'); +} +.fm-no-hairline::after { + display: none!important; +} diff --git a/packages/mobile-ui-vue/components/theme/src/button-group.scss b/packages/mobile-ui-vue/components/theme/src/button-group.scss new file mode 100644 index 00000000000..9e39a6607dd --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/button-group.scss @@ -0,0 +1,66 @@ +:root { + --button-group-color: var(--fm-primary-color); + --button-group-background: var(--fm-primary-color); + --button-group-background-first: var(--fm-white); + --button-group-background-last: var(--fm-gradient-blue); + --button-group-icon-color: var(--fm-gray-7); + --button-group-icon-font-size: var(--fm-font-size-icon-6); + --button-group-icon-text-font-size: var(--fm-font-size-xs); +} + +.fm-button-group { + display: flex; + .button-item { + display: flex; + flex: 1; + } + .button-wrapper { + flex: 1; + .fm-button { + height: 100%; + background: var(--button-group-background-last); + } + &:not(:last-child) { + .fm-button { + border-radius: 999px 0 0 999px; + background: var(--button-group-background-first); + border: 1px solid var(--button-group-color); + color: var(--button-group-color); + } + } + &:not(:first-child) { + .fm-button { + border-radius: 0 999px 999px 0; + background: var(--button-group-background); + } + } + } + .icon-wrapper { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + color: var(--button-group-icon-color); + .fm-icon { + font-size: var(--button-group-icon-font-size); + } + .icon-text { + font-size: var(--button-group-icon-text-font-size); + line-height: 16px; + } + &:not(:last-child) { + padding-right: var(--fm-padding-md); + } + + &.button-disabled { + cursor: not-allowed; + opacity: var(--fm-disabled-opacity); + } + } + &:not(:last-child) { + padding-right: var(--fm-padding-md); + } + &.fm-button-group-block { + flex: 1; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/button.scss b/packages/mobile-ui-vue/components/theme/src/button.scss new file mode 100644 index 00000000000..57079ba71fd --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/button.scss @@ -0,0 +1,199 @@ +:root { + --fm-button-height: 42px; + --fm-button-padding: 0 15px; + --fm-button-color: var(--fm-white); + --fm-button-round: var(--fm-radius-max); + --fm-button-radius: var(--fm-radius-sm); + --fm-button-plain-background: var(--fm-white); + --fm-button-line-height: var(--fm-line-height); + --fm-button-border-width: var(--fm-border-width); + --fm-button-font-size: var(--fm-font-size-base); + --fm-button-lg-height: 46px; + --fm-button-lg-font-size: var(--fm-font-size-lg); + --fm-button-md-height: 38px; + --fm-button-md-font-size: var(--fm-font-size-md); + --fm-button-sm-height: 34px; + --fm-button-sm-padding: 0 8px; + --fm-button-sm-font-size: var(--fm-font-size-sm); + --fm-button-xs-height: 28px; + --fm-button-xs-font-size: var(--fm-font-size-xs); + --fm-button-primary-color: var(--fm-primary-color); + --fm-button-secondary-color: var(--fm-blue-light); + --fm-button-success-color: var(--fm-success-color); + --fm-button-danger-color: var(--fm-danger-color); + --fm-button-warning-color: var(--fm-warning-color); +} + +.fm-button { + position: relative; + cursor: pointer; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + text-align: center; + margin: 0; + border: none; + transition: opacity 0.2s; + color: var(--fm-button-color); + height: var(--fm-button-height); + padding: var(--fm-button-padding); + font-size: var(--fm-button-font-size); + line-height: var(--fm-button-line-height); + border-radius: var(--fm-button-radius); + &-primary, + &-info { + background: var(--fm-button-primary-color); + } + + &-secondary { + color: var(--fm-button-primary-color); + background: var(--fm-button-secondary-color); + } + + &-danger { + background-color: var(--fm-danger-color); + } + + &-warning { + background-color: var(--fm-warning-color); + } + + &-success { + background-color: var(--fm-success-color); + } + + &-gradient-blue { + background: var(--fm-gradient-blue); + } + &-gradient-orange { + background: var(--fm-gradient-blue); + } + + &-add { + height: 48px; + width: 48px; + color: var(--fm-button-color); + background: var(--fm-button-primary-color); + box-shadow: var(--fm-button-box-shadow); + border-radius: var(--fm-button-round); + .fm-icon { + font-size: var(--fm-font-size-icon-6); + } + } + + &-plain { + background: var(--fm-button-plain-background); + box-shadow: none; + &.fm-button-primary, + &.fm-button-info { + color: var(--fm-button-primary-color); + border: var(--fm-button-border-width) solid var(--fm-button-primary-color); + } + + &.fm-button-success { + color: var(--fm-button-success-color); + border: var(--fm-button-border-width) solid var(--fm-button-success-color); + } + + &.fm-button-danger { + color: var(--fm-button-danger-color); + border: var(--fm-button-border-width) solid var(--fm-button-danger-color); + } + + &.fm-button-warning { + color: var(--fm-button-warning-color); + border: var(--fm-button-border-width) solid var(--fm-button-warning-color); + } + } + + &-noborder { + border: var(--fm-noborder) !important; + } + + &-large { + height: var(--fm-button-lg-height); + font-size: var(--fm-button-lg-font-size); + } + &-normal { + height: var(--fm-button-md-height); + font-size: var(--fm-button-md-font-size); + } + &-small { + height: var(--fm-button-sm-height); + padding: var(--fm-button-sm-padding); + font-size: var(--fm-button-sm-font-size); + } + &-mini { + height: var(--fm-button-xs-height); + padding: var(--fm-button-sm-padding); + font-size: var(--fm-button-xs-font-size); + } + + &-block { + display: flex; + width: 100%; + } + + &-disabled { + cursor: not-allowed; + opacity: var(--fm-disabled-opacity); + } + + &-round { + border-radius: var(--fm-button-round); + } + + &-square { + border-radius: 0; + } + .fm-button-loading { + display: inline-block; + width: 20px; + max-width: 100%; + height: 20px; + max-height: 100%; + vertical-align: middle; + animation: fm-rotate 2s linear infinite; + circle { + animation: fm-circular 1.5s ease-in-out infinite; + stroke: currentColor; + stroke-width: 4; + stroke-linecap: round; + } + &-icon-circular { + color: #fff; + } + } + .fm-button-loading-text { + margin-left: 6px; + } + .fm-button-icon:not(:last-child) { + margin-right: 6px; + } + + &::before { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 100%; + background-color: #000; + border: inherit; + border-color: #000; + border-radius: inherit; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + opacity: 0; + content: ' '; + } + &:active::before { + opacity: 0.1; + } + &-loading, + &-disabled { + &::before { + display: none; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/calendar.scss b/packages/mobile-ui-vue/components/theme/src/calendar.scss new file mode 100644 index 00000000000..a9cadbdb1a4 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/calendar.scss @@ -0,0 +1,205 @@ +:root { + --fm-calendar-font-size: var(--fm-font-size-base); + --fm-calendar-color: var(--fm-text-color); + --fm-calendar-background: var(--fm-background); + --fm-calendar-background-range: var(--fm-blue-2); + --fm-calendar-sub-font-size: var(--fm-font-size-xs); + --fm-calendar-sub-color: var(--fm-text-color-2); + --fm-calendar-radius: var(--fm-radius-max); + --fm-calendar-primary-color: var(--fm-primary-color); +} + +.fm-calendar-day-cell { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + color: var(--fm-calendar-color); + cursor: pointer; + position: relative; + &:after { + content: ''; + display: block; + padding-top: 100%; + } + .text { + width: 34px; + height: 34px; + border-radius: var(--fm-calendar-radius); + text-align: center; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + .day-lunar { + font-size: var(--fm-calendar-sub-font-size); + color: var(--fm-calendar-sub-color); + transform: scale(0.87); + white-space: nowrap; + } + } + .mark { + position: absolute; + top: 2px; + right: 2px; + font-size: 8px; + color: var(--fm-calendar-primary-color); + letter-spacing: 0.21px; + transform: scale(0.75); + } + .event { + position: absolute; + bottom: 2px; + left: 50%; + width: 5px; + height: 5px; + transform: translateX(-50%); + border-radius: var(--fm-calendar-radius); + background: var(--fm-calendar-primary-color); + } + &.fm-calendar-day-cell-current { + .text { + .day, + .day-lunar { + color: var(--fm-calendar-primary-color); + } + } + } + &.fm-calendar-day-cell-selected { + .text { + .day, + .day-lunar { + color: var(--fm-calendar-background); + } + } + } +} + + +.fm-calendar { + display: flex; + flex-direction: column; + background-color: var(--fm-calendar-background); + font-size: var(--fm-calendar-font-size); + .fm-calendar-header { + flex-shrink: 0; + .fm-calendar-header-title, + .fm-calendar-header-subtitle { + height: 44px; + line-height: 44px; + font-weight: 500; + text-align: center; + padding: 0 8px; + } + .fm-calendar-header-subtitle, + .fm-calendar-header-weekdays, + .fm-calendar-header-subtitle .left, + .fm-calendar-header-subtitle .right { + display: flex; + } + .fm-calendar-header-subtitle { + justify-content: space-between; + .fm-calendar-header-button { + padding: 0 8px; + } + } + .fm-calendar-header-weekdays { + .fm-calendar-weekday { + flex: 1; + line-height: 30px; + text-align: center; + } + } + } + .fm-calendar-body { + flex: 1; + overflow: hidden; + position: relative; + .content-box { + display: flex; + .content { + width: 100%; + flex-shrink:0; + } + } + .back-ground{ + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + font-size: 160px; + color: rgba(51,51,51,0.05); + z-index: 0; + pointer-events: none; + } + .fm-calendar-collapse { + display: flex; + justify-content: center; + .icon { + font-size: 20px; + color: #888; + } + } + } +} + +.fm-calendar-month { + display: flex; + user-select: none; + flex-direction: column; +} +.fm-calendar-week { + display: flex; +} +.fm-calendar-theme-card { + .fm-calendar-day-cell-selected { + .text { + background-color: var(--fm-calendar-primary-color); + } + } +} +.fm-calendar-theme-form { + .fm-calendar-header { + box-shadow: 0 2px 10px rgba(125, 126, 128, 0.16); + } + .fm-calendar-day-cell { + height: 64px; + } + .fm-calendar-day-cell-selected { + background-color: var(--fm-calendar-primary-color); + border-radius: 4px; + } + .fm-calendar-day-cell-begin { + border-radius: 4px 0 0 4px; + } + .fm-calendar-day-cell-end { + border-radius: 0 4px 4px 0; + } + .fm-calendar-day-cell-range { + background-color: var(--fm-calendar-background-range); + opacity: var(--fm-active-opacity); + } + .fm-calendar-day-cell-opacity:not(.fm-calendar-day-cell-selected):not(.fm-calendar-day-cell-range):not(.fm-calendar-day-cell-begin):not(.fm-calendar-day-cell-end) { + .text { + .day, + .day-lunar { + color: var(--fm-calendar-sub-color); + } + } + } +} +.fm-calendar-header-button-disabled, +.fm-calendar-day-cell-disabled{ + opacity: var(--fm-disabled-opacity); +} + +.fm-calendar-pop-wrapper { + .footer { + padding: 0 16px; + .confirm { + height: 36px; + margin: 7px 0; + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/card.scss b/packages/mobile-ui-vue/components/theme/src/card.scss new file mode 100644 index 00000000000..4fa2d3fe4d4 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/card.scss @@ -0,0 +1,65 @@ +:root { + --fm-card-background: var(--fm-background); + --fm-card-header-font-bold: var(--fm-font-bold); + --fm-card-header-icon-color: var(--fm-green); + --fm-card-header-icon-radius: var(--fm-radius-max); + --fm-card-footer-font-size: var(--fm-font-size-md); + --fm-card-footer-color: var(--fm-primary-color); +} + +.fm-card { + background-color: var(--fm-card-background); + &-header { + &-cell { + font-weight: var(--fm-card-font-bold); + } + &-left-icon { + display: flex; + align-items: center; + justify-content: center; + color: var(--fm-card-header-icon-color); + border-radius: var(--fm-card-header-icon-radius); + width: 20px; + height: 20px; + } + &-right-icon { + transition: transform var(--fm-duration-base); + } + } + &-content-wrapper { + display: block; + overflow: hidden; + transition: height var(--fm-duration-base) ease-in-out; + will-change: height; + .fm-card-content { + display: block; + } + } + &-footer { + display: flex; + @include hairline('top', var(--fm-border-color)); + &-btn { + color: var(--fm-card-footer-color); + font-size: var(--fm-card-footer-font-size); + .fm-icon { + color: var(--fm-card-footer-color); + font-size: var(--fm-card-footer-font-size); + } + + &:not(:last-child) { + &::after { + position: relative; + content: ''; + display: block; + margin-top: -8px; + height: 16px; + width: 1px; + background-color: var(--fm-border-color); + position: absolute; + top: 50%; + right: 0; + } + } + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/cell.scss b/packages/mobile-ui-vue/components/theme/src/cell.scss new file mode 100644 index 00000000000..48b645e121d --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/cell.scss @@ -0,0 +1,129 @@ +@import './mixins/hairline'; +:root { + --fm-cell-padding: 10px 16px; + --fm-cell-margin: 5px; + --fm-cell-background: var(--fm-background-2); + --fm-cell-color: var(--fm-text-color); + --fm-cell-font-size: var(--fm-font-size-base); + --fm-cell-line-height: 24px; + --cell-required-color: var(--fm-danger-color); + --cell-required-font-size: var(--fm-font-size-sm); + --cell-value-color: var(--fm-text-color); + --cell-label-color: var(--fm-text-color-2); + --cell-label-font-size: var(--fm-font-size-sm); + --cell-label-line-height: var(--fm-line-height-sm); +} +.fm-cell { + width: 100%; + padding: 10px 16px; + background-color: var(--fm-cell-background); + box-sizing: border-box; + color: var(--fm-cell-color); + font-size: var(--fm-cell-font-size); + line-height: var(--fm-cell-line-height); + position: relative; + display: flex; + overflow: hidden; + &-bottom-border, + &:not(:last-child) { + @include hairline('bottom', var(--fm-border-color)); + &::after { + left: 16px !important; + } + } + &.fm-cell-all-width:not(:last-child) { + &::after { + left: 0 !important; + } + } + &-clickable { + cursor: pointer; + } + &-clickable:active { + background-color: var(--fm-active-color); + } + &-required { + .fm-cell-title { + position: relative; + .fm-cell-title-text { + &::after { + padding-left: 2px; + color: var(--cell-required-color); + font-size: var(--cell-required-font-size); + content: '*'; + } + } + } + } + &-flex-fill, + &-title, + &-value { + flex: 1; + font-size: inherit; + } + &-title { + display: inline-block; + overflow: hidden; + &-text { + display: flex; + word-break: break-all; + span { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + } + &-right { + display: flex; + overflow: hidden; + flex-direction: column; + &-content { + display: flex; + flex: 1; + } + } + &-value { + position: relative; + overflow: hidden; + color: var(--cell-value-color); + text-align: right; + vertical-align: middle; + word-wrap: break-word; + + &-alone { + color: var(--cell-value-color); + text-align: left; + } + } + &-label { + margin-top: var(--fm-cell-margin); + color: var(--cell-label-color); + font-size: var(--cell-label-font-size); + line-height: var(--cell-label-line-height); + } + &-center { + align-items: center; + } + &-extra, + &-left-icon, + &-right-icon { + min-width: 1em; + font-size: var(--fm-cell-font-size); + line-height: var(--fm-cell-line-height); + display: flex; + align-items: center; + } + &-left-icon { + margin-right: var(--fm-cell-margin); + } + &-extra, + &-right-icon { + margin-left: var(--fm-cell-margin); + } + &-noborder { + .fm-cell::after { + display: none !important; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/checkbox.scss b/packages/mobile-ui-vue/components/theme/src/checkbox.scss new file mode 100644 index 00000000000..7ee8ce523d3 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/checkbox.scss @@ -0,0 +1,22 @@ + +.fm-checkbox-group { + .fm-checkbox-horizontal { + display: flex; + overflow: visible; + text-align: left; + flex-wrap: wrap; + .fm-checkbox { + margin-top: 4px; + margin-bottom: 4px; + } + } +} +.fm-cell .fm-checkbox-group .fm-checkbox-vertical { + padding-left: 0; +} +.fm-input-control-right { + .fm-checkbox-horizontal { + justify-content: flex-end; + } +} + diff --git a/packages/mobile-ui-vue/components/theme/src/checker.scss b/packages/mobile-ui-vue/components/theme/src/checker.scss new file mode 100644 index 00000000000..48e9bba92bb --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/checker.scss @@ -0,0 +1,94 @@ +:root { + --fm-checker-color: var(--fm-text-color); + --fm-checker-icon-color: var(--fm-text-color-2); + --fm-checker-icon-background: var(--fm-background-2); + --fm-checker-icon-radius: var(--fm-radius-md); + --fm-checker-checked-icon-color: var(--fm-primary-color); + --fm-checker-button-background: var(--fm-gray-2); + --fm-checker-disabled-color: var(--fm-disabled-color); + --fm-checker-disabled-icon-color: var(--fm-gray-1); +} + +.fm-checker { + display: flex; + align-items: center; + color: var(--fm-checker-color); + &-icon { + display: inline-block; + align-items: center; + .fm-icon { + display: block; + height: 20px; + width: 20px; + line-height: 18px; + font-size: 12px; + text-align: center; + border-radius: var(--fm-checker-icon-radius); + border: 1px solid var(--fm-checker-icon-color); + color: var(--fm-checker-icon-background); + background-color: var(--fm-checker-icon-background); + } + &-checked .fm-icon { + color: var(--fm-checker-icon-background); + border-color: var(--fm-checker-checked-icon-color); + background-color: var(--fm-checker-checked-icon-color); + } + &-round .fm-icon { + border-radius: 100%; + } + } + &-button { + font-size: 13px; + text-align: center; + border-radius: 14px; + color: var(--fm-checker-color); + background: var(--fm-checker-button-background); + &-checked { + color: var(--fm-checker-icon-background); + border-color: var(--fm-checker-color); + background-color: var(--fm-checker-checked-icon-color); + } + } + .fm-checker-label { + margin-left: 8px; + margin-right: 8px; + display: inline-block; + line-height: 20px; + } + &:first-child .fm-checker-button { + margin-left: 0; + } + .fm-checker-button { + line-height: 28px; + padding: 0 12px; + min-width: 60px; + margin-right: 0; + } + &-small { + .fm-checker-button { + line-height: 24px; + min-width: 45px; + padding: 0 9.5px; + } + } + &-readonly { + opacity: var(--fm-readonly-opacity); + } + &-disabled { + color: var(--fm-checker-disabled-color); + .fm-checker-icon { + .fm-icon { + border-color: var(--fm-checker-disabled-color); + background-color: var(--fm-checker-disabled-icon-color); + color: var(--fm-checker-disabled-icon-color); + } + } + .fm-checker-icon-checked { + .fm-icon { + background-color: var(--fm-checker-disabled-color); + border-color: var(--fm-checker-disabled-color); + } + } + } +} + diff --git a/packages/mobile-ui-vue/components/theme/src/collapse.scss b/packages/mobile-ui-vue/components/theme/src/collapse.scss new file mode 100644 index 00000000000..de845a3e34f --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/collapse.scss @@ -0,0 +1,38 @@ +:root { + --fm-collapse-background: var(--fm-white); + --fm-collapse-title-color: var(--fm-text-color-2); +} + +.fm-collapse-item { + &-title { + font-weight: 500; + &-state-icon { + transition: transform var(--fm-duration-base); + } + } + &-content-wrapper { + display: block; + overflow: hidden; + transition: height var(--fm-duration-base) ease-in-out; + will-change: height; + .fm-collapse-item-content { + display: block; + } + } +} +.fm-collapse-item-bottom { + .fm-collapse-item-title { + .fm-collapse-item-cell { + display: flex; + justify-content: center; + align-items: center; + padding: 12px 16px; + color: var(--fm-collapse-title-color); + font-size: 13px; + background-color: var(--fm-collapse-background); + } + &-state-icon{ + margin-right: 6px; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/dialog.scss b/packages/mobile-ui-vue/components/theme/src/dialog.scss new file mode 100644 index 00000000000..5fe933dba13 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/dialog.scss @@ -0,0 +1,107 @@ +@import './mixins/hairline'; + +:root { + --fm-dialog-background: var(--fm-background-2); + --fm-dialog-padding-top: 24px; + --fm-dialog-padding-left: 16px; + --fm-dialog-header-font-size: 17px; + --fm-dialog-header-line-height: 24px; + --fm-dialog-content-font-size: 15px; + --fm-dialog-content-line-height: 20px; + --fm-dialog-footer-height: 50px; +} + +@media screen and (min-width: 375px) { + .fm-dialog { + width: 320px; + } +} +@media screen and (min-width: 280px) and (max-width: 375px) { + .fm-dialog { + width: 240px; + } +} +.fm-dialog{ + display: flex; + flex-direction: column; + background-color: var(--fm-dialog-background); + overflow: hidden; + &-header{ + padding-top: var(--fm-dialog-padding-top); + padding-left: var(--fm-dialog-header-padding-left); + padding-right: var(--fm-dialog-header-padding-left); + font-weight: var(--fm-font-bold-light); + font-size: var(--fm-dialog-header-font-size); + color: var(--fm-text-color); + line-height: var(--fm-dialog-header-line-height); + text-align: center; + } + &-content{ + max-height: 70vh; + overflow-y: auto; + &-message{ + padding: var(--fm-dialog-padding-top) var(--fm-dialog-padding-left); + font-size: var(--fm-dialog-content-font-size); + line-height: var(--fm-dialog-content-line-height); + white-space: pre-wrap; + text-align: center; + word-wrap: break-word; + } + &-message-has-title{ + padding-top: 11px; + color: var(--fm-text-color-light); + } + } + &-content-prompt{ + padding: 14px; + &-input{ + display: block; + } + } + &-footer{ + display: flex; + flex-direction: row; + align-items: center; + @include hairline('top', var(--fm-border-color)); + .fm-button{ + border:0; + height: var(--fm-dialog-footer-height); + @include hairline('right', var(--fm-border-color)); + &:last-child{ + @include hairline-remove('right'); + } + &.fm-button-default{ + color: var(--fm-text-color); + } + } + &.fm-dialog-footer-is-column{ + flex-direction: column; + .fm-button{ + @include hairline('top', var(--fm-border-color)); + @include hairline-remove('right'); + &:first-child{ + @include hairline-remove('top'); + } + } + } + } + &.fm-dialog-relative{ + position: relative; + .fm-dialog-header{ + padding-right: 40px; + } + } + .fm-dialog-close{ + position: absolute; + right: 16px; + top: 16px; + width: 22px; + height: 22px; + line-height: 22px; + text-align: center; + .fm-icon{ + font-size: 15px; + color: var(--fm-text-color-2); + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/discussion-group.scss b/packages/mobile-ui-vue/components/theme/src/discussion-group.scss new file mode 100644 index 00000000000..0701f00d2df --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/discussion-group.scss @@ -0,0 +1,271 @@ +@import './mixins/hairline'; + +:root { + --fm-discussion-editor-primary-color: var(--fm-primary-color); +} + +.fm-discussion-editor{ + padding: 0 16px; + color: #333; + font-size: 16px; + &-reply{ + padding-bottom: 10px; + font-size: 14px; + .editor-reply-text{ + color: var(--fm-discussion-editor-primary-color); + } + } + &-input{ + background-color: #fff; + // @include hairline('all', $border-color-base); + .fm-discussion-editor-textarea{ + height: 130px; + padding: 10px; + line-height: 24px; + background-color: #f6f6f6; + outline: none; + overflow-y: auto; + word-break: break-all; + white-space: normal; + a{ + color: var(--fm-discussion-editor-primary-color); + } + &:empty::before{ + content:attr(placeholder); + color: #cccccc; + } + } + } + &-buttom{ + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + // padding: 8px 14px 8px 0; + height: 44px; + // background-color: $discussion-editor-buttom-background; + .fm-discussion-editor-toolbar{ + padding-right: 20px; + line-height: 44px; + font-size: 16px; + .fm-icon{ + font-size: 24px; + color: #666666; + } + } + .fm-discussion-editor-text{ + padding-right: 10px; + font-size: 16px; + color: var(--fm-discussion-editor-primary-color); + } + } +} + +.fm-discussion-list{ + padding: 0 16px; + background-color: #fff; + &-item{ + display: flex; + flex-direction: row; + align-items: flex-start; + padding-bottom: 20px; + .list-item-avatar{ + width: 36px; + height: 36px; + margin-right: 14px; + &-image{ + display: block; + width: 100%; + height: 100%; + border-radius: 50%; + } + &-image-tip{ + width: 100%; + height: 100%; + line-height: 36px; + font-size: 14px; + color: #fff; + text-align: center; + border-radius: 50%; + background-color: var(--fm-discussion-editor-primary-color); + } + } + .list-item-content{ + flex: 1 1 0; + .list-item-name{ + line-height: 18px; + margin-bottom: 6px; + font-size: 13px; + font-weight: 600; + } + .list-item-text{ + margin-bottom: 4px; + line-height: 22px; + font-size: 15px; + a{ + color: var(--fm-discussion-editor-primary-color); + } + } + .list-item-reply{ + margin-bottom: 6px; + padding: 8px; + font-size: 0; + background: #f7f8fb; + border-radius: 4px; + &-title{ + font-size: 14px; + .list-item-reply-name{ + color: var(--fm-discussion-editor-primary-color); + } + } + &-content{ + line-height: 20px; + font-size: 14px; + color: #666666; + } + } + .list-item-buttom{ + display: flex; + align-items: center; + align-items: center; + .list-item-date{ + line-height: 18px; + margin-right: 12px; + color: #999999; + } + .list-item-btn{ + padding: 0 12px; + background: #EBF6FF; + border-radius: 10px; + line-height: 20px; + color: var(--fm-discussion-editor-primary-color); + &-tip{ + padding: 0 2px; + } + } + } + } + } + &-title{ + padding: 12px 0 16px; + font-size: 16px; + color: #000000; + } +} + +.fm-discussion-group{ + padding: 7px 19px 6px; + background: #ffffff; + @include hairline('top'); + .fm-discussion-group-main{ + display: flex; + flex-direction: row; + align-items: center; + .fm-discussion-group-text{ + flex: 1 1 0; + padding: 0 12px; + line-height: 32px; + background: #f6f6f6; + font-size: 16px; + color: #999; + border-radius: 16px; + } + .fm-discussion-group-message{ + flex-shrink: 0; + padding-left: 20px; + font-size: 16px; + color: #333; + .fm-icon{ + margin-right: 6px; + font-size: 18px; + } + } + } +} + +.fm-discussion-group-toolbar{ + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding: 12px 16px; + @include hairline('top'); + .fm-toolbar-btn{ + line-height: 24px; + font-size: 17px; + color: #3A90FF; + } + .fm-toolbar-text{ + line-height: 26px; + font-size: 19px; + } +} + +.fm-discussion-group-close{ + display: flex; + justify-content: flex-end; + position: absolute; + right: 16px; + top: 7px; + .fm-close-btn{ + height: 30px; + width: 30px; + line-height: 30px; + text-align: center; + .fm-icon{ + font-size: 16px; + color: #999; + } + } +} +.fm-discussion-list-popup{ + top: 20px; + border-radius: 14px 14px 0 0; + .fm-discussion-list-content{ + display: flex; + flex-direction: column; + // justify-content: space-between; + height: 100%; + padding-bottom: 50px; + position: relative; + padding-top: 44px; + .fm-discussion-footer{ + position: absolute; + left: 0; + right: 0; + bottom: 0; + } + } + .fm-discussion-list-count{ + position: absolute; + left: 50%; + top: 10px; + transform: translateX(-50%); + line-height: 24px; + font-size: 17px; + color: #333; + } + .fm-discussion-list-main{ + .fm-discussion-list-item{ + padding: 12px 16px 16px; + @include hairline('top'); + @include hairline('bottom'); + } + } + .fm-discussion-list-reply-text{ + padding: 12px 16px 16px; + color: #000; + font-size: 16px; + font-weight: 600; + } + .fm-discussion-footer{ + flex-shrink: 0; + } +} +.fm-discussion-list{ + // max-height: calc(100vh - 99px); + overflow-y: auto; +} +.fm-discussion-list-overlay{ + height: calc( 100% - 45px); +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/dropdown.scss b/packages/mobile-ui-vue/components/theme/src/dropdown.scss new file mode 100644 index 00000000000..a7bc9ee4c06 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/dropdown.scss @@ -0,0 +1,132 @@ +.fm-dropdown-menu { + user-select: none; + color: #333333; + &-bar { + position: relative; + display: flex; + height: 48px; + background-color: #fff; + box-shadow: 0 2px 12px rgba(100,101,102,0.12); + + &-opened { + z-index: 10; + } + } + + &-item { + display: flex; + flex: 1; + align-items: center; + justify-content: center; + min-width: 0; // hack for flex ellipsis + cursor: pointer; + + &:active { + opacity: 1; + } + + &.fm-dropdown-menu-item-disabled { + &:active { + opacity: 1; + } + + .fm-dropdown-menu-title { + color: #ccc; + &::after{ + color: #ccc; + } + } + } + } + + &-title { + position: relative; + box-sizing: border-box; + max-width: 100%; + padding: 0 8px; + font-size: 16px; + line-height: 22px; + + &::after { + position: absolute; + top: 50%; + right: -4px; + margin-top: -5px; + border: 3px solid; + border-color: transparent transparent #888 #888; + transform: rotate(-45deg); + opacity: 0.8; + content: ''; + } + + &-active { + color: var(--fm-primary-color); + + &::after { + border-color: transparent transparent currentColor currentColor; + } + } + + &-down { + &::after { + margin-top: -1px; + transform: rotate(135deg); + } + } + + &-text{ + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + } + + + .fm-dropdown-item { + position: fixed; + right: 0; + left: 0; + z-index: 10; + overflow: hidden; + &-icon { + display: block; + line-height: inherit; + } + + &-option { + text-align: left; + + &-active { + color: var(--fm-primary-color); + + .fm-dropdown-item-icon { + color: var(--fm-primary-color); + } + } + &-disabled{ + color: --fm-disabled-color + } + .fm-cell-value{ + .fm-icon{ + color: var(--fm-primary-color); + } + } + } + + &-up { + top: 0; + } + + &-down { + bottom: 0; + } + + &-content { + position: absolute; + max-height: 80%; + } + .fm-dropdown-item-overlay{ + position: absolute; + } + } \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/filter.scss b/packages/mobile-ui-vue/components/theme/src/filter.scss new file mode 100644 index 00000000000..d066b3b98b1 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/filter.scss @@ -0,0 +1,347 @@ +@import './mixins/hairline'; +@import './mixins/ellipsis'; + +:root { + --fm-filter-color: var(--fm-text-color); + --fm-filter-color-sub: var(--fm-text-color-2); + --fm-filter-primary-color: var(--fm-primary-color); + --fm-filter-panel-background: var(--fm-background-2); + --fm-filter-panel-sub-font-size: 13px; + --fm-filter-panel-sub-icon-font-size: 12px; +} + +.fm-filter-panel { + width: 100%; + height: 100%; + background-color: var(--fm-filter-panel-background); + overflow: auto; + transform: translate3d(0,0,0); + &-content { + height: 100%; + box-sizing: border-box; + padding-bottom: 250px; + overflow-y: auto; + } + &-field { + padding: 8px 16px 16px 16px;; + overflow-x: hidden; + &-title { + display:flex; + align-items: center; + justify-content: space-between; + color: var(--fm-filter-color); + line-height: 22px; + // position: relative; + &-text{ + flex-shrink:0; + padding-right:10px; + } + &-text-required::after{ + padding-left: 2px; + color: var(--fm-danger-color); + font-size: var(--fm-filter-panel-sub-font-size); + content: '*'; + } + + &-sub { + display: flex; + justify-content: flex-end; + flex: 1 1 0; + align-items: center; + height: 100%; + font-size: var(--fm-filter-panel-sub-font-size); + overflow:hidden; + &-text { + color: var(--fm-filter-primary-color); + max-width: 160px; + @include ellipsis + } + + &-button { + display: flex; + align-items: center; + flex-shrink: 0; + margin-left: 8px; + &-text { + display: flex; + margin-right: 4px; + color: var(--fm-filter-color-sub); + } + } + &-icon { + font-size: var(--fm-filter-panel-sub-icon-font-size); + } + &-lookup { + display: flex; + align-items: center; + } + } + } + + &-content { + padding-top: 12px; + } + &-input { + padding: 6px 8px; + line-height: 18px; + background: var(--fm-background); + font-size: var(--fm-filter-panel-sub-font-size); + border-radius: var(--fm-radius-md); + color: var(--fm-filter-primary-color); + text-align: center; + .fm-input-value .fm-input-body .fm-input-control { + font-size: var(--fm-filter-panel-sub-font-size); + color: var(--fm-filter-primary-color); + } + } + &-range { + display: flex; + align-items: center; + width: 100%; + } + &-split { + width: 8px; + margin: 0 8px; + border: 1px solid var(--fm-filter-color-sub); + } + &-lookup-panel { + width: 320px; + } + &-number-list { + padding-top: 10px; + } + &-error-message { + font-size: var(--fm-filter-panel-sub-font-size);; + line-height: 24px; + color: var(--fm-danger-color); + } + } + &-footer { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 54px; + + padding: 8px 16px; + background: var(--fm-background-2); + box-shadow: 0 -2px 6px 0 var(--fm-box-shadow-color); + z-index: var(--fm-zindex-1); + .button-wrapper { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + .button { + flex: 1; + height: 38px; + &:first-child { + color: var(--fm-filter-primary-color); + border: 1px solid var(--fm-filter-primary-color); + border-radius: 20px 0 20px 20px; + z-index: var(--fm-zindex-3); + } + &:last-child { + margin-left: -15px; + border-radius: 0 20px 20px 0; + } + } + } + } + .bgc-red { + background-color: var(--fm-danger-color); + color: var(--fm-background-2); + } + .bgc-blue { + background-color: var(--fm-filter-primary-color); + color: var(--fm-background-2); + } + &-list { + &-line { + display: flex; + &:not(:last-child) { + margin-bottom: 10px; + } + } + &-item { + display: flex; + align-items: center; + justify-content: center; + height: 30px; + width: 90px; + padding: 6px 8px; + line-height: 18px; + background: var(--fm-background); + font-size: var(--fm-filter-panel-sub-font-size); + border-radius: var(--fm-radius-md); + color: var(--fm-filter-primary-color); + overflow: hidden; + &:not(:first-child) { + margin-left: 10px; + } + &-selected { + background: var(--fm-filter-primary-color); + color: var(--fm-background-2); + } + } + } +} +.fm-filter-simple-panel { + height: 100%; + .content { + display: flex; + height: 100%; + .menu { + width: 105px; + height: 100%; + display: flex; + flex-direction: column; + background: #F1F2F5; + overflow: auto; + .menu-item { + background-color: #fff; + .menu-item-cell { + background-color: #F1F2F5; + } + } + .menu-item-selected { + .menu-item-cell { + background-color: #fff; + } + } + .menu-item-selected-prev { + .menu-item-cell { + border-radius: 0 0 12px 0; + } + } + .menu-item-selected-next { + .menu-item-cell { + border-radius: 0 12px 0 0; + } + } + } + .list{ + display: flex; + flex: 1; + flex-direction: column; + .list-item { + display: flex; + width: 100%; + .list-item-icon { + color: var(--fm-filter-primary-color); + } + } + } + } + +} +.fm-filter-bar-panel { + position: relative; + padding-bottom: 54px; + background-color: var(--fm-background-2); + .fm-filter-panel-extra { + padding-top: 12px; + } +} +.fm-filter { + .fm-filter-search-button { + display: flex; + align-items: center; + flex-shrink: 0; + color: var(--fm-gray-7); + font-size: 14px; + line-height: 20px; + .fm-filter-button-text { + padding-right: 2px; + } + .fm-filter-icon { + font-size: 20px; + } + } + .fm-filter-search-container { + position: relative; + padding: 0 16px; + display: flex; + flex-direction: row; + align-items: center; + background: var(--fm-background-2); + .fm-filter-search-button { + margin: 0 8px 0 0; + } + .fm-filter-search-input { + flex: 1 1 0; + .fm-search { + padding: 8px 0; + } + } + } + .fm-filter-only-icon { + display: inline-block; + } + + .fm-state-active { + color: var(--fm-filter-primary-color); + } +} +.fm-filter-popup { + width: 320px; +} +.fm-filter-popup-drop { + width: 100%; + height: 200px; + overflow: hidden; +} + +.filter-cell.van-cell:last-child::after, +.filter-cell .van-cell:last-child::after { + display: block; +} +.fm-filter-right { + .fm-filter-search-container { + flex-direction: row-reverse; + .fm-filter-search-button { + margin: 0 0 0 8px; + } + } +} + +.fm-filter-bar { + display: flex; + padding: 11px 16px; + &-item { + display: flex; + align-items: center; + height: 28px; + font-size: 13px; + line-height: 18px; + background: rgba(42,135,255,0.06); + overflow: hidden; + border-radius: 13px; + padding: 0 12px; + &-value, + &-name { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + &-value { + color: var(--fm-filter-primary-color); + } + &-name { + color: var(--fm-gray-7); + } + &-noshrink { + flex-shrink: 0; + } + &:not(:first-child) { + margin-left: 12px; + } + } + &-item { + .fm-icon { + color: var(--fm-filter-color-sub); + margin-left: 8px; + font-size: 12px; + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/html-panel.scss b/packages/mobile-ui-vue/components/theme/src/html-panel.scss new file mode 100644 index 00000000000..d305731c75a --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/html-panel.scss @@ -0,0 +1,35 @@ +.fm-html-panel { + box-sizing: border-box; + line-height: 1.42; + outline: none; + overflow-y: auto; + tab-size: 4; + text-align: left; + white-space: pre-wrap; + word-wrap: break-word; + img { + max-width: 100%; + } + li::before { + display: inline-block; + white-space: nowrap; + width: 1.2em; + } + ul, + ol { + padding-left: 1.5em; + } + ul > li::before { + content: '\2022'; + } + ol { + li { + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 + list-9; + counter-increment: list-0; + } + li:before { + content: counter(list-0, decimal) '. '; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/icon.scss b/packages/mobile-ui-vue/components/theme/src/icon.scss new file mode 100644 index 00000000000..e6b2f5e188d --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/icon.scss @@ -0,0 +1,727 @@ +@font-face { + font-family: 'farrisMobile'; + font-style: normal; + font-weight: normal; + src: url('./fonts/farris-mobile-icon.ttf?v=20230515') format('truetype'); +} +:root { + --fm-icon-font-size: 14px; + --fm-icon-color: inherit; +} +.fm-icon { + font-family: 'farrisMobile' !important; + font-size: 14px; + font-style: normal; + color: var(--fm-icon-color); + display: inline-block; + width: 1em; + height: 1em; + font-weight: 400; + line-height: 1; + vertical-align: middle; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.fm-icon::before{ + display: inline-block; +} + +.fm-icon-filter::before { + content: '\e697'; +} +.fm-icon-cardfold::before { + content: '\e6b7'; +} + +.fm-icon-cardunfold::before { + content: '\e6b8'; +} + +.fm-icon-trafficother::before { + content: '\e6b9'; +} + +.fm-icon-bottomsave::before { + content: '\e6ba'; +} + +.fm-icon-trafficboat::before { + content: '\e6bb'; +} + +.fm-icon-trafficcar::before { + content: '\e6bc'; +} + +.fm-icon-trafficplane::before { + content: '\e6bd'; +} + +.fm-icon-traffictrain::before { + content: '\e6be'; +} + +.fm-icon-trafficbus::before { + content: '\e6bf'; +} + +.fm-icon-addgray::before { + content: '\e6a7'; +} + +.fm-icon-close::before { + content: '\e6a8'; +} + +.fm-icon-add-line::before { + content: '\e6a9'; +} + +.fm-icon-more::before { + content: '\e6aa'; +} + +.fm-icon-check::before { + content: '\e6ab'; +} + +.fm-icon-backcircle::before { + content: '\e6ac'; +} + +.fm-icon-agree::before { + content: '\e6ad'; +} + +.fm-icon-loading::before { + content: '\e6ae'; +} + +.fm-icon-filedel::before { + content: '\e6af'; +} + +.fm-icon-file::before { + content: '\e6b0'; +} + +.fm-icon-processflow::before { + content: '\e6b1'; +} + +.fm-icon-redstar::before { + content: '\e6b2'; +} + +.fm-icon-rightcircle::before { + content: '\e6b3'; +} + +.fm-icon-timecircle::before { + content: '\e6b4'; +} + +.fm-icon-screening::before { + content: '\e6b5'; +} + +.fm-icon-uncheck::before { + content: '\e6b6'; +} + +.fm-icon-operation::before { + content: '\e02c'; +} + +.fm-icon-approvalamount::before { + content: '\e02b'; +} + +.fm-icon-agreed::before { + content: '\e02a'; +} + +.fm-icon-loading::before { + content: '\e6ae'; +} + +.fm-icon-filedel::before { + content: '\e6af'; +} + +.fm-icon-file::before { + content: '\e6b0'; +} + +.fm-icon-processflow::before { + content: '\e6b1'; +} + +.fm-icon-redstar::before { + content: '\e6b2'; +} + +.fm-icon-rightcircle::before { + content: '\e6b3'; +} + +.fm-icon-timecircle::before { + content: '\e6b4'; +} + +.fm-icon-screening::before { + content: '\e6b5'; +} + +.fm-icon-uncheck::before { + content: '\e6b6'; +} + +.fm-icon-operation::before { + content: '\e02c'; +} + +.fm-icon-approvalamount::before { + content: '\e02b'; +} + +.fm-icon-agreed::before { + content: '\e02a'; +} + +.fm-icon-inprocess::before { + content: '\e029'; +} + +.fm-icon-feedback::before { + content: '\e028'; +} + +.fm-icon-print::before { + content: '\e027'; +} + +.fm-icon-important::before { + content: '\e026'; +} + +.fm-icon-amountofreimbursement::before { + content: '\e025'; +} + +.fm-icon-safetyassistant::before { + content: '\e024'; +} + +.fm-icon-remind::before { + content: '\e023'; +} + +.fm-icon-eyeoppen::before { + content: '\e022'; +} + +.fm-icon-eyeclose::before { + content: '\e01e'; +} + +.fm-icon-photography::before { + content: '\e021'; +} + +.fm-icon-photograph::before { + content: '\e020'; +} + +.fm-icon-addpicture::before { + content: '\e01f'; +} + +.fm-icon-top_other-face::before { + content: '\e01d'; +} + +.fm-icon-top_other::before { + content: '\e01c'; +} + +.fm-icon-delete::before { + content: '\e01b'; +} + +.fm-icon-nextpage::before { + content: '\e01a'; +} + +.fm-icon-addbutton::before { + content: '\e019'; +} + +.fm-icon-waitforprocessing::before { + content: '\e018'; +} + +.fm-icon-warningmessage::before { + content: '\e017'; +} + +.fm-icon-failureprompt::before { + content: '\e016'; +} + +.fm-icon-successfulhints::before { + content: '\e015'; +} + +.fm-icon-other::before { + content: '\e014'; +} + +.fm-icon-retract::before { + content: '\e013'; +} + +.fm-icon-drop-down::before { + content: '\e012'; +} + +.fm-icon-cancel::before { + content: '\e011'; +} + +.fm-icon-search::before { + content: '\e010'; +} + +.fm-icon-multiplechoice::before { + content: '\e00f'; +} + +.fm-icon-singlechoice::before { + content: '\e00e'; +} + +.fm-icon-microphone::before { + content: '\e00d'; +} + +.fm-icon-arrow-chevron-left::before { + content: '\e00c'; +} + +.fm-icon-helpcenter::before { + content: '\e00b'; +} + +.fm-icon-sweepcode::before { + content: '\e00a'; +} + +.fm-icon-groupchat::before { + content: '\e009'; +} + +.fm-icon-addfriend::before { + content: '\e008'; +} + +.fm-icon-top_my::before { + content: '\e007'; +} + +.fm-icon-top_my-face::before { + content: '\e006'; +} + +.fm-icon-top_friend::before { + content: '\e005'; +} + +.fm-icon-top_friend-face::before { + content: '\e004'; +} + +.fm-icon-top_publicpraise::before { + content: '\e003'; +} + +.fm-icon-top_publicpraise-face::before { + content: '\e002'; +} + +.fm-icon-top_home::before { + content: '\e001'; +} + +.fm-icon-top_home-face::before { + content: '\e000'; +} + +/* 标准模板内图标 */ +.fm-icon-s-agree-o::before { + content: '\e655'; +} + +.fm-icon-s-arrow-down::before { + content: '\e656'; +} + +.fm-icon-s-add-o::before { + content: '\e657'; +} + +.fm-icon-s-annex::before { + content: '\e658'; +} + +.fm-icon-s-arrow::before { + content: '\e659'; +} + +.fm-icon-s-arrow-up::before { + content: '\e65e'; +} + +.fm-icon-s-checkbox-checked::before { + content: '\e65f'; +} + +.fm-icon-s-checkbox::before { + content: '\e660'; +} + +.fm-icon-s-arrow-left::before { + content: '\e661'; +} + +.fm-icon-s-exchange::before { + content: '\e662'; +} + +.fm-icon-s-clear::before { + content: '\e663'; +} + +.fm-icon-s-checked::before { + content: '\e664'; +} + +.fm-icon-s-eye-o::before { + content: '\e665'; +} + +.fm-icon-s-close-eye::before { + content: '\e666'; +} + +.fm-icon-s-at::before { + content: '\e667'; +} + +.fm-icon-s-feedback-o::before { + content: '\e668'; +} + +.fm-icon-s-fold-circle-o::before { + content: '\e669'; +} + +.fm-icon-s-cross::before { + content: '\e66a'; +} + +.fm-icon-s-minus::before { + content: '\e66b'; +} + +.fm-icon-s-file::before { + content: '\e66c'; +} + +.fm-icon-s-fold-triangle::before { + content: '\e66d'; +} + +.fm-icon-s-filter::before { + content: '\e66e'; +} + +.fm-icon-s-forword::before { + content: '\e66f'; +} + +.fm-icon-s-plus::before { + content: '\e670'; +} + +.fm-icon-s-filedel::before { + content: '\e671'; +} + +.fm-icon-s-fold-o::before { + content: '\e672'; +} + +.fm-icon-s-image-o::before { + content: '\e673'; +} + +.fm-icon-s-more-o::before { + content: '\e674'; +} + +.fm-icon-s-redio-circle::before { + content: '\e675'; +} + +.fm-icon-s-reject-o::before { + content: '\e676'; +} + +.fm-icon-s-success::before { + content: '\e677'; +} + +.fm-icon-s-refresh::before { + content: '\e678'; +} + +.fm-icon-s-star::before { + content: '\e679'; +} +.fm-icon-s-star-o::before { + content: '\e612'; +} + +.fm-icon-s-processflow::before { + content: '\e67a'; +} + +.fm-icon-s-unfold-circle-o::before { + content: '\e67b'; +} + +.fm-icon-s-rewind::before { + content: '\e67c'; +} + +.fm-icon-s-unfold-o::before { + content: '\e67d'; +} + +.fm-icon-s-save-o::before { + content: '\e67e'; +} + +.fm-icon-s-warning-o::before { + content: '\e67f'; +} + +.fm-icon-s-unfold-triangle::before { + content: '\e680'; +} + +.fm-icon-s-print-o::before { + content: '\e681'; +} + +.fm-icon-s-search-o::before { + content: '\e682'; +} + + +.fm-icon-s-news::before { + content: '\e683'; +} + +.fm-icon-s-news-o::before { + content: '\e684'; +} + +.fm-icon-s-shop::before { + content: '\e68c'; +} + +.fm-icon-s-sending::before { + content: '\e60b'; +} + +.fm-icon-s-import-o::before { + content: '\e60c'; +} + +.fm-icon-s-edit-o::before { + content: '\e60d'; +} + +.fm-icon-s-qrcode::before { + content: '\e60e'; +} + +.fm-icon-s-briefcase::before { + content: '\e60f'; +} + +.fm-icon-s-notificationoff::before { + content: '\e610'; +} + +.fm-icon-s-pencil::before { + content: '\e611'; +} + +.fm-icon-s-star-o::before { + content: '\e612'; +} + +.fm-icon-s-barcode::before { + content: '\e613'; +} + +.fm-icon-s-salemessage-o::before { + content: '\e614'; +} + +.fm-icon-s-listview-o::before { + content: '\e615'; +} + +.fm-icon-s-picture-o::before { + content: '\e616'; +} + +.fm-icon-s-savefillet-o::before { + content: '\e617'; +} + +.fm-icon-s-shoppingcart::before { + content: '\e618'; +} + +.fm-icon-s-pending::before { + content: '\e61d'; +} + +.fm-icon-s-expandview-o::before { + content: '\e61e'; +} + +.fm-icon-s-lock-o::before { + content: '\e623'; +} + +.fm-icon-s-my::before { + content: '\e692'; +} + +.fm-icon-s-service::before { + content: '\e633'; +} + +.fm-icon-s-wallet-o::before { + content: '\e634'; +} + +.fm-icon-s-shoppingcart-o::before { + content: '\e636'; +} + +.fm-icon-s-setting-o::before { + content: '\e637'; +} + +.fm-icon-s-my-o::before { + content: '\e696'; +} + +.fm-icon-s-unfoldrec-o::before { + content: '\e639'; +} + +.fm-icon-s-profile::before { + content: '\e63a'; +} + +.fm-icon-s-link-o::before { + content: '\e609'; +} + +.fm-icon-s-usersetting-o::before { + content: '\e632'; +} + +.fm-icon-s-shop-o::before { + content: '\e68a'; +} + +.fm-icon-s-list::before { + content: '\e62a'; +} + +.fm-icon-s-location-o::before { + content: '\e685'; +} + +.fm-icon-s-location::before { + content: '\e686'; +} + +.fm-icon-s-moment::before { + content: '\e689'; +} + +.fm-icon-s-moment-o::before { + content: '\e68b'; +} + +.fm-icon-s-revoke-o::before { + content: '\e687'; +} + +.fm-icon-s-submit-o::before { + content: '\e688'; +} + +.fm-icon-s-app-o::before { + content: '\e68f'; +} + +.fm-icon-s-app::before { + content: '\e691'; +} + +.fm-icon-s-book-o::before { + content: '\e695'; +} + +.fm-icon-s-book::before { + content: '\e690'; +} + +.fm-icon-s-comment::before { + content: '\e693'; +} + +.fm-icon-s-comment-o::before { + content: '\e694'; +} + +.fm-icon-s-illustrate-o::before { + content: '\e68d'; +} + +.fm-icon-s-clear-o::before { + content: '\e68e'; +} +.fm-icon-friend::before { + content: '\e005'; +} +.fm-icon-scan::before { + content: '\e69a'; +} +.fm-icon-back::before { + content: '\e69b'; +} +.fm-icon-menu::before { + content: '\e69d'; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/image-preview.scss b/packages/mobile-ui-vue/components/theme/src/image-preview.scss new file mode 100644 index 00000000000..7c9bbd259cb --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/image-preview.scss @@ -0,0 +1,107 @@ +.fm-image-preview { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: transparent; + transform: none; + + &-swipe { + height: 100%; + + &-item { + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + } + } + + &-cover { + position: absolute; + top: 0; + left: 0; + } + + &-image { + width: 100%; + transition-property: transform; + + &-vertical { + width: auto; + height: 100%; + } + + img { + // disable desktop browser image drag + -webkit-user-drag: none; + } + + .fm-image { + &-error { + top: 30%; + height: 40%; + } + + &-error-icon { + font-size: 36px; + } + + &-loading { + background-color: transparent; + } + } + } + + &-index { + position: absolute; + top: 16px; + left: 50%; + color: #ffffff; + font-size: 13px; + line-height: 22px; + text-shadow: 0 1px 1px #333; + transform: translate(-50%, 0); + } + + &-overlay { + background-color: rgba(0, 0, 0, 0.9); + } + + &-close-icon { + position: absolute; + z-index: 1; + cursor: pointer; + .fm-icon{ + color: #ccc; + font-size: 22px; + } + + &:active { + .fm-icon{ + color: #999999; + } + } + + &-top-left { + top: 16px; + left: 16px; + } + + &-top-right { + top: 16px; + right: 16px; + } + + &-bottom-left { + bottom: 16px; + left: 16px; + } + + &-bottom-right { + right: 16px; + bottom: 16px; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/image.scss b/packages/mobile-ui-vue/components/theme/src/image.scss new file mode 100644 index 00000000000..822b48e966e --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/image.scss @@ -0,0 +1,38 @@ +@import './mixins/hairline'; + +.fm-image { + position: relative; + display: inline-block; + + &-round { + overflow: hidden; + border-radius: 50%; + img { + border-radius: inherit; + } + } + &-img, + &-error, + &-loading { + display: block; + width: 100%; + height: 100%; + } + &-error, + &-loading { + position: absolute; + top: 0; + left: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + color: var(--fm-text-color-2); + font-size: 14px; + background-color: var(--fm-background); + .fm-image-icon{ + font-size: var(--fm-font-size-icon-4); + color: var(--fm-text-color-2); + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/index-list.scss b/packages/mobile-ui-vue/components/theme/src/index-list.scss new file mode 100644 index 00000000000..1ae04d1d87c --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/index-list.scss @@ -0,0 +1,33 @@ +.fm-index-list { + position: relative; + background: #fff; + height: 100%; + overflow: auto; + .fm-index-content{ + overflow: hidden; + .fm-index-group-title{ + background: #F7F8FA; + line-height: 32px; + padding: 0 16px; + } + } + .fm-index-bar { + position: fixed; + right: 4px; + top: 50%; + transform: translateY(-50%); + font-size: 12px; + line-height: 14px; + text-align: center; + z-index: 9; + .fm-index-bar-item { + padding: 2px 4px; + } + .fm-index-bar-item-selected { + color: #3A90FF; + } + } +} +.fm-index-list-fill { + height: 100%; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/input-template.scss b/packages/mobile-ui-vue/components/theme/src/input-template.scss new file mode 100644 index 00000000000..c9997a0833b --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/input-template.scss @@ -0,0 +1,81 @@ +.fm-lookup-input-template { + width: 100%; + height: 24px; + overflow: hidden; + display: flex; + align-items: flex-start; + justify-content: flex-end; + will-change: height; + transition: all .3s ease; + .text { + display: inline-block; + color: #007aff; + white-space: nowrap; + } + .text-ellipsis { + overflow: hidden; + flex: 1; + } + .append-text { + padding-left: 4px; + } + .hide-text { + position: absolute; + left: 0; + height: 100%; + opacity: 0; + } + .title { + width: 100%; + display: flex; + justify-content: flex-end; + position: relative; + } + .items { + flex: 1; + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + width: 100%; + .item { + display: flex; + align-items: center; + margin: 2px; + padding: 1px 4px; + background-image: linear-gradient(-45deg, #f0f7ff 0%, #eef7ff 100%); + border-radius: 6px; + max-width: 100%; + .text { + line-height: 18px; + font-size: 14px; + } + } + } +} +.fm-lookup-input-template-expand { + justify-content: flex-start; + .text { + white-space: normal; + } + .items { + .item { + .text { + text-align: left; + } + } + } + +} +.fm-input-control-readonly { + .fm-lookup-input-template { + .title { + .text { + color: #333; + } + } + } +} +.fm-input-template-right-icon { + margin-right: -16px; + padding-right: 16px; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/input.scss b/packages/mobile-ui-vue/components/theme/src/input.scss new file mode 100644 index 00000000000..e581f9a4ad9 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/input.scss @@ -0,0 +1,131 @@ +@import './mixins/hairline'; + +:root { + --fm-input-size: 16px; + --fm-input-sub-size: 13px; + --fm-input-color: var(--fm-text-color); + --fm-input-sub-color: var(--fm-text-color-2); + --fm-input-readonly-color: var(--fm-gray-7); + --fm-input-disabled-color: var(--fm-gray-5); + --fm-input-border-color: var(--fm-gray-3); + --fm-input-label-width: 105px; + --fm-input-label-size: 16px; +} + +.fm-input { + &-label { + flex: none; + text-align: left; + width: var(--fm-input-label-width); + font-size: var(--fm-input-label-size); + color: var(--fm-input-color); + } + &-value { + overflow-y: visible; + .fm-input-body { + flex: 1; + display: flex; + align-items: center; + .fm-input-control { + display: flex; + width: 100%; + min-width: 0; + margin: 0; + padding: 0; + border: 0; + resize: none; + line-height: inherit; + background-color: transparent; + color: var(--fm-input-color); + font-size: var(--fm-input-size); + &::placeholder { + color: var(--fm-input-sub-color); + } + &:disabled { + opacity: 1; + cursor: not-allowed; + color: var(--fm-input-disabled-color); + -webkit-text-fill-color: currentColor; + } + &-readonly { + cursor: default; + color: var(--fm-input-readonly-color); + } + &-left { + justify-content: flex-start; + text-align: left; + } + &-center { + justify-content: center; + text-align: center; + } + + &-right { + justify-content: flex-end; + text-align: right; + } + } + } + .fm-input-body-with-border { + border: 1px solid var(--fm-input-border-color); + padding: 4px 8px; + border-radius: 4px; + } + } + &-clear, + &-button { + flex-shrink: 0; + } + &-clear { + margin-right: -8px; + // padding: 0 8px; + padding: 4px 8px; + color: var(--fm-input-sub-color); + font-size: var(--fm-input-size); + cursor: pointer; + box-sizing: content-box; + } + &-button { + padding-left: 8px; + } + &-min-height { + .fm-input-control { + min-height: 60px; + } + } + &-vertical { + flex-direction: column; + align-items: flex-start; + .fm-input-label { + width: auto!important; + } + .fm-cell-right { + width: 100%; + padding-top: 4px; + } + .fm-cell-value .fm-input-body .fm-input-control { + text-align: left; + justify-content: flex-start; + } + } + &-word-limit { + margin-top: 4px; + line-height: 18px; + text-align: right; + font-size: var(--fm-input-sub-size); + color: var(--fm-input-sub-color); + } + &-error-message { + color: var(--fm-danger-color); + font-size: var(--fm-input-sub-size); + } + &-error-message-left { + text-align: left; + } + &-error-message-center { + text-align: center; + } + &-error-message-right { + text-align: right; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/listview.scss b/packages/mobile-ui-vue/components/theme/src/listview.scss new file mode 100644 index 00000000000..c12af350558 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/listview.scss @@ -0,0 +1,106 @@ +@import './mixins/safe-area'; +:root { + +} + +.fm-listview-container { + .fm-listview-main { + user-select: none; + -webkit-user-select: none; + } + .fm-listview-item { + overflow: hidden; + display: flex; + position: relative; + .fm-listview-item-content { + flex: 1; + transform: translateX(0); + } + .checker-wrapper { + display: flex; + height: 100%; + padding: 12px 16px; + position: absolute; + } + } + .fm-listview-toolbar { + position: absolute; + bottom: 0; + left: 0; + right: 0; + display: flex; + flex-direction: row; + align-items: center; + .fm-listview-toolbar-item { + flex: 1; + } + } + .fm-listview-footer { + flex-shrink: 0; + } + .fm-listview-placeholder { + height: 0; + pointer-events: none; + } + .fm-listview-loading, + .fm-listview-finished, + .fm-listview-error, + .fm-listview-empty-text { + display: block; + color: #969799; + font-size: 14px; + line-height: 50px; + text-align: center; + } +} +.fm-listview-container-fill { + display: flex; + flex-direction: column; + flex-shrink: 1; + flex-grow: 1; + flex-basis: 0; + height: 100%; + overflow: hidden; + .fm-listview-main { + flex-shrink: 1; + flex-grow: 1; + flex-basis: 0; + overflow: auto; + -webkit-overflow-scrolling: touch; + } +} +.fm-listview-container-with-btn .fm-listview-main{ + padding-bottom: 42px; +} + +.fm-listview-container .fm-listview-subitem { + display: initial !important; + .fm-listview-subitem-title { + padding: 10px 16px; + line-height: 20px; + font-size: 14px; + color: #999999; + } + .fm-listview-sub-item { + position: relative; + overflow: hidden; + .fm-listview-subitem-content { + flex: 1; + transform: translateX(0); + } + &.fm-listview-sub-item-padding { + .fm-listview-subitem-content { + transform: translateX(40px); + } + } + &.fm-listview-sub-item-padding-none { + .fm-listview-subitem-content { + transform: translateX(0); + padding-left: 40px; + } + } + } +} +.fm-pull-refresh-fill { + flex: 1; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/loading.scss b/packages/mobile-ui-vue/components/theme/src/loading.scss new file mode 100644 index 00000000000..b4aedb04351 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/loading.scss @@ -0,0 +1,69 @@ +@import './mixins/hairline'; + +:root { + --fm-loading-mask-zindex: var(--fm-zindex-4); + --fm-loading-zindex: var(--fm-zindex-5); + --fm-loading-color: var(--fm-text-color-3); + --fm-loading-text-color: var(--fm-text-color-2); + --fm-loading-text-size: 16px; +} + +.fm-loading-mask{ + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: var(--fm-loading-mask-zindex); +} +.fm-loading { + display: flex; + flex-direction: row; + align-items: center; + position: absolute; + left: 50%; + top: 50%; + z-index: var(--fm-loading-zindex); + max-width: 70%; + padding: 16px; + color: var(--fm-loading-color); + font-size: 0; + line-height: 20px; + white-space: pre-wrap; + text-align: center; + word-wrap: break-word; + transform: translate3d(-50%, -50%, 0); + &-icon { + position: relative; + display: inline-block; + width: 30px; + height: 30px; + max-width: 100%; + max-height: 100%; + vertical-align: middle; + animation: fm-rotate 2s linear infinite; + circle { + animation: fm-circular 1.5s ease-in-out infinite; + stroke: currentColor; + stroke-width: 4; + stroke-linecap: round; + } + } + &-text { + display: inline-block; + margin-left: 8px; + color: var(--fm-loading-text-color); + font-size: var(--fm-loading-text-size); + line-height: 22px; + vertical-align: middle; + } + &.fm-loading-vertical{ + display: flex; + flex-direction: column; + align-items: center; + + .fm-loading-text { + margin: 9px 0 0; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/lookup.scss b/packages/mobile-ui-vue/components/theme/src/lookup.scss new file mode 100644 index 00000000000..14586939708 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/lookup.scss @@ -0,0 +1,458 @@ +@import './mixins/hairline'; +:root { + --fm-lookup-panel-font-size: 16px; + --fm-lookup-panel-background: var(--fm-background); + --fm-lookup-panel-background-2: var(--fm-background-2); + --fm-lookup-panel-color: var(--fm-text-color); + --fm-lookup-panel-sub-color: var(--fm-text-color-2); + --fm-lookup-panel-primary-color: var(--fm-primary-color); + --fm-lookup-panel-primary-background: #ebf6ff; +} + +.fm-lookup-panel { + height: 100%; + display: flex; + flex-direction: column; + transform: translate3d(0, 0, 0); + overflow: hidden; + background-color: var(--fm-lookup-panel-background); + color: var(--fm-lookup-panel-color); + font-size: var(--fm-lookup-panel-font-size); + &-header { + background-color: var(--fm-lookup-panel-background-2); + .nav-bar { + position: relative; + display: flex; + margin: 0 16px; + .nav-left { + position: absolute; + top: 0; + left: 0; + height: 44px; + display: flex; + align-items: center; + .fm-icon { + font-size: 20px; + } + } + .nav-content { + flex: 1; + display: flex; + flex-direction: column; + padding: 10px 30px; + min-height: 44px; + justify-content: center; + .nav-title { + font-size: 17px; + line-height: 24px; + font-weight: 400; + } + .nav-sub-title { + font-size: 12px; + line-height: 17px; + color: var(--fm-lookup-panel-sub-color); + } + } + .fm-lookup-panel-sub-title { + position: absolute; + left: 50%; + transform: translateX(-50%); + bottom: 5px; + font-size: 12px; + z-index: var(--fm-zindex-2); + color: var(--fm-lookup-panel-sub-color); + } + } + .search-wrapper { + display: flex; + padding: 0 16px; + align-items: center; + @include hairline('bottom', var(--fm-border-color)); + .search-selected { + display: flex; + align-items: center; + .search-selected-item-wrapper { + display: flex; + align-items: center; + overflow-x: auto; + flex-shrink: 0; + width: 100%; + } + .search-selected-item { + padding: 4px 6px; + border-radius: 4px; + display: flex; + font-size: 14px; + line-height: 20px; + word-break: keep-all; + white-space: nowrap; + color: var(--fm-lookup-panel-primary-color); + background: var(--fm-lookup-panel-primary-background); + &:not(:last-child) { + margin-right: 8px; + } + &-text:not(:first-child) { + padding-left: 4px; + } + } + } + .search-input { + .fm-cell-left-icon .fm-icon { + color: var(--fm-lookup-panel-sub-color); + } + } + } + .search-wrapper-horizontal { + .search-selected { + padding-right: 8px; + } + .search-input { + padding-left: 0; + padding-right: 0; + } + } + .search-wrapper-vertical { + flex-direction: column; + padding: 0; + .search-selected { + width: 100%; + padding: 6px 16px; + @include hairline('bottom', var(--fm-border-color)); + .avatar-wrapper { + max-width: calc(100% - 65px); + } + } + } + .header-portal { + display: flex; + align-items: center; + background-color: var(--fm-lookup-panel-background-2); + padding-left: 16px; + .header-portal-icon { + width: 32px; + height: 32px; + font-size: 18px; + display: flex; + align-items: center; + justify-content: center; + background: var(--fm-lookup-panel-background); + border-radius: 100%; + color: var(--fm-lookup-panel-primary-color); + } + .header-portal-cell { + flex: 1; + } + } + } + &-content { + flex: 1; + overflow: hidden; + background-color: var(--fm-lookup-panel-background-2); + position: relative; + margin-top: 10px; + .content-tabs { + display: flex; + flex-direction: column; + height: 100%; + } + .content-tab-personal, + .content-tab-data { + position: relative; + flex: 1; + } + .content-tab-data { + .breadcrumb-wrapper { + position: absolute; + top: 0; + left: 0; + right: 0; + } + } + .list-wrapper { + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + overflow-x: hidden; + overflow-y: auto; + } + .list { + background-color: var(--fm-lookup-panel-background-2); + } + &-list-item { + display: flex; + // flex-direction: row-reverse; + position: relative; + overflow: hidden; + .list-item-cell-disabled { + color: var(--fm-lookup-panel-sub-color); + .list-item-cell{ + color: var(--fm-lookup-panel-sub-color); + } + } + &:not(:last-child) { + .fm-cell { + @include hairline('bottom', var(--fm-border-color)); + &::after { + left: 16px !important; + } + } + } + &-icon { + .fm-check-icon:not(.fm-check-icon-checked) { + color: var(--fm-gray-4); + } + } + &-cell-warpper { + width: 100%; + overflow: hidden; + } + .list-item-cell-title { + width: 100%; + overflow: hidden; + .fm-cell-title-text { + display: block; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + .list-item-cell-favorite, + .list-item-cell-arrow { + height: 100%; + display: flex; + align-items: center; + } + .list-item-cell-favorite { + color: var(--fm-warning-color); + } + .list-item-cell-arrow { + color: var(--fm-lookup-panel-sub-color); + } + .list-item-cell-favorite:not(:last-child) { + padding-right: 8px; + } + .list-item-cell-favorite.selected { + .fm-icon { + background-color: var(--fm-warning-color); + } + } + } + &-list-item-selected { + &-icon { + color: var(--fm-lookup-panel-primary-color); + } + } + &-list-item-checker, + &-list-item-children { + margin-left: 16px; + } + &-list-item-checker:not(&-list-item-children) { + .fm-cell { + padding-left: 0; + } + &:not(:last-child) { + .fm-cell { + &::after { + left: 0 !important; + } + } + } + } + } + .list-checker-wrapper { + display: flex; + padding-right: 10px; + } + &-footer { + padding: 0 16px; + height: 48px; + display: flex; + align-items: center; + justify-content: space-between; + box-shadow: 0 0 7px 0 var(--fm-box-shadow-color); + border-top: 1px solid var(--fm-border-color-2); + background-color: var(--fm-background-2); + } + .list-wrapper { + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + overflow-x: hidden; + overflow-y: auto; + } + .search-panel { + .list-wrapper { + top: 44px; + } + } + .selected-panel { + .popup-wrapper { + width: 100%; + height: calc(100% - 48px); + background-color: var(--fm-background); + .nav-bar { + @include hairline('bottom', #eee); + } + .list-wrapper { + top: 44px; + background-color: var(--fm-background-2); + } + } + } + .home-panel { + height: 100%; + display: flex; + flex-direction: column; + .home-portal { + display: flex; + align-items: center; + background-color: var(--fm-background-2); + padding-left: 16px; + .home-portal-icon { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + background: var(--fm-background); + border-radius: 100%; + color: var(--fm-lookup-panel-primary-color); + } + } + .home-group { + flex: 1; + margin-top: 10px; + background-color: var(--fm-background-2); + position: relative; + .home-group-nav { + height: 44px; + display: flex; + align-items: center; + padding: 0 16px; + .nav-title { + font-size: 14px; + color: #666666; + padding-right: 16px; + } + .nav-title.selected { + font-size: 17px; + color: var(--fm-lookup-panel-primary-color); + } + } + .list-wrapper { + top: 44px; + } + } + } + .lookup-tabbar { + height: 44px; + display: flex; + padding: 0 16px; + background-color: var(--fm-background-2); + .tabbar-item { + position: relative; + height: 100%; + display: flex; + align-items: center; + font-size: 14px; + color: #666666; + margin-right: 16px; + } + .tabbar-item.selected { + font-size: 17px; + color: var(--fm-lookup-panel-primary-color); + } + .tabbar-item-bar { + position: absolute; + bottom: 0; + width: 100%; + height: 4px; + background: var(--fm-lookup-panel-primary-color); + border-radius: 2px; + } + } + .fm-lookup-list-empty { + .fm-lookup-list-empty-text { + display: block; + color: var(--fm-lookup-panel-sub-color); + font-size: 14px; + line-height: 50px; + text-align: center; + } + } + .fm-lookup-breadcrumb { + display: flex; + align-items: center; + height: 42px; + padding: 0 16px; + overflow: auto; + background-color: var(--fm-background-2); + @include hairline('bottom', var(--fm-border-color)); + &-item { + display: flex; + flex-shrink: 0; + align-items: center; + color: var(--fm-lookup-panel-primary-color); + padding-right: 8px; + &-text { + padding-right: 8px; + } + &-icon { + font-size: 10px; + } + &:last-child { + color: var(--fm-lookup-panel-sub-color);; + padding-right: 0; + } + } + } + .avatar-wrapper { + display: flex; + align-items: center; + overflow-x: auto; + max-width: 220px; + flex-shrink: 0; + .avatar { + display: flex; + justify-content: center; + flex-shrink: 0; + width: 32px; + height: 32px; + line-height: 32px; + border-radius: 100%; + background: var(--fm-gradient-blue); + color: var(--fm-background-2); + font-size: 12px; + &:not(:last-child) { + margin-right: 8px; + } + .avatar-image { + width: 100%; + height: 100%; + .fm-image-error { + color: var(--fm-background-2); + background: var(--fm-gradient-blue); + } + } + } + &:not(:last-child) { + margin-right: 14px; + } + } + .icon-wrapper { + display: flex; + padding-right: 16px; + & { + @include hairline('bottom', var(--fm-border-color)); + } + } +} +.lookup-favorite-icon { + line-height: 24px; + font-size: 18px; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/mixins/_border-radius.scss b/packages/mobile-ui-vue/components/theme/src/mixins/_border-radius.scss new file mode 100644 index 00000000000..d2e69ceb6c1 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/mixins/_border-radius.scss @@ -0,0 +1,13 @@ +@mixin borderRadius($size, $position: '') { + @if ($position == 'top') { + border-radius: 0 0 $size $size; + } @else if($position == 'bottom') { + border-radius: $size $size 0 0; + } @else if($position == 'left') { + border-radius: 0 $size $size 0; + } @else if($position == 'right') { + border-radius: $size 0 0 $size; + } @else { + border-radius: $size + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/mixins/_ellipsis.scss b/packages/mobile-ui-vue/components/theme/src/mixins/_ellipsis.scss new file mode 100644 index 00000000000..24ced1ecccb --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/mixins/_ellipsis.scss @@ -0,0 +1,15 @@ +@mixin multi-ellipsis($lines) { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: $lines; + + /* autoprefixer: ignore next */ + -webkit-box-orient: vertical; +} + +@mixin ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} diff --git a/packages/mobile-ui-vue/components/theme/src/mixins/_flex.scss b/packages/mobile-ui-vue/components/theme/src/mixins/_flex.scss new file mode 100644 index 00000000000..efa5dc993ae --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/mixins/_flex.scss @@ -0,0 +1,17 @@ +@mixin fm-utils-flex($direction: column, $showImportant: false) { + @if $showImportant { + display: flex!important; + flex-direction: $direction!important; + } @else { + display: flex; + flex-direction: $direction; + } + overflow: hidden; + } +@mixin fm-utils-absolute-all { + top: 0; + bottom: 0; + position: absolute; + right: 0; + left: 0; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/mixins/_hairline.scss b/packages/mobile-ui-vue/components/theme/src/mixins/_hairline.scss new file mode 100644 index 00000000000..7362068549d --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/mixins/_hairline.scss @@ -0,0 +1,150 @@ +@mixin scale-hairline-common($color, $top, $right, $bottom, $left) { + content: ''; + position: absolute; + background-color: $color; + display: block; + z-index: 1; + top: $top; + right: $right; + bottom: $bottom; + left: $left; +} + +@mixin hairline( + $direction, + $color: var(--fm-border-color), + $radius: 0, + $type: solid +) { + @if ($direction == 'top') { + border-top: 1px $type $color; + position: relative; + html:not([data-scale]) & { + @media (min-resolution: 1dppx) { + border-top: none; + &::before { + @include scale-hairline-common($color, 0, auto, auto, 0); + width: 100%; + height: 1px; + transform-origin: 50% 50%; + + @media (min-resolution: 2dppx) { + transform: scaleY(0.5); + } + } + } + } + } @else if ($direction == 'bottom') { + border-bottom: 1px $type $color; + position: relative; + html:not([data-scale]) & { + @media (min-resolution: 1dppx) { + border-bottom: none; + &::after { + @include scale-hairline-common($color, auto, auto, 0, 0); + width: 100%; + height: 1px; + transform-origin: 50% 100%; + @media (min-resolution: 2dppx) { + transform: scaleY(0.5); + } + } + } + } + } @else if ($direction == 'left') { + border-left: 1px $type $color; + position: relative; + html:not([data-scale]) & { + @media (min-resolution: 1dppx) { + border-left: none; + &::before { + @include scale-hairline-common($color, 0, auto, auto, 0); + width: 1px; + height: 100%; + transform-origin: 100% 50%; + @media (min-resolution: 2dppx) { + transform: scaleX(0.5); + } + } + } + } + } @else if ($direction == 'right') { + border-right: 1px $type $color; + position: relative; + html:not([data-scale]) & { + @media (min-resolution: 1dppx) { + border-right: none; + &::after { + @include scale-hairline-common($color, 0, 0, auto, auto); + width: 1px; + height: 100%; + background: $color; + transform-origin: 100% 50%; + transform: scaleX(0.5); + @media (min-resolution: 2dppx) { + transform: scaleX(0.5); + } + } + } + } + } @else if ($direction == 'all') { + border: 1px $type $color; + border-radius: $radius; + html:not([data-scale]) & { + @media (min-resolution: 2dppx) { + position: relative; + border: none; + &::before { + content: ''; + position: absolute; + left: 0; + top: 0; + width: 200%; + height: 200%; + border: 1px $type $color; + border-radius: $radius * 2; + transform-origin: 0 0; + transform: scale(0.5); + box-sizing: border-box; + pointer-events: none; + + // @media (min-resolution: 3dppx) { + // width: 300%; + // height: 300%; + // border-radius: @radius * 3; + // transform: scale(0.33); + // } + } + } + } + } +} + +@mixin hairline-remove($position) { + @if $position == 'left' { + border-left: 0; + &:before { + display: none !important; + } + } @else if $position == 'right' { + border-right: 0; + &:after { + display: none !important; + } + } @else if $position == 'top' { + border-top: 0; + &:before { + display: none !important; + } + } @else if $position == 'bottom' { + border-bottom: 0; + &:after { + display: none !important; + } + } @else if $position == 'all' { + border: 0; + &:before { + display: none !important; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/mixins/_safe-area.scss b/packages/mobile-ui-vue/components/theme/src/mixins/_safe-area.scss new file mode 100644 index 00000000000..393f7a49206 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/mixins/_safe-area.scss @@ -0,0 +1,9 @@ +@mixin safeArea($styleName) { + @if($styleName){ + #{$styleName}: 0; + @supports ((bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom))) and (-webkit-overflow-scrolling: touch) { + #{$styleName}: constant(safe-area-inset-bottom); + #{$styleName}: env(safe-area-inset-bottom); + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/mixins/_splitline.scss b/packages/mobile-ui-vue/components/theme/src/mixins/_splitline.scss new file mode 100644 index 00000000000..e099dbebea0 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/mixins/_splitline.scss @@ -0,0 +1,10 @@ +@import './hairline'; +@mixin hairline($direction, $color:$border-color-base,$radius:0,$type:solid){ + @if ($direction == 'horizontal') { + + } @else if($direction == 'vertical') { + &::after { + @include scale-hairline-common($color,0,auto,auto,0); + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/navbar.scss b/packages/mobile-ui-vue/components/theme/src/navbar.scss new file mode 100644 index 00000000000..7de18a05115 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/navbar.scss @@ -0,0 +1,73 @@ +@import './mixins/hairline'; +@import './mixins/ellipsis'; + +:root { + --fm-navbar-background: var(--fm-background-2); + --fm-navbar-color: var(--fm-text-color); + --fm-navbar-height: 44px; + --fm-navbar-title-size: 17px; + --fm-navbar-side-size: 16px; + --fm-navbar-arrow-size: 18px; +} +.fm-navbar{ + position: relative; + z-index: 9; + display: flex; + align-items: center; + line-height: 1.5; + text-align: center; + user-select: none; + height: var(--fm-navbar-height); + color: var(--fm-navbar-color); + background-color: var(--fm-navbar-background); + &.fm-navbar-fixed { + position: fixed; + top: 0; + left: 0; + width: 100%; + } + &.fm-navbar-border-bottom{ + @include hairline('bottom', var(--fm-border-color-2)); + } + &-title { + max-width: 60%; + margin: 0 auto; + font-weight: 500; + font-size: var(--fm-navbar-title-size); + @include ellipsis(); + } + + &-left, + &-right { + position: absolute; + top: 0; + bottom: 0; + display: flex; + align-items: center; + max-width: 30%; + padding: 0 16px; + font-size: var(--fm-navbar-side-size); + @include ellipsis(); + cursor: pointer; + } + &-left { + left: 0; + &:active{ + opacity: var(--fm-active-opacity); + } + &.fm-navbar-left-padding{ + padding-left: 14px; + } + } + &-right { + right: 0; + .fm-navbar-text:active { + opacity: var(--fm-active-opacity); + } + } + .fm-navbar-left-arrow{ + min-width: 1em; + margin-right: 4px; + font-size: var(--fm-navbar-arrow-size); + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/notice-bar.scss b/packages/mobile-ui-vue/components/theme/src/notice-bar.scss new file mode 100644 index 00000000000..a442d8f72b2 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/notice-bar.scss @@ -0,0 +1,75 @@ + +:root { + --fm-notice-bar-height: 40px; + --fm-notice-bar-zindex: var(--fm-zindex-3); + --fm-notice-bar-color: var(--fm-orange-2); + --fm-notice-bar-background: rgba(251, 185, 2, 0.1); +} + +.fm-notice-bar { + display: flex; + position: relative; + padding: 0 16px; + color: var(--fm-notice-bar-color); + z-index: var(--fm-notice-bar-zindex); + min-height: var(--fm-notice-bar-height); + background-color: var(--fm-notice-bar-background); +} +.fm-notice-bar-left, +.fm-notice-bar-right { + display: flex; + align-items: center; +} +.fm-notice-bar-left { + padding-right: 6px; +} +.fm-notice-bar-right { + padding-left: 6px; +} +.fm-notice-bar-empty { + padding-right: 0; +} +.fm-notice-bar-content { + flex: 1; + margin: auto; + width: auto; + font-size: 14px; + line-height: var(--fm-notice-bar-height); + white-space: nowrap; + overflow: hidden; + &.fm-notice-bar-multi-content { + padding: 16px 0; + font-size: 14px; + line-height: 20px; + white-space: normal; + } + .fm-notice-bar-content-animate { + padding-left: 100%; + display: inline-block; + animation: fm-notice-bar-animation 16s linear infinite both; + -webkit-animation: fm-notice-bar-animation 16s linear infinite both; + } +} +@-webkit-keyframes fm-notice-bar-animation { + 0% { + -webkit-transform: translateZ(0); + transform: translateZ(0); + } + + to { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fm-notice-bar-animation { + 0% { + -webkit-transform: translateZ(0); + transform: translateZ(0); + } + + to { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/notify.scss b/packages/mobile-ui-vue/components/theme/src/notify.scss new file mode 100644 index 00000000000..21a2000aeb8 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/notify.scss @@ -0,0 +1,42 @@ + +:root { + --fm-notify-color: var(--fm-white); + --fm-notify-zindex: var(--fm-zindex-5); + --fm-notify-info-background: var(--fm-primary-color); + --fm-notify-success-background: var(--fm-success-color); + --fm-notify-warning-background: var(--fm-warning-color); + --fm-notify-error-background: var(--fm-danger-color); +} + +.fm-notify{ + position: fixed; + left: 0; + top: 0; + z-index: var(--fm-notify-zindex); + display: flex; + align-items: center; + justify-content: center; + width: 100%; + max-height: 100%; + padding: 8px 16px; + box-sizing: border-box; + color: var(--fm-notify-color); + font-size: 14px; + line-height: 20px; + white-space: pre-wrap; + text-align: center; + word-wrap: break-word; + overflow-y: auto; + &-info{ + background-color: var(--fm-notify-info-background); + } + &-success{ + background-color: var(--fm-notify-success-background); + } + &-warning{ + background-color: var(--fm-notify-warning-background); + } + &-error{ + background-color: var(--fm-notify-error-background); + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/overlay.scss b/packages/mobile-ui-vue/components/theme/src/overlay.scss new file mode 100644 index 00000000000..8b6b05a2322 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/overlay.scss @@ -0,0 +1,9 @@ +.fm-overlay { + width: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 98; + @include safeArea('bottom'); + background-color: rgba(0, 0, 0, 0.4); +} diff --git a/packages/mobile-ui-vue/components/theme/src/pagination.scss b/packages/mobile-ui-vue/components/theme/src/pagination.scss new file mode 100644 index 00000000000..f91040b75df --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/pagination.scss @@ -0,0 +1,84 @@ +@import './mixins/hairline'; + +.fm-pagination { + display: flex; + font-size: 16px; + padding: 5px 0; + &-item, + &-page-desc { + display: flex; + align-items: center; + justify-content: center; + } + + &-item { + flex: 1; + box-sizing: border-box; + min-width: 34px; + height: 34px; + color: var(--fm-primary-color); + background-color: #fff; + cursor: pointer; + user-select: none; + &.fm-hairline{ + position: relative; + } + &:active { + color: #fff; + background-color: var(--fm-primary-color); + } + + &::before { + border-width: 1px 0 1px 1px!important; + } + + &:last-child::before { + border-right-width: 1px!important; + } + + &-active { + color: #fff; + background-color: var(--fm-primary-color); + } + } + + &-prev, + &-next { + padding: 0 4px; + border-radius: 5px; + cursor: pointer; + } + + &-item-disabled { + &, + &:active { + color: #cccccc; + background-color: #ffffff; + cursor: not-allowed; + opacity: 0.5; + } + } + + &-page { + flex-grow: 0; + } + + &-page-desc { + flex: 1; + height: 40px; + color: #333333; + .page-desc-text{ + color: var(--fm-primary-color); + } + } + + &-simple { + .fm-pagination-prev, + .fm-pagination-next { + &::before { + border-width: 1px!important; + } + } + } + } + \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/picker.scss b/packages/mobile-ui-vue/components/theme/src/picker.scss new file mode 100644 index 00000000000..d340276fc74 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/picker.scss @@ -0,0 +1,88 @@ +@import './mixins/hairline'; +:root { + --fm-picker-panel-background: var(--fm-background-2); + --fm-picker-panel-toolbar-height: 44px; +} +.fm-picker-panel { + position: relative; + background-color: var(--fm-picker-panel-background); + user-select: none; + &-toolbar { + display: flex; + justify-content: space-between; + align-items: center; + height: var(--fm-picker-panel-toolbar-height); + &-left, + &-right { + padding: 0 16px; + } + &-title { + font-weight: 500; + font-size: 16px; + max-width: 50%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + &-content { + position: relative; + display: flex; + cursor: grab; + .fm-picker-panel-cols { + display: flex; + flex: 1; + .fm-picker-panel-col { + flex: 1; + overflow: hidden; + &-item{ + display: flex; + align-items: center; + justify-content: center; + height: 44px; + } + } + &-mask { + content: ''; + position: absolute; + top: 0; + left: 0; + z-index: 1; + width: 100%; + height: 100%; + background-image: linear-gradient(180deg, rgba(255, 255, 255, .9), rgba(255, 255, 255, .4)), linear-gradient(0deg, rgba(255, 255, 255, .9), rgba(255, 255, 255, .4));; + background-repeat: no-repeat; + background-position: top,bottom; + transform: translateZ(0); + pointer-events: none; + } + &::after { + content: ''; + position: absolute; + top: 50%; + left: 16px; + right: 16px; + height: 88px; + z-index: 2; + pointer-events: none; + border-width: 1px 0; + border-style: solid; + border-color: #ebedf0; + transform: translateY(-50%) scaleY(.5); + } + } + } +} +.fm-picker { + &:not(:last-child):not(.fm-picker-row) { + .fm-picker-input { + @include hairline('bottom'); + &::after { + left: 16px !important; + } + } + } + .fm-popup-bottom{ + border-radius: 14px 14px 0 0; + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/popover.scss b/packages/mobile-ui-vue/components/theme/src/popover.scss new file mode 100644 index 00000000000..77275bb1bf7 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/popover.scss @@ -0,0 +1,134 @@ +@import './mixins/hairline'; +:root { + --fm-popover-background: var(--fm-background-2); + --fm-popover-font-size: var(--fm-font-size-base); + --fm-popover-color: var(--fm-text-color); +} +.fm-popover-template { + display: inline-block; +} +.fm-popover { + background-color: transparent; + padding: 10px; + font-size: var(--fm-text-font-size); + color: var(--fm-text-color); + .fm-popover-arrow { + position: absolute; + width: 11px; + height: 11px; + border-radius: 1px; + background-color: var(--fm-popover-background); + transform: rotate(45deg); + z-index: 0; + } + .fm-popover-inner { + background-color: var(--fm-popover-background); + box-shadow: 0 2px 8px 0 var(--fm-box-shadow-color-2); + border-radius: 6px; + overflow: hidden; + &-wrapper { + position: relative; + padding: 0; + background-color: var(--fm-popover-background); + .fm-popover-item { + padding: 0 6px 0 8px; + @include hairline('bottom'); + &-container { + position: relative; + display: flex; + align-items: center; + height: 46px; + line-height: 46px; + box-sizing: border-box; + padding: 0 2px; + .fm-popover-item-icon { + margin-right: 16px; + } + } + &:active { + background: var(--fm-active-color); + } + } + .fm-popover-item-disabled { + opacity: var(--fm-disabled-opacity); + } + } + } + &.fm-popover-placement-top, + &.fm-popover-placement-topLeft, + &.fm-popover-placement-topRight { + .fm-popover-arrow { + transform: rotate(225deg); + bottom: 5.5px; + } + } + &.fm-popover-placement-top { + .fm-popover-arrow { + left: 50%; + transform: translateX(-50%) rotate(225deg); + } + } + &.fm-popover-placement-topLeft { + .fm-popover-arrow { + left: 21px; + } + } + &.fm-popover-placement-topRight { + .fm-popover-arrow { + right: 21px; + } + } + &.fm-popover-placement-right, + &.fm-popover-placement-rightBottom, + &.fm-popover-placement-rightTop { + .fm-popover-arrow { + transform: rotate(-45deg); + left: 5.5px; + } + } + &.fm-popover-placement-right .fm-popover-arrow { + top: 50%; + transform: translateY(-50%) rotate(-45deg); + } + &.fm-popover-placement-rightTop .fm-popover-arrow { + top: 21px; + } + &.fm-popover-placement-rightBottom .fm-popover-arrow { + bottom: 21px; + } + &.fm-popover-placement-left, + &.fm-popover-placement-leftBottom, + &.fm-popover-placement-leftTop { + .fm-popover-arrow { + transform: rotate(135deg); + right: 4.5px; + } + } + &.fm-popover-placement-left .fm-popover-arrow { + top: 50%; + transform: translateY(-50%) rotate(135deg); + } + &.fm-popover-placement-leftTop .fm-popover-arrow { + top: 21px; + } + &.fm-popover-placement-leftBottom .fm-popover-arrow { + bottom: 21px; + } + &.fm-popover-placement-bottom, + &.fm-popover-placement-bottomLeft, + &.fm-popover-placement-bottomRight { + .fm-popover-arrow { + top: 4.5px; + } + } + &.fm-popover-placement-bottom .fm-popover-arrow { + left: 50%; + transform: translateX(-50%) rotate(45deg); + } + &.fm-popover-placement-bottomLeft .fm-popover-arrow { + left: 21px; + } + &.fm-popover-placement-bottomRight .fm-popover-arrow { + right: 21px; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/popup.scss b/packages/mobile-ui-vue/components/theme/src/popup.scss new file mode 100644 index 00000000000..36a41897ea7 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/popup.scss @@ -0,0 +1,58 @@ +@import './mixins/safe-area'; +@import './mixins/border-radius'; +:root { + --fm-popup-background: var(--fm-background-2); + --fm-popup-zindex: var(--fm-zindex-3); + --fm-popup-radius: 16px; +} + +.fm-popup { + position: fixed; + max-height: 100%; + overflow-y: auto; + background-color: var(--fm-popup-background); + transition: all var(--fm-duration-base); + z-index: var(--fm-popup-zindex); + &-center { + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + &.fm-popup-round { + @include borderRadius(var(--fm-popup-radius)); + } + } + &-top, + &-bottom { + left: 0; + right: 0; + } + &-top { + top: 0; + &.fm-popup-round { + @include borderRadius(var(--fm-popup-radius),'top'); + } + } + &-bottom { + @include safeArea('bottom'); + &.fm-popup-round { + @include borderRadius(var(--fm-popup-radius),'bottom'); + } + } + &-left, + &-right { + top: 0; + @include safeArea('bottom'); + } + &-left { + left: 0; + &.fm-popup-round { + @include borderRadius(var(--fm-popup-radius),'left'); + } + } + &-right { + right: 0; + &.fm-popup-round { + @include borderRadius(var(--fm-popup-radius),'right'); + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/radio.scss b/packages/mobile-ui-vue/components/theme/src/radio.scss new file mode 100644 index 00000000000..aeaa016c6b2 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/radio.scss @@ -0,0 +1,21 @@ +.fm-radio-group { + .fm-radio-horizontal { + display: flex; + overflow: visible; + text-align: left; + flex-wrap: wrap; + .fm-radio { + margin-top: 4px; + margin-bottom: 4px; + } + } +} +.fm-cell .fm-radio-group .fm-radio-vertical { + padding-left: 0; +} + +.fm-input-control-right { + .fm-radio-horizontal { + justify-content: flex-end; + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/rich-editor.scss b/packages/mobile-ui-vue/components/theme/src/rich-editor.scss new file mode 100644 index 00000000000..13621d83a6d --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/rich-editor.scss @@ -0,0 +1,998 @@ +@import './mixins/hairline'; + +.fm-editor { + width: 100%; + .fm-editor-no-border.ql-container, + .fm-editor-toobar-wrapper.ql-toolbar { + border: none; + } + .fm-editor-no-border { + .ql-editor { + padding: 12px 0; + } + .ql-editor.ql-blank::before { + left: 0; + right: 0; + } + } + .fm-editor-toobar { + .fm-editor-toobar-row { + display: flex; + justify-content: space-between; + padding: 8px; + &:not(:last-child) { + @include hairline('bottom'); + } + .fm-editor-font-slider { + flex: 1; + display: flex; + align-items: center; + padding: 0 8px; + } + .fm-toolbar-color { + height: 24px; + width: 24px; + background-color: #000; + border-radius: 50%; + position: relative; + } + .fm-toolbar-color.fm-active { + &::after { + content: ''; + position: absolute; + left: 0; + top: 0; + height: 14px; + width: 14px; + background-color: #fff; + border-radius: 50%; + transform: translate(5px, 5px); + } + } + } + } +} + + + + +.ql-container { + box-sizing: border-box; + font-family: Helvetica, Arial, sans-serif; + font-size: 14px; + height: 100%; + margin: 0px; + position: relative; + white-space: pre; +} +.ql-container.ql-disabled .ql-tooltip { + visibility: hidden; +} +.ql-container.ql-disabled .ql-editor ul[data-checked] > li::before { + pointer-events: none; +} +.ql-clipboard { + left: -100000px; + height: 1px; + overflow-y: hidden; + position: absolute; + top: 50%; +} +.ql-clipboard p { + margin: 0; + padding: 0; +} +.ql-editor { + box-sizing: border-box; + line-height: 1.42; + height: 100%; + outline: none; + overflow-y: auto; + padding: 12px 15px; + tab-size: 4; + -moz-tab-size: 4; + text-align: left; + white-space: pre-wrap; + word-wrap: break-word; +} +.ql-editor > * { + cursor: text; +} +.ql-editor p, +.ql-editor ol, +.ql-editor ul, +.ql-editor pre, +.ql-editor blockquote, +.ql-editor h1, +.ql-editor h2, +.ql-editor h3, +.ql-editor h4, +.ql-editor h5, +.ql-editor h6 { + margin: 0; + padding: 0; + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} +.ql-editor ol, +.ql-editor ul { + padding-left: 1.5em; +} +.ql-editor ol > li, +.ql-editor ul > li { + list-style-type: none; +} +.ql-editor ul > li::before { + content: '\2022'; +} +.ql-editor ul[data-checked=true], +.ql-editor ul[data-checked=false] { + pointer-events: none; +} +.ql-editor ul[data-checked=true] > li *, +.ql-editor ul[data-checked=false] > li * { + pointer-events: all; +} +.ql-editor ul[data-checked=true] > li::before, +.ql-editor ul[data-checked=false] > li::before { + color: #777; + cursor: pointer; + pointer-events: all; +} +.ql-editor ul[data-checked=true] > li::before { + content: '\2611'; +} +.ql-editor ul[data-checked=false] > li::before { + content: '\2610'; +} +.ql-editor li::before { + display: inline-block; + white-space: nowrap; + width: 1.2em; +} +.ql-editor li:not(.ql-direction-rtl)::before { + margin-left: -1.5em; + margin-right: 0.3em; + text-align: right; +} +.ql-editor li.ql-direction-rtl::before { + margin-left: 0.3em; + margin-right: -1.5em; +} +.ql-editor ol li:not(.ql-direction-rtl), +.ql-editor ul li:not(.ql-direction-rtl) { + padding-left: 1.5em; +} +.ql-editor ol li.ql-direction-rtl, +.ql-editor ul li.ql-direction-rtl { + padding-right: 1.5em; +} +.ql-editor ol li { + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + counter-increment: list-0; +} +.ql-editor ol li:before { + content: counter(list-0, decimal) '. '; +} +.ql-editor ol li.ql-indent-1 { + counter-increment: list-1; +} +.ql-editor ol li.ql-indent-1:before { + content: counter(list-1, lower-alpha) '. '; +} +.ql-editor ol li.ql-indent-1 { + counter-reset: list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} +.ql-editor ol li.ql-indent-2 { + counter-increment: list-2; +} +.ql-editor ol li.ql-indent-2:before { + content: counter(list-2, lower-roman) '. '; +} +.ql-editor ol li.ql-indent-2 { + counter-reset: list-3 list-4 list-5 list-6 list-7 list-8 list-9; +} +.ql-editor ol li.ql-indent-3 { + counter-increment: list-3; +} +.ql-editor ol li.ql-indent-3:before { + content: counter(list-3, decimal) '. '; +} +.ql-editor ol li.ql-indent-3 { + counter-reset: list-4 list-5 list-6 list-7 list-8 list-9; +} +.ql-editor ol li.ql-indent-4 { + counter-increment: list-4; +} +.ql-editor ol li.ql-indent-4:before { + content: counter(list-4, lower-alpha) '. '; +} +.ql-editor ol li.ql-indent-4 { + counter-reset: list-5 list-6 list-7 list-8 list-9; +} +.ql-editor ol li.ql-indent-5 { + counter-increment: list-5; +} +.ql-editor ol li.ql-indent-5:before { + content: counter(list-5, lower-roman) '. '; +} +.ql-editor ol li.ql-indent-5 { + counter-reset: list-6 list-7 list-8 list-9; +} +.ql-editor ol li.ql-indent-6 { + counter-increment: list-6; +} +.ql-editor ol li.ql-indent-6:before { + content: counter(list-6, decimal) '. '; +} +.ql-editor ol li.ql-indent-6 { + counter-reset: list-7 list-8 list-9; +} +.ql-editor ol li.ql-indent-7 { + counter-increment: list-7; +} +.ql-editor ol li.ql-indent-7:before { + content: counter(list-7, lower-alpha) '. '; +} +.ql-editor ol li.ql-indent-7 { + counter-reset: list-8 list-9; +} +.ql-editor ol li.ql-indent-8 { + counter-increment: list-8; +} +.ql-editor ol li.ql-indent-8:before { + content: counter(list-8, lower-roman) '. '; +} +.ql-editor ol li.ql-indent-8 { + counter-reset: list-9; +} +.ql-editor ol li.ql-indent-9 { + counter-increment: list-9; +} +.ql-editor ol li.ql-indent-9:before { + content: counter(list-9, decimal) '. '; +} +.ql-editor .ql-indent-1:not(.ql-direction-rtl) { + padding-left: 3em; +} +.ql-editor li.ql-indent-1:not(.ql-direction-rtl) { + padding-left: 4.5em; +} +.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 3em; +} +.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right { + padding-right: 4.5em; +} +.ql-editor .ql-indent-2:not(.ql-direction-rtl) { + padding-left: 6em; +} +.ql-editor li.ql-indent-2:not(.ql-direction-rtl) { + padding-left: 7.5em; +} +.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 6em; +} +.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right { + padding-right: 7.5em; +} +.ql-editor .ql-indent-3:not(.ql-direction-rtl) { + padding-left: 9em; +} +.ql-editor li.ql-indent-3:not(.ql-direction-rtl) { + padding-left: 10.5em; +} +.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 9em; +} +.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right { + padding-right: 10.5em; +} +.ql-editor .ql-indent-4:not(.ql-direction-rtl) { + padding-left: 12em; +} +.ql-editor li.ql-indent-4:not(.ql-direction-rtl) { + padding-left: 13.5em; +} +.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 12em; +} +.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right { + padding-right: 13.5em; +} +.ql-editor .ql-indent-5:not(.ql-direction-rtl) { + padding-left: 15em; +} +.ql-editor li.ql-indent-5:not(.ql-direction-rtl) { + padding-left: 16.5em; +} +.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 15em; +} +.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right { + padding-right: 16.5em; +} +.ql-editor .ql-indent-6:not(.ql-direction-rtl) { + padding-left: 18em; +} +.ql-editor li.ql-indent-6:not(.ql-direction-rtl) { + padding-left: 19.5em; +} +.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 18em; +} +.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right { + padding-right: 19.5em; +} +.ql-editor .ql-indent-7:not(.ql-direction-rtl) { + padding-left: 21em; +} +.ql-editor li.ql-indent-7:not(.ql-direction-rtl) { + padding-left: 22.5em; +} +.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 21em; +} +.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right { + padding-right: 22.5em; +} +.ql-editor .ql-indent-8:not(.ql-direction-rtl) { + padding-left: 24em; +} +.ql-editor li.ql-indent-8:not(.ql-direction-rtl) { + padding-left: 25.5em; +} +.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 24em; +} +.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right { + padding-right: 25.5em; +} +.ql-editor .ql-indent-9:not(.ql-direction-rtl) { + padding-left: 27em; +} +.ql-editor li.ql-indent-9:not(.ql-direction-rtl) { + padding-left: 28.5em; +} +.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 27em; +} +.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right { + padding-right: 28.5em; +} +.ql-editor .ql-video { + display: block; + max-width: 100%; +} +.ql-editor .ql-video.ql-align-center { + margin: 0 auto; +} +.ql-editor .ql-video.ql-align-right { + margin: 0 0 0 auto; +} +.ql-editor .ql-bg-black { + background-color: #000; +} +.ql-editor .ql-bg-red { + background-color: #e60000; +} +.ql-editor .ql-bg-orange { + background-color: #f90; +} +.ql-editor .ql-bg-yellow { + background-color: #ff0; +} +.ql-editor .ql-bg-green { + background-color: #008a00; +} +.ql-editor .ql-bg-blue { + background-color: #06c; +} +.ql-editor .ql-bg-purple { + background-color: #93f; +} +.ql-editor .ql-color-white { + color: #fff; +} +.ql-editor .ql-color-red { + color: #e60000; +} +.ql-editor .ql-color-orange { + color: #f90; +} +.ql-editor .ql-color-yellow { + color: #ff0; +} +.ql-editor .ql-color-green { + color: #008a00; +} +.ql-editor .ql-color-blue { + color: #06c; +} +.ql-editor .ql-color-purple { + color: #93f; +} +.ql-editor .ql-font-serif { + font-family: Georgia, Times New Roman, serif; +} +.ql-editor .ql-font-monospace { + font-family: Monaco, Courier New, monospace; +} +.ql-editor .ql-size-small { + font-size: 0.75em; +} +.ql-editor .ql-size-large { + font-size: 1.5em; +} +.ql-editor .ql-size-huge { + font-size: 2.5em; +} +.ql-editor .ql-direction-rtl { + direction: rtl; + text-align: inherit; +} +.ql-editor .ql-align-center { + text-align: center; +} +.ql-editor .ql-align-justify { + text-align: justify; +} +.ql-editor .ql-align-right { + text-align: right; +} +.ql-editor.ql-blank::before { + color: rgba(0,0,0,0.6); + content: attr(data-placeholder); + font-style: italic; + left: 15px; + pointer-events: none; + position: absolute; + right: 15px; +} +.ql-snow.ql-toolbar:after, +.ql-snow .ql-toolbar:after { + clear: both; + content: ''; + display: table; +} +.ql-snow.ql-toolbar button, +.ql-snow .ql-toolbar button { + background: none; + border: none; + cursor: pointer; + display: inline-block; + float: left; + height: 24px; + padding: 3px 5px; + width: 28px; +} +.ql-snow.ql-toolbar button svg, +.ql-snow .ql-toolbar button svg { + float: left; + height: 100%; +} +.ql-snow.ql-toolbar button:active:hover, +.ql-snow .ql-toolbar button:active:hover { + outline: none; +} +.ql-snow.ql-toolbar input.ql-image[type=file], +.ql-snow .ql-toolbar input.ql-image[type=file] { + display: none; +} +.ql-snow.ql-toolbar button:hover, +.ql-snow .ql-toolbar button:hover, +.ql-snow.ql-toolbar button:focus, +.ql-snow .ql-toolbar button:focus, +.ql-snow.ql-toolbar button.ql-active, +.ql-snow .ql-toolbar button.ql-active, +.ql-snow.ql-toolbar .ql-picker-label:hover, +.ql-snow .ql-toolbar .ql-picker-label:hover, +.ql-snow.ql-toolbar .ql-picker-label.ql-active, +.ql-snow .ql-toolbar .ql-picker-label.ql-active, +.ql-snow.ql-toolbar .ql-picker-item:hover, +.ql-snow .ql-toolbar .ql-picker-item:hover, +.ql-snow.ql-toolbar .ql-picker-item.ql-selected, +.ql-snow .ql-toolbar .ql-picker-item.ql-selected { + color: #06c; +} +.ql-snow.ql-toolbar button:hover .ql-fill, +.ql-snow .ql-toolbar button:hover .ql-fill, +.ql-snow.ql-toolbar button:focus .ql-fill, +.ql-snow .ql-toolbar button:focus .ql-fill, +.ql-snow.ql-toolbar button.ql-active .ql-fill, +.ql-snow .ql-toolbar button.ql-active .ql-fill, +.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill, +.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill, +.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill, +.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill, +.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill, +.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill, +.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill, +.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill, +.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill, +.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill, +.ql-snow.ql-toolbar button:focus .ql-stroke.ql-fill, +.ql-snow .ql-toolbar button:focus .ql-stroke.ql-fill, +.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill, +.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill, +.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, +.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill, +.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, +.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill, +.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, +.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill, +.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill, +.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill { + fill: #06c; +} +.ql-snow.ql-toolbar button:hover .ql-stroke, +.ql-snow .ql-toolbar button:hover .ql-stroke, +.ql-snow.ql-toolbar button:focus .ql-stroke, +.ql-snow .ql-toolbar button:focus .ql-stroke, +.ql-snow.ql-toolbar button.ql-active .ql-stroke, +.ql-snow .ql-toolbar button.ql-active .ql-stroke, +.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke, +.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke, +.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke, +.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke, +.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke, +.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke, +.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke, +.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke, +.ql-snow.ql-toolbar button:hover .ql-stroke-miter, +.ql-snow .ql-toolbar button:hover .ql-stroke-miter, +.ql-snow.ql-toolbar button:focus .ql-stroke-miter, +.ql-snow .ql-toolbar button:focus .ql-stroke-miter, +.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter, +.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter, +.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter, +.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter, +.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, +.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter, +.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter, +.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter, +.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter, +.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter { + stroke: #06c; +} +@media (pointer: coarse) { + .ql-snow.ql-toolbar button:hover:not(.ql-active), + .ql-snow .ql-toolbar button:hover:not(.ql-active) { + color: #444; + } + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-fill, + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: #444; + } + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke, + .ql-snow.ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter, + .ql-snow .ql-toolbar button:hover:not(.ql-active) .ql-stroke-miter { + stroke: #444; + } +} +.ql-snow { + box-sizing: border-box; +} +.ql-snow * { + box-sizing: border-box; +} +.ql-snow .ql-hidden { + display: none; +} +.ql-snow .ql-out-bottom, +.ql-snow .ql-out-top { + visibility: hidden; +} +.ql-snow .ql-tooltip { + position: absolute; + transform: translateY(10px); +} +.ql-snow .ql-tooltip a { + cursor: pointer; + text-decoration: none; +} +.ql-snow .ql-tooltip.ql-flip { + transform: translateY(-10px); +} +.ql-snow .ql-formats { + display: inline-block; + vertical-align: middle; +} +.ql-snow .ql-formats:after { + clear: both; + content: ''; + display: table; +} +.ql-snow .ql-stroke { + fill: none; + stroke: #444; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 2; +} +.ql-snow .ql-stroke-miter { + fill: none; + stroke: #444; + stroke-miterlimit: 10; + stroke-width: 2; +} +.ql-snow .ql-fill, +.ql-snow .ql-stroke.ql-fill { + fill: #444; +} +.ql-snow .ql-empty { + fill: none; +} +.ql-snow .ql-even { + fill-rule: evenodd; +} +.ql-snow .ql-thin, +.ql-snow .ql-stroke.ql-thin { + stroke-width: 1; +} +.ql-snow .ql-transparent { + opacity: 0.4; +} +.ql-snow .ql-direction svg:last-child { + display: none; +} +.ql-snow .ql-direction.ql-active svg:last-child { + display: inline; +} +.ql-snow .ql-direction.ql-active svg:first-child { + display: none; +} +.ql-snow .ql-editor h1 { + font-size: 2em; +} +.ql-snow .ql-editor h2 { + font-size: 1.5em; +} +.ql-snow .ql-editor h3 { + font-size: 1.17em; +} +.ql-snow .ql-editor h4 { + font-size: 1em; +} +.ql-snow .ql-editor h5 { + font-size: 0.83em; +} +.ql-snow .ql-editor h6 { + font-size: 0.67em; +} +.ql-snow .ql-editor a { + text-decoration: underline; +} +.ql-snow .ql-editor blockquote { + border-left: 4px solid #ccc; + margin-bottom: 5px; + margin-top: 5px; + padding-left: 16px; +} +.ql-snow .ql-editor code, +.ql-snow .ql-editor pre { + background-color: #f0f0f0; + border-radius: 3px; +} +.ql-snow .ql-editor pre { + white-space: pre-wrap; + margin-bottom: 5px; + margin-top: 5px; + padding: 5px 10px; +} +.ql-snow .ql-editor code { + font-size: 85%; + padding: 2px 4px; +} +.ql-snow .ql-editor pre.ql-syntax { + background-color: #23241f; + color: #f8f8f2; + overflow: visible; +} +.ql-snow .ql-editor img { + max-width: 100%; +} +.ql-snow .ql-picker { + color: #444; + display: inline-block; + float: left; + font-size: 14px; + font-weight: 500; + height: 24px; + position: relative; + vertical-align: middle; +} +.ql-snow .ql-picker-label { + cursor: pointer; + display: inline-block; + height: 100%; + padding-left: 8px; + padding-right: 2px; + position: relative; + width: 100%; +} +.ql-snow .ql-picker-label::before { + display: inline-block; + line-height: 22px; +} +.ql-snow .ql-picker-options { + background-color: #fff; + display: none; + min-width: 100%; + padding: 4px 8px; + position: absolute; + white-space: nowrap; +} +.ql-snow .ql-picker-options .ql-picker-item { + cursor: pointer; + display: block; + padding-bottom: 5px; + padding-top: 5px; +} +.ql-snow .ql-picker.ql-expanded .ql-picker-label { + color: #ccc; + z-index: 2; +} +.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill { + fill: #ccc; +} +.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke { + stroke: #ccc; +} +.ql-snow .ql-picker.ql-expanded .ql-picker-options { + display: block; + margin-top: -1px; + top: 100%; + z-index: 1; +} +.ql-snow .ql-color-picker, +.ql-snow .ql-icon-picker { + width: 28px; +} +.ql-snow .ql-color-picker .ql-picker-label, +.ql-snow .ql-icon-picker .ql-picker-label { + padding: 2px 4px; +} +.ql-snow .ql-color-picker .ql-picker-label svg, +.ql-snow .ql-icon-picker .ql-picker-label svg { + right: 4px; +} +.ql-snow .ql-icon-picker .ql-picker-options { + padding: 4px 0px; +} +.ql-snow .ql-icon-picker .ql-picker-item { + height: 24px; + width: 24px; + padding: 2px 4px; +} +.ql-snow .ql-color-picker .ql-picker-options { + padding: 3px 5px; + width: 152px; +} +.ql-snow .ql-color-picker .ql-picker-item { + border: 1px solid transparent; + float: left; + height: 16px; + margin: 2px; + padding: 0px; + width: 16px; +} +.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg { + position: absolute; + margin-top: -9px; + right: 0; + top: 50%; + width: 18px; +} +.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=''])::before, +.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=''])::before, +.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=''])::before, +.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=''])::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=''])::before, +.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=''])::before { + content: attr(data-label); +} +.ql-snow .ql-picker.ql-header { + width: 98px; +} +.ql-snow .ql-picker.ql-header .ql-picker-label::before, +.ql-snow .ql-picker.ql-header .ql-picker-item::before { + content: 'Normal'; +} +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + content: 'Heading 1'; +} +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + content: 'Heading 2'; +} +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + content: 'Heading 3'; +} +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + content: 'Heading 4'; +} +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + content: 'Heading 5'; +} +.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + content: 'Heading 6'; +} +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { + font-size: 2em; +} +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { + font-size: 1.5em; +} +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { + font-size: 1.17em; +} +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { + font-size: 1em; +} +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { + font-size: 0.83em; +} +.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { + font-size: 0.67em; +} +.ql-snow .ql-picker.ql-font { + width: 108px; +} +.ql-snow .ql-picker.ql-font .ql-picker-label::before, +.ql-snow .ql-picker.ql-font .ql-picker-item::before { + content: 'Sans Serif'; +} +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + content: 'Serif'; +} +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]::before, +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + content: 'Monospace'; +} +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]::before { + font-family: Georgia, Times New Roman, serif; +} +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]::before { + font-family: Monaco, Courier New, monospace; +} +.ql-snow .ql-picker.ql-size { + width: 98px; +} +.ql-snow .ql-picker.ql-size .ql-picker-label::before, +.ql-snow .ql-picker.ql-size .ql-picker-item::before { + content: 'Normal'; +} +.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]::before, +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + content: 'Small'; +} +.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]::before, +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + content: 'Large'; +} +.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]::before, +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + content: 'Huge'; +} +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]::before { + font-size: 10px; +} +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]::before { + font-size: 18px; +} +.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]::before { + font-size: 32px; +} +.ql-snow .ql-color-picker.ql-background .ql-picker-item { + background-color: #fff; +} +.ql-snow .ql-color-picker.ql-color .ql-picker-item { + background-color: #000; +} +.ql-toolbar.ql-snow { + border: 1px solid #ccc; + box-sizing: border-box; + font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif; + padding: 8px; +} +.ql-toolbar.ql-snow .ql-formats { + margin-right: 15px; +} +.ql-toolbar.ql-snow .ql-picker-label { + border: 1px solid transparent; +} +.ql-toolbar.ql-snow .ql-picker-options { + border: 1px solid transparent; + box-shadow: rgba(0,0,0,0.2) 0 2px 8px; +} +.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label { + border-color: #ccc; +} +.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options { + border-color: #ccc; +} +.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected, +.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover { + border-color: #000; +} +.ql-toolbar.ql-snow + .ql-container.ql-snow { + border-top: 0px; +} +.ql-snow .ql-tooltip { + background-color: #fff; + border: 1px solid #ccc; + box-shadow: 0px 0px 5px #ddd; + color: #444; + padding: 5px 12px; + white-space: nowrap; +} +.ql-snow .ql-tooltip::before { + content: "Visit URL:"; + line-height: 26px; + margin-right: 8px; +} +.ql-snow .ql-tooltip input[type=text] { + display: none; + border: 1px solid #ccc; + font-size: 13px; + height: 26px; + margin: 0px; + padding: 3px 5px; + width: 170px; +} +.ql-snow .ql-tooltip a.ql-preview { + display: inline-block; + max-width: 200px; + overflow-x: hidden; + text-overflow: ellipsis; + vertical-align: top; +} +.ql-snow .ql-tooltip a.ql-action::after { + border-right: 1px solid #ccc; + content: 'Edit'; + margin-left: 16px; + padding-right: 8px; +} +.ql-snow .ql-tooltip a.ql-remove::before { + content: 'Remove'; + margin-left: 8px; +} +.ql-snow .ql-tooltip a { + line-height: 26px; +} +.ql-snow .ql-tooltip.ql-editing a.ql-preview, +.ql-snow .ql-tooltip.ql-editing a.ql-remove { + display: none; +} +.ql-snow .ql-tooltip.ql-editing input[type=text] { + display: inline-block; +} +.ql-snow .ql-tooltip.ql-editing a.ql-action::after { + border-right: 0px; + content: 'Save'; + padding-right: 0px; +} +.ql-snow .ql-tooltip[data-mode=link]::before { + content: "Enter link:"; +} +.ql-snow .ql-tooltip[data-mode=formula]::before { + content: "Enter formula:"; +} +.ql-snow .ql-tooltip[data-mode=video]::before { + content: "Enter video:"; +} +.ql-snow a { + color: #06c; +} +.ql-container.ql-snow { + border: 1px solid #ccc; +} diff --git a/packages/mobile-ui-vue/components/theme/src/scheadule.scss b/packages/mobile-ui-vue/components/theme/src/scheadule.scss new file mode 100644 index 00000000000..ef8d9aadbff --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/scheadule.scss @@ -0,0 +1,210 @@ +@import './mixins/hairline'; + +.fm-scheadule { + display: flex; + flex-direction: column; + background-color: #fff; + .header { + .title { + display: flex; + position: relative; + justify-content: space-between; + align-items: center; + font-size: 15px; + line-height: 38px; + color: #333333; + padding: 0 16px; + } + } + .content { + position: relative; + margin-right: 20px; + margin-left: 4px; + .label { + width: 32px; + display: flex; + align-items: center; + font-size: 11px; + color: #888888; + } + .allDate { + display: flex; + position: relative; + min-height: 28px; + } + .hour-list { + position: relative; + .hour-cell { + display: flex; + height: 40px; + position: relative; + .hour-cell-label { + height: 50%; + justify-content: flex-end; + padding-right: 8px; + } + } + } + } + .event-list { + position: absolute; + left: 36px; + right: 0; + top: 0; + .event-container-absolute { + position: absolute; + left: 0; + right: 0; + top: 0; + z-index: 9; + } + .event-info { + position: absolute; + left: 36px; + right: 0; + display: block; + box-shadow: 0 1px 8px 0 rgba(0, 0, 0, 0.3); + background-color: #fff; + z-index: 99; + .event-info-content { + min-height: 40px; + position: relative; + padding: 9px 12px; + font-size: 15px; + color: #333333; + .event-info-item { + padding: 3px 0; + } + } + .event-info-footer { + height: 40px; + display: flex; + background: #f8f9fb; + .button { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + } + } + .triangle { + position: absolute; + left: 50%; + top: -6px; + width: 8px; + height: 8px; + transform: translateX(-50%) rotate(45deg); + box-shadow: 0 1px 8px 0 rgba(0, 0, 0, 0.3); + background-color: #fff; + &::after { + position: absolute; + width: 180%; + height: 180%; + content: ' '; + pointer-events: none; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-color: #fff; + border: none; + } + } + } + } + .boder-bottom { + &::after { + position: absolute; + box-sizing: border-box; + content: ' '; + pointer-events: none; + right: 0; + bottom: 0; + left: 0; + border-bottom: 1px solid #ddd; + transform: scaleY(0.5); + } + } + .event-container { + border-radius: 2px; + height: 35px; + overflow: hidden; + .event-bg { + position: absolute; + box-sizing: border-box; + content: ' '; + pointer-events: none; + right: 0; + top: 0; + bottom: 0; + left: 0; + opacity: 0.2; + } + .event { + width: 100%; + min-height: 30px; + display: flex; + padding-left: 10px; + padding-bottom: 10px; + .left { + padding-top: 2px; + padding-right: 6px; + } + .right { + display: flex; + flex-direction: column; + font-size: 12px; + color: #333333; + .event-title { + font-weight: 700; + line-height: 18px; + display: flex; + align-items: center; + } + .event-content { + transform: scaleY(0.91); + } + } + } + } + .event-container-focus { + // border-left: 2px solid #7ed321; + .event-bg { + // background: #7ed321; + opacity: 0.4; + } + } + .event-list-all { + position: relative; + width: 100%; + flex: 1; + padding-left: 4px; + .event-container { + position: relative; + &::after { + height: 1px; + width: 100%; + @include scale-hairline-common(#fff, auto, auto, 0, -1px); + } + } + } +} +.event-panel { + max-height: 300px; + overflow-y: auto; + .event-left { + display: flex; + align-items: center; + .event-left-text{ + font-size: 14px; + color: #888888; + } + .event-left-spliter{ + display: inline-block; + margin: 0 4px; + width: 8px; + height: 2px; + background-color: #888888; + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/scroll-view.scss b/packages/mobile-ui-vue/components/theme/src/scroll-view.scss new file mode 100644 index 00000000000..f75b0069e95 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/scroll-view.scss @@ -0,0 +1,52 @@ +.fm-scroll-view { + position: relative; + display: block; + height: 100%; + overflow: hidden; + -webkit-user-select: none; + user-select: none; + touch-action: pan-y; + .scroll-view-header { + top: 0; + } + .scroll-view-footer { + bottom: 0; + } + .scroll-view-container { + position: relative; + z-index: 1; + &:after { + content: ''; + display: table; + clear: both; + } + .scroll-view-refresh { + position: absolute; + left: 0; + right: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + &:after { + content: ''; + display: table; + clear: both; + } + } + .scroll-view-more { + visibility: hidden; + &.active { + visibility: visible; + } + } + &.horizon { + display: inline-block; + } + } +} +.md-scroll-view .scroll-view-footer, +.md-scroll-view .scroll-view-header { + position: absolute; + left: 0; + right: 0; + z-index: 2; +} diff --git a/packages/mobile-ui-vue/components/theme/src/scroll.scss b/packages/mobile-ui-vue/components/theme/src/scroll.scss new file mode 100644 index 00000000000..3473ad52f49 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/scroll.scss @@ -0,0 +1,8 @@ +.fm-scroll { + width: 100%; + height: 100%; + overflow-y: auto; + display: flex; + flex-direction: column; + -webkit-overflow-scrolling: touch; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/search.scss b/packages/mobile-ui-vue/components/theme/src/search.scss new file mode 100644 index 00000000000..551ac0c0753 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/search.scss @@ -0,0 +1,62 @@ +@import './mixins/hairline'; + +:root { + --fm-search-background: var(--fm-background-2); + --fm-search-color: var(--fm-text-color); + --fm-search-content-background: var(--fm-background-3); + --fm-search-sub-color: var(--fm-text-color-2); + --fm-search-radius: 17px; +} + +.fm-search { + display: flex; + align-items: center; + padding: 8px 12px; + background-color: var(--fm-search-background); + color: var(--fm-search-color); + &-content { + display: flex; + flex: 1; + padding-left: 8px; + background-color: var(--fm-search-content-background); + .fm-search-wrapper { + display: flex; + flex: 1; + } + .fm-cell { + flex: 1; + background-color: transparent; + padding: 5px 8px 5px 0; + .fm-input-value .fm-input-body .fm-input-control { + font-size: 14px; + &::-webkit-search-cancel-button { + display: none; + } + } + } + .fm-search-left-icon { + color: var(--fm-search-sub-color); + } + &-square { + border-radius: 6px; + } + &-round { + border-radius: 17px; + } + .fm-search-label { + padding: 0 5px; + font-size: 14px; + line-height: 36px; + } + } + &-action { + padding-left: 10px; + font-size: 16px; + line-height: 34px; + cursor: pointer; + user-select: none; + } +} +.fm-search-wrapper { + flex: 1; +} diff --git a/packages/mobile-ui-vue/components/theme/src/share-sheet.scss b/packages/mobile-ui-vue/components/theme/src/share-sheet.scss new file mode 100644 index 00000000000..be7a95ddf73 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/share-sheet.scss @@ -0,0 +1,88 @@ +@import './mixins/hairline'; + +.fm-sharesheet { + display: flex; + flex-direction: column; + max-height: 80%; + overflow: hidden; + &.fm-sharesheet-round { + border-radius: 16px 16px 0 0; + } + &-header { + flex-shrink: 0; + padding: 21px 16px 4px; + text-align: center; + &-title { + font-weight: 500; + font-size: 16px; + } + } + &-description { + display: block; + margin-top: 8px; + color: #999999; + font-size: 12px; + line-height: 16px; + text-align: center; + } + &-cancel { + flex-shrink: 0; + padding-top: 8px; + background-color:#f7f8fa; + &-inner { + display: block; + width: 100%; + padding: 14px 16px; + font-size: 16px; + text-align: center; + background-color: #fff; + border: none; + cursor: pointer; + &:active { + background-color: #f2f3f5; + } + } + } + &-options { + position: relative; + display: flex; + padding: 16px 0 16px 8px; + overflow-x: auto; + overflow-y: visible; + -webkit-overflow-scrolling: touch; + &::-webkit-scrollbar { + display: none; + } + .fm-sharesheet-option { + display: flex; + flex-direction: column; + align-items: center; + cursor: pointer; + user-select: none; + .fm-sharesheet-icon{ + width: 48px; + height: 48px; + margin: 0 16px; + } + .fm-sharesheet-name{ + margin-top: 8px; + padding: 0 4px; + color: #646566; + font-size: 12px; + } + .fm-sharesheet-description{ + padding: 0 4px; + color: #ccc; + font-size: 12px; + } + } + &.fm-sharesheet-options-border{ + @include hairline('top'); + &::before{ + left: 16px!important; + right: 16px!important; + width: calc(100% - 32px)!important; + } + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/sidebar.scss b/packages/mobile-ui-vue/components/theme/src/sidebar.scss new file mode 100644 index 00000000000..91e3f834a8c --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/sidebar.scss @@ -0,0 +1,53 @@ +@import './mixins/hairline'; + +:root { + --fm-sidebar-color: var(--fm-text-color); + --fm-sidebar-font-size: 14px; + --fm-sidebar-list-background: var(--fm-background-3); + --fm-sidebar-item-background: var(--fm-background); + --fm-sidebar-item-active-background: var(--fm-blue-2); + --fm-sidebar-item-active-color: var(--fm-white); +} +.fm-sidebar{ + display: flex; + flex-direction: row; + width: 100%; + height: 100%; + overflow: hidden; + color: var(--fm-sidebar-color); + font-size: var(--fm-sidebar-font-size); + &-list{ + flex-shrink: 0; + position: relative; + height: 100%; + overflow-y: auto; + background-color: var(--fm-sidebar-list-background); + } + .fm-sidebar-item{ + position: relative; + display: block; + box-sizing: border-box; + padding: 16px 10px; + overflow: hidden; + line-height: 20px; + background-color: var(--fm-sidebar-item-background); + text-align: center; + cursor: pointer; + user-select: none; + &-active{ + background: var(--fm-sidebar-item-active-background); + color: var(--fm-sidebar-item-active-color); + } + } + &-content{ + flex: 1 1 0; + position: relative; + height: 100%; + overflow-y: auto; + } + &-list,&-content{ + &::-webkit-scrollbar { + display: none; + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/skeleton.scss b/packages/mobile-ui-vue/components/theme/src/skeleton.scss new file mode 100644 index 00000000000..43e4372f523 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/skeleton.scss @@ -0,0 +1,59 @@ +:root { + --fm-skeleton-background: var(--fm-background-3); +} +.fm-skeleton { + display: flex; + padding: 0 16px; + + &-avatar { + flex-shrink: 0; + margin-right: 10px; + background-color: var(--fm-skeleton-background); + + &-round { + border-radius: 100%; + } + } + + &-content { + width: 100%; + } + + + &-row, + &-title { + height: 16px; + background-color: var(--fm-skeleton-background); + } + + &-title { + margin: 0; + } + + &-row { + &:not(:first-child) { + margin-top: 16px; + } + } + + &-title + &-row { + margin-top: 20px; + } + + &-animate { + animation: fm-skeleton-blink 1.2s ease-in-out infinite; + } + + &-round { + .fm-skeleton-row, + .fm-skeleton-title { + border-radius: 100%; + } + } +} + +@keyframes fm-skeleton-blink { + 50% { + opacity: 0.6; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/steps.scss b/packages/mobile-ui-vue/components/theme/src/steps.scss new file mode 100644 index 00000000000..0853484381f --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/steps.scss @@ -0,0 +1,170 @@ +@import './mixins/hairline'; + +:root { + --fm-steps-primary-color: var(--fm-primary-color); +} + +.fm-steps { + &-list { + display: flex; + justify-content: space-around; + align-items: center; + } + &-item { + display: flex; + flex-direction: column; + align-items: center; + position: relative; + margin: 0 8px; + .item-icon { + width: 20px; + height: 20px; + background-color: #ccc; + border-radius: 50%; + color: #fff; + .fm-icon, + .item-icon-text { + display: block; + line-height: 20px; + font-size: 12px; + margin: 0 auto; + text-align: center; + transform: scale(0.83); + } + } + .item-text { + position: absolute; + .name { + white-space: nowrap; + line-height: 18px; + font-size: 13px; + color: #999; + } + .desc { + margin-top: 4px; + font-size: 12px; + line-height: 20px; + color: #ccc; + } + .sub-desc { + line-height: 18px; + font-size: 13px; + color: #999999; + } + } + &-finish, + &-current { + .item-icon { + background-color: var(--fm-steps-primary-color); + } + .item-text .name { + color: #333333; + } + .item-icon-text { + color: #fff; + } + } + &-current { + .item-text .name { + color: var(--fm-steps-primary-color); + } + } + } + &-line { + position: relative; + background: #e8e8e8; + overflow: hidden; + .line-inner { + position: absolute; + z-index: 10; + position: absolute; + top: 0; + left: 0; + display: block; + } + &-horizontal { + flex: 1; + height: 1px; + .line-inner { + width: 100%; + height: 1px; + background-color: var(--fm-steps-primary-color); + transition: all 0.3s linear; + transform: translate3d(-100%, 0px, 0px); + } + &.fm-steps-line-finish { + .line-inner { + transform: translate3d(0%, 0px, 0px); + transition: all 0.3s linear 0s; + } + } + } + } + &-horizontal { + padding-top: 26px; + .fm-steps-list { + .fm-steps-item { + .item-text { + top: calc(-100% - 6px); + margin-bottom: 11px; + text-align: center; + } + } + } + } + &-vertical { + padding-left: 32px; + .fm-steps-list { + height: 100%; + flex-direction: column; + align-items: flex-start; + .fm-steps-item { + flex-direction: row; + width: 100%; + margin: 0; + padding: 15px 10px 15px 0; + align-items: stretch; + .item-icon { + position: absolute; + top: 15px; + left: -18px; + z-index: 2; + } + .item-text { + position: static; + padding-left: 14px; + .name { + font-size: 16px; + font-weight: 600; + color: #333; + white-space: normal; + } + .desc { + line-height: 20px; + font-size: 14px; + color: #333; + } + } + .item-line { + position: absolute; + top: 16px; + left: -8px; + width: 1px; + height: 100%; + background-color: #e8e8e8; + } + &-finish { + .item-line { + background-color: var(--fm-steps-primary-color); + } + } + } + } + &.fm-steps-fill { + height: 100%; + .fm-steps-list .fm-steps-item { + flex: 1; + } + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/swipe.scss b/packages/mobile-ui-vue/components/theme/src/swipe.scss new file mode 100644 index 00000000000..8b90ce9506a --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/swipe.scss @@ -0,0 +1,66 @@ +@import './mixins/hairline'; + +:root { + --fm-swipe-indicator-width: 6px; + --fm-swipe-indicator-height: 6px; + --fm-swipe-indicator-margin: 6px; + --fm-swipe-indicator-background: #ebedf0; +} + +.fm-swipe { + position: relative; + overflow: hidden; + cursor: grab; + user-select: none; + + &-box { + display: flex; + height: 100%; + + &-vertical { + flex-direction: column; + } + } + + &-indicators { + position: absolute; + bottom: 12px; + left: 50%; + display: flex; + transform: translateX(-50%); + + &-vertical { + top: 50%; + bottom: auto; + left: 12px; + flex-direction: column; + transform: translateY(-50%); + + .fm-swipe-indicator:not(:last-child) { + margin-bottom: var(--fm-swipe-indicator-margin); + } + } + } + + &-indicator { + width: var(--fm-swipe-indicator-width); + height: var(--fm-swipe-indicator-width); + background-color: var(--fm-swipe-indicator-background); + border-radius: var(--fm-radius-max); + transition: opacity var(--fm-duration-fast); + &:not(:last-child) { + margin-right: var(--fm-swipe-indicator-margin); + } + + &-active { + background-color: var(--fm-primary-color); + opacity: .3; + } + } + &-item { + position: relative; + flex-shrink: 0; + width: 100%; + height: 100%; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/swipecell.scss b/packages/mobile-ui-vue/components/theme/src/swipecell.scss new file mode 100644 index 00000000000..d176983987a --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/swipecell.scss @@ -0,0 +1,28 @@ +.fm-swipe-cell{ + position: relative; + overflow: hidden; + cursor: grab; + + &-wrapper { + transition-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1); + transition-property: transform; + } + + &-left, + &-right { + position: absolute; + top: 0; + height: 100%; + display: flex; + } + + &-left { + left: 0; + transform: translate3d(-100%, 0, 0); + } + + &-right { + right: 0; + transform: translate3d(100%, 0, 0); + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/switch.scss b/packages/mobile-ui-vue/components/theme/src/switch.scss new file mode 100644 index 00000000000..9261c19ae24 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/switch.scss @@ -0,0 +1,70 @@ +@import './mixins/hairline'; + +:root { + --fm-switch-background: var(--fm-gray-5); + --fm-switch-on-color: var(--fm-primary-color); +} + +.fm-switch { + position: relative; + display: inline-block; + width: 50px; + height: 30px; + font-size: 30px; + border-radius: 40px; + cursor: pointer; + transition: background-color var(--fm-duration-base); + background-color: var(--fm-switch-background); + &-node { + position: absolute; + top: 1px; + left: 1px; + z-index: 1; + width: 28px; + height: 28px; + border-radius: 100%; + background-color: var(--fm-white); + transition: transform var(--fm-duration-base) + cubic-bezier(0.3, 1.05, 0.4, 1.05); + .fm-switch-loading-icon { + position: absolute; + top: 25%; + left: 25%; + width: 50%; + height: 50%; + line-height: 1; + color: var(--fm-switch-on-color); + circle { + animation: fm-circular 1.5s ease-in-out infinite; + stroke: currentColor; + stroke-width: 3; + stroke-linecap: round; + } + &-circular { + vertical-align: super; + } + } + } + + &-on { + background-color: var(--fm-switch-on-color); + .fm-switch-node { + transform: translateX(calc(50px - 30px)); + } + .fm-switch-loading { + color: var(--fm-switch-on-color); + } + } + &-disabled { + cursor: not-allowed; + opacity: var(--fm-disabled-opacity); + } + &-readonly { + cursor: default; + opacity: var(--fm-readonly-opacity); + } + + &-loading { + cursor: default; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/tab-bar.scss b/packages/mobile-ui-vue/components/theme/src/tab-bar.scss new file mode 100644 index 00000000000..f5370de340b --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/tab-bar.scss @@ -0,0 +1,225 @@ +@import './mixins/hairline'; + +:root { + --fm-tab-bar-height: 44px; + --fm-tab-bar-background: var(--fm-background-2); + --fm-tab-bar-color: var(--fm-text-color); + --fm-tab-bar-active-color: var(--fm-primary-color); + --fm-tab-bar-font-size: 16px; +} + +.fm-tab-bar { + position: relative; + background: var(--fm-tab-bar-background); + color: var(--fm-tab-bar-color); + font-size: var(--fm-tab-bar-font-size); + @include hairline('bottom'); + .fm-scroll-view { + display: block; + } + .scroll-view-container { + min-width: 100%; + } + .fm-tab-bar-inner { + position: relative; + width: 100%; + } + .fm-tab-bar-extendable { + width: calc(100% - 30px); + } + .fm-tab-bar-list { + display: flex; + justify-content: space-between; + min-width: 100%; + } + .fm-tab-bar-item { + flex: auto; + flex-shrink: 0; + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + min-height: var(--fm-tab-bar-height); + padding: 0 12px; + margin: 0 auto; + box-sizing: border-box; + &.is-active { + color: var(--fm-tab-bar-active-color); + } + &.is-disabled { + color: var(--fm-disabled-color); + } + + &-content .fm-tab-bar-icon { + position: relative; + display: flex; + align-items: center; + justify-content: center; + .fm-tab-bar-info { + position: absolute; + top: 0; + right: 0; + padding: 0 3px; + margin-top: 4px; + font-weight: 500; + font-size: 12px; + line-height: 14px; + color: var(--fm-background-2); + border-radius: 16px; + background-color: var(--fm-danger-color); + transform: translate(50%, -50%); + &.fm-tab-bar-dot { + width: 8px; + height: 8px; + background-color: var(--fm-danger-color); + border-radius: 100%; + } + } + } + } + .fm-tab-bar-ink { + position: absolute; + bottom: 0; + left: 0; + display: block; + height: 4px; + background-color: var(--fm-tab-bar-active-color); + transition: all var(--fm-duration-base); + border-radius: 2px; + &.is-disabled { + background-color: var(--fm-disabled-color); + } + } + .fm-tab-bar-extend, + .fm-tab-bar-end, + .fm-tab-bar-start { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 14px; + overflow: hidden; + } + .fm-tab-bar-end:after, + .fm-tab-bar-start:after { + content: ''; + display: block; + position: absolute; + left: -14px; + top: 50%; + width: 14px; + margin-top: -22px; + height: var(--fm-tab-bar-height); + border-radius: 50%; + box-shadow: -1px 0 12px 0 var(--fm-box-shadow-color); + } + .fm-tab-bar-end { + left: auto; + right: 0; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); + } + .fm-tab-bar-extend { + left: auto; + right: -30px; + width: 42px; + margin: 4px 0; + display: flex; + align-items: center; + justify-content: center; + background-image: linear-gradient( + 270deg, + #ffffff 74%, + rgba(255, 255, 255, 0) 100% + ); + border-radius: 2px; + z-index: 2; + } + &.fm-tab-bar-tab { + .fm-tab-bar-item-content { + display: flex; + align-items: center; + justify-content: center; + .fm-tab-bar-icon { + margin-right: 6px; + } + } + } + &.fm-tab-bar-nav { + @include hairline('top'); + @include hairline-remove('bottom'); + .fm-tab-bar-item { + flex-direction: column; + min-height: 49px; + &.is-active { + color: var(--fm-tab-bar-active-color); + .fm-tab-bar-icon { + .fm-icon { + color: var(--fm-gradient-blue); + } + } + .text { + color: var(--fm-primary-color); + } + } + .fm-tab-bar-icon { + font-size: 20px; + margin: 4px 0; + text-align: center; + .fm-icon { + font-size: 24px; + color: var(--fm-text-color-3); + } + } + .text { + line-height: 13px; + font-size: 10px; + color: var(--fm-text-color-2); + } + } + } +} +.fm-tab-bar-panel { + height: 60vh; + padding: 0 16px; + background-color: #fff; + &-header { + height: 44px; + font-size: 16px; + display: flex; + justify-content: center; + align-items: center; + padding-bottom: 10px; + } + &-content { + display: flex; + flex-wrap: wrap; + } + &-item { + height: 30px; + width: calc(33.3% - 8px); + padding: 0 8px; + margin-bottom: 8px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 4px; + background: #f6f6f6; + &-text { + font-size: 13px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + &-item:nth-child(3n+1) { + margin-right: 12px; + } + &-item:nth-child(3n+3) { + margin-left: 12px; + } + &-item-active { + background: #3a90ff; + color: #fff; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/tab.scss b/packages/mobile-ui-vue/components/theme/src/tab.scss new file mode 100644 index 00000000000..be1116f959f --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/tab.scss @@ -0,0 +1,46 @@ +.fm-tab-pane { + display: flex; + flex-direction: column; + overflow: hidden; + flex: 1; + position: relative; + width: 100%; + transform: translateZ(0); + &.fm-tab-slide-left, + &.fm-tab-slide-right { + &-enter-from { + opacity: 0.01; + } + &-enter-active { + transition: all 300ms; + } + &-leave-active { + position: absolute; + top: 0; + transition: all 300ms; + } + &-leave-to { + opacity: 0.01; + } + } + &.fm-tab-slide-left { + &-enter-from { + transform: translateX(100%); + } + &-leave-to { + transform: translateX(-100%); + } + } + &.fm-tab-slide-right { + &-enter-from { + transform: translateX(-100%); + } + &-leave-to { + transform: translateX(100%); + } + } +} + +[v-cloak] { + display: none; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/tabs.scss b/packages/mobile-ui-vue/components/theme/src/tabs.scss new file mode 100644 index 00000000000..7956110b8f4 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/tabs.scss @@ -0,0 +1,22 @@ +.fm-tabs { + .fm-tabs-content{ + position: relative; + width: 100%; + overflow: hidden; + } +} +.fm-tabs-fill{ + flex: 1; + display: flex; + flex-direction: column; + .fm-tab-bar{ + flex-shrink: 0; + } + .fm-tabs-content{ + display: flex; + flex-direction: column; + flex-grow: 1; + flex-shrink: 1; + flex-basis: 0; + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/tag.scss b/packages/mobile-ui-vue/components/theme/src/tag.scss new file mode 100644 index 00000000000..dc7ee488fa6 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/tag.scss @@ -0,0 +1,37 @@ +@import './mixins/hairline'; + +:root { + --fm-tag-color: var(--fm-white); +} + +.fm-tag{ + position: relative; + display: inline-flex; + align-items: center; + white-space: nowrap; + padding: 0 6px; + font-size: 13px; + line-height: 20px; + border-radius: 4px; + color: var(--fm-tag-color); + background-color: var(--fm-primary-color); + &-info{ + background-color: var(--fm-primary-color); + } + &-submit{ + background-color: var(--fm-submit-color); + } + &-success{ + background-color: var(--fm-success-color); + } + &-danger{ + background-color: var(--fm-danger-color); + } + &-warning{ + background-color: var(--fm-warning-color); + } + &-sign{ + font-size: 10px; + border-radius: 0 100px 100px 0; + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/tags.scss b/packages/mobile-ui-vue/components/theme/src/tags.scss new file mode 100644 index 00000000000..cc91f7c97a0 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/tags.scss @@ -0,0 +1,129 @@ +@import './mixins/hairline'; + +:root { + --fm-tags-delete-color: var(--fm-gray-5); +} + +.fm-tags{ + .fm-tags-item-container{ + .fm-tag-item{ + display: inline-block; + padding: 0 10px; + margin: 0 4px 4px 0; + line-height: 24px; + font-size: 16px; + white-space: nowrap; + border-radius: var(--fm-radius-max); + cursor: default; + color: var(--fm-tags-color); + a{ + color: rgba(0,0,0,.85); + } + &>a:first-child:last-child{ + display: inline-block; + margin: 0 -4px; + padding: 0 10px; + } + .tag-delete{ + font-size: 16px; + margin-left: 6px; + color: var(--fm-tags-delete-color); + cursor: pointer; + display: inline-block; + .fm-icon{ + vertical-align: baseline; + } + } + &>.fm-icon{ + font-size: 12px; + } + &>.fm-icon+span, &>span+.fm-icon{ + margin-left: 7px; + } + &.fm-tag-item-success { + background-color: var(--fm-success-color-light); + color: var(--fm-success-color); + .tag-delete{ + color: var(--fm-success-color); + } + } + &.fm-tag-item-info { + color: var(--fm-primary-color); + background-color: var(--fm-primary-color-light); + .tag-delete{ + color: var(--fm-primary-color); + } + } + &.fm-tag-item-danger { + background-color: var(--fm-danger-color-light); + color: var(--fm-danger-color); + .tag-delete{ + color: var(--fm-danger-color); + } + } + &.fm-tag-item-warning { + color: var(--fm-warning-color); + background-color: var(--fm-warning-color-light); + .tag-delete{ + color: var(--fm-warning-color); + } + } + &.fm-tag-item-has-color{ + color: var(--fm-background-2); + border-color: transparent; + .tag-delete,a{ + color: var(--fm-background-2); + } + } + &.fm-tag-item-checkable:not(.fm-tag-item-checked) { + background-color: transparent; + border-color: transparent; + cursor: pointer; + &:active{ + color: var(--fm-primary-color); + } + } + &.fm-tag-item-checkdisabled{ + background-color: transparent; + border-color: transparent; + cursor: not-allowed; + color: #ccc; + } + &.fm-tag-item-checked{ + background-color: var(--fm-background-2); + border-color: var(--fm-primary-color); + color: var(--fm-primary-color); + } + &:last-child{ + margin-right: 0; + } + } + .fm-tag-add-button{ + line-height: 22px; + cursor: pointer; + background: #F9F9F9; + border: 1px dashed #ddd; + .fm-tag-add-text{ + color: #999; + } + .fm-icon{ + color: rgba(0,0,0,.2); + } + } + .fm-tag-input-box{ + display: inline-block; + .fm-form-control{ + width: 100px; + &:focus{ + box-shadow: none; + } + } + } + } + &.fm-tags-checkable{ + .fm-tag-item{ + line-height: 22px; + border:1px solid #f6f6f6; + } + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/text-area.scss b/packages/mobile-ui-vue/components/theme/src/text-area.scss new file mode 100644 index 00000000000..5ad734a7328 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/text-area.scss @@ -0,0 +1,3 @@ +.fm-field-textarea { + flex-direction: column; +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/text.scss b/packages/mobile-ui-vue/components/theme/src/text.scss new file mode 100644 index 00000000000..396aa6e75d6 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/text.scss @@ -0,0 +1,24 @@ + +.fm-text { + display: flex; + flex-direction: row; + align-items: center; + margin: 8px 16px; + line-height: 22px; + .label { + width: 92px; + font-size: 14px; + color: #999999; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .text { + flex-grow: 1; + flex-basis: 0; + padding-left: 8px; + font-size: 14px; + color: #333333; + flex-shrink: 1; + } +} \ No newline at end of file diff --git a/packages/mobile-ui-vue/components/theme/src/toast.scss b/packages/mobile-ui-vue/components/theme/src/toast.scss new file mode 100644 index 00000000000..abd14b1b35b --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/toast.scss @@ -0,0 +1,76 @@ +@import './mixins/hairline'; + +:root { + --fm-toast-zindex: var(--fm-zindex-5); + --fm-toast-color: var(--fm-white); + --fm-toast-font-size: 16px; + --fm-toast-background: var(--fm-gray-8); + --fm-toast-icon-font-size: 48px; +} + +.fm-toast { + position: fixed; + top: 50%; + left: 50%; + display: -webkit-box; + display: -webkit-flex; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + box-sizing: content-box; + max-width: 70%; + padding: 16px; + line-height: 20px; + white-space: pre-wrap; + text-align: center; + word-wrap: break-word; + border-radius: 7px; + transform: translate(-50%, -50%); + color: var(--fm-toast-color); + z-index: var(--fm-toast-zindex); + font-size: var(--fm-toast-font-size); + background-color: var(--fm-toast-background); + &-top { + top: 50px; + transform: translate(-50%, 0); + } + &-bottom { + top: auto; + bottom: 50px; + } + &-info, + &-success, + &-warning, + &-error { + width: 88px; + min-height: 88px; + } + + &-icon { + margin-bottom: 8px; + font-size: var(--fm-toast-icon-font-size); + } + &-default { + padding: 8px 16px; + } + &-loading { + min-width: 84px; + min-height: 84px; + } + &-loading-icon { + position: relative; + display: inline-block; + width: 30px; + height: 30px; + margin-bottom: 8px; + vertical-align: middle; + animation: fm-rotate 2s linear infinite; + circle { + animation: fm-circular 1.5s ease-in-out infinite; + stroke: currentColor; + stroke-width: 4; + stroke-linecap: round; + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/tree-bar.scss b/packages/mobile-ui-vue/components/theme/src/tree-bar.scss new file mode 100644 index 00000000000..156a23a2145 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/tree-bar.scss @@ -0,0 +1,102 @@ +:root { + --fm-tree-bar-height: 100%; + --fm-tree-bar-width: 80vw; + --fm-tree-bar-background: var(--fm-background); + --fm-tree-bar-color: var(--fm-text-color); + --fm-tree-bar-active-background: var(--fm-background-2); + --fm-tree-bar-active-color: var(--fm-primary-color); + --fm-tree-bar-item-active-background: var(--fm-blue-light); +} +.fm-tree-bar { + height: var(--fm-tree-bar-height); +} +.tree-level-one-wrapper { + width: var(--fm-tree-bar-width); +} +.tree-level-two-wrapper, +.tree-level-three-wrapper { + display: flex; + .level-menu { + display: flex; + flex-direction: column; + background: var(--fm-tree-bar-background); + .level-menu-item { + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 80px; + height: 48px; + font-size: 12px; + line-height: 16px; + color: var(--fm-tree-bar-color); + } + .level-menu-item-selected { + font-weight: var(--fm-font-bold); + color: var(--fm-tree-bar-active-color); + background-color: var(--fm-tree-bar-active-background); + &::before { + content: ''; + height: 20px; + width: 4px; + position: absolute; + left: 0; + top: 14px; + border-radius: 2px; + background-image: var(--fm-gradient-blue); + } + } + } + .level-list { + width: 268px; + } +} +.tree-level-one-wrapper, +.tree-level-two-wrapper { + .fm-cell { + .fm-cell-title-text { + font-size: 12px; + line-height: 28px; + } + } +} +.tree-level-three-wrapper { + .level-list { + padding: 12px 16px; + } + .level-item-panel { + line-height: 16px; + padding-bottom: 12px; + .level-item-title { + font-size: 12px; + font-weight: 500; + } + .level-item-sub-list { + padding-top: 11px; + display: flex; + flex-wrap: wrap; + .level-item-sub-item { + width: 72px; + padding: 0 4px; + margin-bottom: 10px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + flex-shrink: 0; + font-size: 11px; + line-height: 28px; + border-radius: 4px; + text-align: center; + background: var(--fm-background); + &:not(:nth-child(3n)) { + margin-right: 10px; + } + } + .level-item-selected { + color: var(--fm-tree-bar-active-color); + border: 0 solid var(--fm-tree-bar-active-color); + background: var(--fm-tree-bar-item-active-background); + } + } + } +} diff --git a/packages/mobile-ui-vue/components/theme/src/upload.scss b/packages/mobile-ui-vue/components/theme/src/upload.scss new file mode 100644 index 00000000000..e28b4de5f43 --- /dev/null +++ b/packages/mobile-ui-vue/components/theme/src/upload.scss @@ -0,0 +1,276 @@ +.fm-upload-actionsheet-content { + flex: 1 auto; + overflow-y: auto; + + &__item { + font-family: PingFangSC-Regular; + display: block; + width: 100%; + padding: 14px 16px; + font-size: 16px; + text-align: center; + background-color: #ffffff; + border: none; + cursor: pointer; + text-align: center; + -webkit-user-select: none; + user-select: none; + + &-tip { + font-size: 12px; + color: #999999; + letter-spacing: 0; + margin-top: 5px; + } + + &--disabled { + color: #cccccc; + cursor: not-allowed; + } + } +} + +.fm-preview-file-popup { + display: flex; + flex-direction: column; + overflow: hidden; + width: 100%; + height: 100%; + + &__preview-iframe { + border: none; + + &-wrapper { + flex: 1; + } + } +} + +.fm-upload { + background: #ffffff; + -webkit-user-select: none; + user-select: none; + + &--single-btn { + display: inline-block; + } + + &--has-list { + padding: 16px; + } + + div { + -webkit-user-select: none; + user-select: none; + } + span { + -webkit-user-select: none; + user-select: none; + } + img { + -webkit-user-select: none; + -webkit-touch-callout: none; + user-select: none; + } + button { + -webkit-user-select: none; + user-select: none; + } + + &__default-header { + padding: 0.5rem 0; + font-size: 16px; + } + + &__file-list { + .fm-listview-item { + margin: 12px 0; + } + } + + &__file-item { + display: flex; + justify-content: space-between; + + &-thumbnail { + width: 100%; + height: 100%; + + &-wrapper { + width: 48px; + height: 48px; + margin: auto 0; + img { + border-radius: 3px; + width: 48px; + height: 48px; + } + } + } + + &-info { + flex: 1; + margin: auto 12px; + font-family: PingFangSC-Regular; + &-row { + display: flex; + justify-content: space-between; + margin-bottom: 5px; + } + } + + &-name { + display: block; + line-height: 22px; + font-size: 16px; + color: #333333; + letter-spacing: 0.21px; + margin-bottom: 2px; + word-break: break-all; + } + + &-text { + display: block; + line-height: 18px; + font-size: 12px; + color: #888888; + letter-spacing: 0; + } + + &-action-button { + margin: auto 0; + width: 16px; + height: 16px; + transform: rotate(90deg); + cursor: pointer; + } + } + + &__upload-button { + width: 48px; + height: 48px; + background-color: #f6f6f6; + border-radius: 3px; + cursor: pointer; + .fm-icon { + display: block; + font-size: 20px; + line-height: 48px; + color: #dddddd; + margin: 0 auto; + } + + &-wrapper { + display: inline-block; + position: relative; + z-index: 8; + } + + &--readonly { + opacity: 0.6; + cursor: not-allowed; + } + } +} + +$tooltip-bg-color: #333333; +$tooltip-text-color: #cccccc; + +.fm-file-action-tooltip { + font-family: PingFangSC-Medium; + position: absolute; + z-index: 3000; + min-width: 150px; + margin: 0; + background: $tooltip-bg-color; + border-radius: 5px; + font-size: 13px; + color: $tooltip-text-color; + letter-spacing: 0; + + &--hidden { + z-index: -9999; + left: -9999px !important; + top: -99999px !important; + } + + div { + -webkit-user-select: none; + user-select: none; + } + span { + -webkit-user-select: none; + user-select: none; + } + + &__arrow { + position: absolute; + border: 5px solid transparent; + width: 0; + height: 0; + + &--top { + border-top-color: $tooltip-bg-color; + left: 50%; + top: 100%; + } + &--top-start { + border-top-color: $tooltip-bg-color; + left: 80%; + top: 100%; + } + &--top-end { + border-top-color: $tooltip-bg-color; + left: 20%; + top: 100%; + } + &--right-start { + border-right-color: $tooltip-bg-color; + right: 100%; + top: 30px; + } + &--right-end { + border-right-color: $tooltip-bg-color; + right: 100%; + bottom: 30px; + } + &--left-start { + border-left-color: $tooltip-bg-color; + left: 100%; + top: 30px; + } + &--left-end { + border-left-color: $tooltip-bg-color; + left: 100%; + bottom: 30px; + } + } + + &__item { + line-height: 3; + margin: 0 10px; + + &-tip { + font-size: 10px; + margin-top: -20px; + } + + &--disabled { + opacity: 0.4; + } + + &:not(:last-child) { + border-bottom: 1px solid rgba(102, 102, 102, 0.5); + } + } + + &__mask { + display: block; + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 2999; + } +} diff --git a/packages/mobile-ui-vue/components/utils/index.ts b/packages/mobile-ui-vue/components/utils/index.ts new file mode 100644 index 00000000000..97e4c4554a1 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/index.ts @@ -0,0 +1,17 @@ +export * from './src/dom/event'; +export * from './src/dom/element'; +export * from './src/dom/style'; +export * from './src/dom/scroller'; +export * from './src/common'; +export * from './src/hook'; +export * from './src/date'; +export * from './src/number'; +export * from './src/vue-compile/codegen'; +export * from './src/array'; +export * from './src/type'; +export * from './src/interceptor'; +export * from './src/string'; +export * from './src/throttle'; +export * from './src/debounce'; +export * from './src/bem'; +export * from './src/deep-assign'; diff --git a/packages/mobile-ui-vue/components/utils/src/array.ts b/packages/mobile-ui-vue/components/utils/src/array.ts new file mode 100644 index 00000000000..99aa7e60d62 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/array.ts @@ -0,0 +1,15 @@ +export const toMultidimensional = (arr: any[], num = 0) => { + const resArr: any[] = []; + arr.forEach((item, index) => { + const page = Math.floor(index / num); // 计算该元素为第几个素组内 + if (!resArr[page]) { // 判断是否存在 + resArr[page] = []; + } + resArr[page].push(item); + }); + return resArr; +}; + +export const notEmptyArray = (value: any) => { + return Array.isArray(value) && value.length > 0; +}; diff --git a/packages/mobile-ui-vue/components/utils/src/bem.ts b/packages/mobile-ui-vue/components/utils/src/bem.ts new file mode 100644 index 00000000000..3fff8b91ea2 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/bem.ts @@ -0,0 +1,55 @@ +export type Mod = string | { [key: string]: any }; +export type Mods = Mod | Mod[]; + +function genBem(name: string, mods?: Mods): string { + if (!mods) { + return ''; + } + + if (typeof mods === 'string') { + return ` ${name}--${mods}`; + } + + if (Array.isArray(mods)) { + return (mods as Mod[]).reduce( + (ret, item) => ret + genBem(name, item), + '' + ); + } + + return Object.keys(mods).reduce( + (ret, key) => ret + (mods[key] ? genBem(name, key) : ''), + '' + ); +} + +/** + * bem helper + * b() // 'button' + * b('text') // 'button__text' + * b({ disabled }) // 'button button--disabled' + * b('text', { disabled }) // 'button__text button__text--disabled' + * b(['disabled', 'primary']) // 'button button--disabled button--primary' + */ +export function createBEM(name: string) { + return (el?: Mods, mods?: Mods): string => { + if (el && typeof el !== 'string') { + mods = el; + el = ''; + } + + el = el ? `${name}__${el}` : name; + + return `${el}${genBem(el, mods)}`; + }; +} + +export type BEM = ReturnType; + +export function createNamespace(name: string) { + const prefixedName = `fm-${name}`; + return [ + createBEM(prefixedName), + prefixedName, + ] as const; +} diff --git a/packages/mobile-ui-vue/components/utils/src/common.ts b/packages/mobile-ui-vue/components/utils/src/common.ts new file mode 100644 index 00000000000..53b850a6187 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/common.ts @@ -0,0 +1,115 @@ +/* eslint-disable no-useless-escape */ +/* eslint-disable @typescript-eslint/ban-types */ +/* eslint-disable no-return-assign */ +/* eslint-disable no-use-before-define */ +import { ComponentPublicInstance } from 'vue'; +import { isDef, isNumeric } from './type'; + +export function noop() { } + +export type ComponentInstance = ComponentPublicInstance<{}, any>; + +export type RawObject = { + [key: string]: T; +}; + +export function makeMap(str: string, expectsLowerCase = false) { + const map = Object.create(null); + const list = str.split(','); + for (let i = 0; i < list.length; i++) { + map[list[i]] = true; + } + return expectsLowerCase + ? (val: string) => !!map[val.toLowerCase()] + : (val: string) => !!map[val]; +} + +export function addUnit(value: any) { + if (!isDef(value)) { + return undefined; + } + value = String(value); + return isNumeric(value) ? `${value}px` : value; +} + +export const getValue = (field: string, data: any, safe = false) => { + if (!data) { + return ''; + } + let resultVal = ''; + if (field.indexOf('.') === -1) { + resultVal = data[field]; + } else { + resultVal = field.split('.').reduce((obj, key) => { + if (obj) { + return obj[key]; + } + return null; + + }, data); + } + + if (safe) { + return formatterValue(resultVal); + } + return resultVal; + +}; + +export const setValue = ( + obj: { [key: string]: any }, + field: string, + val: any, +) => { + if (field) { + if (field.indexOf('.') > -1) { + let lastObj: { [key: string]: any } | null = null; + const _fields = field.split('.'); + _fields.reduce((c, p) => { + lastObj = c; + return c && c[p] ? c[p] : (c[p] = {}); + }, obj); + + if (lastObj) { + const index = _fields.pop(); + if (index) { + ; (lastObj as any)[index] = val; + } + } + } else { + obj[field] = val; + } + } +}; + +export const escapeHtml = (str: string) => { + return str + .replace(/&/g, '&') + .replace(//g, '>') + .replace(/\"/g, '"') + .replace(/\'/g, ''') + .replace(/\//g, '/'); +}; + +export const unescapeHtml = (str: string) => { + return str + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(///g, '/'); +}; + +const formatterValue = (val: any) => { + if (val === null || val === undefined || val === '') { + return ''; + } + + if (typeof val === 'string') { + return escapeHtml(val); + } + + return val; +}; diff --git a/packages/mobile-ui-vue/components/utils/src/date.ts b/packages/mobile-ui-vue/components/utils/src/date.ts new file mode 100644 index 00000000000..505158ca131 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/date.ts @@ -0,0 +1,44 @@ +/* eslint-disable no-use-before-define */ +import dayjs from 'dayjs'; +import { isDate } from './type'; + +export const format = (date: Date | string, format: string) => { + return dayjs(date).format(initFormatForDayjs(format)); +}; + +export const parse = (date: string | Date, format?: string) => { + return isDate(date) ? date : dayjs(date, format).toDate(); +}; + +export const initFormatForDayjs = (format: string) => { + if (!format) { + return 'YYYY-MM-DD'; + } + const formatArr = format.split(' '); + const dateFormat = formatArr[0] ? formatArr[0] : ''; + const timeFormat = formatArr[1] ? ' ' + formatArr[1] : ''; + return `${dateFormat.toUpperCase()}${timeFormat}`; +}; + +export function isEqualDate(prevDate: Date, nextDate: Date | undefined) { + nextDate = nextDate || new Date(); + return dayjs(prevDate).isSame(nextDate, 'date'); +} + +export function isSameDay(prevDate: Date, nextDate: Date) { + return dayjs(prevDate).isSame(nextDate, 'day'); +} + +export function isBefore(prevDate: Date, nextDate: Date, unit: dayjs.OpUnitType = 'milliseconds') { + nextDate = nextDate || new Date(); + return dayjs(prevDate).isBefore(nextDate, unit); +} + +export function isAfter(prevDate: Date, nextDate: Date, unit: dayjs.OpUnitType = 'milliseconds') { + nextDate = nextDate || new Date(); + return dayjs(prevDate).isAfter(nextDate, unit); +} + +export function isValidDate(date: Date) { + return date instanceof Date && !isNaN(date.getTime()); +} diff --git a/packages/mobile-ui-vue/components/utils/src/debounce.ts b/packages/mobile-ui-vue/components/utils/src/debounce.ts new file mode 100644 index 00000000000..cb5f4b1fd32 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/debounce.ts @@ -0,0 +1,33 @@ +/* eslint-disable prefer-arrow-callback */ +/* eslint-disable @typescript-eslint/ban-types */ +export const debounce = (fn: Function, wait: number, immediate?: boolean) => { + let timeout: any; + + const debounced = (...args: any[]) => { + if (timeout) { + clearTimeout(timeout); + } + if (immediate) { + timeout = setTimeout(() => { + timeout = null; + fn(...args); + }, wait); + if (!timeout) { + fn(args); + } + } else { + // 设置定时器 + timeout = setTimeout(function () { + fn(...args); + }, wait); + } + }; + + // 新增 手动取消 + debounced.cancel = function () { + clearTimeout(timeout); + timeout = null; + }; + + return debounced; +}; diff --git a/packages/mobile-ui-vue/components/utils/src/deep-assign.ts b/packages/mobile-ui-vue/components/utils/src/deep-assign.ts new file mode 100644 index 00000000000..83441b8c65f --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/deep-assign.ts @@ -0,0 +1,28 @@ +import { isDef, isObject } from "./type"; + +type ObjectIndex = Record; + +const { hasOwnProperty } = Object.prototype; + +function assignKey(to: ObjectIndex, from: ObjectIndex, key: string) { + const val = from[key]; + + if (!isDef(val)) { + return; + } + + if (!hasOwnProperty.call(to, key) || !isObject(val)) { + to[key] = val; + } else { + // eslint-disable-next-line no-use-before-define + to[key] = deepAssign(Object(to[key]), val); + } +} + +export function deepAssign(to: ObjectIndex, from: ObjectIndex): ObjectIndex { + Object.keys(from).forEach((key) => { + assignKey(to, from, key); + }); + + return to; +} diff --git a/packages/mobile-ui-vue/components/utils/src/dom/element.ts b/packages/mobile-ui-vue/components/utils/src/dom/element.ts new file mode 100644 index 00000000000..7e6f6be63a0 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/dom/element.ts @@ -0,0 +1,120 @@ +import { Ref, unref } from 'vue'; +import { makeMap } from '../common'; + +type Position = { + top?: number; + bottom?: number; + left?: number; + right?: number; + height?: number; + width?: number; +}; + +/** + * 获得相对位置 + */ +export const getPosition = ( + target: Ref | HTMLElement | undefined, + wrapper: HTMLElement = document.body, +) => { + const initPosition = { + top: 0, + left: 0, + bottom: 0, + right: 0, + height: 0, + width: 0, + }; + const _target = unref(target); + const _wrapper = unref(wrapper); + const _targetPosition = _target + ? _target.getBoundingClientRect() + : initPosition; + const _wrapperPosition = _wrapper + ? _wrapper.getBoundingClientRect() + : initPosition; + return { + top: _targetPosition.top - _wrapperPosition.top, + bottom: _wrapperPosition.bottom - _targetPosition.bottom, + left: _targetPosition.left - _wrapperPosition.left, + right: _wrapperPosition.right - _targetPosition.right, + height: _targetPosition.height, + width: _targetPosition.width, + }; +}; + +export const getDeviation = (root: Ref | HTMLElement, placement = 'bottomLeft') => { + let result: Position = {}; + const rootPosition = getPosition(root); + switch (placement) { + case 'left': + result = { + top: rootPosition.top, + right: rootPosition.right + rootPosition.width, + }; + break; + case 'right': + result = { + top: rootPosition.top, + left: rootPosition.left + rootPosition.width, + }; + break; + case 'top': + result = { + bottom: rootPosition.bottom + rootPosition.height, + left: rootPosition.left + rootPosition.width / 2, + }; + break; + case 'bottom': + result = { + top: rootPosition.top + rootPosition.height, + left: rootPosition.left + rootPosition.width / 2, + }; + break; + case 'topLeft': + result = { + bottom: rootPosition.bottom + rootPosition.height, + left: rootPosition.left, + }; + break; + case 'topRight': + result = { + bottom: rootPosition.bottom + rootPosition.height, + right: rootPosition.right, + }; + break; + case 'bottomLeft': + result = { + top: rootPosition.top + rootPosition.height, + left: rootPosition.left, + }; + break; + case 'bottomRight': + result = { + top: rootPosition.top + rootPosition.height, + right: rootPosition.right, + }; + break; + default: + result = rootPosition; + } + return result; +}; + +export const getRectByRef = (ref: Ref) => { + const target: Element | undefined = unref(ref); + return target?.getBoundingClientRect(); +}; + +const HTML_TAGS = + 'html,body,base,head,link,meta,style,title,address,article,aside,footer,' + + 'header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,' + + 'figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,' + + 'data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,' + + 'time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,' + + 'canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,' + + 'th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,' + + 'option,output,progress,select,textarea,details,dialog,menu,' + + 'summary,template,blockquote,iframe,tfoot'; + +export const isHTMLTag = makeMap(HTML_TAGS); diff --git a/packages/mobile-ui-vue/components/utils/src/dom/event.ts b/packages/mobile-ui-vue/components/utils/src/dom/event.ts new file mode 100644 index 00000000000..371efca3603 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/dom/event.ts @@ -0,0 +1,37 @@ +export function stopPropagation(event: Event) { + event.stopPropagation(); +} + +export function preventDefault(event: Event, isStopPropagation?: boolean) { + /* istanbul ignore else */ + if (typeof event.cancelable !== 'boolean' || event.cancelable) { + event.preventDefault(); + } + + if (isStopPropagation) { + stopPropagation(event); + } +} + +export function trigger(target: Element, type: string) { + const inputEvent = document.createEvent('HTMLEvents'); + inputEvent.initEvent(type, true, true); + target.dispatchEvent(inputEvent); +} + +// ios event没有path属性 +export const initNodePath = (event: Event) => { + const path: any[] = []; + let currentElem: any = event.target; + while (currentElem) { + path.push(currentElem); + currentElem = currentElem.parentElement; + } + if (path.indexOf(window) === -1 && path.indexOf(document) === -1) { + path.push(document); + } + if (path.indexOf(window) === -1) { + path.push(window); + } + return path; +}; diff --git a/packages/mobile-ui-vue/components/utils/src/dom/scroller.ts b/packages/mobile-ui-vue/components/utils/src/dom/scroller.ts new file mode 100644 index 00000000000..ad4d8a437e3 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/dom/scroller.ts @@ -0,0 +1,30 @@ +const overflowScrollReg = /scroll|auto/i; + +export function getScroller(el: Element | undefined): Element | Window { + const root = window; + let node: any = el; + + while ( + node && + node.tagName !== 'HTML' && + node.nodeType === 1 && + node !== root + ) { + const { overflowY } = window.getComputedStyle(node); + + if (overflowScrollReg.test(overflowY)) { + if (node.tagName !== 'BODY') { + return node; + } + const { overflowY: htmlOverflowY } = window.getComputedStyle( + node.parentNode + ); + + if (overflowScrollReg.test(htmlOverflowY)) { + return node; + } + } + node = node.parentNode; + } + return root; +} diff --git a/packages/mobile-ui-vue/components/utils/src/dom/style.ts b/packages/mobile-ui-vue/components/utils/src/dom/style.ts new file mode 100644 index 00000000000..a5d8ac7c60b --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/dom/style.ts @@ -0,0 +1,20 @@ +import { unref, Ref } from 'vue'; + +export function isHidden( + elementRef: HTMLElement | Ref +) { + const el = unref(elementRef); + if (!el) { + return false; + } + + const style = window.getComputedStyle(el); + const hidden = style.display === 'none'; + + // offsetParent returns null in the following situations: + // 1. The element or its parent element has the display property set to none. + // 2. The element has the position property set to fixed + const parentHidden = el.offsetParent === null && style.position !== 'fixed'; + + return hidden || parentHidden; +} diff --git a/packages/mobile-ui-vue/components/utils/src/hook.ts b/packages/mobile-ui-vue/components/utils/src/hook.ts new file mode 100644 index 00000000000..378e53fec0c --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/hook.ts @@ -0,0 +1,18 @@ +import { nextTick, onMounted, onActivated } from 'vue'; + +export function onMountedOrActivated(hook: () => any) { + let mounted: boolean; + + onMounted(() => { + hook(); + nextTick(() => { + mounted = true; + }); + }); + + onActivated(() => { + if (mounted) { + hook(); + } + }); +} diff --git a/packages/mobile-ui-vue/components/utils/src/interceptor.ts b/packages/mobile-ui-vue/components/utils/src/interceptor.ts new file mode 100644 index 00000000000..36b05f4fdf1 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/interceptor.ts @@ -0,0 +1,36 @@ +import { noop } from "./common"; +import { isPromise } from "./type"; + +export type Interceptor = (...args: any[]) => Promise | boolean; + +export function callInterceptor(options: { + interceptor?: Interceptor; + args?: any[]; + done: () => void; + canceled?: () => void; +}) { + const { interceptor, args, done, canceled } = options; + + if (interceptor) { + // eslint-disable-next-line prefer-spread + const returnVal = interceptor.apply(null, args || []); + + if (isPromise(returnVal)) { + returnVal + .then((value) => { + if (value) { + done(); + } else if (canceled) { + canceled(); + } + }) + .catch(noop); + } else if (returnVal) { + done(); + } else if (canceled) { + canceled(); + } + } else { + done(); + } +} diff --git a/packages/mobile-ui-vue/components/utils/src/number.ts b/packages/mobile-ui-vue/components/utils/src/number.ts new file mode 100644 index 00000000000..42dc626ac0b --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/number.ts @@ -0,0 +1,28 @@ +import { trimExtraChar } from './string'; +import { isDef } from './type'; + +export function formatToNumber(value: string, allowDot: boolean) { + value = isDef(value) ? value : ''; + let regExp = /[^-0-9]/g; + value = trimExtraChar(value, '-', /-/g); + if (allowDot) { + value = trimExtraChar(value, '.', /\./g); + regExp = /[^-0-9.]/g; + } else { + value = value.split('.')[0]; + } + // eslint-disable-next-line no-return-assign + return value = value.replace(regExp, ''); +} + +export function parseFloat(value: string | number, precision = 0) { + return Number.parseFloat(value ? String(value) : '0').toFixed(precision); +} + +export function range(num: number, min: number, max: number): number { + return Math.min(Math.max(num, min), max); +} + +export function random(min: number, max: number) { + return Math.round(Math.random() * (max - min) + min); +} diff --git a/packages/mobile-ui-vue/components/utils/src/string.ts b/packages/mobile-ui-vue/components/utils/src/string.ts new file mode 100644 index 00000000000..bdbe9ab3baa --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/string.ts @@ -0,0 +1,43 @@ +/* eslint-disable default-param-last */ +import { isString } from "./type"; + +export function trimExtraChar(value: string, char: string, regExp: RegExp) { + const index = value.indexOf(char); + + if (index === -1) { + return value; + } + + if (char === '-' && index !== 0) { + return value.slice(0, index); + } + + return value.slice(0, index + 1) + value.slice(index).replace(regExp, ''); +} + +const slice = (value: string, begin = 0, end?: number) => { + if (!value) { + return ''; + } + const innerValue = String(value); + end = end || innerValue.length; + return { + before: innerValue.slice(0, begin), + target: innerValue.slice(begin, end), + after: innerValue.slice(end, innerValue.length) + }; +}; + +export function toUpperCase(value: string, begin = 0, end?: number) { + const result = slice(value, begin, end); + return result ? result.before + result.target.toUpperCase() + result.after : result; +} + +export function toLowerCase(value: string, begin = 0, end?: number) { + const result = slice(value, begin, end); + return result ? result.before + result.target.toLowerCase() + result.after : result; +} + +export function toObject(value: string) { + return value ? isString(value) ? JSON.parse(value.replace(/'/g, '"')) : value : {}; +} diff --git a/packages/mobile-ui-vue/components/utils/src/throttle.ts b/packages/mobile-ui-vue/components/utils/src/throttle.ts new file mode 100644 index 00000000000..2e7627c7597 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/throttle.ts @@ -0,0 +1,44 @@ +/* eslint-disable @typescript-eslint/ban-types */ +/* eslint-disable semi */ +/* eslint-disable @typescript-eslint/semi */ +export const throttle = ( + fn: Function, + wait: number, + options: { leading?: boolean; trailing?: boolean } = {}, +) => { + let timeout: any = null + let previous = 0 + + const throttled = (...args: any[]) => { + const now = +new Date() + + if (!previous && options.leading === false) { + previous = now + } + + const remaining = wait - (now - previous) + + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout) + timeout = null + } + previous = now + fn(...args) + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(() => { + previous = options.leading === false ? 0 : +new Date() + timeout = null + fn(...args) + }, remaining) + } + } + + // 手动取消 + throttled.cancel = function () { + clearTimeout(timeout) + previous = 0 + timeout = null + } + return throttled +} diff --git a/packages/mobile-ui-vue/components/utils/src/type.ts b/packages/mobile-ui-vue/components/utils/src/type.ts new file mode 100644 index 00000000000..b8dfa82b0fa --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/type.ts @@ -0,0 +1,88 @@ +/* eslint-disable @typescript-eslint/ban-types */ +export const inBrowser = typeof window !== 'undefined'; + +export const inIOS = () => /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent); +export const inAndroid = () => /(Android|Adr)/i.test(navigator.userAgent); + +export function isDef(val: T): val is NonNullable { + return val !== undefined && val !== null; +} + +export function isNull(val: unknown): val is null { + return val === null; +} + +export function isUndefined(val: unknown): val is undefined { + return val === undefined; +} + +export function isString(val: unknown): val is string { + return typeof val === 'string'; +} + +export function isNumber(val: unknown): val is number { + return typeof val === 'number'; +} + +export function isBoolean(val: unknown): val is null { + return typeof val === 'boolean'; +} + +export const { isArray } = Array; + +export function isSymbol(val: unknown): val is symbol { + return typeof val === 'symbol'; +} + +export function isFunction(val: unknown): val is Function { + return typeof val === 'function'; +} + +export function isObject(val: unknown): val is Record { + return val !== null && typeof val === 'object'; +} + +export function isPromise(val: unknown): val is Promise { + return isObject(val) && isFunction(val.then) && isFunction(val.catch); +} + +export function isNumeric(val: string) { + return /^\d+(\.\d+)?$/.test(val); +} + +export function isDate(val: unknown): val is Date { + return typeof val === 'object' && val instanceof Date; +} + +export function getType(val: unknown) { + if (isString(val)) { + return 'string'; + } + if (isNumber(val)) { + return 'number'; + } + if (isDate(val)) { + return 'date'; + } + if (isNull(val)) { + return 'null'; + } + if (isUndefined(val)) { + return 'undefined'; + } + if (isArray(val)) { + return 'array'; + } + if (isSymbol(val)) { + return 'symbol'; + } + if (isFunction(val)) { + return 'function'; + } + if (isPromise(val)) { + return 'promise'; + } + if (isObject(val)) { + return 'object'; + } +} diff --git a/packages/mobile-ui-vue/components/utils/src/vue-compile/codegen.ts b/packages/mobile-ui-vue/components/utils/src/vue-compile/codegen.ts new file mode 100644 index 00000000000..00de91c2246 --- /dev/null +++ b/packages/mobile-ui-vue/components/utils/src/vue-compile/codegen.ts @@ -0,0 +1,553 @@ +/* eslint-disable no-lone-blocks */ +/* eslint-disable @typescript-eslint/indent */ +/* eslint-disable no-use-before-define */ +import { + helperNameMap, + assert, + isSimpleIdentifier, + TO_DISPLAY_STRING, + CREATE_COMMENT, + WITH_DIRECTIVES, + OPEN_BLOCK, + CREATE_BLOCK, + CREATE_VNODE, + WITH_CTX, + SET_BLOCK_TRACKING, + RESOLVE_COMPONENT, + RESOLVE_DIRECTIVE +} from '@vue/compiler-core'; +import { isString, isSymbol, isArray } from '../type'; + +export function VueCodeGenerate(ast: any) { + + const context = createCodegenContext(); + + const { push, indent, deindent, newline } = context; + + // enter render function + const functionName = `render`; + const args = ['_ctx', '_cache']; + + const signature = args.join(', '); + + genModulePreamble(ast, context); + + push(`return `); + push(`function ${functionName}(${signature}) {`); + indent(); + push(`const { props } = _ctx`); + newline(); + // generate asset resolution statements + if (ast.components.length) { + genAssets(ast.components, 'component', context); + if (ast.directives.length || ast.temps > 0) { + newline(); + } + } + if (ast.directives.length) { + console.log(ast); + genAssets(ast.directives, 'directive', context); + if (ast.temps > 0) { + newline(); + } + } + newline(); + + push(`return `); + + if (ast.codegenNode) { + genNode(ast.codegenNode, context); + } else { + push(`null`); + } + deindent(); + push(`}`); + + return { + ast, + code: context.code, + }; +} + +function createCodegenContext() { + const context = { + code: ``, + indentLevel: 0, + pure: false, + helper(key: string) { + return `_${helperNameMap[key as any]}`; + }, + push(code: string) { + context.code += code; + }, + indent() { + newline(++context.indentLevel); + }, + deindent(withoutNewLine = false) { + if (withoutNewLine) { + --context.indentLevel; + } else { + newline(--context.indentLevel); + } + }, + newline() { + newline(context.indentLevel); + }, + }; + + function newline(n: number) { + context.push('\n' + ` `.repeat(n)); + } + + return context; +} + +function genModulePreamble(ast: any, context: any) { + const { push, newline } = context; + // generate import statements for helpers + if (ast.helpers.length) { + push( + `const { ${ast.helpers + .map((s: any) => `${helperNameMap[s]}: _${helperNameMap[s]}`) + .join(', ')} } = Vue\n`, + ); + } + newline(); +} + +function genAssets(assets: any, type: any, { helper, push, newline }: any) { + const resolver = helper(type === 'component' ? RESOLVE_COMPONENT : RESOLVE_DIRECTIVE); + for (let i = 0; i < assets.length; i++) { + const id = assets[i]; + push(`const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)})`); + if (i < assets.length - 1) { + newline(); + } + } +} + +const PURE_ANNOTATION = `/*#__PURE__*/`; + +function genNode(node: any, context: any) { + if (isString(node)) { + context.push(node); + return; + } + if (isSymbol(node)) { + context.push(context.helper(node)); + return; + } + switch (node.type) { + case 1 /* ELEMENT */: + case 9 /* IF */: + case 11 /* FOR */: + assert( + node.codegenNode != null, + `Codegen node is missing for element/if/for node. ` + + `Apply appropriate transforms first.`, + ); + genNode(node.codegenNode, context); + break; + case 2 /* TEXT */: + genText(node, context); + break; + case 4 /* SIMPLE_EXPRESSION */: + genExpression(node, context); + break; + case 5 /* INTERPOLATION */: + genInterpolation(node, context); + break; + case 12 /* TEXT_CALL */: + genNode(node.codegenNode, context); + break; + case 8 /* COMPOUND_EXPRESSION */: + genCompoundExpression(node, context); + break; + case 3 /* COMMENT */: + genComment(node, context); + break; + case 13 /* VNODE_CALL */: + genVNodeCall(node, context); + break; + case 14 /* JS_CALL_EXPRESSION */: + genCallExpression(node, context); + break; + case 15 /* JS_OBJECT_EXPRESSION */: + genObjectExpression(node, context); + break; + case 17 /* JS_ARRAY_EXPRESSION */: + genArrayExpression(node, context); + break; + case 18 /* JS_FUNCTION_EXPRESSION */: + genFunctionExpression(node, context); + break; + case 19 /* JS_CONDITIONAL_EXPRESSION */: + genConditionalExpression(node, context); + break; + case 20 /* JS_CACHE_EXPRESSION */: + genCacheExpression(node, context); + break; + // SSR only types + case 21 /* JS_BLOCK_STATEMENT */: + genNodeList(node.body, context, true, false); + break; + case 22 /* JS_TEMPLATE_LITERAL */: + genTemplateLiteral(node, context); + break; + case 23 /* JS_IF_STATEMENT */: + genIfStatement(node, context); + break; + case 24 /* JS_ASSIGNMENT_EXPRESSION */: + genAssignmentExpression(node, context); + break; + case 25 /* JS_SEQUENCE_EXPRESSION */: + genSequenceExpression(node, context); + break; + case 26 /* JS_RETURN_STATEMENT */: + genReturnStatement(node, context); + break; + /* istanbul ignore next */ + case 10 /* IF_BRANCH */: + // noop + break; + default: { + assert(false, `unhandled codegen node type: ${node.type}`); + // make sure we exhaust all possible types + const exhaustiveCheck = node; + return exhaustiveCheck; + } + } +} + +function genText(node: any, context: any) { + context.push(JSON.stringify(node.content), node); +} + +function genExpression(node: any, context: any) { + const { content, isStatic } = node; + context.push(isStatic ? JSON.stringify(content) : content, node); +} + +function genInterpolation(node: any, context: any) { + const { push, helper, pure } = context; + if (pure) push(PURE_ANNOTATION); + push(`${helper(TO_DISPLAY_STRING)}(`); + genNode(node.content, context); + push(`)`); +} + +function genCompoundExpression(node: any, context: any) { + for (let i = 0; i < node.children.length; i++) { + const child = node.children[i]; + if (isString(child)) { + context.push(child); + } else { + genNode(child, context); + } + } +} + +function genExpressionAsPropertyKey(node: any, context: any) { + const { push } = context; + if (node.type === 8 /* COMPOUND_EXPRESSION */) { + push(`[`); + genCompoundExpression(node, context); + push(`]`); + } else if (node.isStatic) { + // only quote keys if necessary + const text = isSimpleIdentifier(node.content) + ? node.content + : JSON.stringify(node.content); + push(text, node); + } else { + push(`[${node.content}]`, node); + } +} + +function genComment(node: any, context: any) { + { + const { push, helper, pure } = context; + if (pure) { + push(PURE_ANNOTATION); + } + push(`${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`, node); + } +} +function genNodeList(nodes: any, context: any, multilines = false, comma = true) { + const { push, newline } = context; + + for (let i = 0; i < nodes.length; i++) { + const node = nodes[i]; + if (isString(node)) { + push(node); + } else if (isArray(node)) { + genNodeListAsArray(node, context); + } else { + genNode(node, context); + } + if (i < nodes.length - 1) { + if (multilines) { + comma && push(','); + newline(); + } else { + comma && push(', '); + } + } + } +} +function genVNodeCall(node: any, context: any) { + const { push, helper, pure } = context; + const { + tag, + props, + children, + patchFlag, + dynamicProps, + directives, + isBlock, + disableTracking, + } = node; + if (directives) { + push(helper(WITH_DIRECTIVES) + `(`); + } + if (isBlock) { + push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `); + } + if (pure) { + push(PURE_ANNOTATION); + } + push(helper(isBlock ? CREATE_BLOCK : CREATE_VNODE) + `(`, node); + genNodeList( + genNullableArgs([tag, props, children, patchFlag, dynamicProps]), + context, + ); + + push(`)`); + if (isBlock) { + push(`)`); + } + if (directives) { + console.log(directives); + push(`, `); + genNode(directives, context); + push(`)`); + } +} +function genNullableArgs(args: any) { + let i = args.length; + while (i--) { + if (args[i] != null) break; + } + return args.slice(0, i + 1).map((arg: any) => arg || `null`); +} +// JavaScript +function genCallExpression(node: any, context: any) { + const { push, helper, pure } = context; + const callee = isString(node.callee) ? node.callee : helper(node.callee); + if (pure) { + push(PURE_ANNOTATION); + } + push(callee + `(`, node); + genNodeList(node.arguments, context); + push(`)`); +} +function genObjectExpression(node: any, context: any) { + const { push, indent, deindent, newline } = context; + const { properties } = node; + if (!properties.length) { + push(`{}`, node); + return; + } + const multilines = + properties.length > 1 || + properties.some((p: any) => p.value.type !== 4 /* SIMPLE_EXPRESSION */); + push(multilines ? `{` : `{ `); + multilines && indent(); + for (let i = 0; i < properties.length; i++) { + const { key, value } = properties[i]; + // key + genExpressionAsPropertyKey(key, context); + push(`: `); + // value + genNode(value, context); + if (i < properties.length - 1) { + // will only reach this if it's multilines + push(`,`); + newline(); + } + } + multilines && deindent(); + push(multilines ? `}` : ` }`); +} +function isText$1(n: any) { + return ( + isString(n) || + n.type === 4 /* SIMPLE_EXPRESSION */ || + n.type === 2 /* TEXT */ || + n.type === 5 /* INTERPOLATION */ || + n.type === 8 /* COMPOUND_EXPRESSION */ + ); +} +function genNodeListAsArray(nodes: any, context: any) { + const multilines = + nodes.length > 3 || nodes.some((n: any) => isArray(n) || !isText$1(n)); + context.push(`[`); + multilines && context.indent(); + genNodeList(nodes, context, multilines); + multilines && context.deindent(); + context.push(`]`); +} +function genArrayExpression(node: any, context: any) { + genNodeListAsArray(node.elements, context); +} +function genFunctionExpression(node: any, context: any) { + const { push, indent, deindent } = context; + const { params, returns, body, newline, isSlot } = node; + // slot functions also need to push scopeId before rendering its content + + if (isSlot) { + push(`_${helperNameMap[WITH_CTX]}(`); + } + push(`(`, node); + if (isArray(params)) { + genNodeList(params, context); + } else if (params) { + genNode(params, context); + } + push(`) => `); + if (newline || body) { + push(`{`); + indent(); + } + if (returns) { + if (newline) { + push(`return `); + } + if (isArray(returns)) { + genNodeListAsArray(returns, context); + } else { + genNode(returns, context); + } + } else if (body) { + genNode(body, context); + } + if (newline || body) { + deindent(); + push(`}`); + } +} +function genConditionalExpression(node: any, context: any) { + const { test, consequent, alternate, newline: needNewline } = node; + const { push, indent, deindent, newline } = context; + if (test.type === 4 /* SIMPLE_EXPRESSION */) { + const needsParens = !isSimpleIdentifier(test.content); + needsParens && push(`(`); + genExpression(test, context); + needsParens && push(`)`); + } else { + push(`(`); + genNode(test, context); + push(`)`); + } + needNewline && indent(); + context.indentLevel++; + needNewline || push(` `); + push(`? `); + genNode(consequent, context); + context.indentLevel--; + needNewline && newline(); + needNewline || push(` `); + push(`: `); + const isNested = alternate.type === 19; /* JS_CONDITIONAL_EXPRESSION */ + if (!isNested) { + context.indentLevel++; + } + genNode(alternate, context); + if (!isNested) { + context.indentLevel--; + } + needNewline && deindent(true /* without newline */); +} +function genCacheExpression(node: any, context: any) { + const { push, helper, indent, deindent, newline } = context; + push(`_cache[${node.index}] || (`); + if (node.isVNode) { + indent(); + push(`${helper(SET_BLOCK_TRACKING)}(-1),`); + newline(); + } + push(`_cache[${node.index}] = `); + genNode(node.value, context); + if (node.isVNode) { + push(`,`); + newline(); + push(`${helper(SET_BLOCK_TRACKING)}(1),`); + newline(); + push(`_cache[${node.index}]`); + deindent(); + } + push(`)`); +} +function genTemplateLiteral(node: any, context: any) { + const { push, indent, deindent } = context; + push('`'); + const l = node.elements.length; + const multilines = l > 3; + for (let i = 0; i < l; i++) { + const e = node.elements[i]; + if (isString(e)) { + push(e.replace(/(`|\$|\\)/g, '\\$1')); + } else { + push('${'); + if (multilines) indent(); + genNode(e, context); + if (multilines) deindent(); + push('}'); + } + } + push('`'); +} +function genIfStatement(node: any, context: any) { + const { push, indent, deindent } = context; + const { test, consequent, alternate } = node; + push(`if (`); + genNode(test, context); + push(`) {`); + indent(); + genNode(consequent, context); + deindent(); + push(`}`); + if (alternate) { + push(` else `); + if (alternate.type === 23 /* JS_IF_STATEMENT */) { + genIfStatement(alternate, context); + } else { + push(`{`); + indent(); + genNode(alternate, context); + deindent(); + push(`}`); + } + } +} +function genAssignmentExpression(node: any, context: any) { + genNode(node.left, context); + context.push(` = `); + genNode(node.right, context); +} +function genSequenceExpression(node: any, context: any) { + context.push(`(`); + genNodeList(node.expressions, context); + context.push(`)`); +} +function genReturnStatement({ returns }: any, context: any) { + context.push(`return `); + if (isArray(returns)) { + genNodeListAsArray(returns, context); + } else { + genNode(returns, context); + } +} +function toValidAssetId(name: any, type: any) { + return `_${type}_${name.replace(/[^\w]/g, '_')}`; +} diff --git a/packages/mobile-ui-vue/demos/actionsheet/index.html b/packages/mobile-ui-vue/demos/actionsheet/index.html new file mode 100644 index 00000000000..888e963a478 --- /dev/null +++ b/packages/mobile-ui-vue/demos/actionsheet/index.html @@ -0,0 +1,40 @@ +
+

基本使用

+
+ + + + +
+

选项状态

+
+ + +
+

自定义面板

+
+ + + + + + + + +
+
+ + 选项一 +
+
+ + 选项二 +
+
+ + 选项三 +
+
+
diff --git a/packages/mobile-ui-vue/demos/actionsheet/index.js b/packages/mobile-ui-vue/demos/actionsheet/index.js new file mode 100644 index 00000000000..ea0fd0c9550 --- /dev/null +++ b/packages/mobile-ui-vue/demos/actionsheet/index.js @@ -0,0 +1,54 @@ +import { + reactive, + toRefs +} from 'vue'; + +export default { + name: 'action-sheet-demo', + setup(_props) { + const state = reactive({ + show: { + basic: false, + cancel: false, + title: false, + status: false, + description: false, + }, + }); + const actions = [{ + name: '选项一' + }, + { + name: '选项二' + }, + { + name: '选项三', + subname: '描述信息' + }, + ]; + const actions2 = [{ + name: '着色选项', + color: '#ee0a24' + }, + { + name: '禁用选项', + disabled: true + } + ]; + const onSelect = (item) => { + state.show.basic = false; + console.log("--> [select]", item.name); + }; + const onCancel = () => { + console.log("--> [cancel]"); + }; + + return { + ...toRefs(state), + actions, + actions2, + onSelect, + onCancel + }; + } +}; diff --git a/packages/mobile-ui-vue/demos/actionsheet/index.scss b/packages/mobile-ui-vue/demos/actionsheet/index.scss new file mode 100644 index 00000000000..6fbd00a8b62 --- /dev/null +++ b/packages/mobile-ui-vue/demos/actionsheet/index.scss @@ -0,0 +1,28 @@ +.demo-actionsheet-content { + .demo-actionsheet-item { + display: flex; + padding-left: 16px; + line-height: 22px; + align-items: center; + &-text { + flex: 1 1 0; + padding: 14px 16px 14px 0; + font-size: 16px; + color: #333; + border-bottom: 1px solid #ddd; + } + .fm-icon { + flex-shrink: 0; + margin-right: 10px; + font-size: 20px; + } + &:active { + background-color: #f2f3f5; + } + &:last-child { + .demo-actionsheet-item-text { + border-bottom: none; + } + } + } +} diff --git a/packages/mobile-ui-vue/demos/actionsheet/index.vue b/packages/mobile-ui-vue/demos/actionsheet/index.vue new file mode 100644 index 00000000000..44447ba3159 --- /dev/null +++ b/packages/mobile-ui-vue/demos/actionsheet/index.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/mobile-ui-vue/demos/adv-uploader/index.vue b/packages/mobile-ui-vue/demos/adv-uploader/index.vue new file mode 100644 index 00000000000..e01579ae928 --- /dev/null +++ b/packages/mobile-ui-vue/demos/adv-uploader/index.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/packages/mobile-ui-vue/demos/home/index.vue b/packages/mobile-ui-vue/demos/home/index.vue new file mode 100644 index 00000000000..48be715e216 --- /dev/null +++ b/packages/mobile-ui-vue/demos/home/index.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/packages/mobile-ui-vue/demos/index.vue b/packages/mobile-ui-vue/demos/index.vue new file mode 100644 index 00000000000..f3fbb19f21c --- /dev/null +++ b/packages/mobile-ui-vue/demos/index.vue @@ -0,0 +1,45 @@ + + + + diff --git a/packages/mobile-ui-vue/demos/listview/filter-bar-panel-enum.vue b/packages/mobile-ui-vue/demos/listview/filter-bar-panel-enum.vue new file mode 100644 index 00000000000..308bf06aeb7 --- /dev/null +++ b/packages/mobile-ui-vue/demos/listview/filter-bar-panel-enum.vue @@ -0,0 +1,149 @@ + + + + \ No newline at end of file diff --git a/packages/mobile-ui-vue/demos/listview/filter-bar-panel.vue b/packages/mobile-ui-vue/demos/listview/filter-bar-panel.vue new file mode 100644 index 00000000000..949cdb72132 --- /dev/null +++ b/packages/mobile-ui-vue/demos/listview/filter-bar-panel.vue @@ -0,0 +1,42 @@ + + + diff --git a/packages/mobile-ui-vue/demos/listview/filter-bar.vue b/packages/mobile-ui-vue/demos/listview/filter-bar.vue new file mode 100644 index 00000000000..0b7a4d1420f --- /dev/null +++ b/packages/mobile-ui-vue/demos/listview/filter-bar.vue @@ -0,0 +1,107 @@ + + + + diff --git a/packages/mobile-ui-vue/demos/listview/index.html b/packages/mobile-ui-vue/demos/listview/index.html new file mode 100644 index 00000000000..b73ce60ad96 --- /dev/null +++ b/packages/mobile-ui-vue/demos/listview/index.html @@ -0,0 +1,113 @@ +
+ +
+ +
+ +
+ + +
+
+ + + + + + + +
+
+
+ +
+
+ + + +
+
+
+ + +
+
+ +
+
+
+ +
+
+ 下拉刷新 + +
+
+
+
+
+
\ No newline at end of file diff --git a/packages/mobile-ui-vue/demos/listview/index.js b/packages/mobile-ui-vue/demos/listview/index.js new file mode 100644 index 00000000000..bb8320b1bd5 --- /dev/null +++ b/packages/mobile-ui-vue/demos/listview/index.js @@ -0,0 +1,360 @@ +import Vue from 'vue'; +// export interface item { +// "id": string, +// "title": string, +// "label":String, +// "checked":Boolean +// } +// import FilterBar from './filter-bar.vue'; +export default { + name: 'listview-demo', + components: { + // FilterBar + }, + data() { + return { + childValidatorResults: [{"id":"111","index":0},{"id":"222","index":1}], + list: [ + { + items: undefined, + refreshing: false, + loading: false, + error: false, + finished: false, + multiple: true, + checkSubmitBtn: { + text: '提交' + }, + checkCancelBtn: { + text: '撤销' + }, + btns: [ + { + text: '取消', + type: 'primary', + plain: true, + handler: this.cancelCheck + }, + { + text: '确认', + type: 'primary', + plain: false, + handler: this.getList + } + ], + // showSubmitBtn: false + }, + { + items: [], + refreshing: false, + loading: false, + error: false, + finished: false, + multiple: true + }, + { + items: [], + refreshing: false, + loading: false, + error: false, + finished: false, + multiple: true + }, + { + items: [], + refreshing: false, + loading: false, + error: false, + finished: false, + multiple: true + } + ], + listdata: [ + { + id: '1', + text: '行为管理', + menus: [ + { + id: '1-1', + icon: 'print', + text: '拜访路线', + color: '#40A9FF', + isLink: true + }, + { + id: '1-2', + icon: 'addpicture', + text: '拜访计划', + color: '#73D13D', + isLink: true + }, + { + id: '1-3', + icon: 'print', + text: '拜访', + color: '#13C2C2', + isLink: true + }, + { + id: '1-4', + icon: 'print', + text: '工作汇报', + color: '#FF7A45', + isLink: true + }, + { + id: '1-5', + icon: 'print', + text: '签到', + color: '#85A5FF', + isLink: true + }, + { + id: '1-6', + icon: 'print', + text: '经销商', + color: '#73D13D', + isLink: true + } + ] + }, + { + id: '2', + text: '拜访管理', + menus: [ + { + id: '2-1', + icon: 'print', + text: '拜访路线' + }, + { + id: '2-2', + icon: 'print', + text: '拜访计划', + checked: true + }, + { + id: '2-3', + icon: 'print', + text: '拜访' + }, + { + id: '2-4', + icon: 'print', + text: '工作汇报' + }, + { + id: '2-5', + icon: 'print', + text: '签到' + }, + { + id: '2-6', + icon: 'print', + text: '经销商', + checked: true + } + ] + }, + { + id: '3', + text: '工作管理', + menus: [ + { + id: '3-1', + icon: 'print', + text: '拜访路线' + }, + { + id: '3-2', + icon: 'print', + text: '拜访计划' + }, + { + id: '3-3', + icon: 'print', + text: '拜访' + }, + { + id: '3-4', + icon: 'print', + text: '工作汇报' + }, + { + id: '3-4', + icon: 'print', + text: '工作汇报' + } + ] + } + ], + listMultiple:false, + checkAll:false, + filterBarData: [{ + value: 'billType', + text: '单据类型', + type: 'enum', + enumData: [{ + text: '报销单', + value: 'expense', + children: [{ + text: '普通差旅报销单', + value: '111', + },{ + text: '交通费报销单', + value: '222', + },{ + text: '通讯费报销单', + value: '333', + },{ + text: '国外差旅报销', + value: '444', + },{ + text: '通用差旅报销', + value: '555', + }] + },{ + text: '行政审批', + value: 'approval', + children: [] + }] + },{ + value: 'submitDate', + text: '提交时间', + type: 'date' + }] + }; + }, + methods: { + onLoad(index) { + + const list = this.list[index]; + list.loading = true; + + setTimeout(() => { + if (list.refreshing) { + list.items = []; + list.refreshing = false; + } + + for (let i = 0; i < 5; i++) { + list.items = list?.items?.length ? list.items : [] + const text = list.items.length + 1; + if ((i + 1) % 5 === 0) { + list.items.push({ + id: 'listview' + text, + title: '标题' + text, + label: 'label' + text, + isLink: true, + checked: true + }); + } else { + list.items.push({ + id: 'listview' + text, + title: '标题' + text, + label: 'label' + text, + isLink: true + }); + } + } + + list.loading = false; + list.refreshing = false; + // console.log(index === 2 && list.items.length === 10 && !list.error) + if (index === 1 && list.items.length === 10 && !list.error) { + list.error = true; + } else { + list.error = false; + } + + if (list.items.length >= 40) { + list.finished = true; + } + console.log(list); + }, 1000); + }, + onLoadData(){ + const list = this.list[3]; + list.loading = true; + setTimeout(() => { + this.listdata.push({ + id: '4', + text: '新增管理', + menus: [ + { + id: '4-1', + icon: 'print', + text: '拜访路线' + } + ] + }) + list.finished = true; + list.loading = false; + list.refreshing = false; + }, 1000); + }, + onRefresh(index) { + this.list[index].finished = false; + this.list[index].refreshing = true; + this.onLoad(index); + }, + submit(data) { + console.log(data); + console.log(this.$refs.listView1); + console.log(this.$refs.listView1.getScrollerPosition()); + this.$refs.listView1.setScrollerPosition({scrollTop: 20}) + }, + multipleCancel(data) { + console.log(data); + }, + viewChecked() { + this.$refs.listview.checkSubmit(); + console.log('提交成功'); + }, + getList(btn, data) { + console.log(data); + console.log(btn); + this.$refs.listView1.checkSubmit() + }, + cancelCheck(btn) { + console.log(btn); + console.log(this.$refs.listView1); + this.$refs.listView1.listCheckCancel() + }, + listItemClick(event) { + console.log(event); + }, + selectItemChange(event) { + console.log(event); + }, + deleteItem(item) { + console.log(item); + }, + listMultipleStart(){ + this.listMultiple = true; + this.checkAll = false; + this.$refs.listview.listCheckStart(); + }, + listMultipleCancel(){ + this.listMultiple = false; + this.$refs.listview.listCheckCancel(); + }, + checkAllChange(checked){ + if(checked){ + this.$refs.listview.listCheckAll(); + } + else{ + this.$refs.listview.listCheckAllCancel(); + } + }, + checkSubmit(){ + console.log(this.$refs.listview.getSelectDataList()); + }, + listclick(e,disabled){ + if(!disabled){ + e.stopPropagation(); + } + console.log('列表点击'); + } + } +}; \ No newline at end of file diff --git a/packages/mobile-ui-vue/demos/listview/index.scss b/packages/mobile-ui-vue/demos/listview/index.scss new file mode 100644 index 00000000000..d57d491f7c1 --- /dev/null +++ b/packages/mobile-ui-vue/demos/listview/index.scss @@ -0,0 +1,85 @@ +.container { + box-sizing: border-box; + height: calc(100% - 26px); + padding-bottom: 20px; +} +.fm-swipecell-demo-right { + display: flex; +} +.fm-tmpl-list { + height: 40px; + line-height: 40px; + border-bottom: 1px solid #ddd; + text-align: center; + color: #666; +} +.demo-listview-menu{ + .fm-listview-item-content{ + display: flex; + align-items: center; + flex-wrap: wrap; + .fm-listview-sub-item{ + flex: 0 0 25%; + display: flex; + flex-direction: column; + align-items: center; + margin-bottom: 10px; + .fm-listview-subitem-content{ + display: flex; + flex-direction: column; + align-items: center; + } + .menu-list-item-icon{ + width: 46px; + height: 46px; + margin-bottom: 6px; + line-height: 46px; + text-align: center; + color: #fff; + border-radius: 16px; + background-color: #40A9FF; + .fm-icon{ + font-size: 26px; + } + } + .menu-list-item-text{ + text-align: center; + line-height: 20px; + font-size: 14px; + color: #666; + } + } + } +} +.fm-tmpl-list-footer{ + display: flex; + flex-direction: row; + align-items: center; + height: 54px; + padding: 0 16px; + background: #fff; + box-shadow: 0 -2px 8px 0 rgba(81,120,159,0.12); + .fm-tmpl-list-footer-btn{ + flex: 1; + text-align: center; + } +} +.fm-demo-listview-tabs{ + display: flex; + flex-direction: column; + height: 100%; + .fm-tab-bar{ + flex-shrink: 0; + } + .fm-tabs-content,.fm-tab-pane,.fm-listview-wrapper{ + display: flex; + flex-direction: column; + flex: 1 1 0; + overflow: hidden; + } + .fm-listview-wrapper .van-pull-refresh__track{ + display: flex; + flex-direction: column; + flex: 1 1 0; + } +} diff --git a/packages/mobile-ui-vue/demos/listview/index.vue b/packages/mobile-ui-vue/demos/listview/index.vue new file mode 100644 index 00000000000..3039e4edf3d --- /dev/null +++ b/packages/mobile-ui-vue/demos/listview/index.vue @@ -0,0 +1,75 @@ + + + diff --git a/packages/mobile-ui-vue/demos/navbar/index.html b/packages/mobile-ui-vue/demos/navbar/index.html new file mode 100644 index 00000000000..98b30ddfd53 --- /dev/null +++ b/packages/mobile-ui-vue/demos/navbar/index.html @@ -0,0 +1,30 @@ +
+

基础用法

+
+ + + + +
+

多个按钮

+
+ + + + diff --git a/packages/mobile-ui-vue/demos/navbar/index.js b/packages/mobile-ui-vue/demos/navbar/index.js new file mode 100644 index 00000000000..c60b33312df --- /dev/null +++ b/packages/mobile-ui-vue/demos/navbar/index.js @@ -0,0 +1,11 @@ +export default { + name: 'navbar-demo', + methods: { + leftClick(e) { + console.log(e); + }, + rightClick(e) { + console.log(e); + } + } +}; diff --git a/packages/mobile-ui-vue/demos/navbar/index.scss b/packages/mobile-ui-vue/demos/navbar/index.scss new file mode 100644 index 00000000000..959491b332b --- /dev/null +++ b/packages/mobile-ui-vue/demos/navbar/index.scss @@ -0,0 +1,8 @@ +.fm-navbar-tmpl-text { + padding-left: 10px; + margin-left: 6px; + &:first-child { + padding-left: 0; + margin-left: 0; + } +} diff --git a/packages/mobile-ui-vue/demos/navbar/index.vue b/packages/mobile-ui-vue/demos/navbar/index.vue new file mode 100644 index 00000000000..406c2ce9e4b --- /dev/null +++ b/packages/mobile-ui-vue/demos/navbar/index.vue @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/mobile-ui-vue/demos/popup/index.vue b/packages/mobile-ui-vue/demos/popup/index.vue new file mode 100644 index 00000000000..40f44f4c9e5 --- /dev/null +++ b/packages/mobile-ui-vue/demos/popup/index.vue @@ -0,0 +1,73 @@ + + + + diff --git a/packages/mobile-ui-vue/docs/.vitepress/config.ts b/packages/mobile-ui-vue/docs/.vitepress/config.ts new file mode 100644 index 00000000000..6c1cca6b3e2 --- /dev/null +++ b/packages/mobile-ui-vue/docs/.vitepress/config.ts @@ -0,0 +1,33 @@ +import { defineConfig, HeadConfig } from 'vitepress'; + +const head: HeadConfig[] = [ + ['link', { rel: 'icon', type: 'image/svg+xml', href: '/assets/logo.svg' }], +]; + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: "Farris Design Mobile", + description: "Farris Design Mobile By Vue3", + head, + themeConfig: { + // https://vitepress.dev/reference/default-theme-config + nav: [ + { text: '设计原则', link: '/' }, + { text: '组件', link: '/markdown-examples' } + ], + + sidebar: [ + { + text: 'Examples', + items: [ + { text: 'Markdown Examples', link: '/markdown-examples' }, + { text: 'Runtime API Examples', link: '/api-examples' } + ] + } + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/vuejs/vitepress' } + ] + } +}) diff --git a/packages/mobile-ui-vue/docs/.vitepress/theme/index.ts b/packages/mobile-ui-vue/docs/.vitepress/theme/index.ts new file mode 100644 index 00000000000..907eafdd9b4 --- /dev/null +++ b/packages/mobile-ui-vue/docs/.vitepress/theme/index.ts @@ -0,0 +1,9 @@ +import FarrisMobile from '../../../components'; +import DefaultTheme from 'vitepress/theme'; + +export default { + ...DefaultTheme, + enhanceApp({ app }) { + app.use(FarrisMobile); + } +}; diff --git a/packages/mobile-ui-vue/docs/api-examples.md b/packages/mobile-ui-vue/docs/api-examples.md new file mode 100644 index 00000000000..6bd8bb5c170 --- /dev/null +++ b/packages/mobile-ui-vue/docs/api-examples.md @@ -0,0 +1,49 @@ +--- +outline: deep +--- + +# Runtime API Examples + +This page demonstrates usage of some of the runtime APIs provided by VitePress. + +The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files: + +```md + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+``` + + + +## Results + +### Theme Data +
{{ theme }}
+ +### Page Data +
{{ page }}
+ +### Page Frontmatter +
{{ frontmatter }}
+ +## More + +Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). diff --git a/packages/mobile-ui-vue/docs/assets/farris_design_dark.png b/packages/mobile-ui-vue/docs/assets/farris_design_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cba7c29f887f770cd577967304b719edd743d488 GIT binary patch literal 33761 zcmZsDby!>7@^wpTftCWntw4jjyF+j*4#gq36?Z7^5&{H@wP{(U(n>&-2&z^}rlLLuscs}3HMEOjunf!3;cFBg$kCOb|R16Cbr{z^= z>DN8t531S*c)g#kmo*7Y+~#I90a};wrq6x?U%v{H#Rm~4P{@w*4|aC;99};9ZT-@# z@Gg*?d9z$$Ihx6D&~PZc<6mLecH5?>S-~!*`&gZBRPE~u7kx$iq6M7`WwV%B{!O5? z+3z0~HBJs@jVC9ef(|ZTCA2nyViZ`Y$VmV1Wm@tp1a*G!{HKnjQ>`XY6N@Tb<| zW;-sFtjgjz=03cC42_J`CSzR5F2F`$3dmWCwgVmD{l57ZkRrhdnN$!q_DOA(=2IRmeYGkNv@ zO~F$fB#d<~gCZ5pdCY%Bi;hf-SV5-bQ#EE#h&Y8&e|-n=@bXH`uDMz?G2C0Dqh~fU z#M1U*{}s)t_-BkJuU}UUf#q)_WK)=fbhEjvWbGZEKbH*j$@{q?+-Ps8Kdfh6ie$d< zi+eNkVw{03fl%TvKYo%Tx%1~#*wtw@g4(gSh}nS27gD1=y|Kw=uxse!qJQE7JCnE!+1g_Ed`Xona??;nP; zDPaB1s#MI%@LecQP4wvNp@FarBt<}3M44E97x=6h&-M*DxZayq6NdaCqNP+$^W5+m zW=it?lKXJaxkwmu`{U+vBl71zYz@>6eu|=UHirj;Rt;g$6f1;<)+SPV!pt?w-w{&a z3jVE4*=#=LUfsOt`)&l4AOJK9o;7u!rk7r9T_g`6i4`PUu`W@#rA!+D{smn8}Lm4J#M#)d~6wV;^+vjlZsP1`PF55{Pt0(!ID(>UbC zFWT)wV_slOL&m2mxSX(*jlbVIvMO+nbMaq@0yXf=Yy=|=HU42Ml&vo68MkXT0gTAT zoXLoRZVjCGokA9<$N*H@g;rfunaKE`jiILa78@Ph)jSS%k~tp5!HdluXHr-fHudwi z|KJjO98Q{owK*JXdh#Rekq9jQ8nKcC$)Dd8$ed=oP{SQFLKs@T`kJ#Vi7@uNj^R5T z59}R?cR5LRV%&VPz!^-Mvq97$PqRWXk9b-SBe8wpV>Jx(V56*8yW)=FdGA*Cp}qP8 zBL8-3+M#z%?|AxyJtrR@Ayp}{#<#z@77vS%6rR{6PA0`i*B*qf>Zp@`v=^Q-Q=ZIL zN1}~A5x6`s>M9igW^K`DJz$hJ3u%XYU>Su9w}-(M{HT3u*!|*7M2Rzfz5VCu8tl4f z5!${pQ|%j8?qzqquQ++r(J6(NZztY0G=JjA+Xryfn9`9QCZO2zn4p)X1akFG$xaFO8Lk)U;Nc zU*;BNo3nJ(0?ca6D7*5n5Rrl;(VBW*mC*vPcrff0de!N;^K8t1!-I))TvY$Lwx819 zHU?6+bp2Vb{+&l0@b&skkFJhM5PB7qRa>J2LbhWLO!8E6;3eOc?2k~Par>z1g5n9! z-d9|}Eou&3CXv=GF(^nt;(qT|?UA!_Ve!Y}5EM|e3ZFm}X31r4fQgb^Yu>hNgkJUL zM|5$>|AVoxP+i{!{`sM5#!lxA4nG}ha$gN6K42vlz zY8nL7F9}`~)#A}YvS)|zv*xu2k%um)zdn}Xu}qyv52W%tnda5I^5-~Dm*-n+l7HSP z_uJT0BBPnxQTM5DP_}h>X*>5Y&>89>>=50u%=hrmZ1=P%#@``NQts9XzcSD$D=} z#rBh)r7n=ENKfLzc!r704MeQLijY=SlQyOMg6zBE>_k0g5&Pg+PX^Nl;SOCNxwT$-mlqLP>TGE7Wxq`CKH|{hbcS!g$+3+8 z*Hf-RU%tZmi|>{}oh&lA6NAXo;C`)8Y%hQ$Kzu^UC~`{2cU`j7cxNH-iTHtLigLbk zuMojsw|#opL~S%>q6r5j^3D529`U+S4R>dxL2{YWsZnKnQC3aLD??&|rD-ENg7MpA z%gn@73#6o;#__(>1t?Ira`s8&Nv3?Y-jBA`kQ;=#a!4N>Xu`bKEmC#N|I3oN(nKGz8J*V+7j z)cLDoQ&R^U@0T|07et`7KOlYd{ak0m7XNigviwVL09eelp7It~(f3hhL+W8rKON?Q ztKOrIPu;|~#C;smAObI+2}fqWHMCennPD0O$^sm(KIvnX;|V+~APX9#`a!Xvy~2O- zQ!)$h89I|1B742-B(cqPZQ=~AbN=ro00UH_xbO{fUGx9{KAM>L-;{tN5!3RJoOpp|gs1XLMJ2h4n!Z zUIIYr`W!gMexkUUG__AIZ{Jr}>#w3SA6ghz3a`v1k_WXWiI`aYAS|IT4W{h1Gm+}_ORvVC9MXNchvvL-~U2iIb~-&cXSBf^F$8_9;NQ$#3b}J z$!(PxJDEInIJyp z&?sxi80I%W*&%e3i(r7t0r?9Tt1I~koMb4!ou{UMO+Z1x)f#yXA`|?mpVS?<-?6H;QhU>@)!F)nLud* zWIav~Y9v%KF**Rsr{#TL@fP?tDF^<^f{D8zhm0o3h)|t}?U7YV4Z#Qf(#ERWiUc5u zk6OOEo{Cax^GrV5QqgyDU-nq_?AAEJISpPFl zG$maIr|eXdtv=Lm5Z0?AAWtpoqzdPt?&9H>`hn<)z-yagS*@zVE&F>^EYvgPz^8Gg zJwUeDKi(VCh^|m$0 zf$hX3P_e%DQqP9sn7h>n2k_V0(q&dTu7fTG8jGxUyY0CTiEX-!V*nv)Ak9mER_3fI zy1U%J8ASzf?9+w%zC33QZdvK++fsK@C{uGa}F2H1Z z0?A&b5b?~9gCf{L%+Mh(~HA+dvjo}mKisx?>crDJ~nTu9YN5I^NI@0 z+ept2y2U;(GT_^mP_Wfrz8%Tp*&|C5$^W*&a}BS!8R98myTG);?0Ob}rhWV8mw}Oo zO|H`i>o$i{hy9oTRH~i(lExqOf3OgNiz~|by0G+S?6al5mYUthOn8E3Er;(lRxEf9 zWmFjT2Uix=0-_k>fRBqJwo}|F1?iu6sP+8kbfbH6b*6xl5akeGyOAhAy@sG;8qWu1a{C7_*jp{N zn6SSZN2$rE$F895&z@nEb6W6jEe8;Gt#h~5fhq1?g91U(-Zy-v%!RLh$^FwYo?_g2 zjX}bj+v%bUQ;s4VKP1tabbgVVILazb>87l@PSz_I+c8%RjP!kTvb_Tu)+gq-7A@(3 z8s|;c*V)}S*CBCu6@=H5eB6hsfroA=+ABd8 z88Z{r_HSF8gP(1|n>@YA5Q<=RFuya7GsjlB?Sk~b^RaQA)MuBx&F^DM)m}(zJoO!0 zq+Ys<@k$gQ&;t90;~OPo2G9UKV!ik_8YV`#5w5%w{LgBFl>G6Gi1n=>j&P3?H&yEE=7whk0#qC z`Rs9YD^`YtiwpKuKv|zpAhs@|*uDO|ZGRT~n0gx%i)qU>Iu57%Pvu}B{&}#sEHRabQ1Mb+^^W@{y1Jk$S;JGFYedgl%S1AZYE<{wIcMI zX=8vu5VL5#Fb>0cq+LuD7h&*mtgAt|vO%_NwkzM&l`WZG9y;Ee9Of@+5&YK)?P=-D zm+tdt<^95D$`9`1!otj$_YOanW2qf~DW>7&$<2}2=)?>=<2o@xSV*LRI!&ufzZ~pD z!6W;e?;!+m8`g-tJ+~^zAMAhd-A|L+L&E$QGx0W}jcOnzVr&hgJhHJr7sCcW| zQrEW}>Yw!EQ-kIxpEYrx7Rw?WitnfUz!7(HN;4BRD)tOHY87q$87I;PjBqhi)wKaN z`7lBaU^3Jk=`-;g^PEr~xzwE5k157HtqCAt;7Vs&CiWftswD#w>s#bE zlTEuaCtWsep*^ly_Dh>xTSsq+Zd5kyIi3&pt*hvBd~ahx&96t-d3g>%Q;$foF;yUjkYRF2qXyT`iX~6mx@rU}2L!0p+wP5_M zIBy+n{9l|qL-d^HwI2IJ{7ld9$n7KTDVpgQfgDJ{(+UX;kh1vUx(;qrK!5;^brd%0 zPa!1Icw1=imaRojNt1}?)4ke~$geW_>QIyYM~BcLqRVVh#yNF88aw6YjHHQI&s7ad zBrZtBWy5Ae!#MbJ$50nvUsMkt09}Ssk> zsmg)-+S!6Km(@|KKykH*?qVBuu%Ti#Kn{E?zU2{iQnjavI%?J^V9KCyw_&l(YPjmk zy!@iZkNaO0Z_ z|5nA+$Y;1c?n6`jN9YY^ggk+rxTxFd1276v=|=0eYjg18Ax<{1VcYN?%j%M}iRgoU z%gqlw%JN__C;l8%D5R)%1lfAOUa|Jhn{N*md*~Aco{vf$&=DWXh%paJX}ETlY9Qa+ z^S~5F%u8V|_WHZ^sTq0vah$Ckemm&)^EKZ3C({kEJV^1DB?OSh(4guuIrH&3XLXAG zYlEGpY`YFqeG@vp7NLnY7!3U*Y~HJEZ~_NEHOr;?bR>7#E|aW z7h$6{vO#%EY0G?@r1DbC6Lp}2so8idnBjZae|Y{N%aY*5^8Iro3N|IwpOmBFkiGY& zDDPbg=^aAQkQaqzUh@lorje&$dyk|aM+e*h56dO4;#j~ih>0c`k_XacLvh~dv8$7W zeA7Y0aWm#F^}YUP5SGef@)JB-zuA9p-m#!Ex)G9&zsKGn%!p}tJ$}zaL8+(wnd8Jc zCpj{HLS91;S)Oaq)t<4d*T3nlzFjDD-EA?fBIUZxY_b88URDuCE$ZH6hF~?_!fnV$ zaaV^;j5)`rlI8#J2^qw?>IP>*&oYOh9SoVVG$#OqKrsX4*`D7u1Nm50!n?%b{uJY{ zkPfmaD>g{^na6mo%oI%~X;DA%1E~~BSmk2S%@e5-sRI?^$>n{rKy#ZZnNNeWXh~4U zQ`r5ymV3gR7CTje4>)y&gywp6+3m&?W&|Q^L*4s6>M6@!e@t7zA4)!8(HSVGYJX!= z(OW>&uaU8wA%-;DOUDm)g6QxV&4|qm@oG*4yr7RkpBEU2O=3UMdrv-pbHGn@mH`*- zZ)gRrz&)ZSN#EU1CPurjSiY{?{?`uJ3`w9Fk-uQa!dXBGuO0ghk+d<&TJ~$eEk4i` zpBif$52^6a)euicKY#VxaV=h`crG3ma#<6cmS~Ydhel4C>`H{j@lJk|)$}FLu^bJmv4BhXJx*A82-4V1)%7v9k!6t; z^5m$BD3qm3LG{yFk!nDY*D7jKg(n`BlKsaK>_3S{lzxjUBB0+<-i+=2Y~U&tuP?$a z_%i;~I0O;%0ENw?ynea=bRvwYk*^9ao)fP&srAF(iuNeOnV)bqh1!~qJQ^Bd&pQqs=yII+=3Da@;BU-LtOn=jYLc&tY3Q~7aG8!#ba6G_?zqU){-gJ-h0XuLwztppXrFXmW`goIqTNNGVp zeHNg?Y@a{PN9lxGXY)M81-?PGj=HLfRyWMlx`kA!QG`glm5UGCdNxi|O7@*bUn_^D z06)rg{Z&@(xHUlh=9pLY{ieWOA6PAJ!b_N&_$#YWMMEeFmXR5x>X% zA6`T^=p8pqZ0tGm&CkfZ7xnEf3(#v=NGhp4NjpAu^7*cpdBcT z#hy%huBC6sP&1vy%((yj&u^B4?hIhQnAlcPyc0{)E4l|9qNB)2fueh?Yl`MK^U}I* z08h?}llVQ1_;t&-cC!*^Sh42`{ZtEK2Q`r81VdqFWfj#sJpO%!L(yEaCsZ>ak!puK z`z}XKRlFCd?`OP`*c0BqfHRbzAW1LnOFzS=LD~TSpuOL(QOoD=a0$jI0yK+r%Q=Nq3EypvSiFOfkA!#|unMo~pznzh4W=b+`Fd2`lc zE?+eERynOulX3X{2@y$4FHLdpg>eeUEf0fTDeKaAm+{E_+WhtPYSq+Wp_DMKnmo!? zVy5~qA7Et>?}9=_e(*Z`$s0q92mP@iB~TCXhzC=PG3;p6YqNJNb*1=m3;S5`(+s&q z3>(%q8B(hy##Y7|rBM4TFS6>F2#Oq5Zh!H|8M`O^tOGkws**4UUqocldElwx#xeUj zA4Y7?-`v(_T5%|N9B`mSlLIWtnn*R51kjNJ>9Kw{3Z$$nfD}ZT+EEZzAWX;<9#a3* zqvgMZ>JTdWZR;{Ef>g``)trNaVzTo&Ojgd2QLV%Y)pjn6E}R|Rp1z=nM!>v+)6qss z318Y;pS4a_8#EdXO8y_~>Ow#YnHPGRQd z1!`zmGBzYJt(o=368442!_dJ%C!&Hky<)X)g0H|5Q;;4>`d^9Gf*Q&9RfOxiOt4nm z`@};PWWM^dKxzrrs&M>cuVz{|Veg0J2o=2Vt{=iG@5%gSA}{YT?n107*jS#>6TNfg zmFVP_!;bYm>a*~>39_%>G|5Jm&(9HSCd)l}#8>{Uq`pAOMsyTmrAKot<#;F1*>@~*_hA1%k%(^tYx{6wbosA}Y22CrsdtV0u#6>q7^->E_CJ$`2~CHB z&;H!nN2F>kJ!!kADr~#~_1J7=94UQV5;+x4kQZIA7{_7lT-~dY-Oh2H7_XS2D5D{H zk@J$;AeVa))_$XIH^nYY>t#{$01g?G5;$mj&DePP!0C3dSo zNBQhS?&1BkLg-9gaQbQXH`|N<+b;48ds?i7x! z;r6|T8vmzDA|n0_ctL?U$~*OlAj6%KTfkjkr!WPApH|(!_V@&mJxh_N{FNTwzmo2m z)H-j)HV4ZK*l;eprkPeVFM^~&8Kui^+EgC(V;=g8i;m&XkG`iV>aiwVY{px^}B$=5Xe~Eo@^`T2V z>3@Ls^%3iH#C>Gx+4gm};7xFDmw}0q@obz)UlPqY;|JeH^^b<{^v=OA$ZA&M3g4glRZc2+y2C>6AnR zLx?)*E&CQ&uhz1q*1q?oH43i|RQppogl(%bQTPwa7Zn}nKgt!`r~_>O=fseA#1qs^ z;C>$Q`e1LAOlf0rLm=UwJeaa0yhHF2t_B&sTg-`1I(ddep2;Lw7U z)})B+81c@dljQVni<`1`znm@gWOpoj2v$TI4FwncTOgN~A=v{vpCA-Z7%!it(Q3Ym*$$)%hw{ z_d#bT3YM@1_mEA{Gbq-*aRXUl3rjUd&gzO@D%>Hi%IEu&%(8fiL^>uA#;aTn&=aoO ze_$dV^VaZA(tP&ZaCjBr-I4k&BV_xsa~D5zubmMX#wx;hTao~CXz)bJ35VK2KwGvO z3=>X%B+hS~>CJxsF)fic+4r_b-0J8V2;A`YtPIE0;UHqupIZKY$b2l^>T^C$eqdn` zCdzdDC)@Jro%`ZOYdkX53Y{<8wnMCl{Ob)JIB~QZm?|z$gsw5 zA&kesfzH${5SRQhMOj4YBT2@~<)uTT_6_^X7$*O-0!e$}3jYbpkbFN*6bn3(jKwaq8AKiZJcDSR5IFBS3Jzm-@)qxh=8?FI&Mfj#3l(NR$s-mwQ zVF@27FJ&gk9i9G=Hk&)rxMv^q`t9`YoUR7zxnawxm(nH0c@35yM5AHb@7@BA;`X+s zY>W@ooE6-PJ;Cp7nYa6*hRt!e@!^FtDZ;06=Su7C-C1kGrGC(U6#TN9ZQixIbDpWt z2)cR-XoHPOZgOt++T|(+J)7T&X2|5s4&3Hc&KX0m+Y`=9`|iKK4*+F5X#)eKMnNn{ z>q0n|9y2V)`KyG!?-2~3)6azz>zS5U3uftzJE_wrSB&sl<(1&rdyM9OzQ~d7w68dy zn*{M@PO_p0A`fab%eIFPY)0LtoPspx;UYCD9Ky4k-qPThPo6EDU!61hI@3M$wr<+8 zxE+0T=a_l#&cD4R$#8pCs`Vg+enKJ9>$DA)w?BJ3RI_JgYcDsayAgGunmvUNOq(TjVyotC*^NmAF62@u;zy(73z6+R-UPjQU;bN{{Yif410 zmv7p)`4-^eZ2yEVN33p>aXN2@UTnq|TIVXr)#`56JxJ zOy}P^D`_!l(0nT3lri%XQFGAYwJcV<{>WW6UzQ^bt=AVP$OEDXz zPTX37(#PIR-B(x$cVz!@tqIuI4#~JzCF^_MzX9h0=~Y2pTCH=tc7Eh)U)}en{EQ-Q z^7={p4o~IJOJPgD3g9Z<)!YGBRjE-+wRr5OavfUz&IUrucP6F(l$^( zVG~KLbg{9>D2szc1gVW1E9HVj_#UGkaj=vqXqe6%gQn>(6}RmY;{=|M-%om$TLoYo z5Kw+en0s&RTR z(qvf@hoH-*?X$e!KAi9pzPX_lj|2w*+eQgml=RhjKYq@xCS#T$Bni)9l;VZP*<#6<5&IqLJUwP2HrOPfO9+IP9`c6{aT(r3M? z5$l{wC#v1jN6Xq21URRU@7w$z6;p|;8YF8uzT!21#F<3PRQ~ntbfSaeruvuyWF&H) zV;415Y$RfBTJOP{s53#k?)Tc6;{e!FA??jx=!5Ow5v?y#3aiSj3%%n;;rsktKeYAb zgzd}-;*w7=o={Y}{`;EeI2k>roVD;of{H1G96|#C)~9h1K^PWWm-nqX?@Jk%s*e{~ zj1JYSe(~H6SA9Ius)Vr$`v$dcu2yQyna(nJEDKk=uB_=jTiVV9;2K%yMCyZddL9wG z>NIT1i&oklT2Q;Vpx6V(mvxMDt!o?h4k~&d0~6zR7WQJZy9@=YS^GU6b^A{d59}v{ zb8Z}ir}~O00V(QHCCO~P6IawCS(|;sERCBxHnAKnSieWwco6TZMc(b;U4I1Nz7sl< zdXU&BD4kz8x`mfIs&vGYhMcVhziwEjhu^#udKc(wCRHP^c3MoA?7F)PQ`9c!SSiC& z(uxN)H_2BzS0?MZ=gF-ak_9Sy>?hYmrqBb7xfQc5jzB4jMXl9cajm1m)S#}#HH z=hQ>dTFT!FnFSgS!mYZ54z{dKci-Upv42l4-eCe7WlOP8hYR~)H4YJI2%`$NEA;VU zPHgo^MU*F|#^q?v;zX9XY`FUIxY_H&OJ~ZBfZ-G$+jcc4s&W(@A3=(KKlrVylGz|k z6F5+sDNnsN(^Z;NAlkk9WRN2Df?4ES}YoF^J1K=Zq*#JTWDOO95h*+G- z_9NjR=AnmivKrPtSDGx=KWyI^MZx2S;@c1QT$~Oi)fK&CPc#*%c4{eg1c!;3r{Crs zU94>0%2&)B-T)SerSs;9#HG}EvGS2MBNW=^crDQzT5)zs zaYN~sRJ^@=U$yqrUDmyX zzGP`Z@CM?cWJaNr?GZ5*u60@!9J){KW^va_g0!j``WjU#>BK(Ac6&u?QR&nV;xg=K ztWXxCOvF`I`qD-+H?3E-TRN~mN!@D|k>uDr5Hey)s~272JA4uxf(BVo^W+o_)PIa{ zJrzlF536w0>ktzGqSt)$4W%-gI*JV13LiX?yw9?1K$x}OV2Qq&2&p0;%9WM4j5>GC z&m(`;90fmKjWJUtF`HEb4;d>kzr&6;&A%Kd6V*QzYf|u7i@%oAA@lMMzRZ9wp%}O@GJ5? z8dED$$>Lnrj)chAPiJzmyQ$pQ7i&(AT+~y4vEv9F;_=c;r~x0rB)rjSP07?59jE)Q z*vX6RAKnfh7DvI?@_+R>-}3LpHDH57ihBn=*qz!rSTc1;x8%k+y8*dkO%ONkAWDq?M(1`%*c1+u)*X+;Mnr~ zOv6Bllu7G#uv4@MNhOQiwEWSVTc!$G%a_PHZ(D*3j>^XM&9!kT+g6*^__Vm*w_z=` zFk-YE!803$QiOb@dLA$zAE)nY1uw3|g-8b*rLZmiOh|n=P)DBE??8WSw|B2X<`izJ zvXdt%8r-a>g&kyb&k2gKbep9)_9&w;E=FwfX_HMD;^Y^SbzaOZN1P!{d z^E&`n4(U4w69vnJoN*8XtE(5)_o;CYO8{}9MBg+**NWdq$(}wcmqPB#Q%lEJ6$Y0A zBN#uf>q3M86Mjnf8naYs+0fOgTl%7;=(uxA2yOm-+OKWS4a?tL9=%joRh!d!L_+ku zT-MsTvcV6kGx5|U?54Tg40sven5x(8FP3x$lOdSbYUJJy-;}S^F{7;_TVtn{j_ z7Fx>In0!CE1~VS%UW`L|({lrrKH{&q&P*!BeE6dy8YM(S{)I3&_N9BS(;iAja#9_= zc_f))jPr4gni4kfM_jU7RLvShSF*WGrz}xF?MHat`xPCBZQmjgx`~$BpW&(aP619Rqps2|*iFby1iGJpO4fG0H*LVF zem6O2%W4FSVwKD}qet@f-zzHf#sV#u2-FsTGN$bYJ|%Y17dx9hS0;DX8`33O%Z5#p z!c`tXav1@Z7$e5_GOpXQF7ej`BN4kl9ne+U9?!^Dh<47%YQ_@x9Qn0a`sPX*;Vjrr zxEzHlP^0ix|7h160XHAdmfw}x1K$w*$X)?nU%M}+#VyWmG^S`%wu4m`{Wi-7+r6g` zL4&l9%7)*k_^d$Pxb{XVk;7v6R$Cnr;n!O4UIGLczIfE>GCMBRu-eV%&=M33k;gBQ zHvVp=_RxNBLSpE%8Ri_9&+nnubE{vT+yDTE%7JNdsF<75-bUfx+MdL=ChbqukaCml z4*rb6<+z5i#{M`?NOWfs`2sWo%0^X7+@-Xwv#QbPrICb78i|BL@Sct$#tGh@73q1# zzxV1f;t*)0HxTc7_HFfb1)rU^j1^y{;Q+!Va02UV6Pk_<~tM zFdjEGk+9X%h|^Q$463EEs+sFThY8N39>LG$kjqmFYzavXyL!X3koc2u#~mR}2as09CC8 zj+%F258u=B2HVeC2cR?NV;zXsdTLek7T?7P2Qq8R=x9b}^V_G(AFc_QmVH;Z(7D2$ z&D?bsS57(+=6kG-UUAGQ`K2J6m`{<`L+rheYN~cis>qOP)&B0pNeVwZd^M^O*YhuV z$+W}Tu~`}rj|pWMk%@ZLQJF(wvy3<`v)7;=XK*PO!XzQ0_%c7$%7z;U2Q%LWKrRUp zVh3-C2T{gudhdgFRFFl)KQ{l$opL6_@TdNx)9A}#nL*+DNeE|wWCDIpFPmI#ftN2b z#UJh49+mNoWte98t^Qfr5hK>09JwE^DGF#8QgFVf390Vfk-VkerW?+bDk6oi>JA9AylfC*dz9^eaqUpKwm z8_uYIeIc-Vq&KAl&FD@Dj=XPRsNatLN*ly*P3mOSr?u6U2@x=-O`lvht(*4Z8tI^(l zdEtxewc98^L;U!b`;Sd8+0Sp+ZOhR7YkpJAzON%k=cf75L~U~}B)0|O?PuU{!IQ*a zhIVDKUhi=HA;GivW{WB}Si!zyy6q^67em9oj41=^HtKN-WTXaL)jlwh?QX)yqq2tO z`veHXX7U00Tcpri`! zhhRlWu&zEPA21gzDx3`YA+)zqp}0l|WRmvOJ{vYC%cGTSg0(V1A%R+}cq_+aG)0g5 zZ0vp|r~1lFiL4Y*Y_{G>IaGe~YxEq<^0oxV>4w*Mey9iWtqJU8@rv@DTn?@eVRu+w zlr1ga?TMoh0;m(bjiM3-R7l%GF?ZNrDDL-He~Manag`*p2R#{ZD)BPSZYdDfiyoj| zL+I)%ax@@bJl%8(d^J`OVEG(5P3e>hVn) zqLn+)<=vD~`qv7ZQ(IO2j$#h)=!7}w{vIK5`ARIb?1lDA@VZ!5C;#3}S+oXh&shsWI zdvNin$ULAmkysb*kJy%s0U38Zx}Igpd0+n_1_~(0q|VzSjkTkyT|Xz*nybxrujx0Z zQ7S8>8)8KQ42YZt^TCbk6MtDy#k!wD>&xa36`E~Ye(zFW7C6PU5H;WAa7%rNv5I`g zjzP%;e&_sYU8*q54-*7m9dFq6RQa&slD)4Qmotvkw303`6 zJF3FJmn*v|AjYq{svT|wV(j(sxfrqJZ(pigTk>?1h?@*RjrhE?wCFxmM%WgH(|3wh z7F1_Y`S`X^kn%{1%w|dTk#I$Yp@qHtQPLAO!#ckpSki9J9NlZxk)eY^X|GgYKtDDV zycWDAM`xQ{XEVWjUI8Y()Zk84#1!S7>>zO-0(-BYwYg-}TkYZ?dm5Y@HWkOZ+CbUj z{>prt1pfr-$sv7tM z-5JekCmA?jKucdVLNzX2Kcc%9TjW1t1Mr#-hv~MIc{>quYVvaA8R~JHd@+GD0>~)A zHo@<}licpTKM%?<1Ee!vlOL`Y2-Wg8DLkCx4~ZnB^mJ*p{Y=rpuQ^{bk-ivLy`>J& zZ{DbOrT#j}0;7KFqT|nHwxj?^&!Uql0nE|X$USHY1ByU4#ywhW%6EW5?CYUC`2%pK zEIva4V>XM_K4~HD>W!ibl@hy}e-R70*@50|)M|BqieJaj2e~X+SS^-LiG1x!x5+<`xr4T=BRV7@B3LV8(BYu6Lyxuy^`qduh|6N%WNxK1nIB~P%d*w=W@XgIG zv0SUnaHLAxr;AsY>2Bxs%S?~=-6w1qI0XXyU@-m$hwJ0pSkZ81aRVY|U%*-Hc2x6HT4e21(R5gYUM)b(d0MkcF-gu3(kdy_u>MsHiL55w_Gt72F) z#t8r?Gvt7Lt!1>R3IRMuH33>Vqg=fA9H#4Tr{-|k+gI6pIx(ftdQU8X4WJH`HT1v* zTrWi$H2$LX>1EIwdS4Fi`Jev+$m3))MhTL} z$#=vWZ^$^n1ypRgI5+0LTQ9OZW<&sk<`2UkG~RnJSIFJp8KUe21^7kmrk`q-*{Pd} z!2*8}ai1}ktZ73{l$?w4Gd~!8(Bwa}Kn}EBjA%AdBFTg`lv?Nd5Q)ZaLp%0fb~ID% zhROq@+&V>eNo8#PDOm*>?(r0!W2ue7?j20cu{A^j2J zKw&JVJ;@1KtU>@?*qnKAxg7^&xMwhu(EH1=rCNb{!i54W_@Gr+r-nQM=(5y0OPU}tbU`&|+JCfsE%9t($*O^_l{fd`-w%{S9qSb~v zeZNM3?BNXu>D)l3)F(irg zaQ)!;i_S0T8LhD&+u@9~KtSiFTL$i#Qoz{j2dQJjpkKdgDB7HSflYhZvHq;UW}}@; zs->Tfd&KSp)8qCs=M982X{`sploKk`c#vt@xJ`nX7y_OTdgs9IH5N&Z04!Q#=?a)>1KT{qpS6<@(v+%zcp9`UF%z zU~(@IunsnDB{H!PvW*(W{21%sxJ0zBUSjh&8@4KJ&dIdaEj}2df7Z9h$NiuxM3y<& z`~@)ukot`7N0bV2%+D=(AvLOz_rk5ZxivlZKy@l0H8V{eW`C%b+l!-m+*!}Q!PL*NHx(SLMhy9!zLa%MZ-D$}y|{++4<~qqu~#3CeKOCD{;t1%3J@ zVtl+~8f@RZ41@Yj8n#|?b`7f9<9UqMT;XtqC*Yp&?q zJ&U4%l3CEn)5{B62&>O1G(~*e!7kG*YfY`nWS0zXhR%6qW0*FaTC_)dI#L|g>eGm2 z+;(b{-&j)Gy0XpgaNx1rs%TeYtos@_8}?(I+V%TJ6H6Z`(lNH6m|^_cv?kPOqp}|! z8kKaS!TPN*w`iV8jQ@pjtn6C=elyDS_>pY#`n6WvR>K;|h$W9mh8iYN?&k2n%6iMN zxPmBK6qf`iSVACpaCZ;x?lc5f(<*QHFt{%bf8NQ(IZO20Ww{w;iCS8z8ow;@#=X5WguI{hYmGxhvx5^F zF>kOUxIMhMbkYYq^lgQ+viL_B^I+CeVBxS0K_%^zV6b_j|7ficfKyR#?dZO}NN zfo&*Qud+HzMd5PU>G|-WXUp|mStK;A-+5mh|8%jc-;+AvZ#)5E3{64KsRY=C|J3PO zk;;bA5#UMAOw5#0BAaHn80Fy%iKZ zF_vHfZ-P~%bp8CfUc!oJIlgmxxUpCBzGB_nQQ#R1yVST+YKIDI9d(nRtKexnty?&> zUp1BjUzmH!cp5c+RAqxpXJrWwc>zA9Pe$eV_9uk*-!9GUN{izPHLW-Oz8^SFUAKly!=2DEpWTtVanK z7XKQ)K%SW%PLneqh*yO#lU*JL-i$ZI-sEmwICsvXCI+pjsc9?;g*C&GjCmg$k#Dp z(RkgPoL}li>5=GjXZwS|N+lRdWG*gbQRVcWtZ)zY998bGzs&D-^7hsk7&AQn$*;-D z#@%Up8Kv*ilX|>oLBU52AYo(Z&rcaE zU)}Qly{lgefCA6$Mg&{o;nG#^DzgW*#?v?!g+DD{=ZOtX2QD^ex#a9a!x}G^1NcOe zo;R3FpyagjXX{)JUEWbj(G(92jKGdJxl~?j#Hh3f+OS}UITeO|O2H|{r#h~+@|S?f zlq0>oo&MUr*~peg&zdtbe8tzOpU#)b!?D8}8{7s7cP~Qk_doS9X8=Rikw()?@AtLy z#hjgB_n*YGM7!l25ca0=u;!~CD}!6aWzn?VCpnY4ryhAy_7&#~3B|3$UEt;e344zP zdIXs80}hh7x2gev9kZ()xN*a|u2elKqb;>|NCVEe+VC9SDk7RPK0yfDk1f&6T=>kr zIBc+~`4)iraBIC3baE0Yk}daoRajqB)93?pY4qn(7WF_#Rfe_dN?N5XJ_WwDI zC4X4WoSv~zT7bwnzbCWVU(mpea-}Vh24*{R<^C-NvmTW&)ir%6mHYYBw5DiWDlg^y z(+S<_Q;p*CyiX;su<~Eh#_fLUL`n)#dCV*{tFigqmfR9U#;;9Qpxh@Ml{q0$iCow7 zsu8&wqo?b?bZ^Wk(}L8OnN%-}OnD>;JINHTP=_9uhkY)Hxy$j6O^sfuymZw3r#> z{%b0_+ncSA6`r}v_)281KZ<5#dj8owg)?j`5t+l8A%tG-b77M=NKJ+3+^AuMI}-h2 z7be$qT@BFm9N|e!xIX98@z~{xT7~b?gsKdmF*@zwb{^H+zZC#R2YB-O4 zC6Dj@%d%_4Co91!32rF1&;_=0{|P3c@OdCbrTZT zXSk-gm$Yji*3E~oqtqE&lRIokbG}!P>ikW}Ua~Qu!-VElwz)m&5?cHsQxT<}VICfe~3Ig`eGW@yrkHh4L z(hKe#e5^Dgj`@twJ(A@N6oyJJWDL2Mx$Lg#(osS*TWe_(sgEr-t)YZeq>EGDW=n_k z=k>9Dh7dcSWVHyVN1ez++KG72%Pza0%P4n` zU90Knd>+9v-C1$rUipd7tE2cqL%Vd%PjS`a_vYm0ceF#AdJ*|qIHHL)#D;bx;8pSJ zPwY>VyTc~8_p`ukeCox!=}tk#s(f4Q884-TSk6L zMb-t_@LJO+mR+3`bD{VjkHvt}UH2ClY)X41&cf^v2J9rPLrmo|QPLBeLcobR&k^1{ z={9KkZpX9POWr?6%zSnJqQnn}$5S7Zomu=aezF3}B9t6W@sXSM1C4jx=vNa{UB^kj zN{yO)mwJ%xul~mjXZF4!8Vwpf7Y*}?j6|k!BQdNKaG09#Zm$m00pY269pB$KMBf%_ zO`?k5o_9!MnH^w%Ct*-yO_rLjc&d_<05>ftR@Jq!cnw|v5%>Fa55Hml)Btqt5PO`f5ewKLYX+0OP~_eWfLtA9!PL{H)kdtyHo zc(7%D@Rpn5{op}&IYdC#W9Ne5=o+lOTV|kLy2d-<{UUjTsz8JoHa{rLOKpxxP^|YGToUKE&xckU0+~|J-=ep!)Sv6`4a88%U;nC*R)al8tXwwKn3Wc1=8d7qGlUDXWm^B>M zlv6*e_^zbo_^Awd`PC7oJdf5b<5q+@{883G6I@r8h$${(aGq?`^>Y2RW=yGpX;wYq z9dT(A$Gn4yHhxoVJ4zNo@vk*QBx}G%_?&xJF>cqaaWmYORrF1sYbqsqV>!X1v}Rw0 z$6YN{k!!#}37av8a`ZuaD3>H8&qWvCd*p`YNk!8e;oa(C8cc7P=tWpz$?bx<=;C;@g6`4R8|U+6vS6O_}Gs@jBfIDM!6iF!$vb(HkI@&)ScxH z)FQ0!S#I?HF=6@?9pqhL{yLZM19e599r*3(IraH24CK;Vv`(9Pa4tXl;2;nvoX&71 znKxkpZ8qCCHg*Xy?Ab-Bk3r8V4I!I+M$FLnOkUFtWiXq@kpq&#J4oX3R8s)DJXN*W4f)C3e|4`Kx>okE z>YTo}4_a+KdAnW+zD_d0tuCN#a&HPaMY*(c0+s%Ba}Ke5J!#k%s`yV!r^nzbROif= z72=)UBKqx76}x>+)vBwJnz3jL+tsLmRnf#oaE}HXeUEi8;o;*dq0>_+RzB&8HnACf z8kc>PNM^O|jnV873Oky;vB$$M7K<+&wo_@zq81LVeKAkaijGc^q5Ui}a z=sHc4$A>jFaUae5Hv>)L7!#qnDqS+!!O5omOuB0{sH70a?(-DBGrJzd z_S(#meNqEdd3CxpCtg0;#dY4lV5PJ=sd17* zcQ{>T!&9Zu%Y)xC^aeZ3AKzrtpCNn8@u@rF=Ijqb=dW&wS5KT>bTz8E;8*mkd}i$k zW}UFA$$=a-!js3%b85xE<4n12T#zuJ`T(`d1X+r}zIU@RY%kx25e)GDsC_5rp zxwrEqILGbyPGzqyNl;`m0jXUMY+!RPZ2qfaNfUP^)7(=2S0mA{mkhVLu5lp^&`U}z z1W=6`T849(_}cv-a?VN8Nv-A7{c5puG?Fm~Xtb`^!cp9ui2O|&^BmT>Gb`bj7HkIP za$fY<&iLSVsxdu6r#tamo#(<$?8+pJscZq+g*!reSShZ?nL!C0h;t+4L#GN=<&)=Q z;@=f57~8`4JBBWkOfFgM;t7$b17(GMHt0&b$&G+8*|Y#@!bG6?1##=6h%wxy7ZvWO z%=tqhUt!(HWQW{Z^ zB!rN^jDf!pzq}}${PW+Zpt!WDAKh~!SC!Rs;sqzmd?c1KiOb;_j~(=nQH(Uv98#tX z*{9UtO->)yGssr$7$BxHk8rqBR^qib0X9et$woNbCl+dgKi~CZ?`M9m@Jiju40m-* zy5^QXveflD?b{Gba~Lq$Je_Fx(m~oV?Wxt))4t5(do8Gkqy^QR_Tfi`>Is3?=VpZU zF#H#2ls0mOcLj=&(Y@fyJkNgNeg{0>Fz$`*70Rsn#;=~QqhWP}LSbssg~Z?LqEQYZ zd|EoZW%8B7Mydd3jW-+Yc;@ww3sni1&_^T_Yp9&an8c-wmwLA?_IhaT%*lK#HuhLL z-6PI5JPw36^E`FrT#G$f{)^LT4*b*Abu+1p^=@&R0j{Tb*90{Eeiavan-oNzf71R% z#&G6$50(65cHut+v6GUIc*>b~3R-tNtQSM8otqcT4chy!d$^fr9cD^;kn|Qe-Xe&c zu}&0P7PQ82&GOHn&6(SQh{=(VAfmGVC<(2DN5mQn;Yq}qUOZ0fngwOJ&w0(g>p*27 zxX<8qB2-XC#cg!3r8?KdBhz&umsI%jN=Bw_MyzL}-gSi|5 zowbN-MoEhS?x7D4+|w~Z3k}M!pyr=$`JM@k+0$i1y3{}<)v*==JwKW+0BO}A13c*^ zL4brQr<1wxV%CTPwJzw({^mXo?dXf9lBoiaLQJLcKD$IYeKOiE15gMIElDB8gsy7cd_pJ|c=f{gK#SMz93nEXu1 z8jcR@*Y*ZRJurRK2vd9kdCWs1#+zI-#Dwy<i*kQS4khxgHUb=w?9|E(@J@H+R!N+N)?nS=8ONdSJpBS^#(1g7v{_L2rJy` zglP^~3+KUP+7kfWybw*+dRAjRx2DXCIiK%V4|`NM^CVyMGq4Ch8I96wOP1K?awk(i z${%Ha;?)@yr)!C93){k__NH-i?ckb2}$HrEjT7?edBuEgg^#d;sp}i__s-gkk-j4>MFC97_aqhhys&>U56uGAP{xU z#DXn6Opq0>lPk6ms(@=Fzf`F4^pX1P>nhngU+^Zq-9^MRO5tgIEJeF|^<04*O{}Eb zc2_;k?8T)gE3>8Zrk9!_=qRW49kTMRtx=+{p49^o)|vit9``0$zV<71!n1C{y?fIA zt%_i>Q1R+dW4glpr`1Y z8$BWK+Z{;WQL+lKR8gcFCgFHat0CJK|vVAS9D~K-*nF_ zdwp|FDo>J;e`$^u6}uv6U<<_mwXf7X@~L?fZ>BnIp|CS-A9L!YhKPCrVu_h@ha-w9 za8k14537cI$oQwJ>nmG(L{AcQ<=a(XBkO#N=yO23MHh#@!ZoAQUVC5d;w+{h3~_o26>Yt<21?Em(PIyo#-EY^4%rvdAV%VBJUde;I2}Ov(CM zFjn*-zdT7FhGk79-sGc&4HT(+j7y!Szocy3hQGaXww>AJL=cW3bIGn}X;UsNgdJg4 z7ahOY-ily`y=VYLi%?5JrHH4F1D`l=pclFNQ70FjD zpWb4{&;1n=UrhQQ?BgrY{ZwzxI~oi+y?Ur0!o2bbPT|OK>CRp-Ugbtv(_>Hc;on9? zt$2V7dF)4V6e2jDr803_COjPC{4I<)BWS85<|dvKWE*i)ZySBB7WSs@tUEs@vfaT4 z*GV!Z@x-{mIB4nPFut+JpQ^OcrRvZ!8K|}WU^A?eP4ep}CxP%2S+01qI5j;$cyQ#6 z5AFoVF#Lco)~FC#M-ow3`sKvC67SGHPIFCOyIb~5Z}{*K*LqxE3gG;i-iRHl3*@YS z(QYU?kYsY4fX$%3BpJHn{Hv7cyNl%dfcs&FfQIFZ-GgpKJ2vY>QB5sD8MaKE&_MWS zm1TnHEz#4(i>tEF`B<<{!kr$SBP;7Q@=4sOq&b#@`@)6jOftl4+=&$Xb{OJWH%Wg2 zV3HGlNW7w94yf6tKZqmeK_3UJt{3>1cuwboup9#)w4WpE>J zWj7d>r~!wt=L|E*_xjL8wYA~K;IP(lWsdU`%`Bze$tALr>S<_j^psXVbW^|LU^6%b zqFEwJJ}oj!fLZk#3SrF(zYP+v6`$GRg;&|KEj!xr&iH!0pN>`Y);L8x(7!C(x=xP# zLTB_POm32}@7K2Fq}@M2wdr-m25Y73K1qT;Y1t}pLE`_#Gc$IMOxFKQpNE-=Aq|4h8;6wAYNJJ7;lw59i@2)~NJ-1VOAR(YOdr0ECm{2UJu+Rh z=Y`2NBsVZr*jV{G&d~CN^APFUqV`%^G84>syQ%^vKob_l*uHOX{fex%bo8;Ky!epP zwo{xC%C_>BQKY;rSehO+oW9Y+EOH}~5FPIpsR_3k9d>l5*On6`&R3C=T4-4jseumq z4Xr16G$;mOMrd1d%0ca;y9mZsU%DA@PlXsZFv&HJB02D&zea=}YCW4|pYGyN?gTOJ z*0fSq&wN-Omyt>#YrYv1vhkEKaWK*3vF&>V{jbAjK&Piymhb$a@ z?h((+zYO72$%7PiZ*&-ELn79NOR8?dt?#P5AGma_?_`FS)FA24kKRTkn~=Jv{^^-C z4(?i>k)Hh32nS-efhi@Y#?J8b!|$Sdu_i3t`JLqURO|L@2g0ZqmuVNykBEZpx zd%u;u7*R|h=kj@~K8R=BQBV)-rz#Z1nHs{ohq(7bxVJleZWm+p^=xCl#4Zhp3OniX z7FB`Se5_cZJG5B0zto2QLVvO}Ki!47{`RApD&_)u!Urpti%rg|5iz{QsPU;(4q5)5 zsoM!1BDj|uRx$QZTu4!5g^}FoMVqNAJ<0JX6^F8NLaUEN<#JC-9qxyb=|FgFBI)OE zFl|ab=qV%G)W$2^GIu4h=_{kJ;?4EZxHaNMwPQl>xWchj`I=9gx3y}S&R+?6tP1MH zzVL2G+*20xFG_#ZqoA)Z@s-bXWe82c=#R7=A0)_CmohcHm$x%l>hMa#Xl^un!k1Ca zJX?2YTMsLY=Xgw1Y<3u!@`m{9j!r#?O=BAdF$$;0KaJi4jztxI6x`6j9VVv4WRy!( zC^1);ubFi5z(NVP95;#Jgkk*E#oZIDL`7=z^d-VFm0ZYZh2k;>PO?{~ z(($J|TEz&eO_CNo!}~|;Os@*S2#s+{bNv_}xt%1AT_!~4_2UmIB+0=gI*Y^^|J>@H zOC{zw==YaU7*aaS1da8DT6l91WtJb9G88)QN`l?fgT2M0^JT^xO+$Q0UFpMR!$265 zg(o(oB||hvO-*>dBM4?FdN}BUEMu-@tifa5ccJ9GX0=go=FIi;-H#k;rbq7@DNXgG zKR(%^sl?nGUIxf7wJyofT33)PRLtoj$fo`QO(f9S~XmdGgJ6HmOe@j=n}Y4?x)JIMrbiElK^v1g4D=1!^| z!yg$X$FnLue2qe*aoK3}_uCWy4!*2*nRcOu511pL_c+$Fy4M%*)LFd)a+t_c#Vu8Z z(^=dc*x#x05nQKA{o$;He`NG1#Otr+uV__^y{yJ6bUy!r0Gc%zNI;gaRXv|JjSudR zMgmt0s+VYKXiP_Z-w`9>HS$~|RwHY?*RKlk1vi{Ah|pTpW4v^dn=GLP#^-j>Zp*Ze2E3ivPnt+Dp+6R0xfWS=hJOsD=zc!1U~ELKY0u3p za^8AYPii-o|8kiSA>9FPG?plU=fk_OCxzBHLo4zrNI;Va1{EsgAL5u54$nX3^Ob&x z|F9Vlv+@n8xrXsgJV(65mL5{F*l4ZM{52@JEMzQ|KAEvaH2#P6TheZ-2Gt}5*e+R>2mLpND)~um;)D5YI zw-#SHii)+nKNJgP?EME!3~C0V?cPr__QZfhf9-DQ$!ciY=PAAi0g5tRwt)A2o!nnN zD9}|NzxW$A$8T7y)*eTo(rj@$&R?UtXeFT2ut)cbapI(<$OWg}JjZ2GKjSzAczHga zzap?|jhRm}>ygv2xeI#bt>dv6L5U1bZPcwwe^w~nUp5-ick~Rs+DU^iq2+N?hxA9L z$rU44kWTgyO)Xn>#xMUKtMoM50D=&F>?c=+Cm(N8QZ*N1o5HtCPP_K9YG$bC>*rtW z+dkKbnbYckM7L&g6k9uuFemcBFwLmT6aeDHn~4!Mn|+l2eGonHQ8wEs66Bd3*25!dA?!I4SO zq*f=F*G!FG5FI%KNZB!ZHp!4?Q%YV;L$#?4qZIf~v^LZ3%O;+VNla?)H_U_R4^yQ9 z^aRQ_7=mm(Ywk8C(7?yrAb6DblzLvh$3Q;vOYqVwGfjUfc=}R1*}bMurZNB+wP(G% z74ey3AyJsrP^<@c;fpmP^PZqCRH***g;+A!+j9^3TRxtDG{5+soY@nGnpV=c`3JGu(&!Q4|EvZ<)Lo|>2V^$pM zvEhwosG?i$j;9mY<~IcWp0Svv3P>7BSmk$eE|3t6CvSmzzcYue**z&#iEGZrei_-Y zs;v?COsgo~(P4?DQRSL%LTa);7L?Q-HBr(%lImTaOP$KdtC(ZLg~pu}WE`J}A`Lkk zul+6o=$-U0WBe_|{yP4CjZ24OsUZd(QfIs@D__drD70DH)D`1axB1q~E1?A9CrPx4 zvzK23KAalJTVIyN52}}g^5nAd*3T~0qU>@z=f)VF#PyX#xPD_x^(bi`js-t(dR>Ys zo-Rx~XaPT>oni%aQyN+Q%e8|K0@gm@X*+C&*fHW73w(g@(&DZ(BOKi&|M~tjMWtY3 zseCP4-R$CtOzAYP)ocWQe{VC_F}On{(bqT~0IA>#3uyWhUr_D+AJ^bk!cC{Ib)Dpg ztVfBP#&~v)qjK2SVc-n@OZVZau)za*wIU1Nh-XWZbQx@374E)b0rB}IbHI7a87}JR zopyPRS&h%bt=nIU1 zk8n0mEa}ZwpN{CLmVpCX#kiHb$}L}utlZ#!)K-h{HJ}*YYEIh47eS4&P~OEHU5z&Q zF1}RT+w1-+cog%&B=9fBJ-~3WspIE*?!Hj{AqmsBXkr)N<0Z8b*jHB~1AgeHrM&RZ ztf!PUU{{2%V4i5jcc5mxMEA{rVYcdFH&y(Pc(6fgdur9)xo7(BnUWtBIiN)VKk%9t z!$28aTQ1a{>wkeb>R;VZ+8&8Bx- zFr`&FouGtjzA{>Rtex#0k9A@_cI9;{G+Lw#Y;kZ-wJ&5t)w`s>>`MJ^LD<$8N^TZl znoiptp2#4RUCm zn%6Yr?UV{I;PWv)<^(|gX@sFN~Z~01l>U=3Xbq*4CD)4gq(yW%TrG>jF{4F;9 zKl3&wW8aUAD&RIBiK4almrQa$;_`i|f#0mj@0xtEIE*@^St%!j+4w@{NoFV>RE*-+ z?O1;OSsqVb3%fHT-1cjqaPpM%+pp!e$~EOWp`ZN0 zQm*OJ>??3Z^*1uicT%Ow<(lG7NWPng3EhhRfch_)aiQ3fSX{5Hh-(J@SVtu@;>^@R zvW)2~yDI?9@wja&=C=4%&7KiYq}HY+E=C$(n{%Ms^nrFMHBy-CjnX2tuW}u z38(g-ofW8l(fn`W>R@=6ZRfpql*k{3p~gt*^o(cRQdrt|Q2$k;Duf0eN}G`J_j~uO zjWwsUe9j4Bt932!A<&6bJHQd&-d(|AdxF#afZtQ+Gv5=4MepdW` zZWwmhQEIZ!9Voe_g=R3cyMiY=U4DAW`)bhVLR`Kpuq?KAh)JIF+}0Pm68ykLTB-}}{+e#n z?8I}&Y}`TGeW7Mjis<{8b^p0QZuTT;Gv7=5EBrAvnvd))1)kk)##@xYrr)^}p54js zul^8R8^Y%_ft81Z2Fb8V^$`alcdLP`TRZnz0_{-p%fF#HXdv4!LLYFwj@%c#3Yh*d zdx@JFBe=65<9fssA6)u87`FGvdFxH=WR-Or2cvQ7l^JI;v)(*4FQsA<20%NqYpgvs z(?AhA`Uz<}k+#FJUa}B}$YryL#YIBG&vsdl8x9MexZ8)RacwGx99bWuMI%NmgCjca zvf2Q8H8!`hZyeSXTEW>Z%Ty7~s>!xyTC=}4HxBM1lD+o{t*`Z?9Cr$}qvhI0B)uW| zzRgX<$vw{bP0OwJ8(ALAD_bvbN}DW_>FX%O(vQ$aUIcG;cPwW{nrSFGA1#<^X+lE0 zvs#Sf3I$H{%K*zT3JZ~Y&|~bi&p?&X{nRdxmyg5??ZUr-RHx>Gjz3AGjKMC$Z;y)? zbbz`3=Mt_xYg;DKNilKN?m*(GPTXbe8Dx!`(FvZ7Z1B;I0phSvI2i=;w{vsw4!ER0 z=yXqQ`WxMo{m)(caM_t9XB`vloWhSIYDhWu8Ke#3NctySkPSgc=f~v3uqfC-F1gC=9HG4=D|; zq5Ap+aHOr^ca`DVE@H3e~b_S4T_ zau|*&*(7oetB>s5PU=~ydZGX?ye01oyWu*NOk=&Cv!MfWKs+0yv$^eHjiCDW;;oA_ zmbbZq09J??*cK|J?|Rdy*W9ZNMckMexseL9Pgvxh$Hjl-7Qd752}uz8jVa2NG5w7X z&L4#0_2IU?LN|8k04-*OB93PMBY1XDQ)z=g0$-tk+wNAq+`A@0^ZNt>97r&ClGo*x z18Fl>Tgwg0LC)4UNdGVEgQ)53wR241M*FZH);hbZP`%Ve#XEc1ot4JA=BFo7ieZga z74wy=(t7U5Ta&b&;fWD9@{Cz_Dn*UxNz&NJO8_4dd$C;3$FLX7;XVu(cfPx~z-PR* zn}M_VVFIl6Ur&;Iz%UY*H;=v5;o_r>u;;hCNuj0ca)DjwS{4>ci3m=ZIypqe$}as! zAZr;K4k~-F8?nush$uBhT#5AQZ$CI714Up#0NH01Sa>_&BeL~aY7CwR&+yuj9hko509p>{;^21b6qYv6aqso<0 zlE&1o_45n=Scg9d*Kjz`<;gMc`X1WroVT5GzBCm6cIQTHYIfUIG_{cV;Su!Zfm8f~ zcEyWg>~>4YY1H`##iqU+F*2oWkY=|{|Gr^BH!F`vShH`Kp93B35yd}>B)iYL6`sg? zqDVi2obtpdrDgj01T`M)w9!NPTzIi5X$I#Cqwc6?ieBnj4eRhw6}lVxD@ocSbFw;p z%nl6=QuSryf(ebpIMKi%q_5XKs}^zxWlP4UgU};w?dU{G77fzVll+gYg&FgTCG_FY zW^(){S~x|Zna-_H%8ruPNc=0kTYtjy(8YW&lHIh=i_DYGKD}7BwJgR3mfBhL?ZM-M zr9n8Q3D59dLk?-7uHE0Lu7gg8H7hnjsm*8YO3D${AW&W6ppU_xnfS5?f9ng4Vx;oK5mBt*M_L=zBVC}rU zR693jA=i&oiM6MJlT{hhsMzzF61E6s$46Kk!SI(1r3^f!QGPuw^Vo2OyzIOxIr%=i zFoeiMmA0zF_0zQVUbOLuMKgbRy1XA5mwHQtOpzbH=byCM{S^(p=ITyKHFu^MM?8F> z?1scwofny(=tGM8k)sP-W+@VwIVdR+!>BB}Sg-RU?1XoWlv)w`i$R! z6AXe1t)gvp$emUeHz^~Admot=C$e8Ud{y+CWR(!?;D=!jle@DNORb=OiUNPEQ#rGv z>3gSEfqRg-K-ftu#p6MuMmGwc$_Y(U5s!SeJEEQQhI9EW)o$LAgrv*sEs|b|8D#Jzpy}41}PK%Y^S? ze_%!fMP~T*J-YYcvB_AAt8=wS3Cu=HN%F5i1|8L2BZhQJJ$hs0@=_rNWtW3b8q53! zWNhJ*mw;ku_q?n~C1{Ag7+EmB#G8&noMhB0&G^RF%&IYftBjj*416P`B@`d}Jjf!R zJaVFR8C_;S5C>+QR8P&zkHtP6OX79dcrX-Ng+ntyT5IhURKQIQc%oZW&rY{Ejche` z;?0U+@8!Mj32H^NEpz<+nXQawx_N^=Z+nu!uf_2~AM++!8+EMO_cJ+El?o1IhXs;; zV%_OHYwB20`cuI`$0n%UPkF|T!6s@oY|!^`ol<&;Ai(*OR^L8NhSmV_2YSA=c~kWl5jW^rMjk4 zj+78iLT;ygPEKT-dUx}ag2UP`3eHAb;Ks*DO)M!KejGX7*pvY_0&R~B^2nnksg`VO zJCuS>G?{eA2sW~I2nQ<#mumV=?Y9c%(eHw*)LOb0@!^eOoF?33P|L1vaKZyYWjE4L zvsE7q0iPhO0g`>SbfO_u414%#NJRfG%VQMmWcEbRv;9AHL^1F!kcxE>uP5M2AvKPq zFrO4L)QO=Q?(?HMFGaN;>Ir4uwyOr4;F&wY6<~cN?_Z6{O_So{Ou=R63ucRUx9ULs z^%*9rEO^pj<(*3_a8-F}h83vHP0kQrgr)R7h?1K!Z|M&>c2+FPOwgc>B~kh_eMJrJ z{=~JMtLbT3Cq#CMsxD=!HBE`1RM1q%n`~CSds+BY=7w`I_c3{e{v4}kYegdyiwE<- zm?i}!M}A8jGZjG%#~g(cwH!w0$L}(l2o!Cw+sVXi`z)I%Cw0j`xs59b?UcL6Rl-B+ zrJpXCa=gAhJg{k-^V)nqhJWjMO8B>a^YH)-fqvjOZp!J%&PadZa+j@no*5EP zD3^-%rGUNdvdjZwkF@?FEMUQI-9kj^5e&P&_Z4x`ul$ZJx=t(#L~}ss2-P-r(BiN@ zT4JcS7k4H}{;gG6<=Kb>zrb&flZOL=H))g-d)vh5UMQ5b3hKSY9rC^T{pw$yLVH40 zpOBXT^GLN_?5z-Rqy@h2l#btnxBekOCJ={RM0~-m0TkCW7EO@_gU%Hnf8C_;tQ?c zY?yMN2n`PcM7nwSp!9jM;JB>g6K5l-$r~mB9=iZDQ z-JQr6OBRAI_bsH=D6$O*N=r2oVHiawxfA_Yc_uR$0WfyRR0OK>yLf7h)|T36l!_tBQ=tej8z4+jRST{_`i{7Wq9U$3csKh{E~tkG~w1yRIh-3gsJ9 zwdfe|Q+T$rGtY_bhgq}eS>|^9__k?{B5g#jb8b{T8H5)M;HEBxUcZn}uk_PRHdM+E z;O(uyTbg+<-ZuTha7?AJJ@Bt}k?1pr5U+1SJ%~FPg^{;X8uJz5wi~doNM}*~7cUP) z8jNHi*P`i%@gbW8bp;QR_atL-U$_GXD6`Of5cr(NfdX1Ef?kaKB*cczQT}{W3%Lgk zpxPj$de}KbF4ynH6j&I4ts;7DV{ww1yP$X#@$u(--+~6yzM#^ZVTxH6^&Qu^1qBL7 z4dW&(9rU;rr^D$GRon4hmvk+3tu?Pbrp-&eQxHuK}b<=9ykeFmdUkF_tN96G!X>;}weBO}ifowl5J&xKqx zy+pnYzHV2%Z==XAh}Y(KwT46v{vCs6%qjI`zFZg-{^tSZ^GQSTX7y; zoG0}qvZudd8VGgK-$D5jH~V)UoX~Brc<#1+T1b9Zk|_9t=ma`}gpNU16oPo1f_OW5~M+(u@U_Or4*L zG{n7*1@UI!l>K@unJBAl<}+;?hQ6uqeCLn70CVFxws*OWg?ChoeafQ1>n)T<^(#Vd zj3}k7OmP2@J)Kl-H;gHYO-_9$Q5_~~43Bvwe4Vj4L|i)mn`?|tIQ}zULw@lyi^L(a zgU8>)q$;#k&?GQYQY!SK2==LLjIrG2qD1YK!smh!56xGyKl z409XSEiX>HeuEe5zoNK4`(oJ!$xhdax(B1k{IH6my`zawQr$^p_9wed`XoubO!*Tc zU}YGV*4g=7nx$gzC74a5qUxiw{qyDD*27cxujOdYY?k6>HB#M{xXlf|ROyY7`{gh5 z*s{P77`E^oWp7JMQ*)En!8^-rmEh+R-M|~kZ0h;rfpQleqinY5q)7%EpnK7-^0`JD z1GYste)0Zv_gTvyYfyO8RpB;KQ;(qIwkWsfsE3n@O)Bi9%z9-v{1Lg=CwKa3H8z0P zA&g-Bda~$ciXa*Z+~>P;G7M0L1v`AQ(Ywh>19aeS{6r6L|NIn6LpJv}pNkF#>9qt( z`3I%`Q=7CCEN)5n&tdItt2D^p{louh+-DqSzkkQ&(JYiikwdCaC>Nrp$;Zb2#w0 zY+?oCN{K0KLCf|b@Eg7>j13Nle)}U<77}lLMs`OlHm72-7v;h&hTi7hLlw8%L=?BF zp;D*pSXMnSI5r#|ih+`c6B#YVZpU=%EKB2lL@e;;d5B1@7bn{R_Ip0C&DY*nvLEgB z`_XRR7ed=zWnN5Mu#RXHbKd?SG*?BXkAd(_fLs$n$N2lT8D^+YKc8Ln?j6ZzUl&+7 zlC4%Iy0}f9iT`Z17cC8z{U_3Yis&+f*`AvZp1IZ*QV@_hE7_3L&tAEm|6~6D{Wkxv zvLc9tA~U}&T*-Ji{$~1`d6RkE=z%oSc%Mv->5Y{>jR*{TF!mum9JSm1-zxth%li*Z z-w7Ao0;M>zzdP&^7{LeW2}IWyrX}|0_SFM>4&fUY;cxk0C9xs@q3(YP^CLK; zP?%*)hryL7B?|zpr`KoknA4@fxjFcE!e=j#+vZ``e6jfNy_}{&ThsWa7~Z6T2>C^R ziinskG=?QRac9N;-&_7qF*iA|pyn6^i8CFxH%Vsl(v8FjgpBj}Uct06&QT6xk`Gd`1>gtR0T6LbQsC{R2KF~y)6`;+#d?2JH z%&j-%j2ABbf9rrIVFLCc_~Mg_qn}o+F-zeWEmvixIM{Tye|f?DuX1a=YU6PuBUXJq4&_)+vxZ@P8(-R$Xa zJEH!lv)|2}cZ!zhbr3Ld{{7piH4gf1ls6hNyfrRo&`tVJ>{h}`tzXiV=YvI-URu@%!}a>Db( z;c@f-KLFkvLi+@dQm1A${i|2Vd$x8c+yxcR)-$*NJ)sO^ALvI1J?H<7A2kygvO7iR z4WzqV-SC`!P)tTDc`wPS4uZGpm1A!IG0Xq7dT*mCjEW00x-hH&zzB}yTk`<^PduR? z7!&_(6#j=c{>Et26mBT3=;{;IWO+IRy1Q%tTgfzkAtRVS*FOK`5tEia_B-n4P9OX) zY5(DdDt5p7nNN48y%l+@C7YN}Y}!kpkNUI!OCBuybSRoMivLuAUEbWC0G>V)M^o4T z?i4ILi#L%7;RGCguVgK9k{Q3#jrTun7K=wVefu#%3GX(qmCXO?%p+R(Fshf5CDlA4 zyx@VKhAeoiq9wlYr+)xjG~@2~baHy(Xxc%^(j|cZ8P5K6YD03`*4@3ub#E2d2 l0)L&^1LVlZ7mbi!N&Vq%f@hizUtr!p83{%4>K{J?{trDmbL;>B literal 0 HcmV?d00001 diff --git a/packages/mobile-ui-vue/docs/assets/farris_design_light.png b/packages/mobile-ui-vue/docs/assets/farris_design_light.png new file mode 100644 index 0000000000000000000000000000000000000000..bdce3482e283bec8e6f0a8ed55c4890ae70d2bbb GIT binary patch literal 80262 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 + + + + + + + + Farris Mobile + + + +
+ + + + + diff --git a/packages/mobile-ui-vue/package.json b/packages/mobile-ui-vue/package.json new file mode 100644 index 00000000000..aaa577caa56 --- /dev/null +++ b/packages/mobile-ui-vue/package.json @@ -0,0 +1,63 @@ +{ + "name": "@farris/mobile-ui-vue", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vue-tsc && vite build", + "preview": "vite preview", + "docs:dev": "vitepress dev docs", + "docs:build": "vitepress build docs", + "docs:preview": "vitepress preview docs" + }, + "dependencies": { + "lodash": "^4.17.21", + "lodash-es": "^4.17.20", + "vite-plugin-dts": "^2.1.0", + "vue": "^3.2.37", + "dayjs": "~1.11.10" + }, + "devDependencies": { + "@babel/parser": "^7.19.0", + "@babel/preset-env": "^7.19.0", + "@babel/preset-typescript": "^7.18.0", + "@babel/traverse": "^7.19.0", + "@commitlint/cli": "^17.1.0", + "@commitlint/config-conventional": "^17.1.0", + "@testing-library/vue": "^7.0.0", + "@types/chalk": "^2.2.0", + "@types/commander": "^2.12.2", + "@types/jest": "^26.0.24", + "@types/lodash.debounce": "^4.0.7", + "@types/ora": "^3.2.0", + "@typescript-eslint/eslint-plugin": "^5.37.0", + "@typescript-eslint/parser": "^5.37.0", + "@vitejs/plugin-vue": "^4.2.3", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/babel-plugin-jsx": "^1.1.1", + "@vue/compiler-sfc": "^3.2.0", + "@vue/test-utils": "^2.0.0", + "@vuedx/typecheck": "^0.7.5", + "@vuedx/typescript-plugin-vue": "^0.7.5", + "babel-jest": "^29.0.3", + "chalk": "^5.0.0", + "commander": "^9.4.0", + "conventional-changelog-cli": "^2.2.2", + "happy-dom": "^8.9.0", + "inquirer": "^9.1.1", + "jest": "^29.0.0", + "ora": "^6.1.2", + "patch-vue-directive-ssr": "^0.0.1", + "sass": "^1.32.2", + "shelljs": "^0.8.4", + "typescript": "^4.6.4", + "vite": "^4.4.1", + "vite-plugin-md": "^0.20.0", + "vite-svg-loader": "^4.0.0", + "vitepress": "1.0.0-alpha.10", + "vitepress-theme-demoblock": "1.4.2", + "vitest": "^0.29.2", + "vue-router": "^4.3.0", + "vue-tsc": "^1.2.0" + } +} diff --git a/packages/mobile-ui-vue/public/assets/demo/images/city.jpg b/packages/mobile-ui-vue/public/assets/demo/images/city.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6492a83d5633b6205518b7ac6e58eb27b33096ee GIT binary patch literal 200976 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

g zX}D`=@QrDvpHs5A+?ML0LZETmdxF1Sa%r*6nb z-@;45NU>^(zL)?N-W!0UteUVuaDuL07*92q0belmEqjzK44oo}<278NbmTyq9x$jd zWk`W>kG^5q(Y?3X;H;YZ%HPC45J^`;YvjTU&=i>~(6|k z3@y6%ZnjmHdjA0DE6-)U(1Y-V!wypiFu5o#uo*y_Uqnl-dki=G{l}yqmLX;X`Xf-J zqcN(B&4+Qn=A5eVlvM?BqOuGb7fX-($bXBNmarbyB;VgZghm^7;CE-=z}pT*z+UBm z{?>4XZ(wT}CRQ{th0Ipi5E!1zcrd;tMS+y5S)&JOlpzL2^u~6LTI;BSsoh`1({`nP z7%VQ*)zX=*B|3a5e4szC0wbnP9YlM$9?U7+TUD9)L%EIX7{qZKPF3PtSoD^uo<_Q-);nEr8NsfaLpAX5aih*psk zMb{Z{m&yD;sN$j)z`9Z+R08=yV!L#iRng>XZHye04FDFu8~U9@q#bnbfl!we=se@^ zkLFR%0F26g)Z(;sjn=mR0CK$)s@jFyN2-;izkmBrR2y7;Kv3)A65j_WInB#bDlQGK zH`YMaWK$*-ngOdUtBG$5QYc>8NeaF7D}uTsh{GmxuRXS-;Zgd!BHB!RxPd~+v)LqG zt*T4W^49ziF@uLAkM=W|@A-|dc`s0+^#N@Ya6Sn2DmX!r>9+8|DA*w*@;jn0EXvLB zQ+U_@umz3uuW4wnfqxSDWL*QlsQR=gdRB7IVu6J%Uz1>^6KhDGNtlM_X3qCF8KQW8H-f!mPU{(r_r!ufVB&$u^r>9jFu&N-jHuuuLNkNub>^P_K0}W6%A?wzE zP(v=yM%u<5JE+q}{nVrTV{YIZ?w_4y$a9HzSr_^xa;-foit+sVgDxkRYurMGc|jv! zOKX@7D2MY&D^yB)(O>Q@hWZiMYLYX+#GS?u#eV^GYt^w$zUo9S z8}23(fTcvUs9GHK;$EO3kS#$(v+l?f8}4TBVV-F{NOOLpd}(&4f0YE065#ea�@> zsYa1{>sJ!(i%%7d-G7ntOViKlFBq#9(*FR~8*4@Gqn2GxS8!oA?NqwdCuP}ye&Q*z z!o8*C7E+42iKTB!G}kYgcdv&RC6=fPUABj|n_eFh7HT(6%y8<*`jDTn>VzR={dxG`(Xp0y+Y#ssq zN)(cUfxCe75^q~6q@x%Bi%sJr)$|8t19#rB{rj0!CHbU|jb9E8T<~1fZf@<3EEJWi zgtcbBMv|EK(c8q;0p&}^#0(%7DLEeJEH`0hA^20d5u*WL1-k6U1Z#1@gob8p)hzp^ z743U8HB3373D!Pa8A|hj6p5tFta`vzEibP#mV`Nc6yr9b8@>zvpfsc@9bJ;hK*0PpbqBvpd70<{{Ua8Dl)FO<~mGR=iCC4)yK;cyJ{J!b^b<*p8#L~03zufoAa?2 zi(Edca5`x;TXzt%_5ddJklY@UsBlkw%NU*l{2%SY-K*xc58}v(cM7c!8GPJ10)aA` z?SJ@ZRaBw@xcP%^_;lN!lKn*&d{q{|e@q2EPT3FVh8^|7ofQ0neX#g6(d!L+%7>dZ zG!(co6MF$xlwFRpZf3f&Y8)zlVwD=TQg#Pi$J^)TR-^?>_P`_-D~oJ?DhN0;dAy0= zp%f#O^3_DT{!FYFoXm2Se6^;*ZVTzRi)RR{sDoowaGuIQ0f3 z*PO^C);Ag1L#yDrs5YQW)8zH332qn(xCaV9tDLUN*fl}%#0VukfHlXW$IeP%4E3J` z!6vG>SPynH2wMDy{{V=j8M&;w3!S}(ccViotn{$|03x$irugS&De}gPr#Qk`yaLvm zalb63vra+Hp36bEQY1D~7xR!a3J4rw-(Xf0rK_xoE1+X#H}y!iwFU7&590pjE0F^1 zT;9xLxoE7a3jx#+ZN{Va&6Y~?Q8iG&uJS2mD{BM~$`RGztO_V@Y9cB^&+1dvMMA&$ zrYSe}LcU0!8UwqNTzHRug+$^IPte54@5ud|strd@W!=-o< z@pXgp$9Wpup9OlggOiu&Sgj*A*1QVbpS$0s%+?5^M zYVVDR+iz7N;GejV7812H{EE$mp|AigIT+~`fJ&4t>?D@z>qOu?uiUF`-LKGd60Ia^ z{zvX8Zb`176>OBl;-f#_w*}wCJ@$#J5WFL-?alCa_=R|m0G+RrC`QSQXmj#qAr63{ zhvknXTa}j!tT44bj6n+~(bW+3RhmkaCrvp!fB6-=*7aQn#Z;xlELNOT^(-zWl(?<_ z$1O3UEr!q30D-S6jD0JX)KM+7BG=T~P>7*X^cELrQpGC2ij|9iD7ESLhw~BFnygQM zvOla7(9w?Iu}Bba>4GqO-6d$BxG6^YXczf4aM}s6&r*=!Qox~j{KAPxpp8^lQkQ`M zye3r@C9D&7hC*%JL;6O8Osja5sb@4PK2GjafK)(&9bc=I@ K<{4ka5zD%bh?U2R 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 b`t=Ip#vecOm0#c#ad`UE)!$ok{+swewbJ_~ literal 0 HcmV?d00001 diff --git a/packages/mobile-ui-vue/public/assets/demo/images/ice.jpg b/packages/mobile-ui-vue/public/assets/demo/images/ice.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcea2da900aa25757c19405b7e586dae20b2f33a GIT binary patch literal 112150 zcmb5Vi8ou@{|2m8uCW(2RM6H~Vz{PI>10X}Ly3eYXiX7`p(Tl4TD`5J=9&@}a}Y$N zDng^K7Bx$V5T!aALxkr%=%A#e*Cx7vyDRq-7Q56%`fb6%-CD zsVX1-{mAbM3Mxlcj;N_?XlNW(*3{Be2dJuRsQ=$22mbF(DJeN=X*u=Z6@FL$|Be3* zNGQulx*rOYJfJLbQ2BtQ@`3+7lhBrsI4F7G7bN~a9F&wea7aq}H<@3o*8eg8FaAIF zz^~!|$Nq0oLP7G^gOa4uFKT~X{8!CGSlc9{TyMx|1-8`fq0kv>j(7Ed#$k%|7;tJ! zlrP7zcCE__2uEj^MDVi&5OaZ z+UlW0@61LDZJ4a!GCSu12rbG4BPX%Y5(Q=(f-HG$tDxRZ5em>dgr^}G#@&H7vWOO> zO6{}Ut9lOM14g%0Y!O6<=JwR%1xXEPm6yG_{+2Q_>e(x_GKH<;dbi zFFF~`pm8X`SVp|XTsBg*7>L)@fJf&v$9v&<0!(+HI)aRZ&oY2`6C@ngY{7hV+-+5- z7#LKa=1fDU6?t~R4v|PlLmOx&kTK-6Cp?l)r*#3Oi}V&ZofOBsC;L-kK<1sm6DqAR ztyZ9D1XNhc=tfGwZ{hRd43Guc;!+QHJZ2Zhb#Xe-^$ilP&hTyeF zq;#lZtvGo6VS~k|bc~W*z8cb9Q4-z=>r4w^$_bR_$e_}qI^!9$*<3!&>5e~8hS{N> zrt9YhRe?&+jpns-3Rz?uyM6)E?~bED$o9ZUA+4B>7I@$s^66x*3bo{Dpqr(|Tsj9h zE;Y$cS`De-NF(RwR8gw-f!1{p+9S;)=li-3ME@*beRt@spENDFRXo zelv$NY)n?YKr)?q7NdD{dVaPt(QP4W&VZ7D$o_QOt2XLcnE#mG(x*muH5seoMvb=EyK8h-2#FaL@Nl!3Ww(M zA%aON&uI5jba6DxmEK|m1zDL|KAcv8Iyr&2WPr5?xvL5Z%NjtcUGPnZ zo3=`{hSp=FdKe`>&bNWB5LrK@2d`*y((F+^1OiW|jRVSIwX?y63fV|Txk@umsB1_Z zbn~!PFVa+YK;1#Mb&T8jOWuO(Rh7EZgO`E}MeZM&>352bwC36d)Olzb;NS5q3qq0g zvaSZh_*(p8$Fs<>bQ`6Hj-@$-q7&G7uj$24?wDts+9fRY&tB1;M7dXa8PK#s7IS84 zsiWboH%U)-aeQSx3E7?zEn5)iJnx&+s9jo(4$aXka|g(SEaMrBX4)k*l~Jc+Txadf zKuhX*g8(Y|5rP6$AM^XKxN%yNrO_c5b^h*Xz1 zi}0LV>ih;^eO$t|GL6e%fl1`Fq4RW9F>dyTr3`o+|=GRS{vVJrYj=K9bKFdy3%x) zK)XO2^G-mspV@4dy_z*j-LBn`7H)JT+SLGPDKV#!_oIfw$e92IN+AOS{O+53hUr#i z<_Ndj?r*$}tLHQ1^4Z8?MJ$MT@<4{wN{>}0k*(qeMF)lnq^>2zoNGI!70!kcBN0;7?M zu84hUhC0b^?nsVkM$V$MXlCSk@VKzd~_pJ zT99}z6}|g@xh5@9C8S9IaAP$jM8z9Xd}PdS!CBA96aq0UZOHMS<~i~ZqMH$4pO{&8 z+d1;xTwGOVwxf%~$|G^5do7lY3@+~c>F6%Ox(~l|A`WZr>59CE8mhahidY$mYREqq zBIjuP&LjigFL1}#8!C}?J+N?$#jUi=(3fg$QbPNQy4#HbNg-Hm?&XTdQ>@*Q-YD_y z4pPIb7;_Hdor8zvEY-yBBqVlV_}v;}!nm&WUiP-+`DbET|prJ}oqfXjGS; z%;M)g0Dt4pXR z^oEwQ(E72?Lo9vJqu^#bSC1i$ie|X+v*xPs6b;`qo;g4t+V$yH!_EKGQ)N{5y`@eTDUv%#T zQg7Y2LGb*HAcE!&S?3+ASS?Ld6MQyUt#-tiyAt%q-JAJs*VmZ}69J{?%axilo|xz$$*7;0<`*H!2(r7*@oT?$zcRT4L;Z+2Hp zZuEC56?&+1qt_c+a;52O8O;~bVs197l(9+%ektvzQJJwh83HNwWv4&*m1rP<(efz0 zN1cAu>wEQom+$ZQ23u5e#YuhjTi-`oK<-EqMkQY-MCa&?td<&#@lXa@H%WK|@l$iD zuAKaYVT2y^`X{p|1l-{u6FFxVQsbD7QD{C3$Z2M|5 zcGa3bUta#gr>r#6&$<*EQ{4rQw>zACeI-j^VZOHWyU}QmlBo|vD@Z-pWPwCI0BWsggwm%(!z*h!|%}=NDeakbv2=OF>U+)-FBJsMs2zl$Tp2^*wyQC;i6o zsy`0l2OkHg!z^7r5fDT(1QWX*R)4zDFA}@BMR;#s&C_Gj+0N4+)DVY4&f)#hia@ms zpkImE@jYM@i|)X45~|cNIAh?6Y4;&-j7eCVWDa}Y1-!BR5Q}t=#c4uNK`{ZOtKh*E z7@h9#aU!0DvNbRp-%z*Cwx;7sK2;Ak^s-Z-U$_^X-h|r%P1jJPFMwy+KdFf_!VCk)!wA zgw!l8?)p9YqPHP#ja=A*wb+7K)Fx_Er=y3g@rUw?i)?{i~z$}@u_i$w3=W50Xs zS7NYP2rF#i=rzzjz_@yLG;;AH^ZNvT(X%qe<4y%bCRejmJ&RcJ>}sv(ob{_LsE$T# z7LMeNaDW^R_U>*np^9Sa%bKc)geIeF_nA4jIWE>?0Ho@c#(MYlG9Mo{70lgWwjfXf zd;r#97BRu22?_NEmcG9}mo^p;ng&bsR^V&X*CuE&xlCd{%u>rUeNx~54z*-_`TE0Y z=U;Klbty>N`#CcAb`SgDSr)+C0zXNTX&4b-`kzELi5M=LfgtW!@kSer1e3HQR5Q-{ zmNiSsi@CA47;`fv?+}ta94F_Mlwf19d3X$Wusv(8@F}?Uq`tGgi?_N@<(3bLC0hEB z(BR%<)q|7Q&mZ^NQ0mN9wFxBhsZ|c2K^jkOY-%GzMia+1jdU80Gzk&yJ znOe`LQ84=_r@w!TLa5*ZfAflR8f_HF8d8hW=c}0<#^J;PH+0s)Xq}`7=F{BC`-N|` z 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

o#knZ$WW1F~=q4z~7(G@6Cf)Q_X0U2veG9 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%0Au%0dmWqQFoSC~jxdMbnPB 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 z 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 literal 0 HcmV?d00001 diff --git a/packages/mobile-ui-vue/public/assets/demo/images/leaf.jpg b/packages/mobile-ui-vue/public/assets/demo/images/leaf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc29595bfd3b90d4f89db8dcbde45531cf1663dc GIT binary patch literal 17407 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 literal 0 HcmV?d00001 diff --git a/packages/mobile-ui-vue/public/assets/demo/images/sand.jpg b/packages/mobile-ui-vue/public/assets/demo/images/sand.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f7738e95de45de8bce0b3dff7096be4d2be09854 GIT binary patch literal 62220 zcmbTd2|SeF`!{~ijAiVDv2SDFWj82|5ksLFyU0%VEqi2XNMh_|t86idNVXzktZ5Sx zC3{g4QIhh%N1yNVdtR^S`TzgVbYA1?+~+>`Iq&Pb-q&@`x#wW&U=Bc>G%_&)AP@*( z4E_TS7MSf!3=Ev{7N?C&Obx*c0KjZ)>Ju0QMF2oRU|6UH4vVt0KZBxw20#G@fDTXr z09W_(!Dg05Rsi@hF*HD(2OCl4|9rkr0$@)7@Ji7bk3#*Y{{NH2?j9T(1^^H|*jmlQ z^SnDK6G7QOGAx){{}q&xZhll5N<)=H!2yCYFI7JGS5`P|^H;`DWsiVB53mh&%)uT3 z9#okE%Bd0Io}dgf1?7|oAJ0fo9tUL!|L_1GP~HV)WPqpZc>thcrq+jfx_g7NGAJ{L zT3Hx?@=*YQGoSk}+3mmNFwZD(oB&`D6dWDubIv;qCF3rOQqk5%ql`Tx{XN6N6!EU^ zey*V&D1)GYVAsHC0Qfs+>RkW_6pyjFg#gf&3;?{-|EZHG1pqc80JJ{;ulaCO?ZrDR zELi8rk;uqMB_B_BB`To*{`|i-_;<_yz3^YpQ=&fa-`Jr}czU^p`-h>Zpt=Y72Ze{C z&Ih}?d!iKoS0nzvzVW|?^;Wgh9q^%oz%8H>r~w*)dq5k|2|NY{fG5BU zU;>x{=74436Yv%I4*UX%j2^-Q;e_x(L?Dt7d59_m4bg)bLQEkR5POIV# zv9Pd6v0zxvu!OOYSZY}MSY}yvSvgsiSWQ?xSmRlXSzB4hSii6_ut~D%vpKQFuw7$o zW_!-|8Nq;%LKq-i5f>4~hz`VS#11lm zO}PEJGr8|^Pjc_^2=VCic=BA~Y2X>-`N1o|i{bU;P2;`GJHflhhvGBj^W)3rYvX&z zPs1= zm|GYl>?@on{786Jgi}OM#787gq+4VS#f8#G`J)O@6x3HyK~ZDTaM3c+XQIEvq{Xbo zlEm(cy%T2?M~i!j=ZW`Z3HT zw25?#be;5D85Wu2G9fbMGUKvzvS?X9*&DJiejJ*+&MC{883W_E)Y{o>AdYIjNGQ z@<3%vRZi7iwODmrjYZ8!Encl%ZBt!d-BbOh`jiHzhMC4?jb4r4np&Ennhlz(S`u0= zS|wVq(MU8NosJ&Trq#x3$7^?L|J2dc3Ddc!v!Sb~>!(|*`|+ssQO~25M;DKY9dkWa zc5F@$rRSnosyBCB^tkKs^5Y8_af}D13iClPMe(0J^c3+xytJpP@fv zbEfLdj)S2?zQeMkhGUB3cO5k>|1MdCW7%^MlthuN<$B=Z>ArJ-6z8-20mMXCDKfBA-oPW8Yi8 zKm1PnRr?+I+xp)PfCsn)bOdq)`UO&ggoC1jUIxntrv%T1=!E2ld<{JnT6G?B{_Oeo zFeI2vjfTsFCx_2R=tUGq>_*x|Hb=2X1xAfV%SB&_{t#mnbNd3#1@{ZRv7)hwvGZ~I zab*`F7u_!Q#*4=j*3eu3QP;y3ndD(3ipe=izbS(#dk{t zORkjsxZ!bQ>?Y=B!!4m(S8wf=`jk$U;mTUerOK~W&{afKtW?@m4&FxJuBqa$x?1(S zIZnR_{38c~O6&zP&-Qq3kaA-K&j2V|e3QlS|X&y;Jvk zo6*e;_a*O_v~aehwL)5>Tfeq>x6QTNx4-N-+0pwz_d&};rH9p>qMgNETwR%u7#|TI z9dyTZ@AL%se13fH@nWxY?@XUv-#CRpdDefbe`vsHpl?uruzTp(Q0K7DaK{LGr0t33 zlh#p<(UzwgPg|a8K5Koh^}PLs_KOEEkG^~~c6{vds}rvV#!bebOqfr+oV1>tdhPgn zZpvfo;~W1so6`}~zh)BN(!Nc5hj@2wR&cibz3ltDbDDEq^C#v<7c3WM7Tp&=EuCN5 zUnZ`wtX%sb@}cIV>c`GiqtzE{4r|Mwfw+j?%;Q3zXyE(^&@SUZgAN)D>=j}nj!NI`{ zU;x1B=;-Na;b3H9V1P3+BUzZ4n3(xEIN6Xw{360a{DOig2_?1_lOZCT3n17G715ELH!1e-3&8b~yAoj0l5>0Z?`bj2&`7 z0R+GV7R(-~3!Z;{AW#?$Ege00Q5OL~p%5697D_`0p@D*t9s&i}VH~0=H2R!k1lJJN zL|SZi8B*M$>G8|2YHstJbP`;lNd`HV;LUu8-TrsSz+uneB{6pD1EJ9WdNPC^D$1b( z(+4}{6iYmq2AE-B3w9Vga2)t;E=xG=@F7nW2EnrTB7=!Cmk~r*F5_iyj3|6gW_}g{ z$Cd%6;6t$d^Smg$*TVQWxm7 zQ+i0Ef@$F65ou^fnJ=>XNM<8MdM=;JN#cp3JU7*QNn$m@HI|4Ijwi`hd=jA-95GmAXhN)lK?x~Ngv#K6G;j<=6oQ0kfLC0Op74 z-H{G1_d)}o0yT_By)r(-V|%E?pjb%=7M3~)w@A|=iek~F)Mx)w zf{~&i{)YwB7ibYU_#7I`A^-enzo7KFlCs%FA}wg4P!Js~BEd=&&WQdy_E{(b9tj$~ z5@^1Lg1SATa7U<683RO+&;wcnt1H|JiXcIW!5fT($rm6jWQ-j9I7-GUZXRM40`?cq z`hqJ+gd!@I3J-w;AY#I98zAT;1O%V(=jAwP%~XGaq95XBkvL>1h^q|fJ|vmH8iF&j z_kzv?BNBQbBpC+eJX2x81|Kp}O>ddLyIBW@O0}BEDFC325|4@LN zRgyjj0nI5H^i!)~D(Kh@kdU(UUJy}2Wz&d+vT3vxR1S3A!)}lj)N01dQ8c20P;|w1 z7UCcH@X3fD#9+qDqv8utGH#j+VigX76Y%7Dlr^D`^fjS^CjEBks z=fCvNeE!9CpuUU+2~9dPmq=L6a(F?-%?#GZ4h!go$P;D2{|{5dqG<@ADF%ac1BHqe)%*yt*vGM~mOh zm*akMO2I2m_;zo)FH)Rb3(iyya_Crx!34Bx5V#uw$c7UrQ#mTJh?>tMB?QBfA?6J< zZh3CX$?%0dy-lnNkc`7`h~p6gls5s(?nn;7C->shuIRW+@xX5=m+|?i zmKBsSP-7A_9gM(#0|$Ho*yMG4N(k*BFdFIjsoI2M2Cv}K@$8B^^SV*y2!UeDTlSNGQ8Hy5ULVb6eUs@!M5Pj#ZLa=6*?PbWsUIa)s z)L;e1q-11;v`IcEvP*eP+>)=?r}Bj5*jdvPlHST=E|gxU%qV1r3gQ|EzkH`pDzTj2 z9Vv=ER>p`YRgf7uYPtB`T=~E_-%HPzI+7L^avDLBp*2|l8}0v^HHK=9pyz}9x*;fv zl4I`$B$Fht+?r5TNWmpuAC-E7`BvBn^NE-S)@;IfSFIfQyz5nBE&K&(q>6O7iuXj* zb(hihbpFDo8k-YIO)2?|lvFduVR@zIRAOzeMQOUBAiXVPZfCG?flqRQeLJD*7zeRN zBjj4a_ER~2k5_yjQ*xwQ7&9C(NOv)79HB~COt$G%R>+3Z?bP&>FI-Cpsu1}=&i&y! z6rG(akS9@Zh(%y_r8KhT+0&-Ytb-~Gz zxH?gYcEg!M{owWhmP#;F2$vBPTO^8w^_}h{-+skjnF>))g^%~vSi_AgJ#svGYpqN} z#>45P%9P6J(54oZ&l)5_mRW`4$qNYv)6^8QB3YD?%4yVypM|&_6`3qUr5QrcKiTCM z8DkkRfmv+tpDcYFd*xb<{?b58m{^U@;smr-QN=fGhE{6I{kK3sZO_Av1;Jz*kp`wKBTOWectW{qnQUtENs@*N3P_QE`}CUX@=GLly?$o)ZL3sSVQo@`%E#iwO-)0xaNcD!G}Igq z45j#47!Pk+1=LX4Jxw>;{BW#a%y9VX;IuLedM+x)VDJH>cZPB;d$0QA!wdtKCeVwt zBJ^U)sPX!LE#he$AQF&XQ2j_za~Uk+pJ^fTLi+_R>r%mRorEBk5~+GP34#S;fjUgq z!Q^EDoPFfqxc)a&5d^bQu-zJz7^cJpGUFP}fO!2po)=NZ`tk}tkl^W?R-Rb(qVT2i ztm#=F27#Wl1N`mATAvWjynbfor58*VI~4}_!z%8}M5O(BnU;XRis`^-C?^f#Nrt^; zjG&u>bNl;1@Ed$4Rh`soYVw01TS4bT#^oR(j^S|H{=X#l&z!0M0ULtrnSYr)NoEc~ zv^bo)42a1xn9#7=RS?$}@I-1`uwSr-R!|PicF7>2&x59mC};02mBBe+F@MQ|*F;Fuow4qRsC|56j9vS?P zPk`AHIHZ3{8EC-NRSE_i{h=?S*vG+{5=Ox5f}(K20a=1s2U3&)OX3p3;7Mf`v?5Vf zaG1?rL!f!Z!I+OHPf*5V zJgvk{%?o_;Lx!uQP1Q%pMh%C5^sj)6X#M2B&qrghU~s)F@3gdO_6rem-`yj#Mm~ zQwYp&D%$axrm|R_WY7)EAU#+P+1`0p7e#zKI}*B>hPW&QlR{f254X=*_b%b+YUd?* zzZjw&i_?}3eMw6=Uf(Y~=h0u3CmfZ`dReUB+ENuHNFUr@h6))bA-`y==~a`>bE{&X zd&ta%x}1BxGquNBvJ^M8Y)UcD;E#`A2OmO!}0{aNbqk%`fqrdXY8z23q*C2PF+is2RWW3sW9eMcM?~ zpf=7MKjZnohJ}mlKd&3iOWxP!xTF} zBZyDL^e*)-X*d`nL93VKVgk90O6gb*kg`B~NbIMQZN)#y?7v+4F9QT8z_I3zHJ3O& zh8`0Pb381b-x4uPzPIda{rh+I@Xl{9r-x+L8EM8FdGQ_93qlum3Ij+be%sR3-J{?7 z2oh7kL~c{AeOHp>XKT#dOvKJD!(G;6LQ>~y`4hNSEkBGq{cSSV*cvGlnVBlvr{;(OzX3|t#R>ZkbjHAjWXuZ8kH z>gKcg>df#aoz3M2TaqB2_)3f#w$8E)iKq>&bqfxD=zAHjRwL+#toXet*?uglIwfOr z{;~Jk8|&Dfo4A+{(cSa!(;it_ed6gGF?=cR8vgr(_SVSiMV%d2L1|mnzg!5$VuSnt zV#Pzw!Gfew&fX8F?sTQ03GfDOFeoI;ED&LxpjCw6zy$}f49D%GQ zE^00Nx~2ldT_r=q9e2wQd)wC`k6aeP(LW;KX|E zN6MSCeA}XWc!c-V@5MN#JSFwUr{vaRk@}|tHr5Snei^3jm&uUhMZ{zK*kejFyZHye zx8MxNxWY8_>C&ydL+7E7`b*CX)cg`OSj+;r?R99ERK`18JcC|2Cv%vU{o{|iz1rZ; z#uU^H(3XNmntDI`%!RaCZilO9@?tEmwir|oG{#132gw8;;FcpsKxJ_iNNju^a8 zbj!o??8DIqDJ5_hN z)NsMhH{5c!Ta7$ickeDn@3r~6)1~u1)-iBU3x@yxpk~-CR&lg|iTWR4R zKgmi}XAkeznku||;sE%aRMzKOSJAX{JdU#Xq;+?D&s3+WR=ndJK;JxEb1lRjTVq<^ zc(mbt*ZQx4221v5cAES&G8ShZ4r`x}N350ca!n@fPc$B135gMUcid^$rgbCE%r8U{uC9{W+?i(TK95(BM`fm~P^zbf)(e zbi*Wc85l(W;cxN6b89MLQzXY{?6@y+G+Q$VK(@=v8s*m08bI~0;b@a}kJrtrYdYy? zmBe%9eF%HEt}KKf&-C|%1q_Tcbd2zcWNXfD8 ztU+uc>u#3PQcxo&;(?=wBvX4?WZS-)VgES4>x~||Apz%EVVHG|X!u2U8_(?a88Um(f zze^dg+FB^Iup}OJyi0pOFx+QhdfBi_5&Ie?{<^?)VlOd9MYDMNQmMx zhTyWFx_G261(LzV^WPW)MI;}3_F)=H-HbfU!>JSyc}TESeFmplL1Pbqh4?GNrLD{? z``J6n`yYOrKOc;_bg2wbp`A_@%+?E^u@U1Q&$KT#iawjvG*Agde~DX@Xz@DI;UdFM z;VZ}r3ZxA|NWc94uJfl7jI4sShhl>9l=sNMN=GvvCz&4BbE9YK?8=m(VEcS%qX)-N!)=00! zv~BP~T~KBgI_ryk_9k_Ym?zY;z4doc-?Rq=P3NB}3ko!~jNaS!4{q$wYd9(DNK%;U zwhtSOcy|Y0d?fjUI(OS6X_1UvkyBT`{XEU5wHJ2)IBy&kq3HanxPwn0Rk0mQh|c`6 zaMtTVJlDR--koZWPk#j5tIdQAW~1#^!U$i3GE+zrS464mx~c~0G`Gdp$r^P2&=%(hh)^ke^u~Ld%%gp<*3xACa-&j)?**Et=R?`}UVpsDJ>>rOmPz}$ z0MS!)jR7w%-dZsC@G>-YH*fafYQ%+%vM8T>o~kUhbvAA8(qJ3sLwYAw6~{{^bcrh; z3a=0N?*%W$x_a}-H;IgC{a!QhI47T}BzVn^gC#m{qrIqPgFA>}cpG1GOd4-Kx~B3v zH)L@1vyCl&MBno5X`Hadpuiwor=BZA{W%&jqVIe!yGa$e1>kd;DGlNJHUvAbJRjmH zsXUKVVn!PVCoF(FPT-$;kdRb|$LA<)SMqH-n$hPk>b_hQd7@bGdP%@^*5X2)Z)b><4vbydJazT-QR9*XTy)5 zynFe~axlDc#)Kg=auW`VmznMA@|e>Rnh|Tz*)v{vuF_z0k}pZQOFilNkLw|7`1X5x zn4t#SkjkQ&o8nJiJyQM2D>_2qpH2An^tGnMR)&>+J(;B{CMGCx)v?6GMwo8h6MQ3XYbG``&0@5j7tMIFRX zy%z0`A$r=YE{3$vJ~p@zb8Cmsaq3y#R^$HQqnV=O#nrcIo8)ZFcGEMz4!77p|p;i!6a54!^bc3j@ z?RB2z7U7iDOTw7X^zJIG);i6m$M!lk7xzyfXJ(Jo!n6 zLqN4}dE)P4NiN%8gSOunM{Q*5NjN4*s}1Yag512;;798c5Oct7in( zkM0{z30@lhX-g1zAH(@#wb^rcabaLk$}J_&+T;8C`}qxev$N8U&kC_wtfd+(kLfzD zihFpWds~mQgnxR~RAIfLy!ybuOG?amBB9|f?2+bDa#6#H5j7=xvy(m{ON~cze~s$u zBJFMXkmQ-wKVw%tJozy;$H(P^P8U9(pC7)$cZX&=^^HlfcVG5o8aKf~;2wLx>j;i`D?4rjF#^XXS5Udf-2j7S+*&?#Kz_hD3k zbhVLpvd)w*KD1^u*+V4gTD`6u4PN@%bT<^tOKn#_N~H8pOtZua)PT?dHEYkNzpjn@ea9aCZ=8y}?$4uA|V zIrHSfHrRQ!C%1(4CQmu-nBM!)M|5%|-;#=*yx6VQa@^uqOuRe#p02J%60*3_&z;J5 zMjr;9O^P?4T}S+}i>?0i(s?%ehVx>aO{{4<($#Xf&PDp>c?+N}VmxBOl>Q0MT;O19us=g4Sq9XXF-w!(`|^ zE!rG5HdJoa2QB*lR99iWtv}nJ`<;DG^RC@E)J)fU{S(a#RlkV13pQoS>gme{N}*{aEFsQC zal0WO#j*_Py77GUQtflp_gOJ4ltDsh_-MwGO{YwSGjy&FdnZ@T#zEo>?zrluj1$hV z`)udFj(VQ*Krz8Kj)|I9+KENKgM=|Q1w~!9al{u(9$3novJOiOmh+(+_dTnh zbv8Hd7Cv1#o}v#kymf41&$)BP>G%PVqsh{}s?vW&L#2z=j86Ot;q{f?dH5R@`(r;j z>%L~kMX1KA_ld0*gI!Zv7jy3ExHH}f6Y7z0{)B1+oz|mKP*&`**z-Zktp#>9 z_s7`@YpU7qG2)#tR=i40OE6DKK-*I@)##A)sn_BfP-NuYo4+1!?nYbZWs)!5juZ&^ zeg&~)8{sAP-Im5jgE2>SehAZsQ)Ri{s}~l$P}YIya~z(2 zUM`eXWY7U%X)1Ket+&F&6S@<5BkKHKLu~uSW4tFC8Wh+!1wSu|B7-k;zexECUz3>w z4{``#I=2~ki`8b(^z%dhh3JlM?zMZ`a(x`LBU&0NPnH(>OB5q7D!%@($||v%%{TqT zu1oy>*LyoZx73bXW?gc^S9?!2H$`{_Y2?O^GQ=a2Pij1!x*6y!x%3I`su}x+wn0DH zsDGGy?BX4VW)G)9QQg7lkYh`PT$^p5hz;h;&fpujZXx%w!eQ&$zk*&2DFT~Fj<(x| z{24Ll=kvMy4WZHWzfA8vQcdIEe1p2a_5N4UvYv=pCbn5a_U_5W5GASRp}X@9{EipjWU%Mv#;ZpZA7!k;f)tq**dRrELb`m`IdcQy>>MJ z>nqVMRLotKCG-0|_?&45-5h!!MT3hP0s=ws747?D>6ffOd;ch$Uvt!DPUdBD5Z@2c zCDC|{oi!_V4WD-VO{dAN!LxM3aU_LR`I^oJ$>g*H;5^{0WaH_QR-M&y@#U_zknzyo z$s%TlKk<)sFs8;!2=&Px>svnj=UcvvHcZ>G*N_>%NMlS3?+IQ_mv5Q}Hlq+HF& zThh)qzPEH^(eWoRru?$GNj*>{Oj8o`_$1S8Z8hiOaQgC4D36U;&)p+4_aD`1+6?7i z89=b5@j}syg>5F+E1#qip=+02L-$Sxx_yD>o%3|P!0tTF*=^#is5iU75v`;*!j6rj z&%+^=FyJu^xZ7^q3BHCB5<#R7&J_gDT;Rb+he@!jT?Y55Cr&&<{osKDlAbAz2imnj z1WzOvWUye}N$LqI@04>T&CmD!#}UU)?bmw9Q6a@kW>uYPX?3*#(5=5!rlW*v$Z zMa}kD$2?(V&_qw&6jRrH^!`p+zV$?^uJG8Irj2d8iI`ZU?e!Jdh3Rge@xXRB)=6Dc zWp5xl(f!$k$A(Vi1MVYZ=VQcpnl$4WI1+3uo^&_-UJS6p;sbj!sxx;p&*t;a_kM(* z8E#34E5j|^O7(DDe>s1DYsP~vV~=6p^G&Dj3*Q!50lqqvEzRu0XDu~NnJ@OamMQ{} z!D>|%ACHmbFuHe!#~|k+^Ma7xrs*E{_^%@)yZer{suTQ*=?<|0lz{v?b0hra^LGM| zpUKY>8GUSh37~DI+zK+G@d`0b^uM&jt=wt%45#owKH&5F7KYSkcQ`5Mn9A$NKOgZS z+%0DBEJ~D0X!OU_skyV{j?8=x3e+`^jl+6|zs!jEGOGQZOA@i@Nx#?j+j&gR0k1OH#d$pkGq;epcx)F*OX$8CtmKqveUg4 znw@!0qVA@Az#}j1n6UZv^`#4|Q~9)M_T1hv8=5xG?1W2EH+jdrvz>^Wf56`j2zH&( zRDU*nizA-Ew^JtKYTTnKK1 zqrAABmLQ$D7f~|xpyZ;af3zCWKd3YbklNKy_jh+Pg~@EHr_9+2J$l>o=9FlsPRMdR zA-;{Wwz@Yy5~~@mO)n8UzLnztMs1l=xiFN-Xh$EYVB7YiXx?M6PTZaMd!5IQCg+Bo(UUTPbRi^BV%jjXJe#gz1n9r9fKHFy!QRLRgBB7 za4TLG;e7sdx6L*y`fLb^66$s2$$-MV-^?eS&qAz<(FJeztPOL&O2aN5%h+t{Pu?)^ z?+@BMnsmn`a;Sg!9cf+E`W~nMW6ad}@{^Trv*)C^F45iB_;%}1L7a31u<^a5WAAeZ z#Q)7xP7HV1_nJaTSm}_l@Jn{ml>ltApW2P(kzWnD={NHXS8KN$y`-x*^~Xoe>ql;A z!E)h2N)y66Q9hU#-~sCkf-p(n!~z0AE+!6fV&-s2O(} z=p0;e-jG)Y5&VMg?!E+@E5SG+8YRh2?D@ED)F*SEkl{)jo< zS)fE?#pTGwL7zCA6KCoB6mHp+HHie8O7A?+y#4S<;L70k)%C`r`V^WngPtIR??r1v zAJ3X+w?30II%gU+?B8$k-MxP=7H4E@tiT!ZV~W6uNIRcmazECfBXjSP?g~)Ng?rM&Go&l?*N~eLk10ZxJ zZrlE@{(a`|Yw1W)x6{i4W^@_@4FrsrR+EM#z(yx{(q4WVLzWnTgSem5}%_VLI$( z;!x$HGqdcg6ZUF?QHt-e}_P5~`^eN|3dXiLcqXOtwP zR8%hMX){u0lsxYDbhMMKipC9WM~w5=1^&6G=7N{+A8Rq%-OaWVYI;zvnRUTiWY+s9 zk~?DL;Y3n1q9`WfRnGmJ4rAWft}HHrrqaOW1Hk?O;A>9E&lJlK7}5oFe}BNv_hlfJ zq`}`e#=C3Z;m0)%>e^tZHwTNk|G;es)YEy@rw zc!A>r=Cr`3Qzs%O)*QaS6z_fCbNAMQlYEq&^H1?LtuyIcci4wSq`fsbcmvU@B58D8 z2LPqVtP;wEh|_#)0!uKNX`EKe;J93~(RK0#>sp1kk^1e|gvCo1y-GQu0`)yY3(^;A zrM(N2vKSV3HQYuqqZH}2S| zZ!K?{@b9_4r?!}1L)@hd0_(Hw#oLuP>qPRh&iuYSI*4Jo9l;pqwVQL#O^3G$#k5$I z(;|Z9vNsxh_0Cgn38k!g8#A_$aS8kZI4sID?9ocw+q33JDDk{PN_Wti2Y?Gg;i~nI zl6P&KyVVP)$1>?5kbX68p32iS9@a{%_%FRXEI)FdE_%wWNBH09(A`wCcyNpRtnudn zGUszH2LsJYPwjl8qr?|g3Mm4vlRs6VCeu@F>zx#4xd*wNia*p@VspGQ^D@*~)pc_O zH3B};-1*pRWb}?6rj}x^{hIl}}jjl7REJ`c{oYZnNdAR;X>P(0SrC~Y* ze;Z)>{o@+9G}Pl&_AM!~OIsBaOy32cgx=;lDEtQ(3z2>C)-J*-q~Np zF(#&oj7x;BhKViHv_;9I0ZyLpSMLi|zx+efegLG5yx#BkMIEaVBuOV`R!f=;+Pr^J z@#M4Vj{{(L%lTB6u77=4b^Ha+qs6bR{>?ii~n>1U8- zX^`K4l%-|dBY>c zWdrlSWd4~RrGHXhndWmi?=wdaWebM-0?7MLvDuyoaXd|t)xG!+yQwY8M*P<<)o~%^ z+eS?akxblv7l4rA9LHlx6i(a5U#~~`U)nJzG`g^C(Vpyd$w+N(VU^bXQtJC^5Ef7s z_3mp!CRavIEX4^tYhz)1_2>x2mOOCD2y29?WHWnym(xGlnzw_^p|+?>tHrcf)T0V- zJiB6`-0S0%=m%ZW7+=`e8o6WDqI2((jqbj=Qt@peQ6ufp=GmOHJIYRUzkAYmm_LGX z!KR~V2lDqrGP`46uB1Hqkk&Iop?K!(Ys!i?_dP+@ zHyCHRl!rk#rQMIDUNg29lzYj^{ANpx-!xiANWT5iww#KFT;WN1u@c>&75ZrB$7*2} z;HHG=M2&rbS&Ur?OK$Ba9go4xis3O2$As(%`KgiTml}qvSyi%X{FJ`XvYpwORetSd zTG+&qG$pe|ws_jz@au_o0ppWaGhMj@pkfwx`enEQY;o;D^LUU8G`94@Hys{fK@%4- zZR9fd&c!Ahl@YcijS^DzJ%s$sx=4X9B;Vn*M0~c!*UiN*VRDGQ?yyu@$SxyI!axpmo#@{=6m0ce;*t(Ifp<0{p;PKMUEq~Sa zTrJZZ7|ZdwN!E|mmKSqt_Cm(#PMThwI=+|xs{3?Jiry_@oj=KUH#KZAb6*&ypG!&c z*zYp8_fRSXLRu1?p&Gp*WXH^ar!ZT~)0`9_MZ8_ZWrVqW{qfGv>lLkvS=(y`n{z`8 ztz|B;Pt|_{vNmYl$LAN0dYqx_*jSbERH!zo-Jo%*m>NtE{vr z=2Bs-z=xHvB(tnNRC58{-S0pIf5or#pZpGK8NQ} zJ6~wy&`g$<&v80K>47{;nW-0yksL|Y`DW}+_{f}?bp4QPUd|kAT^*_=Vx{3veQX=+ z(u|H=8Dd+eHMEX4-Y#(0zAvA9RX}Ok=Hs(LN`3m05;nJy14Bq@YHDgNSNM}7{G1ho zk6P1!wB|3kPrAoW^#Yg1l7rOod|X$CbUA(rU+5`zYhZXw*dWxUt`ZvM+@;=_tvNsa z{QCETv}$`LzV(#k0pR^Cf5?t3?~w7MLxC$Zza;ljmeCG>A-}wuhub?DnI}$O@4ui+ zbcA9$FA7@?AYRglXbCWUbfZ`?7t*S+{8%z(HnP!?Ns{;Lz&B~HzUrg>l6SPxu194V(tPHw*rv(Ge@+&B`7@ z1m7voW5<49;eevcfJ7pSy&rv?a~~7dzJJvJsMq>C+#TivfP3FW*~K6IR6R5h+KKa`}t%7w;XHdZpliGR`#Rah2Gk zE7`QwK9GsQw4 z(T6-6qH0;|C-dT1g1#xgtGBo$f~J`F8^&Mh4PCJHSW{bia#?aWf(6napyB@@)Ymbs z&cmtf_tPimM*5!J`H0rVb8V^*-e35bFji4*QHl`q3;9v#Zn_Ioa%|r>=t7)KoO$8+ zaYTht90f^ed^*_WxMDtYd`WL!<4<1K|&gBCY`9+Nc9=WJ<@ zOD`+w^Ip=O#s^GD=(ylcv{iZorPmS1gqP67k$JDt6Zp3at^_-3P zh7pLPqnjFa1>F1m&VR?-I%ep`1q_EPYGe5gZA0~ty+UNh0yr5o(*T5@ord$Bxa;lT zhxmMYG2vEPZNXj7xjf5a6aw0``j7G_os8xfnKH8#8(u;dy$G%6Mi(fIbu$|zcl&$E zDp=^eSgll(-jBRxz*2sXTbQ;-$*3Bxb}Gp@W{#m zK2`-s>LyIZ6^r5lhYF-Y84#=F?YRVt`$@HOG$pi=WP*4tTgj_kl=^Ni88YJtN`}6C z+{sbqvednn`+Ui(gib;V;|MEjV0Qa=kgwDxaA{}__Z4!N!yM-Nb^x7+u&HF>cPNgl zkP8^e0Gs)Yrp5!Pb|7fTF73+zHWHV`bSD@Zz}kr4(&UT{s4>Qjr|Mfar@0r**?c5I zsF?BJ1q>#m7x6k*9#zKO#eH9_(3dO~^?-OJ*KOn`5;L5tU7D!1)YJwWd7I=!HJbvi z)J-jb@1%*o;tOvIJ2JD$^AJz(m9WKsc8*II!G zf(YhnFzGB0ocez zXE`eAgjDIf zZayVeKoka6^#^0|GmD`CWeT7zcHl@j$Y2A$+fX(8MT@J&mnp`k*;t07#G{iEn)k>CEL;XLq!c}N!%06O@qn?rylnfZ2m=1D3eQMZf8aUnR*~}XwRmOt0LlM zF1a&d>j5o@rIWCJDq1V8oYm&!3m{EYvZX$f)ntu7sVK7gH!>Bxb|Q?RZiE--+o2o

obe2l2Bl;nh*-sx<4^t9Zr%M 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�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.gutter{margin:0 14px 0 0}.fm-tmpl-list-with-img-detail .img-detail--item .img-detail--actions{padding:18px 0 0;text-align:right}.fm-tmpl-list-with-img-detail .img-detail--item .img-detail--actions .fm-button{margin-left:13px}.fm-tmpl-list-with-img-detail .img-detail--item .img-detail--actions .fm-button:first-child{margin-left:0}.fm-tmpl-result{display:flex;flex-direction:column;padding-top:40px;align-items:center}.fm-tmpl-result-header .fm-result-title{display:flex;flex-direction:row;font-size:20px;color:#333}.fm-tmpl-result-header .fm-result-title .fm-result-title-number{color:#FF9800}.fm-tmpl-result-content{max-width:84%;padding-top:30px;padding-bottom:30px;text-align:center}.fm-tmpl-result-content .fm-result-img{width:140px;height:140px;margin:0 auto}.fm-tmpl-result-content .fm-result-img img{display:block;width:140px;height:140px}.fm-tmpl-result-content .fm-result-text{padding-top:30px;padding-bottom:10px;font-size:16px;color:#333;text-align:center}.fm-tmpl-result-content .fm-result-tip{line-height:22px;font-size:16px;color:#888;text-align:center}.fm-tmpl-result-footer{width:140px;margin:0 auto}.fm-tmpl-result-footer .fm-result-btn{margin-bottom:16px}.fm-tmpl-result-footer .fm-result-btn:last-child{margin-bottom:0}.fm-tabbar-style{border-top:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tabbar-style{border-top:none}html:not([data-scale]) .fm-tabbar-style::before{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:0;right:auto;bottom:auto;left:0;width:100%;height:1PX;transform-origin:50% 50%;transform:scaleY(.5)}}.fm-tabbar-style .show-fixed-width{padding:0 17px;flex-shrink:0;flex-grow:0;flex-basis:auto}.fm-tabbar-style .show-fixed-width+.show-left-width{padding:7px 16px 7px 0}.fm-tabbar-style .show-fixed-width .van-tabbar-item__icon .fm-icon{font-size:19px}.fm-tabbar-style .show-fixed-width .van-tabbar-item__text{font-size:12px;transform:scale(.8333)}.fm-tabbar-style .show-left-width{padding:7px 16px}.fm-tabbar-style .show-left-width .fm-button{height:100%}.fm-tmpl-detail-header{padding-left:16px;background-color:#fff}.fm-tmpl-detail-header-inner{display:flex;flex-direction:row;align-items:center;padding:16px 16px 16px 0;border-bottom:1px solid #DDD;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-detail-header-inner{border-bottom:none}html:not([data-scale]) .fm-tmpl-detail-header-inner::after{content:'';position:absolute;background-color:#DDD;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-approve-flow-wrapper .fm-approve-flow-item .fm-approve-flow-item-header-icon .header-icon::before,.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main-avatar .avatar-icon::before{content:"\e6b4"}.fm-tmpl-detail-header-inner .detail-header--avatar{width:40px;margin-right:10px;border-radius:50%;overflow:hidden}.fm-tmpl-detail-header-inner .detail-header--avatar img{display:block;width:40px;height:40px}.fm-tmpl-detail-header-inner .detail-header--content{flex:1}.fm-tmpl-detail-header-inner .detail-header--content-title{margin-bottom:3px;font-size:15px;color:#333}.fm-tmpl-detail-header-inner .detail-header--content-subtitle{font-size:13px;color:#888}.fm-static-input-list{padding:16px 0 16px 16px;background-color:#fff;margin:0 0 8px}.fm-static-input-list .fm-listview-item:last-child .fm-static-input-info{margin-bottom:0}.fm-static-input-info{display:flex;flex-direction:row;align-items:center;margin-bottom:8px;line-height:20px}.fm-static-input-info .input-info--label{width:92px;font-size:14px;color:#999;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fm-static-input-info .input-info--text{flex-shrink:1;flex-grow:1;flex-basis:0;padding-left:8px;font-size:14px;color:#333}.fm-static-input-info .input-info--accessory{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.fm-static-input-info .input-info--accessory-item{flex-shrink:0;width:28px;height:28px;margin-right:12px;border-radius:3px;overflow:hidden}.fm-static-input-info .input-info--accessory-item img{display:block;width:28px}.fm-static-input-info .input-info--accessory-item:last-child{margin-right:0}.fm-approve-flow-wrapper{padding:12px 16px;background-color:#fff}.fm-approve-flow-wrapper .fm-approve-flow-item{padding-left:7px}.fm-approve-flow-wrapper .fm-approve-flow-item-header{position:relative;border-left:1px dashed #D4D4D4}.fm-approve-flow-wrapper .fm-approve-flow-item-header-inner{position:relative;display:flex;flex-direction:row;align-items:center;padding-left:28px}.fm-approve-flow-wrapper .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-icon{position:absolute;left:-8px;top:0;z-index:100}.fm-approve-flow-wrapper .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-icon .fm-icon{background-color:#fff;font-size:15px;color:#34AAFF;border-radius:50%}.fm-approve-flow-wrapper .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-icon img{background:#fff}.fm-approve-flow-wrapper .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-content{flex-shrink:1;flex-grow:1;flex-basis:0;line-height:21px;font-size:15px;color:#4C4C4C;font-weight:700}.fm-approve-flow-wrapper .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-right{flex-shrink:0;padding-left:6px}.fm-approve-flow-wrapper .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-right .fm-icon{color:#979797}.fm-approve-flow-wrapper .fm-approve-flow-item-header-state{margin-top:6px;padding-left:28px;font-size:13px;color:#FF9002}.fm-approve-flow-wrapper .fm-approve-flow-item-content{display:flex;flex-direction:row;align-items:flex-start;padding:12px 0 30px 28px;border-left:1px dashed #D4D4D4}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main{flex-shrink:1;flex-grow:1;flex-basis:0;display:flex;flex-direction:row;align-items:flex-start}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main-avatar{position:relative;display:flex;flex-direction:row;align-items:center;width:36px;height:36px}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main-avatar-img{display:block;width:36px;height:36px;border-radius:50%}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main-avatar-icon{position:absolute;right:4px;bottom:-4px;font-size:14px;color:#34AAFF;background-color:#fff;border-radius:50%}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main-text{flex-shrink:1;flex-grow:1;flex-basis:0;padding:0 6px 0 9px}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main-text-title{font-size:13px;color:rgba(51,51,51,.65)}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-main-text-subtitle{margin-top:2px;line-height:20px;font-size:14px;color:#333}.fm-approve-flow-wrapper .fm-approve-flow-item-content .fm-approve-flow-item-date{font-size:13px;color:rgba(51,51,51,.65)}.fm-approve-flow-wrapper .fm-approve-flow-item.fm-approve-flow-item-approved .fm-approve-flow-item-content .fm-approve-flow-item-main-avatar-icon,.fm-approve-flow-wrapper .fm-approve-flow-item.fm-approve-flow-item-approved .fm-approve-flow-item-header .fm-approve-flow-item-header-icon .fm-icon,.fm-approve-flow-wrapper .fm-approve-flow-item.fm-approve-flow-item-approved .fm-approve-flow-item-header .fm-approve-flow-item-header-state{color:#1AD0C8}.fm-approve-flow-wrapper .fm-approve-flow-item.fm-approve-flow-item-approved .fm-approve-flow-item-content .fm-approve-flow-item-main-avatar .avatar-icon::before,.fm-approve-flow-wrapper .fm-approve-flow-item.fm-approve-flow-item-approved .fm-approve-flow-item-header .fm-approve-flow-item-header-icon .header-icon::before{content:"\e6b3"}.fm-approve-flow-wrapper .fm-approve-flow-item:last-child .fm-approve-flow-item-header{border-left:0}.fm-approve-flow-wrapper .fm-approve-flow-item:last-child .fm-approve-flow-item-header::before{display:none!important}.fm-approve-flow-wrapper .fm-approve-flow-item:last-child .fm-approve-flow-item-content{padding-bottom:12px;border-left:none}.fm-approve-nopass,.fm-approve-pass{position:fixed;top:48px;right:14px;width:110px;height:110px;z-index:1000}.fm-approve--detail-header{padding-left:16px;background-color:#fff}.fm-approve--detail-header-inner{display:flex;flex-direction:row;align-items:center;padding:17px 16px 17px 0;border-bottom:1px solid #DDD;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-approve--detail-header-inner{border-bottom:none}html:not([data-scale]) .fm-approve--detail-header-inner::after{content:'';position:absolute;background-color:#DDD;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-approve--detail-header-inner .detail-header--avatar{width:40px;margin-right:10px;border-radius:50%;overflow:hidden}.fm-approve--detail-header-inner .detail-header--avatar img{display:block;width:40px;height:40px}.fm-approve--detail-header-inner .detail-header---info{flex:1}.fm-approve--detail-header-inner .detail-header---info-title{margin-bottom:3px;font-size:15px;color:#333}.fm-approve--detail-header-inner .detail-header---info-subtitle{font-size:13px;color:#888}.fm-apply-list-wrapper{padding:0 16px 16px;background-color:#fff;margin:0 0 12px}.fm-apply-list-item{display:flex;flex-direction:row;align-items:flex-start;margin-bottom:8px;line-height:20px}.fm-apply-list-item-label{width:92px;font-size:14px;color:#999;text-align:right;word-break:break-all}.fm-apply-list-item-text{flex-shrink:1;flex-grow:1;flex-basis:0;padding-left:14px;font-size:14px;color:#333;word-break:break-all}.fm-apply-list-item-accessory{display:flex;flex-direction:row;align-items:center;flex-wrap:wrap}.fm-apply-list-item-accessory-item{flex-shrink:0;width:28px;height:28px;margin-right:12px;border-radius:3px;overflow:hidden}.fm-apply-list-item-accessory-item img{display:block;width:28px}.fm-apply-list-item-accessory-item:last-child{margin-right:0}.fm-apply-list-item:last-child{margin-bottom:0}.fm-apply-panel-title,.fm-apply-plate-title{height:28px;line-height:28px;padding-left:10px;margin-bottom:0;background:#F6F6F6;border-radius:2px}.fm-apply-panel-action,.fm-apply-plate-action{padding:0 6px;margin:0 0 0 auto;color:#D8D8D8}.fm-apply-panel-action:hover,.fm-apply-plate-action:hover{background:#3A90FF;color:#fff}.fm-apply-panel{padding-top:0}.fm-apply-panel .fm-apply-list{padding-top:10px;padding-bottom:14px}.fm-apply-panel .fm-apply-list+.fm-apply-list{border-top:1px solid #E8E8E8}.fm-apply-panel-list{padding:0 16px;background-color:#fff;margin:0;border-bottom:1px solid #E8E8E8}.fm-apply-panel-list:last-child{border-bottom:none}.fm-apply-panel-list .panel-list--header{height:42px;display:flex;align-items:center}.fm-apply-panel-list .panel-list--header .panel-list--header-title{font-size:15px;line-height:21px;color:#333;padding:0 0 0 10px;position:relative}.fm-apply-panel-list .panel-list--header .panel-list--header-title::before{content:'';position:absolute;left:0;top:50%;width:3px;height:14px;margin:-7px 0 0;background:#55BBF6}.fm-apply-details{margin:0 0 14px;background:#fff}.fm-apply-main{border-bottom:1px solid #E8E8E8}.fm-avatar-with-state{position:relative;display:flex;flex-direction:row;align-items:center;width:36px;height:36px}.fm-avatar-with-state--img{display:block;width:36px;height:36px;border-radius:50%}.fm-avatar-with-state--icon{position:absolute;right:4px;bottom:-4px;font-size:14px;color:#34AAFF;background-color:#fff;border-radius:50%}.fm-avatar-with-state .avatar-icon::before{content:"\e6b3"}.fm-avatar-with-state .fm-round-bg{background:rgba(77,154,255,.6)}.fm-avatar-with-state.fm-state-running .avatar-icon::before{content:"\e6b4"}.fm-feature-select-person{display:flex;flex-direction:row;flex-wrap:wrap;padding:0 0 14px}.fm-feature-select-person .select-person--item{position:relative;display:flex;align-items:center;margin:0 16px 0 0}.fm-feature-select-person .select-person--item .fm-avatar-with-state{width:48px;height:48px}.fm-feature-select-person .select-person--item .fm-avatar-with-state .fm-avatar-with-state--img{width:48px;height:48px;border-radius:24px}.fm-feature-select-person .select-person--item .fm-avatar-with-state .fm-avatar-with-state--icon{right:0;top:0;cursor:pointer}.fm-feature-select-person .select-person--item .fm-avatar-with-state .fm-avatar-with-state--icon::before{content:"\e016"}.fm-feature-select-person .select-person--item .fm-avatar-with-state .fm-avatar-with-state--icon:hover{background:#F24645;color:#fff}.fm-feature-select-person .select-person--item .fm-round-bg{width:48px;height:48px;border-radius:24px;line-height:48px}.fm-feature-select-person .select-person--icon{margin:0 0 0 3px;color:#A6A6A6}.fm-feature-select-person .select-person--icon::before{content:"→"}.fm-tmpl-search-container{position:relative;padding:7px 16px;display:flex;flex-direction:row;align-items:center;background:#fff}.fm-tmpl-search-container .fm-tmpl-search-type{flex-shrink:0;margin:0 10px 0 0}.fm-tmpl-search-container .fm-tmpl-search-type.fm-state-active{color:#3A90FF}.fm-tmpl-search-container .fm-tmpl-search-inner{flex:1 1 0}.fm-tmpl-search-container .fm-tmpl-search-inner .van-search{padding:0}.fm-tmpl-search-container .fm-tmpl-search-tree-select{position:absolute;left:0;right:0;top:100%;z-index:10}.fm-page-listview{display:flex;flex-direction:column}.fm-page-listview .fm-page-main{padding-bottom:0;flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-page-listview .fm-page-main .fm-tmpl-list-extend,.fm-page-listview .fm-page-main .fm-tmpl-search-container{flex-shrink:0}.fm-page-listview .fm-page-main .fm-tmpl-list-container{display:flex;flex-direction:column;flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-page-listview .fm-page-main .fm-tmpl-list-container .fm-tmpl-list-footer{display:flex;flex-direction:row;align-items:center;height:54px;padding:0 16px;background:#fff;box-shadow:0 -2px 8px 0 rgba(81,120,159,.12)}.fm-page-listview .fm-page-main .fm-tmpl-list-container .fm-tmpl-list-footer .fm-tmpl-list-footer-btn{flex:1;text-align:center}.fm-page-listview .fm-page-main .fm-tmpl-list-container .fm-tmpl-search-tree-overlay{position:absolute;left:0;bottom:0;right:0;top:0;z-index:9;background-color:rgba(0,0,0,.4)}.fm-page-listview .fm-page-main .fm-tmpl-list-container .fm-tmpl-add-btn{position:absolute;right:16px;bottom:50px}.fm-page-listview .fm-page-main .fm-tmpl-list-container .fm-tmpl-add-btn-inner{width:48px;height:48px;text-align:center;line-height:48px;border-radius:50%;background-image:linear-gradient(-45deg,#65A7FF 0,#3A90FF 100%);box-shadow:0 2px 5px 0 rgba(124,163,254,.57)}.fm-page-listview .fm-page-main .fm-tmpl-list-container .fm-tmpl-add-btn-inner .fm-icon{color:#fff;font-size:16px}.fm-page-listview .fm-page-main .fm-tmpl-list-container .van-pull-refresh{display:flex;flex-direction:column;flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-page-listview .fm-page-main .fm-tmpl-list-container .van-pull-refresh .van-pull-refresh__track{display:flex;flex-direction:column;flex-shrink:1;flex-grow:1;flex-basis:0}.fm-page-listview .fm-page-main .fm-tmpl-list-add .fm-tmpl-add-btn{bottom:16px}.fm-page-listview .fm-page-main .fm-tmpl-list-add .fm-listview-container.fm-listview-container-fill .fm-listview-main{padding-bottom:70px}.fm-page-listview .fm-page-main .fm-tmpl-tabs{flex:1;display:flex;flex-direction:column}.fm-page-listview .fm-page-main .fm-tmpl-tabs .fm-tab-bar,.fm-page-listview .fm-page-main .fm-tmpl-tabs .van-tabs__wrap{flex-shrink:0}.fm-page-listview .fm-page-main .fm-tmpl-tabs .fm-tabs-content,.fm-page-listview .fm-page-main .fm-tmpl-tabs .fm-tabs-content .fm-tab-pane,.fm-page-listview .fm-page-main .fm-tmpl-tabs .van-tabs__content{display:flex;flex-direction:column;flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-page-listview .fm-page-main .fm-tmpl-tabs .van-tabs__content .van-tab__pane{display:flex;flex-direction:column;flex:1}.fm-page-listview .fm-page-main .fm-tmpl-tabs .fm-tmpl-tabs-content{display:flex;flex-direction:column;flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-page-card .fm-page-footer,.fm-tmpl-list-extend{flex-shrink:0}.fm-btn-link{color:#3A90FF}.fm-page-card{display:flex;flex-direction:column}.fm-page-card .fm-page-main{flex-shrink:1;flex-grow:1;flex-basis:0;overflow:auto}.fm-page-card .fm-page-main .fm-page-card-btns{padding:30px 16px 0}.fm-tmpl-struct-wrapper{flex-shrink:0;margin-top:12px}.fm-tmpl-struct-wrapper .fm-tmpl-section{margin-top:12px}.fm-tmpl-struct-wrapper .fm-tmpl-section:first-child{margin-top:0}.fm-tmpl-section{background-color:#fff}.fm-title::before,.fm-tmpl-section-header .fm-title::before{content:'';background:#3A90FF}.fm-tmpl-section-header{display:flex;align-items:center;justify-content:space-between;padding:11px 16px 10px}.fm-tmpl-section-header .fm-title{position:relative;padding-left:16px}.fm-tmpl-section-header .fm-title::before{position:absolute;left:0;top:50%;width:3px;height:14px;margin:-7px 0 0}.fm-tmpl-section-header .fm-title-text{font-size:15px;line-height:21px;color:#333}.fm-tmpl-section-header .fm-toolbar{display:flex;align-items:center}.fm-tmpl-section-header .fm-toolbar-item{display:flex;align-items:center;padding-left:16px;font-size:15px;color:#3A90FF}.fm-tmpl-section-header .fm-toolbar-item-text{margin-left:4px}.fm-tmpl-section-header .fm-toolbar-item-icon{font-size:16px}.fm-tmpl-section-content{padding:0 16px}.fm-tmpl-button-wrapper{padding:30px 16px 0;flex-shrink:0}.fm-tmpl-button-wrapper .fm-tmpl-btns{display:flex;align-items:center}.fm-tmpl-button-wrapper .fm-tmpl-btns .fm-button{flex:1;margin-right:11px}.fm-tmpl-button-wrapper .fm-tmpl-btns.fm-button:last-child{margin-right:0}.fm-tmpl-section-btn{display:flex;flex-direction:row;align-items:center;padding:0 16px;border-top:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-section-btn{border-top:none}html:not([data-scale]) .fm-tmpl-section-btn::before{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:0;right:auto;bottom:auto;left:0;width:100%;height:1PX;transform-origin:50% 50%;transform:scaleY(.5)}}.fm-tmpl-section-btn .fm-button{flex:1;position:relative}.fm-tmpl-section-btn .fm-button::after{position:absolute;right:0;top:50%;width:1px;height:16px;margin-top:-8px;background:#ddd;transform:scaleX(.5);content:''}.fm-tmpl-section-btn .fm-button:last-child::after{display:none}.fm-card-tmpl-header{height:36px;line-height:36px;background-color:#f9f9fb;padding-left:16px}.fm-edit-input-list{position:relative}.fm-banner-warpper{position:relative;background:url(imgs/questionnaire-header.png) center/cover no-repeat;display:flex;flex-direction:column;align-items:center;justify-content:center}.fm-banner-warpper .fm-banner-title,.fm-banner-warpper .fm-banner-title-sub{color:#fff;text-shadow:0 2px 8px rgba(0,26,123,.52)}.fm-banner-warpper .fm-banner-title{font-size:24px;line-height:33px}.fm-banner-warpper .fm-banner-title-sub{font-size:12px;line-height:17px;padding-top:4px}@media screen and (max-width:375px){.fm-banner-warpper{height:98px}}@media screen and (min-width:375px) and (max-width:414px){.fm-banner-warpper{height:116px}}@media screen and (min-width:414px){.fm-banner-warpper{height:128px}}.fm-stamp-wrapper{width:68px;height:68px;position:absolute;right:16px;top:12px;background:url(imgs/questionnaire-submitted.png) center/contain no-repeat;z-index:9}.fm-card-uploader-content{padding:10px 16px}.fm-page-header-staff{background:linear-gradient(90deg,#2899F6 0,#3E76F9 50%,#4384F8 100%)}.fm-page-header-staff .fm-navbar{background:0 0}.fm-page-header-staff .fm-navbar .fm-navbar-left-arrow,.fm-page-header-staff .fm-navbar .fm-navbar-title{color:#fff}.fm-navbar-right-text{color:#333;font-size:16px}.fm-input-wrapper:not(:last-child) .van-cell::after{display:block}.fm-inner-cell .van-checkbox__label::after,.fm-inner-cell .van-radio__label::after,.fm-input-wrapper:last-child .van-cell::after{display:none}.fm-radio-readonly .fm-inner-cell .van-radio .van-radio__icon .van-icon{background-color:#fff}.fm-radio-readonly .fm-inner-cell .van-radio .van-radio__icon--checked .van-icon{background-color:#1989fa;border-color:#1989fa}html:not([data-scale]) .fm-input-wrapper:not(:last-child) .fm-cell:not(.fm-no-hairline)::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1px;transform-origin:50% 100%}.fm-input-wrapper:not(:last-child) .fm-cell::after{left:16px!important}.fm-input-label-tips{display:flex;align-items:center;padding-left:4px}.fm-input-label-tips-content{font-size:14px;color:#333;line-height:20px;padding:6px 16px}.fm-tmpl-listview-timeline{margin-left:5px}.fm-tmpl-listview-timeline .fm-tmpl-timeline-text{position:relative;padding-left:22px;padding-bottom:2px;line-height:20px;font-size:14px;color:#666}.fm-tmpl-listview-timeline .fm-tmpl-timeline-text::after{position:absolute;left:-5px;top:5px;width:10px;height:10px;background-color:#ddd;border-radius:50%;content:''}.fm-tmpl-listview-timeline .fm-tmpl-timeline-text::before{position:absolute;left:0;top:0;bottom:0;width:1px;background-color:#ddd;content:''}.fm-tmpl-listview-timeline .fm-tmpl-timeline-date{padding-bottom:20px;padding-left:22px;font-size:12px;color:#999;border-left:1px solid #ddd}.fm-tmpl-listview-timeline.fm-tmpl-listview-timeline-first .fm-tmpl-timeline-text:before{top:5px}.fm-tmpl-listview-timeline.fm-tmpl-listview-timeline-last .fm-tmpl-timeline-text:before{height:5px}.fm-tmpl-listview-timeline.fm-tmpl-listview-timeline-last .fm-tmpl-timeline-date{border-color:transparent}.fm-tmpl-listview-goods{padding-left:16px;display:flex;padding-top:10px}.fm-tmpl-listview-goods .fm-tmpl-goods-img{flex-shrink:0;width:86px;height:86px;margin-right:10px;overflow:hidden}.fm-tmpl-listview-goods .fm-tmpl-goods-img img{display:block;width:86px;height:86px}.fm-tmpl-listview-goods .fm-tmpl-goods-content{flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden;padding-right:16px;padding-bottom:10px;border-bottom:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-input-wrapper:not(:last-child) .fm-cell:not(.fm-no-hairline)::after{transform:scaleY(.5)}html:not([data-scale]) .fm-tmpl-listview-goods .fm-tmpl-goods-content{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-goods .fm-tmpl-goods-content::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-name{position:relative;min-height:40px;padding-right:28px;margin-bottom:4px;line-height:20px;font-size:16px;color:#666}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-name .fm-tmpl-goods-add{position:absolute;right:0;top:30px;width:24px;height:24px;line-height:24px;text-align:center;background-color:#ececec;border-radius:50%}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-name .fm-tmpl-goods-add .fm-icon{font-size:12px;color:#999}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-price{display:flex;align-items:flex-end;line-height:22px;margin-bottom:3px;color:#fa6400}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-price-prefix{font-size:12px}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-price-text{font-size:16px}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-shop{display:flex;align-items:center;line-height:16px;font-size:12px;color:#888}.fm-tmpl-listview-goods .fm-tmpl-goods-content .fm-tmpl-goods-shop .fm-icon{margin-right:3px;font-size:12px}.fm-tmpl-listview-order{padding-left:16px}.fm-tmpl-listview-order-inner{padding:12px 16px 12px 0;border-bottom:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-order-inner{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-order-inner::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-order .fm-tmpl-listview-order-name{margin-bottom:3px;line-height:21px;font-size:15px;color:#333}.fm-tmpl-listview-order .order-line-item{display:flex;flex-direction:row;align-items:center}.fm-tmpl-listview-order .order-line-item-left{flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-tmpl-listview-order .order-line-item-right{flex-shrink:0}.fm-tmpl-listview-order .fm-tmpl-listview-order-number{line-height:20px;margin-bottom:10px}.fm-tmpl-listview-order .fm-tmpl-listview-order-number .order-number-text{font-size:14px;color:#888}.fm-tmpl-listview-order .fm-tmpl-listview-order-msg{line-height:18px;font-size:13px}.fm-tmpl-listview-order .fm-tmpl-listview-order-msg .order-msg-date{color:#888}.fm-tmpl-listview-order .fm-tmpl-listview-order-msg .order-msg-price{color:#ff7300}.fm-tmpl-listview-shop{padding:0 8px 10px;background:#f9fafb}.fm-tmpl-listview-shop-inner{background:#fff}.fm-tmpl-listview-shop-header{padding:10px 10px 18px;display:flex;flex-direction:row}.fm-tmpl-listview-shop-header .shop-header-img{flex-shrink:0;width:46px;height:46px;margin-right:10px}.fm-tmpl-listview-shop-header .shop-header-img img{display:block;width:100%;height:100%}.fm-tmpl-listview-shop-header .shop-header-msg{flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-tmpl-listview-shop-header .shop-header-msg .shop-header-name{display:flex;justify-content:space-between;margin-bottom:6px}.fm-tmpl-listview-shop-header .shop-header-msg .shop-header-name-text{padding-right:6px;line-height:22px;font-size:16px;color:#333}.fm-tmpl-listview-shop .shop-content-item,.fm-tmpl-listview-shop-header .shop-header-msg .shop-header-site{line-height:18px;font-size:13px;color:#999}.fm-tmpl-listview-shop-header .shop-header-msg .shop-header-name-status{flex-shrink:0}.fm-tmpl-listview-shop .shop-content-item{margin-bottom:8px;padding:0 10px}.fm-tmpl-listview-shop-footer{border-top:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-shop-footer{border-top:none}html:not([data-scale]) .fm-tmpl-listview-shop-footer::before{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:0;right:auto;bottom:auto;left:0;width:100%;height:1PX;transform-origin:50% 50%;transform:scaleY(.5)}.fm-tmpl-listview-shop-footer .shop-footer-btns .shop-footer-btn-item::after{transform:scaleX(.5)}}.fm-tmpl-listview-shop-footer .shop-footer-btns{display:flex;flex-direction:row;align-items:center}.fm-tmpl-listview-shop-footer .shop-footer-btns .shop-footer-btn-item{position:relative;flex:1;height:44px;padding:0 6px;line-height:44px;font-size:12px;color:#999;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fm-tmpl-listview-shop-footer .shop-footer-btns .shop-footer-btn-item .fm-icon{font-size:14px;margin-right:4px}.fm-tmpl-listview-shop-footer .shop-footer-btns .shop-footer-btn-item::after{position:absolute;right:0;top:50%;width:1px;height:22px;margin-top:-11px;background-color:#ddd;content:''}.fm-tmpl-listview-shop-footer .shop-footer-btns .shop-footer-btn-item:last-child::after{display:none}.fm-tmpl-listview-shop-first{padding-top:10px}.fm-tmpl-listview-menu{padding-bottom:10px;background:#f9fafb}.fm-tmpl-listview-menu-inner{padding:10px 16px 0;background-color:#fff}.fm-tmpl-listview-menu-text{margin-bottom:10px;line-height:20px;font-size:14px;color:#666}.fm-tmpl-listview-menu-content .menu-list{display:flex;align-items:center;flex-wrap:wrap}.fm-tmpl-listview-menu-content .menu-list-item{flex:0 0 25%;display:flex;flex-direction:column;align-items:center;margin-bottom:10px}.fm-tmpl-listview-menu-content .menu-list-item-icon{width:46px;height:46px;margin-bottom:6px;line-height:46px;text-align:center;color:#fff;border-radius:16px;background-color:#40a9ff}.fm-tmpl-listview-menu-content .menu-list-item-icon .fm-icon{font-size:26px}.fm-tmpl-listview-menu-content .menu-list-item-text{line-height:20px;font-size:14px;color:#666}.fm-tmpl-listview-menu-last{padding-bottom:0}.fm-tmpl-listview-menus.fm-listview-content{display:flex;align-items:center;flex-wrap:wrap}.fm-tmpl-listview-menus .fm-listview-item{flex:0 0 33.3333%}.fm-tmpl-listview-menus-item{display:flex;flex-direction:column;align-items:center;margin-bottom:16px}.fm-tmpl-listview-menus-item .menu-list-item-icon{width:46px;height:46px;margin-bottom:6px;line-height:46px;text-align:center;color:#fff;border-radius:16px;background-color:#40a9ff}.fm-tmpl-listview-menus-item .menu-list-item-icon .fm-icon{font-size:26px}.fm-tmpl-listview-menus-item .menu-list-item-text{line-height:20px;font-size:14px;color:#666}.fm-tmpl-listview-basic{display:flex;align-items:flex-start;padding:0 16px;margin-bottom:8px;font-size:14px;line-height:20px}.fm-tmpl-listview-basic .basic-lable{flex-shrink:0;width:82px;margin-right:14px;color:#999;text-align:right}.fm-tmpl-listview-basic .basic-text{flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden;color:#333}.fm-tmpl-listview-basic-last{margin-bottom:0}.fm-tmpl-listview-list{padding-left:16px}.fm-tmpl-listview-list .fm-tmpl-listview-list-inner{display:flex;justify-content:space-between;height:44px;padding-right:16px;font-size:15px;color:#333;line-height:44px;border-bottom:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-list .fm-tmpl-listview-list-inner{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-list .fm-tmpl-listview-list-inner::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-list .fm-tmpl-listview-list-inner .list-text{color:#FBB902}.fm-tmpl-listview-list-last .fm-tmpl-listview-list-inner{border-bottom:0}.fm-tmpl-listview-list-last .fm-tmpl-listview-list-inner::after{display:none!important}.fm-tmpl-listview-sign{padding:0 16px;background:#fff}.fm-tmpl-listview-sign .fm-tmpl-listview-sign-inner{margin-left:12px}.fm-tmpl-listview-sign .fm-tmpl-sign-text{position:relative;padding-left:18px}.fm-tmpl-listview-sign .fm-tmpl-sign-text .fm-tmpl-sign-circle{position:absolute;left:-8px;top:2px;width:18px;height:18px;border-radius:50%;background-color:rgba(54,165,246,.2)}.fm-tmpl-listview-sign .fm-tmpl-sign-text .text{line-height:22px;font-size:16px;color:#333;font-weight:600}.fm-tmpl-listview-sign .fm-tmpl-sign-text::after{position:absolute;left:-5px;top:5px;width:6px;height:6px;border:3px solid #fff;background-color:#36a5f6;border-radius:50%;content:'';box-sizing:content-box}.fm-tmpl-listview-sign .fm-tmpl-sign-text::before{position:absolute;left:-.5px;top:0;bottom:0;width:1px;border:1px dashed #ddd;background-color:transparent;content:'';transform:scaleX(.5)}.fm-tmpl-listview-sign .fm-tmpl-sign-content{padding:10px 0 10px 18px;border-left:1px dashed #ddd}.fm-tmpl-listview-sign .fm-tmpl-sign-content-inner{padding:10px 12px;background:#f4f7f9}.fm-tmpl-listview-sign .fm-tmpl-sign-content-name{display:flex;align-items:center;padding-bottom:6px;line-height:20px}.fm-tmpl-listview-sign .fm-tmpl-sign-content-name .fm-icon{margin-right:6px;font-size:16px;color:#36a5f6}.fm-tmpl-listview-sign .fm-tmpl-sign-content-name .name-text{font-size:15px;color:#333}.fm-tmpl-listview-sign .fm-tmpl-sign-content-label{padding-bottom:10px;font-size:14px;color:#999}.fm-tmpl-listview-sign .fm-tmpl-sign-content-imgs{display:flex;align-items:center;flex-wrap:wrap}.fm-tmpl-listview-sign .fm-tmpl-sign-content-imgs .fm-tmpl-sign-content-img{width:60px;height:60px;margin-right:10px;margin-bottom:10px;overflow:hidden}.fm-tmpl-listview-sign .fm-tmpl-sign-content-imgs .fm-tmpl-sign-content-img img{display:block;width:100%;height:100%;-o-object-fit:scale-down;object-fit:scale-down}.fm-tmpl-listview-sign.fm-tmpl-listview-sign-last{padding-bottom:12px}.fm-tmpl-listview-sign.fm-tmpl-listview-sign-last .fm-tmpl-sign-content{border-left:none}.fm-tmpl-listview-sign.fm-tmpl-listview-sign-last .fm-tmpl-sign-text::before{height:6px}.fm-tmpl-listview-sign.fm-tmpl-listview-sign-first{padding-top:12px}.fm-tmpl-listview-sign.fm-tmpl-listview-sign-first .fm-tmpl-sign-text::before{top:6px}.fm-tmpl-listview-bill{padding-left:12px}.fm-tmpl-listview-bill-content{display:flex}.fm-tmpl-listview-bill-content .bill-img-round-wrapper{padding-top:12px;margin-right:10px}.fm-tmpl-listview-bill-content .bill-img-round-wrapper .bill-img-round-img{width:30px;height:30px;border-radius:50%;text-align:center;color:#fff;background:#3a90ff}.fm-tmpl-listview-bill-content .bill-img-round-wrapper .bill-img-round-img .fm-icon{font-size:18px;line-height:30px}.fm-tmpl-listview-bill-content .bill-detail-content{flex-shrink:1;flex-grow:1;flex-basis:0;padding:12px 16px 8px 0;border-bottom:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-bill-content .bill-detail-content{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-bill-content .bill-detail-content::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-header{display:flex;align-items:center;justify-content:space-between;margin:0 0 6px}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-header .title{line-height:22px;font-weight:400;font-size:16px;color:#333}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-header .time{line-height:18px;color:#999;font-size:13px}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-info{display:flex;margin-bottom:4px}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-info-text{display:flex;flex-shrink:1;flex-grow:1;flex-basis:0;align-items:flex-start;line-height:18px;font-size:13px;color:#999}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-info-text .title{flex-shrink:0}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-info-text .text-orange{color:#FF9800}.fm-tmpl-listview-bill-content .bill-detail-content .bill-detail-info-status{padding-left:6px;margin-top:-2px}.fm-tmpl-listview-client{padding:0 8px 10px;background:#f9fafb}.fm-tmpl-listview-client-inner{background:#fff}.fm-tmpl-listview-client-header{padding:10px 10px 18px;display:flex;flex-direction:row}.fm-tmpl-listview-client-header .client-header-icon{flex-shrink:0;width:46px;height:46px;line-height:46px;margin-right:10px;text-align:center;background-color:#3a90ff;border-radius:6px}.fm-tmpl-listview-client-header .client-header-icon .fm-icon{font-size:24px;color:#fff}.fm-tmpl-listview-client-header .client-header-msg{flex-shrink:1;flex-grow:1;flex-basis:0;overflow:hidden}.fm-tmpl-listview-client-header .client-header-msg .client-header-name{display:flex;justify-content:space-between;margin-bottom:6px}.fm-tmpl-listview-client-header .client-header-msg .client-header-name-text{padding-right:6px;line-height:22px;font-size:16px;color:#333}.fm-tmpl-listview-client-header .client-header-msg .client-header-name-status{flex-shrink:0}.fm-tmpl-listview-client-header .client-header-msg .client-header-name-time{font-size:13px;color:#999}.fm-tmpl-listview-client-header .client-header-msg .client-header-site{line-height:18px;font-size:13px;color:#999}.fm-tmpl-listview-client-content .client-content-info{display:flex;align-items:center}.fm-tmpl-listview-client-content .text-orange{font-size:14px;color:#FF9800}.fm-tmpl-listview-client .client-content-item{display:flex;align-items:center;flex:1;margin-bottom:8px;padding:0 10px;line-height:18px;font-size:13px;color:#999}.fm-tmpl-listview-client .client-content-item .fm-icon{font-size:14px;margin-right:2px}.fm-tmpl-listview-client-first{padding-top:10px}.fm-tmpl-listview-client.fm-tmpl-listview-client-simple .fm-tmpl-listview-client-header{padding-bottom:10px}.fm-tmpl-listview-client.fm-tmpl-listview-client-simple .fm-tmpl-listview-client-header .client-header-msg .client-header-name{margin-bottom:0}.fm-tmpl-listview-client .text-success{color:#5CC171}.fm-tmpl-listview-client .text-warning{color:#FF9800}.fm-tmpl-listview-client .text-danger{color:#F24645}.fm-tmpl-listview-client .text-submit{color:#5AC1C3}.fm-tmpl-listview-client .text-info{color:#4D9AFF}.fm-tmpl-extend-card{padding:12px 16px}.fm-tmpl-extend-card-inner{position:relative;background-image:linear-gradient(152deg,#53bdfd 0,#287cf3 97%);box-shadow:0 2px 4px 0 rgba(57,66,100,.04);border-radius:10px;overflow:hidden}.fm-tmpl-extend-card-inner .fm-tmpl-extend-card-list{display:flex;justify-content:space-between;align-items:center;padding:20px}.fm-tmpl-extend-card-inner .fm-tmpl-extend-card-list .fm-tmpl-extend-card-item{display:flex;flex-direction:column;align-items:center;flex:1;color:#fff}.fm-tmpl-extend-card-inner .fm-tmpl-extend-card-list .fm-tmpl-extend-card-item .extend-card-item-text{display:flex;align-items:baseline}.fm-tmpl-extend-card-inner .fm-tmpl-extend-card-list .fm-tmpl-extend-card-item .extend-card-item-text .item-text{display:block;font-size:24px;line-height:32px}.fm-tmpl-extend-card-inner .fm-tmpl-extend-card-list .fm-tmpl-extend-card-item .extend-card-item-text .item-text-tip{font-size:12px}.fm-tmpl-extend-card-inner .fm-tmpl-extend-card-list .fm-tmpl-extend-card-item .extend-card-item-text .card-item-title{font-size:14px}.fm-tmpl-extend-card-inner::before{right:-7%;top:20%;width:80%;height:340%;border-radius:50%;opacity:.23;background-image:linear-gradient(180deg,#63ccfa 0,#36a5f6 100%);z-index:1}.fm-tmpl-extend-card-inner::after{right:-37%;bottom:-10%;width:60%;height:240%;border-radius:50%;opacity:.15;background-image:linear-gradient(134deg,#3addd5 0,#24c2d8 100%);z-index:0}.fm-tmpl-listview-liaison{padding-left:16px;margin-top:10px;background-color:#fff}.fm-tmpl-listview-liaison .liaison-header{display:flex;flex-direction:row;justify-content:space-between;padding:12px 16px 12px 0;border-bottom:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-liaison .liaison-header{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-liaison .liaison-header::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-liaison .liaison-header-title{flex:1 1 0;padding-right:16px;font-size:16px;color:#333;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.fm-tmpl-listview-liaison .liaison-header-tag{flex-shrink:0}.fm-tmpl-listview-liaison .liaison-content{padding:10px 0}.fm-tmpl-listview-liaison .liaison-content-info{display:flex;flex-direction:row;align-items:center;line-height:18px;color:#999;font-size:13px;margin:0 0 6px}.fm-tmpl-listview-booklist .booklist-btns .fm-button,.fm-tmpl-listview-liaison .liaison-actions .fm-button{margin-left:13px}.fm-tmpl-listview-liaison .liaison-content-info-title{flex-shrink:0;width:100px;padding-right:10px}.fm-tmpl-listview-liaison .liaison-content-info-text{flex:1 1 0;color:#333}.fm-tmpl-listview-liaison .liaison-actions{padding:0 16px 10px;text-align:right}.fm-tmpl-listview-liaison .liaison-actions .fm-button:first-child{margin-left:0}.fm-tmpl-listview-approve{padding:10px 0 10px 16px;background-color:#fff}.fm-tmpl-listview-approve .fm-approve-flow-item{padding-left:7px}.fm-tmpl-listview-approve .fm-approve-flow-item-header{border-left:1px dashed #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-approve .fm-approve-flow-item-header{border-left:none}html:not([data-scale]) .fm-tmpl-listview-approve .fm-approve-flow-item-header::before{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:0;right:auto;bottom:auto;left:0;width:1PX;height:100%;transform-origin:100% 50%;transform:scaleX(.5)}}.fm-tmpl-listview-approve .fm-approve-flow-item-header-inner{position:relative;display:flex;flex-direction:row;align-items:center;padding-left:20px}.fm-tmpl-listview-approve .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-icon{position:absolute;left:-7px;top:0;z-index:100;display:flex;align-items:center;justify-content:center;width:15px;height:15px;background-color:rgba(58,144,255,.4);border-radius:50%}.fm-tmpl-listview-approve .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-icon-inner{width:7px;height:7px;background-color:#3a90ff;border-radius:50%}.fm-tmpl-listview-approve .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-content{flex-shrink:1;flex-grow:1;flex-basis:0;line-height:21px;font-size:15px;color:#4c4c4c;font-weight:700}.fm-tmpl-listview-approve .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-right{flex-shrink:0;padding-left:6px}.fm-tmpl-listview-approve .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-right .fm-icon{color:#979797}.fm-tmpl-listview-approve .fm-approve-flow-item-content{padding:12px 0 30px 20px;border-left:1px dashed #d4d4d4;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-approve .fm-approve-flow-item-content{border-left:none}html:not([data-scale]) .fm-tmpl-listview-approve .fm-approve-flow-item-content::before{content:'';position:absolute;background-color:#d4d4d4;display:block;z-index:1;top:0;right:auto;bottom:auto;left:0;width:1PX;height:100%;transform-origin:100% 50%;transform:scaleX(.5)}}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list{display:flex;flex-direction:row;align-items:flex-start;margin-bottom:14px}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list:last-child{margin-bottom:0}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-avatar{position:relative;display:flex;flex-direction:row;align-items:center;width:36px;height:36px}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-avatar-img{display:block;width:36px;height:36px;border-radius:50%}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content{flex:1 1 0;margin-left:10px}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-main{display:flex;align-items:center;justify-content:space-between;height:36px}.fm-tmpl-listview-approve .fm-approve-flow-item-last .fm-approve-flow-item-content::before,.fm-tmpl-listview-approve .fm-approve-flow-item-last .fm-approve-flow-item-header::before{display:none!important}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-left,.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-left .item-list-content-name{font-size:14px;color:#666}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-left .item-list-content-status{margin-left:8px;color:#3a90ff}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-left .item-list-content-status-success{color:#5cc171}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-left .item-list-content-status-apply{color:#3a90ff}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-left .item-list-content-status-running{color:#ff9800}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-date{flex-shrink:0;font-size:13px;color:#999}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-list-content .item-list-content-message{line-height:20px;font-size:14px;color:#333}.fm-tmpl-listview-approve .fm-approve-flow-item-content .fm-approve-flow-item-date{font-size:13px;color:rgba(51,51,51,.65)}.fm-tmpl-listview-approve .fm-approve-flow-item-running .fm-approve-flow-item .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-icon{background-color:rgba(255,152,0,.4)}.fm-tmpl-listview-approve .fm-approve-flow-item-running .fm-approve-flow-item .fm-approve-flow-item-header-inner .fm-approve-flow-item-header-icon .fm-approve-flow-item-header-icon-inner{background-color:#ff9800}.fm-tmpl-listview-approve .fm-approve-flow-item-last .fm-approve-flow-item-header{border-left:0}.fm-tmpl-listview-approve .fm-approve-flow-item-last .fm-approve-flow-item-content{padding-bottom:12px;border-left:0}.fm-tmpl-listview-product-header{padding:12px 14px;line-height:20px;font-size:14px;color:#3a90ff}.fm-tmpl-listview-product-item .fm-listview-item .fm-listview-item-content{transform:none}.fm-tmpl-listview-product{padding:12px 16px 0}.fm-tmpl-listview-product .fm-tmpl-listview-product-inner{padding-bottom:12px;border-bottom:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-product .fm-tmpl-listview-product-inner{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-product .fm-tmpl-listview-product-inner::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-product .tmpl-product-title{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.fm-tmpl-listview-product .tmpl-product-title .tmpl-product-title-collect{flex-shrink:0}.fm-tmpl-listview-product .tmpl-product-title-text{font-size:17px;color:#333}.fm-tmpl-listview-product .tmpl-product-title-collect{flex-shrink:0;font-size:14px;color:#666}.fm-tmpl-listview-product .tmpl-product-title-collect .collect-text{margin-left:4px}.fm-tmpl-listview-product .tmpl-product-title-collect.tmpl-product-title-collected .fm-icon{color:#ff9800}.fm-tmpl-listview-product .tmpl-product-content{position:relative;padding-right:40px}.fm-tmpl-listview-product .tmpl-product-content-item{display:flex;align-items:center;margin-bottom:10px;font-size:14px;color:#666}.fm-tmpl-listview-product .tmpl-product-content .tmpl-product-add-btn{position:absolute;right:0;bottom:0}.fm-tmpl-listview-product .tmpl-product-content .tmpl-product-add-btn .fm-button-add{width:30px;height:30px}.fm-tmpl-listview-product .tmpl-product-content .tmpl-product-add-btn .fm-button-add .fm-icon{font-size:14px}.fm-tmpl-listview-product .tmpl-product-footer{display:flex;align-items:center;justify-content:space-between;margin-top:6px}.fm-tmpl-listview-product .tmpl-product-footer .tmpl-product-price{margin-right:10px;font-size:17px;color:red;font-weight:600}.fm-tmpl-listview-product .tmpl-product-footer .fm-popover .fm-popover-inner{border-radius:10px;box-shadow:none}.fm-tmpl-listview-product .tmpl-product-footer .fm-popover .fm-popover-arrow,.fm-tmpl-listview-product .tmpl-product-footer .fm-popover .fm-popover-inner{border:1px solid #ddd}.fm-tmpl-listview-product .tmpl-product-footer .fm-popover .fm-popover-inner-wrapper{padding:0}.fm-tmpl-listview-product .tmpl-product-footer .fm-popover .fm-popover-inner-wrapper .fm-popover-item{min-width:50px;height:46px;line-height:46px;text-align:center;font-size:16px;color:#666}.fm-tmpl-listview-product .tmpl-product-footer .fm-overlay{background:0 0}.fm-tmpl-listview-product .tmpl-product-footer .tmpl-product-unit{padding:3px 6px;border-radius:6px;background-color:rgba(58,144,255,.2);font-size:14px;color:#333}.fm-tmpl-listview-product .tmpl-product-footer .tmpl-product-unit-text{margin-right:4px}.fm-tmpl-listview-product .tmpl-product-footer .tmpl-product-unit .fm-icon{font-size:12px;color:#666}.fm-tmpl-listview-product .tmpl-product-footer .tmpl-product-footer-right{flex-shrink:0;font-size:12px;color:#666}.fm-tmpl-listview-product.fm-tmpl-listview-product-first{padding-top:0}.fm-card-tmpl-booklist-header{padding:11px 16px;line-height:22px;font-size:16px;color:#333;font-weight:600}.fm-tmpl-listview-booklist{padding:0 16px;color:#333;border-bottom:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-booklist{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-booklist::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-booklist-last{border-bottom:0}.fm-tmpl-listview-booklist-last::after{display:none!important}.fm-tmpl-listview-booklist .booklist-header{display:flex;flex-direction:row;align-items:flex-start;justify-content:space-between;padding:12px 0 6px;line-height:22px;font-size:16px}.fm-tmpl-listview-booklist .booklist-header-price{flex-shrink:0;color:#fa6400}.fm-tmpl-listview-booklist .booklist-main{padding-bottom:8px}.fm-tmpl-listview-booklist .booklist-main-item{line-height:18px;padding-bottom:4px;font-size:13px;color:#999}.fm-tmpl-listview-booklist .booklist-btns{padding:8px 0 6px;text-align:right}.fm-tmpl-dialog-plan,.fm-tmpl-dialog-type{border-radius:5px!important}.fm-tmpl-dialog-plan .fm-dialog-footer,.fm-tmpl-dialog-type .fm-dialog-footer{border-top:1px solid #ddd;position:relative}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-dialog-plan .fm-dialog-footer,html:not([data-scale]) .fm-tmpl-dialog-type .fm-dialog-footer{border-top:none}html:not([data-scale]) .fm-tmpl-dialog-plan .fm-dialog-footer::before,html:not([data-scale]) .fm-tmpl-dialog-type .fm-dialog-footer::before{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:0;right:auto;bottom:auto;left:0;width:100%;height:1PX;transform-origin:50% 50%;transform:scaleY(.5)}}.fm-tmpl-dialog-plan .fm-dialog-footer .fm-button,.fm-tmpl-dialog-type .fm-dialog-footer .fm-button{font-size:14px;color:#666}.fm-tmpl-dialog-type-content{padding:20px}.fm-tmpl-dialog-type-content .fm-dialog-type-list{display:flex;align-items:center;justify-content:center}.fm-tmpl-dialog-type-content .fm-dialog-type-list-item{flex:1}.fm-tmpl-dialog-type-content .fm-dialog-type-list-item .type-list-item-icon{width:60px;height:60px;margin:0 auto;line-height:60px;text-align:center;border:1px solid #3D91FF;border-radius:50%}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-dialog-type-content .fm-dialog-type-list-item .type-list-item-icon{position:relative;border:none}html:not([data-scale]) .fm-tmpl-dialog-type-content .fm-dialog-type-list-item .type-list-item-icon::before{content:'';position:absolute;left:0;top:0;width:200%;height:200%;border:1px solid #3D91FF;border-radius:100%;transform-origin:0 0;transform:scale(.5);box-sizing:border-box;pointer-events:none}}.fm-tmpl-dialog-type-content .fm-dialog-type-list-item .type-list-item-icon .fm-icon{font-size:26px;color:#3D91FF}.fm-tmpl-dialog-type-content .fm-dialog-type-list-item .type-list-item-text{margin-top:12px;font-size:16px;text-align:center;color:#666}.fm-tmpl-dialog-type-content .fm-dialog-type-list-item:active .type-list-item-icon{background-color:#3D91FF}.fm-tmpl-dialog-type-content .fm-dialog-type-list-item:active .type-list-item-icon .fm-icon{color:#fff}.fm-tmpl-dialog-plan-content{padding:20px 30px}.fm-tmpl-dialog-plan-content .fm-dialog-plan-item{display:flex;justify-content:center;height:40px;line-height:40px;margin-bottom:16px;align-items:center;color:#666;border:1px solid #ddd;border-radius:4px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-dialog-plan-content .fm-dialog-plan-item{position:relative;border:none}html:not([data-scale]) .fm-tmpl-dialog-plan-content .fm-dialog-plan-item::before{content:'';position:absolute;left:0;top:0;width:200%;height:200%;border:1px solid #ddd;border-radius:8px;transform-origin:0 0;transform:scale(.5);box-sizing:border-box;pointer-events:none}}.fm-tmpl-dialog-plan-content .fm-dialog-plan-item .plan-item-icon{margin-right:14px}.fm-tmpl-dialog-plan-content .fm-dialog-plan-item .fm-icon{color:#666}.fm-tmpl-dialog-plan-content .fm-dialog-plan-item:active,.fm-tmpl-dialog-plan-content .fm-dialog-plan-item:active .fm-icon{color:#3D91FF}.fm-tmpl-dialog-plan-content .fm-dialog-plan-item:active::before{border-color:#3D91FF!important}.fm-title{position:relative;padding-left:16px}.fm-title::before{position:absolute;left:0;top:50%;width:5px;height:16px;margin:-8px 0 0}.fm-title-text{font-size:16px;line-height:21px;color:#333}.fm-tmpl-search-action{position:relative}.fm-tmpl-search-action .fm-icon{font-size:20px;color:#666}.fm-tmpl-search-action-badge{position:absolute;top:0;right:0;min-width:16px;padding:0 3px;margin-top:4px;color:#fff;font-weight:500;font-size:12px;line-height:14px;text-align:center;background-color:#ee0a24;border:1px solid #fff;border-radius:16px;transform:translate(50%,-50%);transform-origin:100%}.fm-list-view-swipe-toolbar{display:flex;align-items:center;justify-content:center;padding:0 12px;height:100%;background-color:#f24645;font-size:16px;color:#fff}.fm-static-text-common{padding:12px 16px;background-color:#fff;margin-bottom:10px;font-size:13px;line-height:1.42;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.fm-static-text-common p:not(:last-child){padding-bottom:18px}.fm-tmpl-listview-common{font-size:16px;color:#333;padding:12px 16px 12px 0;margin-left:16px;border-bottom:1px solid #ddd;position:relative}.fm-tmpl-listview-common .fm-tmpl-row{display:flex;justify-content:space-between}.fm-tmpl-listview-common .fm-tmpl-row:not(:last-child){padding-bottom:8px}.fm-tmpl-listview-common .fm-tmpl-col{display:flex;align-items:center}.fm-tmpl-listview-common .fm-tmpl-title{line-height:22px}.fm-tmpl-listview-common .fm-tmpl-price{font-size:18px;color:#fa6400}.fm-tmpl-listview-common .fm-tmpl-label{font-size:14px;line-height:20px;display:flex;overflow:hidden}.fm-tmpl-listview-common .fm-tmpl-label .fm-tmpl-label-title{color:#999;width:92px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.fm-tmpl-listview-common .fm-tmpl-label .fm-tmpl-label-text{flex:1;overflow:hidden;text-overflow:ellipsis}.fm-tmpl-listview-common .fm-tmpl-col-1{flex:1;overflow:hidden}.fm-tmpl-listview-common .fm-tmpl-col-1:not(:last-child){padding-right:10px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:2dppx){html:not([data-scale]) .fm-tmpl-listview-common{border-bottom:none}html:not([data-scale]) .fm-tmpl-listview-common::after{content:'';position:absolute;background-color:#ddd;display:block;z-index:1;top:auto;right:auto;bottom:0;left:0;width:100%;height:1PX;transform-origin:50% 100%;transform:scaleY(.5)}}.fm-tmpl-listview-cell .fm-tmpl-row:not(:last-child){padding-bottom:3px}.fm-tmpl-listview-cell .fm-tmpl-label{font-size:13px;line-height:18px;color:#999}.fm-tmpl-listview-cell .fm-tmpl-label .fm-tmpl-label-title{width:auto} \ No newline at end of file diff --git a/packages/mobile-ui-vue/public/vite.svg b/packages/mobile-ui-vue/public/vite.svg new file mode 100644 index 00000000000..e7b8dfb1b2a --- /dev/null +++ b/packages/mobile-ui-vue/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/mobile-ui-vue/src/app.vue b/packages/mobile-ui-vue/src/app.vue new file mode 100644 index 00000000000..2a024f821f3 --- /dev/null +++ b/packages/mobile-ui-vue/src/app.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/packages/mobile-ui-vue/src/assets/vue.svg b/packages/mobile-ui-vue/src/assets/vue.svg new file mode 100644 index 00000000000..770e9d333ee --- /dev/null +++ b/packages/mobile-ui-vue/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/mobile-ui-vue/src/main.ts b/packages/mobile-ui-vue/src/main.ts new file mode 100644 index 00000000000..2fdabf74237 --- /dev/null +++ b/packages/mobile-ui-vue/src/main.ts @@ -0,0 +1,9 @@ +import { createApp } from 'vue'; +import './style.css'; +import '../components/theme/index.scss'; +import App from './app.vue'; +import router from './router'; +import FarrisMobile from '../components'; + +const app = createApp(App); +app.use(router).use(FarrisMobile).mount('#app'); diff --git a/packages/mobile-ui-vue/src/menu-data.ts b/packages/mobile-ui-vue/src/menu-data.ts new file mode 100644 index 00000000000..2c317a5a935 --- /dev/null +++ b/packages/mobile-ui-vue/src/menu-data.ts @@ -0,0 +1,54 @@ +export default { + views: [ + { + title: '表单组件', + subMenu: [ + { + title: '文件上传', + name: 'adv-uploader', + url: '/demos/adv-uploader', + component: '/adv-uploader' + } + ] + }, + { + title: '基础组件', + subMenu: [ + { + title: '弹出层', + name: 'popup', + url: '/demos/popup', + component: '/popup' + } + ] + }, + { + title: '反馈组件', + subMenu: [ + { + title: '动作面板', + name: 'actionsheet', + url: '/demos/actionsheet', + component: '/actionsheet' + } + ] + }, + { + title: '展示组件', + subMenu: [ + { + title: '导航栏', + name: 'navbar', + url: '/demos/navbar', + component: '/navbar' + }, + { + title: 'Listview', + name: 'listview', + url: '/demos/listview', + component: '/listview' + } + ] + } + ] +}; diff --git a/packages/mobile-ui-vue/src/router/index.ts b/packages/mobile-ui-vue/src/router/index.ts new file mode 100644 index 00000000000..6a31592f183 --- /dev/null +++ b/packages/mobile-ui-vue/src/router/index.ts @@ -0,0 +1,38 @@ +import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'; +import menuData from '../menu-data'; + +// @ts-ignore +const modules = import.meta.glob([`../../demos/**/index.vue`, `../../demos/index.vue`]); + +const allDemos: RouteRecordRaw[] = []; +menuData.views.forEach(view => { + if (!view.subMenu) { + return; + } + view.subMenu.forEach((menuItem) => { + allDemos.push({ + name: menuItem.name, + path: menuItem.name, + component: modules[`../../demos/${menuItem.name}/index.vue`] + }); + }); +}); + +const routes: RouteRecordRaw[] = [{ + name: 'home', + path: '/home', + component: modules["../../demos/home/index.vue"] +}, { + name: 'demos', + path: '/demos', + component: modules["../../demos/index.vue"], + children: allDemos +}, { + path: '/', + redirect: '/home' +}]; + +export default createRouter({ + history: createWebHashHistory(), + routes, +}); diff --git a/packages/mobile-ui-vue/src/style.css b/packages/mobile-ui-vue/src/style.css new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/mobile-ui-vue/src/vite-env.d.ts b/packages/mobile-ui-vue/src/vite-env.d.ts new file mode 100644 index 00000000000..f23102e81ed --- /dev/null +++ b/packages/mobile-ui-vue/src/vite-env.d.ts @@ -0,0 +1,9 @@ +/* eslint-disable @typescript-eslint/ban-types */ +// + +declare module '*.vue' { + import type { DefineComponent } from 'vue'; + + const component: DefineComponent<{}, {}, any>; + export default component; +} diff --git a/packages/mobile-ui-vue/tsconfig.json b/packages/mobile-ui-vue/tsconfig.json new file mode 100644 index 00000000000..204b057fd50 --- /dev/null +++ b/packages/mobile-ui-vue/tsconfig.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext", "DOM", "dom.iterable", "scripthost"], + "skipLibCheck": true, + "importHelpers": true, + "sourceMap": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true, + + /* Bundler mode */ + "moduleResolution": "Node", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "preserve", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "types": ["vitest/globals"], + "baseUrl": "./", + "paths": { + "@/*": ["components/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue", "components/**/*.ts", "components/**/*.tsx", "components/**/*.vue", "demos/**/*.ts", "demos/**/*.tsx", "demos/**/*.vue",], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/packages/mobile-ui-vue/tsconfig.node.json b/packages/mobile-ui-vue/tsconfig.node.json new file mode 100644 index 00000000000..08015cbb6fd --- /dev/null +++ b/packages/mobile-ui-vue/tsconfig.node.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "strict": true, + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["vite.config.ts"] +} diff --git a/packages/mobile-ui-vue/upload-mock.js b/packages/mobile-ui-vue/upload-mock.js new file mode 100644 index 00000000000..92708911567 --- /dev/null +++ b/packages/mobile-ui-vue/upload-mock.js @@ -0,0 +1,26 @@ +self.addEventListener('fetch', (event) => { + if (event.request.url.endsWith('/mock/upload')) { + + event.respondWith( + (async () => { + await new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, 4000); + }); + return new Response(JSON.stringify({ + success: true + }), { + headers: { + 'Content-type': 'application/json' + } + }); + })() + ); + + } else { + event.respondWith(caches.match(event.request).then((response) => { + return response || fetch(event.request); + })); + } +}); diff --git a/packages/mobile-ui-vue/vite.config.ts b/packages/mobile-ui-vue/vite.config.ts new file mode 100644 index 00000000000..d3d5a441c77 --- /dev/null +++ b/packages/mobile-ui-vue/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite'; +import { resolve } from 'path'; +import vue from '@vitejs/plugin-vue'; +import vueJsx from '@vitejs/plugin-vue-jsx'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [vue(), vueJsx()], + resolve: { + alias: [{ find: '@', replacement: resolve(__dirname, 'components') }] + } +}); diff --git a/yarn.lock b/yarn.lock index 04582edc675..1245c087006 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5047,6 +5047,11 @@ dependencies: commander "*" +"@types/crypto-js@^4.2.2": + version "4.2.2" + resolved "https://registry.npmmirror.com/@types/crypto-js/-/crypto-js-4.2.2.tgz#771c4a768d94eb5922cc202a3009558204df0cea" + integrity sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ== + "@types/echarts@^4.1.11": version "4.9.16" resolved "https://registry.yarnpkg.com/@types/echarts/-/echarts-4.9.16.tgz#7156aea4623f3543b083200f6c65e04d3693bcc8" @@ -5312,6 +5317,11 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/urlencode@^1.1.4": + version "1.1.4" + resolved "https://registry.npmmirror.com/@types/urlencode/-/urlencode-1.1.4.tgz#44097bdb08014d4c16eb98919e8cbd3d95ceff67" + integrity sha512-eBIJ1j50IlTOCd9Xq7Jd4XTinD0LRZkJfEbx8RXCRuVkOwWTenfEWquT5XlOXfpjFw3dP1U7vxxXExlU8R/rWA== + "@types/vfile-message@*": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" @@ -5744,6 +5754,11 @@ resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07" integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q== +"@vue/devtools-api@^6.5.1": + version "6.6.1" + resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.1.tgz#7c14346383751d9f6ad4bea0963245b30220ef83" + integrity sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA== + "@vue/reactivity-transform@3.2.47": version "3.2.47" resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz#e45df4d06370f8abf29081a16afd25cffba6d84e" @@ -6163,11 +6178,6 @@ dependencies: argparse "^2.0.1" -D@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/D/-/D-1.0.0.tgz#c348a4e034f72847be51206fc530fc089e9cc2a9" - integrity sha512-nQvrCBu7K2pSSEtIM0EEF03FVjcczCXInMt3moLNFbjlWx6bZrX72uT6/1uAXDbnzGUAx9gTyDiQ+vrFi663oA== - JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -6975,11 +6985,6 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== -axios-jsonp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/axios-jsonp/-/axios-jsonp-1.0.4.tgz#28878a48bbf38dbf07875fa283d9cf958c63b498" - integrity sha512-KI5Fc4ery6DR+oneXG09hPZfGuNUW8Lblhe750h53Z0Eh5MRsrHn49YitDU4RsMk0HV+12zcvL2Q51QkOLGdIQ== - axios@^1.0.0: version "1.3.4" resolved "https://registry.yarnpkg.com/axios/-/axios-1.3.4.tgz#f5760cefd9cfb51fd2481acf88c05f67c4523024" @@ -9287,6 +9292,11 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-js@^4.2.0: + version "4.2.0" + resolved "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" + integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== + crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -9500,6 +9510,11 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +dayjs@~1.11.10: + version "1.11.10" + resolved "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" @@ -13175,7 +13190,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3, iconv-lite@~0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -22521,6 +22536,13 @@ url@^0.11.0: punycode "^1.4.1" qs "^6.11.2" +urlencode@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/urlencode/-/urlencode-2.0.0.tgz#dd0c884d5cfb08adc76607ca3b9431165468695f" + integrity sha512-K4+koEq4II9FqKKdLyMwfVFiWvTLJsdsIihXCprumjlOwpviO44E4hAhLYBLb6CEVTZh9hXXMTQHIT+Hwv5BPw== + dependencies: + iconv-lite "~0.6.3" + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -23081,6 +23103,13 @@ vue-eslint-parser@^9.0.1: lodash "^4.17.21" semver "^7.3.6" +vue-router@^4.3.0: + version "4.3.2" + resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.3.2.tgz#08096c7765dacc6832f58e35f7a081a8b34116a7" + integrity sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q== + dependencies: + "@vue/devtools-api" "^6.5.1" + vue-template-compiler@^2.7.14: version "2.7.14" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz#4545b7dfb88090744c1577ae5ac3f964e61634b1" -- Gitee

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