gi-component 0.0.48 → 0.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/components/button/index.d.ts +2 -1
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/src/{button.vue.d.ts → button.d.ts} +5 -3
- package/dist/components/button/src/button.d.ts.map +1 -0
- package/dist/components/button/src/type.d.ts +1 -0
- package/dist/components/button/src/type.d.ts.map +1 -0
- package/dist/components/card/index.d.ts +2 -1
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/src/card.d.ts +37 -0
- package/dist/components/card/src/card.d.ts.map +1 -0
- package/dist/components/card/src/type.d.ts +1 -0
- package/dist/components/card/src/type.d.ts.map +1 -0
- package/dist/components/descriptions/index.d.ts +2 -2
- package/dist/components/descriptions/index.d.ts.map +1 -0
- package/dist/components/descriptions/src/descriptions.d.ts +25 -0
- package/dist/components/descriptions/src/descriptions.d.ts.map +1 -0
- package/dist/components/descriptions/src/type.d.ts +25 -11
- package/dist/components/descriptions/src/type.d.ts.map +1 -0
- package/dist/components/dialog/index.d.ts +2 -1
- package/dist/components/dialog/index.d.ts.map +1 -0
- package/dist/components/dialog/src/dialog-content.d.ts +11 -0
- package/dist/components/dialog/src/dialog-content.d.ts.map +1 -0
- package/dist/components/dialog/src/dialog.d.ts +16 -0
- package/dist/components/dialog/src/dialog.d.ts.map +1 -0
- package/dist/components/dialog/src/type.d.ts +1 -0
- package/dist/components/dialog/src/type.d.ts.map +1 -0
- package/dist/components/dot/index.d.ts +2 -1
- package/dist/components/dot/index.d.ts.map +1 -0
- package/dist/components/dot/src/dot.d.ts +9 -0
- package/dist/components/dot/src/dot.d.ts.map +1 -0
- package/dist/components/dot/src/type.d.ts +1 -0
- package/dist/components/dot/src/type.d.ts.map +1 -0
- package/dist/components/drawer/index.d.ts +2 -1
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/drawer/src/drawer.d.ts +1 -0
- package/dist/components/drawer/src/drawer.d.ts.map +1 -0
- package/dist/components/drawer/src/type.d.ts +1 -0
- package/dist/components/drawer/src/type.d.ts.map +1 -0
- package/dist/components/edit-table/index.d.ts +2 -1
- package/dist/components/edit-table/index.d.ts.map +1 -0
- package/dist/components/edit-table/src/type.d.ts +1 -0
- package/dist/components/edit-table/src/type.d.ts.map +1 -0
- package/dist/components/flex/index.d.ts +2 -1
- package/dist/components/flex/index.d.ts.map +1 -0
- package/dist/components/flex/src/{flex.vue.d.ts → flex.d.ts} +5 -2
- package/dist/components/flex/src/flex.d.ts.map +1 -0
- package/dist/components/flex/src/type.d.ts +3 -0
- package/dist/components/flex/src/type.d.ts.map +1 -0
- package/dist/components/form/index.d.ts +2 -1
- package/dist/components/form/index.d.ts.map +1 -0
- package/dist/components/form/src/type.d.ts +1 -0
- package/dist/components/form/src/type.d.ts.map +1 -0
- package/dist/components/grid/index.d.ts +3 -2
- package/dist/components/grid/index.d.ts.map +1 -0
- package/dist/components/grid/src/context.d.ts +1 -0
- package/dist/components/grid/src/context.d.ts.map +1 -0
- package/dist/components/grid/src/{grid-item.vue.d.ts → grid-item.d.ts} +9 -8
- package/dist/components/grid/src/grid-item.d.ts.map +1 -0
- package/dist/components/grid/src/{grid.vue.d.ts → grid.d.ts} +7 -6
- package/dist/components/grid/src/grid.d.ts.map +1 -0
- package/dist/components/grid/src/hook/use-index.d.ts +3 -2
- package/dist/components/grid/src/hook/use-index.d.ts.map +1 -0
- package/dist/components/grid/src/hook/use-responsive-state.d.ts +3 -2
- package/dist/components/grid/src/hook/use-responsive-state.d.ts.map +1 -0
- package/dist/components/grid/src/hook/use-responsive-value.d.ts +3 -2
- package/dist/components/grid/src/hook/use-responsive-value.d.ts.map +1 -0
- package/dist/components/grid/src/interface.d.ts +1 -0
- package/dist/components/grid/src/interface.d.ts.map +1 -0
- package/dist/components/grid/src/type.d.ts +1 -0
- package/dist/components/grid/src/type.d.ts.map +1 -0
- package/dist/components/grid/src/utils/global-config.d.ts +1 -0
- package/dist/components/grid/src/utils/global-config.d.ts.map +1 -0
- package/dist/components/grid/src/utils/index.d.ts +1 -0
- package/dist/components/grid/src/utils/index.d.ts.map +1 -0
- package/dist/components/grid/src/utils/is.d.ts +1 -0
- package/dist/components/grid/src/utils/is.d.ts.map +1 -0
- package/dist/components/grid/src/utils/responsive-observe.d.ts +1 -0
- package/dist/components/grid/src/utils/responsive-observe.d.ts.map +1 -0
- package/dist/components/input-group/index.d.ts +2 -1
- package/dist/components/input-group/index.d.ts.map +1 -0
- package/dist/components/input-group/src/{input-group.vue.d.ts → input-group.d.ts} +3 -1
- package/dist/components/input-group/src/input-group.d.ts.map +1 -0
- package/dist/components/input-group/src/type.d.ts +1 -0
- package/dist/components/input-group/src/type.d.ts.map +1 -0
- package/dist/components/input-search/index.d.ts +2 -1
- package/dist/components/input-search/index.d.ts.map +1 -0
- package/dist/components/input-search/src/{input-search.vue.d.ts → input-search.d.ts} +6 -4
- package/dist/components/input-search/src/input-search.d.ts.map +1 -0
- package/dist/components/input-search/src/type.d.ts +1 -0
- package/dist/components/input-search/src/type.d.ts.map +1 -0
- package/dist/components/nav-tabs/index.d.ts +2 -1
- package/dist/components/nav-tabs/index.d.ts.map +1 -0
- package/dist/components/nav-tabs/src/{nav-tabs.vue.d.ts → nav-tabs.d.ts} +6 -4
- package/dist/components/nav-tabs/src/nav-tabs.d.ts.map +1 -0
- package/dist/components/nav-tabs/src/type.d.ts +1 -0
- package/dist/components/nav-tabs/src/type.d.ts.map +1 -0
- package/dist/components/page-layout/index.d.ts +2 -1
- package/dist/components/page-layout/index.d.ts.map +1 -0
- package/dist/components/page-layout/src/page-layout.d.ts +219 -0
- package/dist/components/page-layout/src/page-layout.d.ts.map +1 -0
- package/dist/components/page-layout/src/{split-button.vue.d.ts → split-button.d.ts} +5 -3
- package/dist/components/page-layout/src/split-button.d.ts.map +1 -0
- package/dist/components/page-layout/src/type.d.ts +12 -0
- package/dist/components/page-layout/src/type.d.ts.map +1 -0
- package/dist/components/page-layout/src/useAutoCollapse.d.ts +12 -0
- package/dist/components/page-layout/src/useAutoCollapse.d.ts.map +1 -0
- package/dist/components/table/index.d.ts +5 -2
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/src/{TableColumn.vue.d.ts → table-column.d.ts} +1 -0
- package/dist/components/table/src/table-column.d.ts.map +1 -0
- package/dist/components/table/src/type.d.ts +7 -6
- package/dist/components/table/src/type.d.ts.map +1 -0
- package/dist/components/tabs/index.d.ts +2 -1
- package/dist/components/tabs/index.d.ts.map +1 -0
- package/dist/components/tabs/src/{tabs.vue.d.ts → tabs.d.ts} +16 -14
- package/dist/components/tabs/src/tabs.d.ts.map +1 -0
- package/dist/components/tabs/src/type.d.ts +1 -0
- package/dist/components/tabs/src/type.d.ts.map +1 -0
- package/dist/components/tag/index.d.ts +2 -1
- package/dist/components/tag/index.d.ts.map +1 -0
- package/dist/components/tag/src/{tag.vue.d.ts → tag.d.ts} +7 -5
- package/dist/components/tag/src/tag.d.ts.map +1 -0
- package/dist/components/tag/src/type.d.ts +1 -0
- package/dist/components/tag/src/type.d.ts.map +1 -0
- package/dist/components/tree-transfer/index.d.ts +2 -1
- package/dist/components/tree-transfer/index.d.ts.map +1 -0
- package/dist/components/tree-transfer/src/tree-transfer.d.ts +14438 -0
- package/dist/components/tree-transfer/src/tree-transfer.d.ts.map +1 -0
- package/dist/components/tree-transfer/src/type.d.ts +1 -0
- package/dist/components/tree-transfer/src/type.d.ts.map +1 -0
- package/dist/components/tree-transfer/src/utils.d.ts +1 -0
- package/dist/components/tree-transfer/src/utils.d.ts.map +1 -0
- package/dist/gi.css +1 -1
- package/dist/global.d.ts +26 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/useBemClass.d.ts +1 -0
- package/dist/hooks/useBemClass.d.ts.map +1 -0
- package/dist/hooks/useNavTabs.d.ts +1 -0
- package/dist/hooks/useNavTabs.d.ts.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +148 -47
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/dist/types/tool.d.ts +1 -0
- package/dist/types/tool.d.ts.map +1 -0
- package/dist/utils/createSelectDialog.d.ts +1 -0
- package/dist/utils/createSelectDialog.d.ts.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/package.json +7 -6
- package/dist/components/card/src/card.vue.d.ts +0 -35
- package/dist/components/descriptions/src/descriptions.vue.d.ts +0 -20
- package/dist/components/dialog/src/dialog-content.vue.d.ts +0 -9
- package/dist/components/dialog/src/dialog.vue.d.ts +0 -43
- package/dist/components/dot/src/dot.vue.d.ts +0 -7
- package/dist/components/drawer/src/drawer.vue.d.ts +0 -47
- package/dist/components/page-layout/src/page-layout.vue.d.ts +0 -19
- package/dist/components/plus-tabs/index.d.ts +0 -8
- package/dist/components/plus-tabs/src/context.d.ts +0 -26
- package/dist/components/plus-tabs/src/plus-tab-pane.vue.d.ts +0 -39
- package/dist/components/plus-tabs/src/plus-tabs.vue.d.ts +0 -78
- package/dist/components/plus-tabs/src/type.d.ts +0 -5
- package/dist/components/tab/index.d.ts +0 -2
- package/dist/components/tab/src/context.d.ts +0 -10
- package/dist/components/tab/src/tab-item.vue.d.ts +0 -26
- package/dist/components/tab/src/tab.vue.d.ts +0 -44
- package/dist/components/tab/src/type.d.ts +0 -21
- package/dist/components/tab/src/use-nav-tabs.d.ts +0 -2
- package/dist/components/tab/src/use-tabs.d.ts +0 -13
- package/dist/components/table/src/table.d.ts +0 -4
- package/dist/components/table/src/table.vue.d.ts +0 -4
- package/dist/components/table-pro/index.d.ts +0 -4
- package/dist/components/table-pro/src/table-pro-column-setting.vue.d.ts +0 -13
- package/dist/components/table-pro/src/type.d.ts +0 -5
- package/dist/components/tree-transfer/src/tree-transfer.vue.d.ts +0 -14436
- package/dist/components.d.ts +0 -27
- package/packages/components/button/index.ts +0 -5
- package/packages/components/button/src/button.vue +0 -60
- package/packages/components/button/src/type.ts +0 -15
- package/packages/components/card/index.ts +0 -5
- package/packages/components/card/src/card.vue +0 -171
- package/packages/components/card/src/type.ts +0 -12
- package/packages/components/descriptions/index.ts +0 -5
- package/packages/components/descriptions/src/descriptions.vue +0 -72
- package/packages/components/descriptions/src/type.ts +0 -44
- package/packages/components/dialog/index.ts +0 -6
- package/packages/components/dialog/src/dialog-content.vue +0 -40
- package/packages/components/dialog/src/dialog.ts +0 -131
- package/packages/components/dialog/src/dialog.vue +0 -114
- package/packages/components/dialog/src/type.ts +0 -16
- package/packages/components/dot/index.ts +0 -5
- package/packages/components/dot/src/dot.vue +0 -107
- package/packages/components/dot/src/type.ts +0 -6
- package/packages/components/drawer/index.ts +0 -6
- package/packages/components/drawer/src/drawer.ts +0 -84
- package/packages/components/drawer/src/drawer.vue +0 -114
- package/packages/components/drawer/src/type.ts +0 -15
- package/packages/components/edit-table/index.ts +0 -5
- package/packages/components/edit-table/src/edit-table.vue +0 -201
- package/packages/components/edit-table/src/type.ts +0 -51
- package/packages/components/flex/index.ts +0 -5
- package/packages/components/flex/src/flex.vue +0 -82
- package/packages/components/flex/src/type.ts +0 -16
- package/packages/components/form/index.ts +0 -5
- package/packages/components/form/src/form.vue +0 -424
- package/packages/components/form/src/type.ts +0 -85
- package/packages/components/grid/index.ts +0 -8
- package/packages/components/grid/src/context.ts +0 -30
- package/packages/components/grid/src/grid-item.vue +0 -143
- package/packages/components/grid/src/grid.vue +0 -151
- package/packages/components/grid/src/hook/use-index.ts +0 -63
- package/packages/components/grid/src/hook/use-responsive-state.ts +0 -66
- package/packages/components/grid/src/hook/use-responsive-value.ts +0 -36
- package/packages/components/grid/src/interface.ts +0 -74
- package/packages/components/grid/src/type.ts +0 -0
- package/packages/components/grid/src/utils/global-config.ts +0 -6
- package/packages/components/grid/src/utils/index.ts +0 -73
- package/packages/components/grid/src/utils/is.ts +0 -9
- package/packages/components/grid/src/utils/responsive-observe.ts +0 -135
- package/packages/components/input-group/index.ts +0 -5
- package/packages/components/input-group/src/input-group.vue +0 -79
- package/packages/components/input-group/src/type.ts +0 -1
- package/packages/components/input-search/index.ts +0 -5
- package/packages/components/input-search/src/input-search.vue +0 -48
- package/packages/components/input-search/src/type.ts +0 -6
- package/packages/components/nav-tabs/index.ts +0 -8
- package/packages/components/nav-tabs/src/nav-tabs.vue +0 -235
- package/packages/components/nav-tabs/src/type.ts +0 -24
- package/packages/components/page-layout/index.ts +0 -5
- package/packages/components/page-layout/src/page-layout.vue +0 -170
- package/packages/components/page-layout/src/split-button.vue +0 -107
- package/packages/components/page-layout/src/type.ts +0 -12
- package/packages/components/table/index.ts +0 -5
- package/packages/components/table/src/TableColumn.vue +0 -43
- package/packages/components/table/src/table.vue +0 -89
- package/packages/components/table/src/type.ts +0 -24
- package/packages/components/tabs/index.ts +0 -5
- package/packages/components/tabs/src/tabs.vue +0 -139
- package/packages/components/tabs/src/type.ts +0 -15
- package/packages/components/tag/index.ts +0 -5
- package/packages/components/tag/src/tag.vue +0 -355
- package/packages/components/tag/src/type.ts +0 -38
- package/packages/components/tree-transfer/index.ts +0 -5
- package/packages/components/tree-transfer/src/tree-transfer.vue +0 -225
- package/packages/components/tree-transfer/src/type.ts +0 -7
- package/packages/components/tree-transfer/src/utils.ts +0 -23
- package/packages/components.d.ts +0 -34
- package/packages/hooks/index.ts +0 -2
- package/packages/hooks/useBemClass.ts +0 -11
- package/packages/hooks/useNavTabs.ts +0 -497
- package/packages/index.ts +0 -118
- package/packages/styles/el.scss +0 -90
- package/packages/styles/index.scss +0 -141
- package/packages/styles/var.scss +0 -1
- package/packages/types/global.d.ts +0 -7
- package/packages/types/tool.ts +0 -14
- package/packages/utils/createSelectDialog.ts +0 -74
- package/packages/utils/index.ts +0 -1
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { InjectionKey } from 'vue'
|
|
2
|
-
import type { GridItemData } from './interface'
|
|
3
|
-
|
|
4
|
-
export type RowContextContext = Readonly<{
|
|
5
|
-
gutter?: [number, number]
|
|
6
|
-
div?: boolean
|
|
7
|
-
}>
|
|
8
|
-
|
|
9
|
-
export const RowContextInjectionKey: InjectionKey<RowContextContext> = Symbol(
|
|
10
|
-
'RowContextInjectionKey'
|
|
11
|
-
)
|
|
12
|
-
|
|
13
|
-
export type GridContext = Readonly<{
|
|
14
|
-
overflow: boolean
|
|
15
|
-
displayIndexList: number[]
|
|
16
|
-
cols: number
|
|
17
|
-
colGap: number
|
|
18
|
-
}>
|
|
19
|
-
|
|
20
|
-
export const GridContextInjectionKey: InjectionKey<GridContext> = Symbol(
|
|
21
|
-
'GridContextInjectionKey'
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
export type GridDataCollector = Readonly<{
|
|
25
|
-
collectItemData: (index: number, itemData: GridItemData) => void
|
|
26
|
-
removeItemData: (index: number) => void
|
|
27
|
-
}>
|
|
28
|
-
|
|
29
|
-
export const GridDataCollectorInjectionKey: InjectionKey<GridDataCollector>
|
|
30
|
-
= Symbol('GridDataCollectorInjectionKey')
|
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div ref="domRef" :class="classNames" :style="style">
|
|
3
|
-
<slot :overflow="overflow" />
|
|
4
|
-
</div>
|
|
5
|
-
</template>
|
|
6
|
-
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import type { PropType } from 'vue'
|
|
9
|
-
import type { ResponsiveValue } from './interface'
|
|
10
|
-
import {
|
|
11
|
-
computed,
|
|
12
|
-
defineComponent,
|
|
13
|
-
inject,
|
|
14
|
-
onUnmounted,
|
|
15
|
-
ref,
|
|
16
|
-
toRefs,
|
|
17
|
-
watchEffect
|
|
18
|
-
} from 'vue'
|
|
19
|
-
import {
|
|
20
|
-
GridContextInjectionKey,
|
|
21
|
-
GridDataCollectorInjectionKey
|
|
22
|
-
} from './context'
|
|
23
|
-
import { useIndex } from './hook/use-index'
|
|
24
|
-
import { useResponsiveState } from './hook/use-responsive-state'
|
|
25
|
-
import { resolveItemData } from './utils'
|
|
26
|
-
import { getPrefixCls } from './utils/global-config'
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @version 2.15.0
|
|
30
|
-
* @zh 响应式配置从 `2.18.0` 开始支持,具体配置 [ResponsiveValue](#responsivevalue)
|
|
31
|
-
* @en Responsive configuration has been supported since `2.18.0`, the specific configuration [ResponsiveValue](#responsivevalue)
|
|
32
|
-
*/
|
|
33
|
-
export default defineComponent({
|
|
34
|
-
name: 'GridItem',
|
|
35
|
-
props: {
|
|
36
|
-
/**
|
|
37
|
-
* @zh 跨越的格数
|
|
38
|
-
* @en Number of grids spanned
|
|
39
|
-
*/
|
|
40
|
-
span: {
|
|
41
|
-
type: [Number, Object] as PropType<number | ResponsiveValue>,
|
|
42
|
-
default: 1
|
|
43
|
-
},
|
|
44
|
-
/**
|
|
45
|
-
* @zh 左侧的间隔格数
|
|
46
|
-
* @en Number of grids on the left
|
|
47
|
-
*/
|
|
48
|
-
offset: {
|
|
49
|
-
type: [Number, Object] as PropType<number | ResponsiveValue>,
|
|
50
|
-
default: 0
|
|
51
|
-
},
|
|
52
|
-
/**
|
|
53
|
-
* @zh 是否是后缀元素
|
|
54
|
-
* @en Is it a suffix element
|
|
55
|
-
*/
|
|
56
|
-
suffix: {
|
|
57
|
-
type: Boolean,
|
|
58
|
-
default: false
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
setup(props) {
|
|
62
|
-
const prefixCls = getPrefixCls('grid-item')
|
|
63
|
-
const domRef = ref<HTMLDivElement>()
|
|
64
|
-
const { computedIndex } = useIndex({
|
|
65
|
-
itemRef: domRef,
|
|
66
|
-
selector: `.${prefixCls}`
|
|
67
|
-
})
|
|
68
|
-
const gridContext = inject(GridContextInjectionKey, {
|
|
69
|
-
overflow: false,
|
|
70
|
-
displayIndexList: [],
|
|
71
|
-
cols: 24,
|
|
72
|
-
colGap: 0
|
|
73
|
-
})
|
|
74
|
-
const gridDataCollector = inject(GridDataCollectorInjectionKey)
|
|
75
|
-
const visible = computed(() =>
|
|
76
|
-
gridContext?.displayIndexList?.includes(computedIndex.value)
|
|
77
|
-
)
|
|
78
|
-
const { span: propSpan, offset: propOffset } = toRefs(props)
|
|
79
|
-
const rSpan = useResponsiveState(propSpan, 1)
|
|
80
|
-
const rOffset = useResponsiveState(propOffset, 0)
|
|
81
|
-
const itemData = computed(() =>
|
|
82
|
-
resolveItemData(gridContext.cols, {
|
|
83
|
-
...props,
|
|
84
|
-
span: rSpan.value,
|
|
85
|
-
offset: rOffset.value
|
|
86
|
-
})
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
const classNames = computed(() => [prefixCls])
|
|
90
|
-
const offsetStyle = computed(() => {
|
|
91
|
-
const { offset, span } = itemData.value
|
|
92
|
-
const { colGap } = gridContext
|
|
93
|
-
if (offset > 0) {
|
|
94
|
-
const oneSpan = `(100% - ${colGap * (span - 1)}px) / ${span}`
|
|
95
|
-
return {
|
|
96
|
-
'margin-left': `calc((${oneSpan} * ${offset}) + ${colGap * offset}px)`
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return {}
|
|
100
|
-
})
|
|
101
|
-
const columnStart = computed(() => {
|
|
102
|
-
const { suffix, span } = itemData.value
|
|
103
|
-
const { cols } = gridContext
|
|
104
|
-
if (suffix) {
|
|
105
|
-
return `${cols - span + 1}`
|
|
106
|
-
}
|
|
107
|
-
return `span ${span}`
|
|
108
|
-
})
|
|
109
|
-
const style = computed(() => {
|
|
110
|
-
const { span } = itemData.value
|
|
111
|
-
if (domRef.value) {
|
|
112
|
-
return [
|
|
113
|
-
{
|
|
114
|
-
'grid-column': `${columnStart.value} / span ${span}`
|
|
115
|
-
},
|
|
116
|
-
offsetStyle.value,
|
|
117
|
-
!visible.value || span === 0 ? { display: 'none' } : {}
|
|
118
|
-
]
|
|
119
|
-
}
|
|
120
|
-
return []
|
|
121
|
-
})
|
|
122
|
-
|
|
123
|
-
watchEffect(() => {
|
|
124
|
-
if (computedIndex.value !== -1) {
|
|
125
|
-
gridDataCollector?.collectItemData(computedIndex.value, itemData.value)
|
|
126
|
-
}
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
onUnmounted(() => {
|
|
130
|
-
if (computedIndex.value !== -1) {
|
|
131
|
-
gridDataCollector?.removeItemData(computedIndex.value)
|
|
132
|
-
}
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
return {
|
|
136
|
-
classNames,
|
|
137
|
-
style,
|
|
138
|
-
domRef,
|
|
139
|
-
overflow: computed(() => gridContext.overflow)
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
})
|
|
143
|
-
</script>
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div :class="classNames" :style="style">
|
|
3
|
-
<slot></slot>
|
|
4
|
-
</div>
|
|
5
|
-
</template>
|
|
6
|
-
|
|
7
|
-
<script lang="ts">
|
|
8
|
-
import type { PropType } from 'vue'
|
|
9
|
-
import type { GridItemData, ResponsiveValue } from './interface'
|
|
10
|
-
import {
|
|
11
|
-
computed,
|
|
12
|
-
defineComponent,
|
|
13
|
-
provide,
|
|
14
|
-
reactive,
|
|
15
|
-
toRefs,
|
|
16
|
-
watchEffect
|
|
17
|
-
} from 'vue'
|
|
18
|
-
import {
|
|
19
|
-
GridContextInjectionKey,
|
|
20
|
-
GridDataCollectorInjectionKey
|
|
21
|
-
} from './context'
|
|
22
|
-
import { useResponsiveState } from './hook/use-responsive-state'
|
|
23
|
-
import { setItemVisible } from './utils'
|
|
24
|
-
import { getPrefixCls } from './utils/global-config'
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @version 2.15.0
|
|
28
|
-
* @zh 响应式配置从 `2.18.0` 开始支持,具体配置 [ResponsiveValue](#responsivevalue)
|
|
29
|
-
* @en Responsive configuration has been supported since `2.18.0`, the specific configuration [ResponsiveValue](#responsivevalue)
|
|
30
|
-
*/
|
|
31
|
-
export default defineComponent({
|
|
32
|
-
name: 'Grid',
|
|
33
|
-
props: {
|
|
34
|
-
/**
|
|
35
|
-
* @zh 每一行展示的列数
|
|
36
|
-
* @en Number of columns displayed in each row
|
|
37
|
-
*/
|
|
38
|
-
cols: {
|
|
39
|
-
type: [Number, Object] as PropType<number | ResponsiveValue>,
|
|
40
|
-
default: 24
|
|
41
|
-
},
|
|
42
|
-
/**
|
|
43
|
-
* @zh 行与行之间的间距
|
|
44
|
-
* @en The space in row-to-row
|
|
45
|
-
*/
|
|
46
|
-
rowGap: {
|
|
47
|
-
type: [Number, Object] as PropType<number | ResponsiveValue>,
|
|
48
|
-
default: 0
|
|
49
|
-
},
|
|
50
|
-
/**
|
|
51
|
-
* @zh 列与列之间的间距
|
|
52
|
-
* @en The space in column-to-column
|
|
53
|
-
*/
|
|
54
|
-
colGap: {
|
|
55
|
-
type: [Number, Object] as PropType<number | ResponsiveValue>,
|
|
56
|
-
default: 0
|
|
57
|
-
},
|
|
58
|
-
/**
|
|
59
|
-
* @zh 是否折叠
|
|
60
|
-
* @en Whether to collapsed
|
|
61
|
-
*/
|
|
62
|
-
collapsed: {
|
|
63
|
-
type: Boolean,
|
|
64
|
-
default: false
|
|
65
|
-
},
|
|
66
|
-
/**
|
|
67
|
-
* @zh 折叠时显示的行数
|
|
68
|
-
* @en Number of rows displayed when collapsed
|
|
69
|
-
*/
|
|
70
|
-
collapsedRows: {
|
|
71
|
-
type: Number,
|
|
72
|
-
default: 1
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
setup(props) {
|
|
76
|
-
const {
|
|
77
|
-
cols: propCols,
|
|
78
|
-
rowGap: propRowGap,
|
|
79
|
-
colGap: propColGap,
|
|
80
|
-
collapsedRows,
|
|
81
|
-
collapsed
|
|
82
|
-
} = toRefs(props)
|
|
83
|
-
const cols = useResponsiveState(propCols, 24)
|
|
84
|
-
const colGap = useResponsiveState(propColGap, 0)
|
|
85
|
-
const rowGap = useResponsiveState(propRowGap, 0)
|
|
86
|
-
const prefixCls = getPrefixCls('grid')
|
|
87
|
-
const classNames = computed(() => [prefixCls])
|
|
88
|
-
const style = computed(() => [
|
|
89
|
-
{
|
|
90
|
-
'gap': `${rowGap.value}px ${colGap.value}px`,
|
|
91
|
-
'grid-template-columns': `repeat(${cols.value}, minmax(0px, 1fr))`
|
|
92
|
-
}
|
|
93
|
-
])
|
|
94
|
-
const itemDataMap = reactive<Map<number, GridItemData>>(new Map())
|
|
95
|
-
const itemDataList = computed(() => {
|
|
96
|
-
const list: GridItemData[] = []
|
|
97
|
-
for (const [index, itemData] of itemDataMap.entries()) {
|
|
98
|
-
list[index] = itemData
|
|
99
|
-
}
|
|
100
|
-
return list
|
|
101
|
-
})
|
|
102
|
-
const gridContext = reactive<{
|
|
103
|
-
overflow: boolean
|
|
104
|
-
displayIndexList: number[]
|
|
105
|
-
cols: number
|
|
106
|
-
colGap: number
|
|
107
|
-
}>({
|
|
108
|
-
overflow: false,
|
|
109
|
-
displayIndexList: [],
|
|
110
|
-
cols: cols.value,
|
|
111
|
-
colGap: colGap.value
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
watchEffect(() => {
|
|
115
|
-
gridContext.cols = cols.value
|
|
116
|
-
gridContext.colGap = colGap.value
|
|
117
|
-
})
|
|
118
|
-
watchEffect(() => {
|
|
119
|
-
const displayInfo = setItemVisible({
|
|
120
|
-
cols: cols.value,
|
|
121
|
-
collapsed: collapsed.value,
|
|
122
|
-
collapsedRows: collapsedRows.value,
|
|
123
|
-
itemDataList: itemDataList.value
|
|
124
|
-
})
|
|
125
|
-
gridContext.overflow = displayInfo.overflow
|
|
126
|
-
gridContext.displayIndexList = displayInfo.displayIndexList
|
|
127
|
-
})
|
|
128
|
-
|
|
129
|
-
provide(GridContextInjectionKey, gridContext)
|
|
130
|
-
provide(GridDataCollectorInjectionKey, {
|
|
131
|
-
collectItemData(index, itemData) {
|
|
132
|
-
itemDataMap.set(index, itemData)
|
|
133
|
-
},
|
|
134
|
-
removeItemData(index) {
|
|
135
|
-
itemDataMap.delete(index)
|
|
136
|
-
}
|
|
137
|
-
})
|
|
138
|
-
|
|
139
|
-
return {
|
|
140
|
-
classNames,
|
|
141
|
-
style
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
})
|
|
145
|
-
</script>
|
|
146
|
-
|
|
147
|
-
<style lang="scss" scoped>
|
|
148
|
-
.gi-grid {
|
|
149
|
-
display: grid;
|
|
150
|
-
}
|
|
151
|
-
</style>
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import type { Ref } from 'vue'
|
|
2
|
-
import { computed, onMounted, onUpdated, ref, watch } from 'vue'
|
|
3
|
-
|
|
4
|
-
function isUndefined(obj: any): obj is undefined {
|
|
5
|
-
return obj === undefined
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function useIndex({
|
|
9
|
-
itemRef,
|
|
10
|
-
selector,
|
|
11
|
-
index,
|
|
12
|
-
parentClassName
|
|
13
|
-
}: {
|
|
14
|
-
itemRef: Ref<HTMLElement | undefined>
|
|
15
|
-
selector: string
|
|
16
|
-
index?: Ref<number | undefined>
|
|
17
|
-
parentClassName?: string
|
|
18
|
-
}) {
|
|
19
|
-
const _index = ref(-1)
|
|
20
|
-
const computedIndex = computed(() => index?.value ?? _index.value)
|
|
21
|
-
|
|
22
|
-
const parent = ref<HTMLElement>()
|
|
23
|
-
|
|
24
|
-
const getParent = () => {
|
|
25
|
-
let parent = itemRef.value?.parentElement ?? undefined
|
|
26
|
-
if (parentClassName) {
|
|
27
|
-
while (parent && !parent.className.includes(parentClassName)) {
|
|
28
|
-
parent = parent.parentElement ?? undefined
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return parent
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const getIndex = () => {
|
|
35
|
-
if (isUndefined(index?.value) && parent.value && itemRef.value) {
|
|
36
|
-
const index = Array.from(parent.value.querySelectorAll(selector)).indexOf(
|
|
37
|
-
itemRef.value
|
|
38
|
-
)
|
|
39
|
-
if (index !== _index.value) {
|
|
40
|
-
_index.value = index
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
watch(itemRef, () => {
|
|
46
|
-
if (itemRef.value && !parent.value) {
|
|
47
|
-
parent.value = getParent()
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
onMounted(() => {
|
|
52
|
-
if (itemRef.value) {
|
|
53
|
-
parent.value = getParent()
|
|
54
|
-
}
|
|
55
|
-
getIndex()
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
onUpdated(() => getIndex())
|
|
59
|
-
|
|
60
|
-
return {
|
|
61
|
-
computedIndex
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import type { Ref } from 'vue'
|
|
2
|
-
import type { ResponsiveValue } from '../interface'
|
|
3
|
-
import type { ScreenMap } from '../utils/responsive-observe'
|
|
4
|
-
import { computed, onMounted, onUnmounted, ref } from 'vue'
|
|
5
|
-
import { isObject } from '../utils/is'
|
|
6
|
-
import ResponsiveObserve, {
|
|
7
|
-
responsiveArray
|
|
8
|
-
} from '../utils/responsive-observe'
|
|
9
|
-
|
|
10
|
-
function isResponsiveValue(
|
|
11
|
-
val: number | ResponsiveValue
|
|
12
|
-
): val is ResponsiveValue {
|
|
13
|
-
return isObject(val)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function useResponsiveState(
|
|
17
|
-
val: Ref<number | ResponsiveValue>,
|
|
18
|
-
defaultVal: number,
|
|
19
|
-
fallbackToXs = false
|
|
20
|
-
) {
|
|
21
|
-
const screens = ref<ScreenMap>({
|
|
22
|
-
xs: true,
|
|
23
|
-
sm: true,
|
|
24
|
-
md: true,
|
|
25
|
-
lg: true,
|
|
26
|
-
xl: true,
|
|
27
|
-
xxl: true
|
|
28
|
-
})
|
|
29
|
-
const result = computed(() => {
|
|
30
|
-
let res = defaultVal
|
|
31
|
-
if (isResponsiveValue(val.value)) {
|
|
32
|
-
for (let i = 0; i < responsiveArray.length; i++) {
|
|
33
|
-
const breakpoint = responsiveArray[i]
|
|
34
|
-
if (
|
|
35
|
-
(screens.value[breakpoint]
|
|
36
|
-
|| (breakpoint === 'xs' && fallbackToXs))
|
|
37
|
-
&& val.value[breakpoint] !== undefined
|
|
38
|
-
) {
|
|
39
|
-
res = val.value[breakpoint] as number
|
|
40
|
-
break
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
} else {
|
|
44
|
-
res = val.value
|
|
45
|
-
}
|
|
46
|
-
return res
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
let subscribeToken = ''
|
|
50
|
-
|
|
51
|
-
onMounted(() => {
|
|
52
|
-
subscribeToken = ResponsiveObserve.subscribe((screensVal) => {
|
|
53
|
-
if (isResponsiveValue(val.value)) {
|
|
54
|
-
screens.value = screensVal
|
|
55
|
-
}
|
|
56
|
-
})
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
onUnmounted(() => {
|
|
60
|
-
if (subscribeToken) {
|
|
61
|
-
ResponsiveObserve.unsubscribe(subscribeToken)
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
return result
|
|
66
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { Ref } from 'vue'
|
|
2
|
-
import type { ResponsiveValue } from '../interface'
|
|
3
|
-
import { computed } from 'vue'
|
|
4
|
-
import { isNumber, isObject } from '../utils/is'
|
|
5
|
-
import { responsiveArray } from '../utils/responsive-observe'
|
|
6
|
-
|
|
7
|
-
export function useResponsiveValue(
|
|
8
|
-
props: Ref<{
|
|
9
|
-
val: number
|
|
10
|
-
key: string
|
|
11
|
-
xs?: number | { [key: string]: any }
|
|
12
|
-
sm?: number | { [key: string]: any }
|
|
13
|
-
md?: number | { [key: string]: any }
|
|
14
|
-
lg?: number | { [key: string]: any }
|
|
15
|
-
xl?: number | { [key: string]: any }
|
|
16
|
-
xxl?: number | { [key: string]: any }
|
|
17
|
-
}>
|
|
18
|
-
) {
|
|
19
|
-
const value = computed(() => {
|
|
20
|
-
const { val, key, xs, sm, md, lg, xl, xxl } = props.value
|
|
21
|
-
if (!xs && !sm && !md && !lg && !xl && !xxl) {
|
|
22
|
-
return val
|
|
23
|
-
}
|
|
24
|
-
const result: ResponsiveValue = {}
|
|
25
|
-
responsiveArray.forEach((breakpoint) => {
|
|
26
|
-
const config = props.value[breakpoint]
|
|
27
|
-
if (isNumber(config)) {
|
|
28
|
-
result[breakpoint] = config
|
|
29
|
-
} else if (isObject(config) && isNumber(config[key])) {
|
|
30
|
-
result[breakpoint] = config[key]
|
|
31
|
-
}
|
|
32
|
-
})
|
|
33
|
-
return result
|
|
34
|
-
})
|
|
35
|
-
return value
|
|
36
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
export interface ResponsiveValue {
|
|
2
|
-
/**
|
|
3
|
-
* @zh >= 1600px 响应式配置
|
|
4
|
-
* @en >= 1600px responsive configuration
|
|
5
|
-
*/
|
|
6
|
-
xxl?: number
|
|
7
|
-
/**
|
|
8
|
-
* @zh >= 1200px 响应式配置
|
|
9
|
-
* @en >= 1200px responsive configuration
|
|
10
|
-
*/
|
|
11
|
-
xl?: number
|
|
12
|
-
/**
|
|
13
|
-
* @zh >= 992px 响应式配置
|
|
14
|
-
* @en >= 992px responsive configuration
|
|
15
|
-
*/
|
|
16
|
-
lg?: number
|
|
17
|
-
/**
|
|
18
|
-
* @zh >= 768px 响应式配置
|
|
19
|
-
* @en >= 768px responsive configuration
|
|
20
|
-
*/
|
|
21
|
-
md?: number
|
|
22
|
-
/**
|
|
23
|
-
* @zh >= 576px 响应式配置
|
|
24
|
-
* @en >= 576px responsive configuration
|
|
25
|
-
*/
|
|
26
|
-
sm?: number
|
|
27
|
-
/**
|
|
28
|
-
* @zh < 576px 响应式配置
|
|
29
|
-
* @en <576px responsive configuration
|
|
30
|
-
*/
|
|
31
|
-
xs?: number
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export type FlexType = number | string | 'initial' | 'auto' | 'none'
|
|
35
|
-
|
|
36
|
-
export interface RowProps {
|
|
37
|
-
gutter?: number | ResponsiveValue | ResponsiveValue[]
|
|
38
|
-
justify?: 'start' | 'center' | 'end' | 'space-around' | 'space-between'
|
|
39
|
-
align?: 'start' | 'center' | 'end' | 'stretch'
|
|
40
|
-
div?: boolean
|
|
41
|
-
wrap?: boolean
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface ColProps {
|
|
45
|
-
span?: number
|
|
46
|
-
offset?: number | undefined
|
|
47
|
-
order?: number | undefined
|
|
48
|
-
xs?: number | { [key: string]: any } | undefined
|
|
49
|
-
sm?: number | { [key: string]: any } | undefined
|
|
50
|
-
md?: number | { [key: string]: any } | undefined
|
|
51
|
-
lg?: number | { [key: string]: any } | undefined
|
|
52
|
-
xl?: number | { [key: string]: any } | undefined
|
|
53
|
-
xxl?: number | { [key: string]: any } | undefined
|
|
54
|
-
flex?: number | string | 'initial' | 'auto' | 'none' | undefined
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface GridProps {
|
|
58
|
-
cols?: number | ResponsiveValue
|
|
59
|
-
rowGap?: number | ResponsiveValue
|
|
60
|
-
colGap?: number | ResponsiveValue
|
|
61
|
-
collapsed?: boolean
|
|
62
|
-
collapsedRows?: number
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export interface GridItemProps {
|
|
66
|
-
span?: number | ResponsiveValue
|
|
67
|
-
offset?: number | ResponsiveValue
|
|
68
|
-
suffix?: boolean
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export interface GridItemData extends GridItemProps {
|
|
72
|
-
span: number
|
|
73
|
-
offset: number
|
|
74
|
-
}
|
|
File without changes
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import type { GridItemData } from '../interface'
|
|
2
|
-
|
|
3
|
-
export function resolveItemData(
|
|
4
|
-
cols: number,
|
|
5
|
-
props: GridItemData
|
|
6
|
-
): GridItemData {
|
|
7
|
-
const originSpan = props.span ?? 1
|
|
8
|
-
const originOffset = props.offset ?? 0
|
|
9
|
-
const offset = Math.min(originOffset, cols)
|
|
10
|
-
const span = Math.min(
|
|
11
|
-
offset > 0 ? originSpan + originOffset : originSpan,
|
|
12
|
-
cols
|
|
13
|
-
)
|
|
14
|
-
return {
|
|
15
|
-
span,
|
|
16
|
-
offset,
|
|
17
|
-
suffix: 'suffix' in props ? props.suffix !== false : false
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function setItemVisible({
|
|
22
|
-
cols,
|
|
23
|
-
collapsed,
|
|
24
|
-
collapsedRows,
|
|
25
|
-
itemDataList
|
|
26
|
-
}: {
|
|
27
|
-
cols: number
|
|
28
|
-
collapsed: boolean
|
|
29
|
-
collapsedRows: number
|
|
30
|
-
itemDataList: GridItemData[]
|
|
31
|
-
}) {
|
|
32
|
-
let overflow = false
|
|
33
|
-
let displayIndexList: number[] = []
|
|
34
|
-
|
|
35
|
-
function isOverflow(span: number) {
|
|
36
|
-
return Math.ceil(span / cols) > collapsedRows
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
if (collapsed) {
|
|
40
|
-
let spanSum = 0
|
|
41
|
-
for (let i = 0; i < itemDataList.length; i++) {
|
|
42
|
-
if (itemDataList[i].suffix) {
|
|
43
|
-
spanSum += itemDataList[i].span
|
|
44
|
-
displayIndexList.push(i)
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
if (!isOverflow(spanSum)) {
|
|
48
|
-
let current = 0
|
|
49
|
-
while (current < itemDataList.length) {
|
|
50
|
-
const item = itemDataList[current]
|
|
51
|
-
if (!item.suffix) {
|
|
52
|
-
spanSum += item.span
|
|
53
|
-
|
|
54
|
-
if (isOverflow(spanSum)) {
|
|
55
|
-
break
|
|
56
|
-
}
|
|
57
|
-
displayIndexList.push(current)
|
|
58
|
-
}
|
|
59
|
-
current++
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
overflow = itemDataList.some(
|
|
63
|
-
(item, index) => !item.suffix && !displayIndexList.includes(index)
|
|
64
|
-
)
|
|
65
|
-
} else {
|
|
66
|
-
displayIndexList = itemDataList.map((_, index) => index)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
overflow,
|
|
71
|
-
displayIndexList
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
const opt = Object.prototype.toString
|
|
2
|
-
|
|
3
|
-
export function isObject(obj: unknown): obj is Record<string, any> {
|
|
4
|
-
return opt.call(obj) === '[object Object]'
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export function isNumber(obj: any): obj is number {
|
|
8
|
-
return opt.call(obj) === '[object Number]' && obj === obj; // eslint-disable-line
|
|
9
|
-
}
|