详情页表单增加了锚点和错误提示

文件夹名称修改
使用label-suffix简化代码
master
toesbieya 6 years ago
parent 5226efe23f
commit e48fa27561
  1. 0
      vue/element-ui-personal/component/Menu/MenuItem.vue
  2. 4
      vue/element-ui-personal/component/Menu/Submenu.vue
  3. 0
      vue/element-ui-personal/component/Message/index.js
  4. 0
      vue/element-ui-personal/component/Message/main.vue
  5. 2
      vue/element-ui-personal/component/Select/Select.vue
  6. 2
      vue/element-ui-personal/component/Select/SelectDropdown.vue
  7. 8
      vue/element-ui-personal/index.js
  8. 0
      vue/element-ui-personal/mixin/vue-popper.js
  9. 2
      vue/package.json
  10. 2
      vue/src/api/account.js
  11. 2
      vue/src/asset/icon/index.js
  12. 0
      vue/src/asset/icon/svg/bug.svg
  13. 0
      vue/src/asset/icon/svg/check.svg
  14. 0
      vue/src/asset/icon/svg/documentation.svg
  15. 0
      vue/src/asset/icon/svg/eye-open.svg
  16. 0
      vue/src/asset/icon/svg/eye.svg
  17. 0
      vue/src/asset/icon/svg/home.svg
  18. 0
      vue/src/asset/icon/svg/icon.svg
  19. 0
      vue/src/asset/icon/svg/message.svg
  20. 0
      vue/src/asset/icon/svg/money.svg
  21. 0
      vue/src/asset/icon/svg/password.svg
  22. 0
      vue/src/asset/icon/svg/qq.svg
  23. 0
      vue/src/asset/icon/svg/sell.svg
  24. 0
      vue/src/asset/icon/svg/shopping.svg
  25. 0
      vue/src/asset/icon/svg/show.svg
  26. 0
      vue/src/asset/icon/svg/stock.svg
  27. 0
      vue/src/asset/icon/svg/system.svg
  28. 0
      vue/src/asset/icon/svg/user.svg
  29. 0
      vue/src/asset/icon/svgo.yml
  30. 0
      vue/src/asset/style/detail-page.scss
  31. 0
      vue/src/asset/style/display.scss
  32. 0
      vue/src/asset/style/element-ui.scss
  33. 0
      vue/src/asset/style/index.scss
  34. 0
      vue/src/asset/style/nprogress.scss
  35. 0
      vue/src/asset/style/transition.scss
  36. 0
      vue/src/asset/style/variables.scss
  37. 0
      vue/src/component/AbstractForm/AbstractFormItem.vue
  38. 128
      vue/src/component/AbstractForm/FormAnchor.vue
  39. 22
      vue/src/component/AbstractForm/FormCard.vue
  40. 129
      vue/src/component/AbstractForm/FormValidateInfo.vue
  41. 1
      vue/src/component/AbstractForm/index.vue
  42. 2
      vue/src/component/AbstractTable/index.vue
  43. 2
      vue/src/component/Charts/PieChart.vue
  44. 2
      vue/src/component/ColorCheckBox/group.vue
  45. 0
      vue/src/component/ColorCheckBox/index.vue
  46. 0
      vue/src/component/ContextMenu/ContextMenuItem.vue
  47. 2
      vue/src/component/ContextMenu/index.vue
  48. 0
      vue/src/component/Empty/DefaultEmptyImage.vue
  49. 0
      vue/src/component/Empty/index.vue
  50. 0
      vue/src/component/Empty/style.scss
  51. 0
      vue/src/component/ExtraArea/index.vue
  52. 2
      vue/src/component/FormDialog/index.vue
  53. 0
      vue/src/component/FormDialog/style.scss
  54. 0
      vue/src/component/LinerProgress/index.vue
  55. 2
      vue/src/component/LinerProgress/style.scss
  56. 0
      vue/src/component/LoadingMask/index.vue
  57. 0
      vue/src/component/OrgTree/OrgTreeNode.vue
  58. 0
      vue/src/component/OrgTree/index.vue
  59. 0
      vue/src/component/OrgTree/tree.scss
  60. 4
      vue/src/component/RegionSelector/Tab/index.vue
  61. 0
      vue/src/component/RegionSelector/Tab/style.scss
  62. 4
      vue/src/component/RegionSelector/Tree/TreeDialog.vue
  63. 0
      vue/src/component/RegionSelector/Tree/index.vue
  64. 0
      vue/src/component/RegionSelector/index.vue
  65. 0
      vue/src/component/RegionSelector/mixin.js
  66. 0
      vue/src/component/RegionSelector/store.js
  67. 0
      vue/src/component/SearchForm/SearchFormItem.vue
  68. 10
      vue/src/component/SearchForm/index.vue
  69. 4
      vue/src/component/Skeleton/PageSkeleton.vue
  70. 0
      vue/src/component/Skeleton/constant.js
  71. 0
      vue/src/component/Skeleton/index.vue
  72. 0
      vue/src/component/Skeleton/style.scss
  73. 2
      vue/src/component/SvgIcon/index.vue
  74. 4
      vue/src/component/TinymceEditor/index.vue
  75. 4
      vue/src/component/TreeSelect/index.vue
  76. 8
      vue/src/component/UploadFile/index.vue
  77. 2
      vue/src/component/UploadFile/style.scss
  78. 0
      vue/src/component/ZoomControl/index.vue
  79. 0
      vue/src/component/biz/CategoryTree/index.vue
  80. 0
      vue/src/component/biz/UserSelector/SimpleMultipleUserSelector.vue
  81. 0
      vue/src/component/biz/UserSelector/index.js
  82. 0
      vue/src/component/biz/doc/DocDetailFooter.vue
  83. 0
      vue/src/component/biz/doc/DocDetailHeader.vue
  84. 11
      vue/src/component/biz/doc/DocHistory.vue
  85. 0
      vue/src/component/biz/doc/DocSteps.vue
  86. 2
      vue/src/config/request.js
  87. 2
      vue/src/filter/index.js
  88. 0
      vue/src/globalMethod/BottomTip/index.js
  89. 0
      vue/src/globalMethod/BottomTip/main.vue
  90. 2
      vue/src/globalMethod/Guide/index.js
  91. 2
      vue/src/globalMethod/Guide/main.vue
  92. 0
      vue/src/globalMethod/Guide/style.scss
  93. 0
      vue/src/globalMethod/Guide/utils.js
  94. 0
      vue/src/globalMethod/ImageViewer/index.js
  95. 0
      vue/src/globalMethod/PuzzleVerify/image/btn_move.png
  96. 0
      vue/src/globalMethod/PuzzleVerify/image/btn_stop.png
  97. 0
      vue/src/globalMethod/PuzzleVerify/image/icon_close.png
  98. 0
      vue/src/globalMethod/PuzzleVerify/image/icon_info.png
  99. 0
      vue/src/globalMethod/PuzzleVerify/image/icon_refresh_bottom.png
  100. 0
      vue/src/globalMethod/PuzzleVerify/image/icon_refresh_top.png
  101. Some files were not shown because too many files have changed in this diff Show More

@ -3,7 +3,7 @@ import MenuMixin from 'element-ui/packages/menu/src/menu-mixin'
import Emitter from 'element-ui/lib/mixins/emitter'
import Popper from 'element-ui/lib/utils/vue-popper'
const PopperMixins = {
const PopperMixin = {
props: {
transformOrigin: {type: [Boolean, String], default: false},
offset: Popper.props.offset,
@ -21,7 +21,7 @@ export default {
componentName: 'ElSubmenu',
mixins: [MenuMixin, Emitter, PopperMixins],
mixins: [MenuMixin, Emitter, PopperMixin],
props: {
index: String,

@ -116,7 +116,7 @@ import Emitter from 'element-ui/lib/mixins/emitter'
import Focus from 'element-ui/lib/mixins/focus'
import Locale from 'element-ui/lib/mixins/locale'
import ElSelectMenu from './SelectDropdown.vue'
import {debounce} from '@/utils'
import {debounce} from '@/util'
import Clickoutside from 'element-ui/lib/utils/clickoutside'
import {addResizeListener, removeResizeListener} from 'element-ui/lib/utils/resize-event'
import {t} from 'element-ui/lib/locale'

@ -9,7 +9,7 @@
</template>
<script type="text/babel">
import Popper from '@ele/mixins/vue-popper'
import Popper from '@ele/mixin/vue-popper'
export default {
name: 'ElSelectDropdown',

@ -1,7 +1,7 @@
import MenuItem from "./components/Menu/MenuItem"
import Submenu from "./components/Menu/Submenu"
import Message from "./components/Message"
//import Select from './components/Select/Select'
import MenuItem from "./component/Menu/MenuItem"
import Submenu from "./component/Menu/Submenu"
import Message from "./component/Message"
//import Select from './component/Select/Select'
const components = [MenuItem, Submenu]

@ -5,7 +5,7 @@
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"svgo": "svgo -f src/assets/icons/svg --config=src/assets/icons/svgo.yml"
"svgo": "svgo -f src/asset/icon/svg --config=src/asset/icon/svgo.yml"
},
"dependencies": {
"axios": "^0.19.2",

@ -1,5 +1,5 @@
import request from "@/config/request"
import {isEmpty} from "@/utils"
import {isEmpty} from "@/util"
export const baseUrl = '/account'

@ -1,5 +1,5 @@
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'
import SvgIcon from '@/component/SvgIcon'
Vue.component('svg-icon', SvgIcon)

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 605 B

After

Width:  |  Height:  |  Size: 605 B

Before

Width:  |  Height:  |  Size: 418 B

After

Width:  |  Height:  |  Size: 418 B

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 944 B

After

Width:  |  Height:  |  Size: 944 B

Before

Width:  |  Height:  |  Size: 488 B

After

Width:  |  Height:  |  Size: 488 B

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 669 B

After

Width:  |  Height:  |  Size: 669 B

Before

Width:  |  Height:  |  Size: 335 B

After

Width:  |  Height:  |  Size: 335 B

Before

Width:  |  Height:  |  Size: 623 B

After

Width:  |  Height:  |  Size: 623 B

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before

Width:  |  Height:  |  Size: 532 B

After

Width:  |  Height:  |  Size: 532 B

Before

Width:  |  Height:  |  Size: 522 B

After

Width:  |  Height:  |  Size: 522 B

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 440 B

@ -0,0 +1,128 @@
<template>
<div class="form-anchor">
<div
v-for="i in data"
:key="i.ref"
:class="{'active':i.ref === cur}"
@click="() => click(i.ref)"
>
{{ i.label }}
</div>
</div>
</template>
<script>
import {debounce} from "@/util"
import {getScroll, getOffsetTop, scrollTo} from "@/util/browser"
export default {
name: "FormAnchor",
props: {
reference: Function,
data: {type: Array, default: () => []},
offsetTop: Number,
bounds: Number,
getContainer: {
type: Function,
default: () => document.querySelector('#app .app-main>.el-scrollbar>.el-scrollbar__wrap')
},
},
data: () => ({cur: null}),
methods: {
getCur(offsetTop = 0, bounds = 5) {
const sections = []
const container = this.getContainer()
this.data.forEach(({ref}) => {
const target = this.getDomFromRef(ref)
const top = getOffsetTop(target, container)
if (top < offsetTop + bounds) {
sections.push({ref, top})
}
})
if (sections.length) {
const max = sections.reduce((prev, curr) => (curr.top > prev.top ? curr : prev))
return max.ref
}
return ''
},
getDomFromRef(ref) {
const refs = this.reference()
return refs[ref]['$el'] || refs[ref][0]['$el']
},
click(ref) {
if (!ref || this.animating || !this.reference) return
this.cur = ref
const {offsetTop, getContainer, targetOffset} = this
const container = getContainer()
const scrollTop = getScroll(container, true)
const targetElement = this.getDomFromRef(ref)
if (!targetElement) return
const eleOffsetTop = getOffsetTop(targetElement, container)
let y = scrollTop + eleOffsetTop
y -= targetOffset !== undefined ? targetOffset : offsetTop || 0
this.animating = true
scrollTo(y, {callback: () => this.animating = false, getContainer})
},
scroll() {
if (this.animating || !this.reference) return
const {offsetTop, bounds, targetOffset} = this
this.cur = this.getCur(targetOffset !== undefined ? targetOffset : offsetTop || 0, bounds)
}
},
mounted() {
this.scroll()
const container = this.getContainer()
this.handleScroll = debounce(this.scroll)
container.addEventListener('scroll', this.handleScroll)
this.$once('hook:beforeDestroy', () => {
container.removeEventListener('scroll', this.handleScroll)
})
}
}
</script>
<style lang="scss">
@import "~@/asset/style/variables.scss";
.form-anchor {
position: fixed;
right: 0;
top: 200px;
min-width: 72px;
overflow: hidden;
border-radius: 4px 0 0 4px;
background: #fff;
box-shadow: 0 2px 12px 0 rgba(166, 167, 173, 0.5);
z-index: 100;
> div {
width: inherit;
height: 28px;
line-height: 28px;
text-align: center;
color: #7C7E85;
padding: 0 10px;
font-size: 12px;
cursor: pointer;
&:hover,
&.active {
color: $--color-primary
}
&:not(:last-child) {
box-shadow: 0 1px 0 0 rgba(166, 167, 173, 0.1);
}
}
}
</style>

@ -2,7 +2,7 @@
<el-card :class="{collapsed}">
<div slot="header" class="clearfix">
<slot name="header">{{ header }}</slot>
<i class="el-icon-arrow-up collapse-card-icon" @click="collapse"/>
<i class="el-icon-arrow-up form-card-icon"/>
</div>
<slot/>
</el-card>
@ -10,35 +10,39 @@
<script>
export default {
name: "CollapseCard",
name: "FormCard",
props: {
header: String
},
data() {
return {
collapsed: false
}
},
data: () => ({collapsed: false}),
methods: {
collapse() {
this.collapsed = !this.collapsed
}
},
mounted() {
const dom = this.$el.querySelector('.el-card__header')
dom.addEventListener('click', this.collapse)
this.$once('hook:beforeDestroy', () => {
dom.removeEventListener('click', this.collapse)
})
}
}
</script>
<style>
.collapse-card-icon {
.form-card-icon {
float: right;
font-weight: bold;
transition: transform .3s;
cursor: pointer;
}
.collapsed .collapse-card-icon {
.collapsed .form-card-icon {
transform: rotate(180deg);
}

@ -0,0 +1,129 @@
<template>
<el-popover
ref="popover"
:disabled="error.length === 0"
placement="top"
width="256"
trigger="click"
popper-class="form-validate-info"
>
<div class="form-validate-info-title">表单校验信息</div>
<div class="form-validate-info-content">
<div v-for="i in error" :key="i.prop" class="form-validate-info-item" @click="() => onClick(i)">
<i class="el-icon-circle-close"/>
<div class="form-validate-info-item-msg">{{ i.msg }}</div>
<div class="form-validate-info-item-label">{{ i.label }}</div>
</div>
</div>
<template slot="reference">
<span v-show="error.length > 0" class="form-validate-info-ref">
<i class="el-icon-circle-close"/>
{{ error.length }}
</span>
</template>
</el-popover>
</template>
<script>
export default {
name: "FormValidateInfo",
props: {form: Function},
data() {
return {
visible: false,
error: []
}
},
methods: {
onValidate(prop, success, msg) {
const alreadyIndex = this.error.findIndex(i => i.prop === prop)
if (alreadyIndex !== -1) {
if (success) this.error.splice(alreadyIndex, 1)
else this.$set(this.error, alreadyIndex, {...this.error[alreadyIndex], msg})
}
else {
if (success) return
const formItem = this.findFormItem(prop)
this.error.push({prop, msg, label: formItem.label})
}
},
onClick({prop}) {
const formItem = this.findFormItem(prop)
formItem && formItem.$el.scrollIntoView({block: 'center'})
this.$refs.popover.doClose()
},
findFormItem(prop) {
return this.form().fields.find(i => i.prop === prop)
}
},
mounted() {
const form = this.form()
form.$on('validate', this.onValidate)
this.$once('hook:beforeDestroy', () => {
form.$off('validate', this.onValidate)
})
}
}
</script>
<style lang="scss">
@import "~@/asset/style/variables.scss";
.form-validate-info {
&.el-popper {
padding: 0;
}
&-ref {
padding: 0 10px;
cursor: pointer;
}
&-title {
text-align: center;
padding: 5px 16px 4px;
border-bottom: 1px solid #f0f0f0;
}
&-content {
max-height: 300px;
overflow: overlay;
}
&-item {
padding: 8px 16px;
background-color: #fff;
border-bottom: 1px solid #f0f0f0;
cursor: pointer;
transition: background-color .3s;
&:hover {
background-color: #e6f7ff;
}
.el-icon-circle-close {
float: left;
margin-top: 4px;
margin-right: 12px;
padding-bottom: 22px;
}
&-label {
margin-top: 2px;
color: rgba(0, 0, 0, .45);
font-size: 12px;
}
}
&-ref,
&-item .el-icon-circle-close {
color: $--color-danger;
}
}
</style>

@ -11,6 +11,7 @@ export default {
ref="form"
label-position="right"
label-width="100px"
label-suffix=":"
size="small"
status-icon
{...data}

@ -1,5 +1,5 @@
<script type="text/jsx">
import Empty from "@/components/Empty"
import Empty from "@/component/Empty"
export default {
name: "AbstractTable",

@ -3,7 +3,7 @@
</template>
<script>
import {logic, resize} from "@/mixins/chart"
import {logic, resize} from "@/mixin/chart"
export default {
mixins: [resize, logic],

@ -21,7 +21,7 @@ export default {
</script>
<style lang="scss">
@import "~@/assets/styles/variables.scss";
@import "~@/asset/style/variables.scss";
.color-checkbox-group {
@include clearfix

@ -63,7 +63,7 @@ export default {
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/variables.scss";
@import "~@/asset/style/variables.scss";
.contextmenu {
margin: 0;

@ -1,5 +1,5 @@
<script type="text/jsx">
import LoadingMask from '@/components/LoadingMask'
import LoadingMask from '@/component/LoadingMask'
export default {
name: "FormDialog",

@ -1,4 +1,4 @@
@import "~@/assets/styles/variables.scss";
@import "~@/asset/style/variables.scss";
.liner-progress {
position: relative;

@ -59,8 +59,8 @@
</template>
<script>
import {debounce} from "@/utils"
import {createLimitTree, getNodeId} from "@/utils/tree"
import {debounce} from "@/util"
import {createLimitTree, getNodeId} from "@/util/tree"
import {store, init} from '../store'
import common from '../mixin'

@ -1,7 +1,7 @@
<script type="text/jsx">
import {store, init} from '../store'
import FormDialog from "@/components/FormDialog"
import {createLimitTree, getNodeId} from "@/utils/tree"
import FormDialog from "@/component/FormDialog"
import {createLimitTree, getNodeId} from "@/util/tree"
export default {
components: {FormDialog},

@ -1,5 +1,5 @@
<script type="text/jsx">
import {getElementInnerWidth} from '@/utils/browser'
import {getElementInnerWidth} from '@/util/browser'
export default {
name: "SearchForm",
@ -93,7 +93,13 @@ export default {
}
return (
<el-form class="searchForm" label-position="right" label-width={this.labelWidth} size="small">
<el-form
class="searchForm"
label-position="right"
label-width={this.labelWidth}
label-suffix=":"
size="small"
>
<el-row gutter={20}>
{this.num > slots.length ? slots : slots.slice(0, this.num)}
</el-row>

@ -1,5 +1,5 @@
<script type="text/jsx">
//https://antdv.com/components/skeleton-cn/
//https://antdv.com/component/skeleton-cn/
import QSkeleton from './index'
export default {
@ -26,7 +26,7 @@ export default {
</script>
<style lang="scss">
@import "~@/assets/styles/variables.scss";
@import "~@/asset/style/variables.scss";
.page-skeleton-wrapper {
margin: $page-view-margin;

@ -1,5 +1,5 @@
<script type="text/jsx">
import {isExternal} from '@/utils/validate'
import {isExternal} from '@/util/validate'
export default {
name: 'SvgIcon',

@ -7,8 +7,8 @@
</template>
<script>
import {waitUntilSuccess} from "@/utils"
import {elError} from "@/utils/message"
import {waitUntilSuccess} from "@/util"
import {elError} from "@/util/message"
const DEFAULT_OPTIONS = {
language: 'zh_CN',

@ -47,8 +47,8 @@
</template>
<script>
import {debounce} from "@/utils"
import {flatTree} from "@/utils/tree"
import {debounce} from "@/util"
import {flatTree} from "@/util/tree"
export default {
name: "TreeSelect",

@ -57,10 +57,10 @@
* */
import axios from 'axios'
import {attachmentPrefix} from '@/config'
import {debounce, isEmpty} from '@/utils'
import {elError} from "@/utils/message"
import {isImage, isDoc, isPdf, isPpt, isRar, isXls, isTxt, isZip} from "@/utils/validate"
import {preview, deleteUpload, download, upload, autoCompleteUrl} from "@/utils/file"
import {debounce, isEmpty} from '@/util'
import {elError} from "@/util/message"
import {isImage, isDoc, isPdf, isPpt, isRar, isXls, isTxt, isZip} from "@/util/validate"
import {preview, deleteUpload, download, upload, autoCompleteUrl} from "@/util/file"
const typeMapper = [
{test: isImage}, {test: isDoc, type: 'doc'}, {test: isPdf, type: 'pdf'}, {test: isPpt, type: 'ppt'},

@ -1,4 +1,4 @@
@import "~@/assets/styles/variables.scss";
@import "~@/asset/style/variables.scss";
.disabled .el-upload--picture-card {
display: none;

@ -1,5 +1,5 @@
<template>
<collapse-card header="单据历史" style="margin-top: 16px">
<div>
<abstract-table v-loading="loading" :data="data" :highlight-current-row="false">
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="操作人" prop="uname"/>
@ -17,19 +17,18 @@
layout="total, prev, pager, next, jumper"
@current-change="pageChange"
/>
</collapse-card>
</div>
</template>
<script>
import AbstractTable from "@/components/AbstractTable"
import CollapseCard from '@/components/CollapseCard'
import AbstractTable from "@/component/AbstractTable"
import {searchHistory} from "@/api/doc/history"
import {isEmpty, timeFormat} from "@/utils"
import {isEmpty, timeFormat} from "@/util"
export default {
name: "DocHistory",
components: {AbstractTable, CollapseCard},
components: {AbstractTable},
props: {id: String},

@ -1,7 +1,7 @@
import axios from 'axios'
import {apiPrefix} from '@/config'
import {MessageBox, Notification} from 'element-ui'
import Message from '@ele/components/Message'
import Message from '@ele/component/Message'
import store from '@/store'
const service = axios.create({

@ -1,4 +1,4 @@
import {isEmpty, timeFormat} from '@/utils'
import {isEmpty, timeFormat} from '@/util'
export function timestamp2Date(timestamp) {
if (isEmpty(timestamp)) return ''

@ -1,6 +1,6 @@
import Vue from 'vue'
import Main from './main.vue'
import {mergeObj} from "@/utils"
import {mergeObj} from "@/util"
const GuideConstructor = Vue.extend(Main)

@ -37,7 +37,7 @@
* 由driver.js改造而来
* vue里交互型的导航不太行太多东西做不到换成引导手册吧
*/
import {debounce, isEmpty} from "@/utils"
import {debounce, isEmpty} from "@/util"
import {addHighlightClasses, getCalculatedPosition, inAppView, jump, removeHighlightClasses} from "./utils"
export default {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save