sprintify-ui 0.8.23 → 0.8.24
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/dist/sprintify-ui.es.js +7143 -7114
- package/dist/types/components/BaseButton.vue.d.ts +1 -1
- package/dist/types/components/BaseCardRow.vue.d.ts +1 -1
- package/dist/types/components/BaseTable.vue.d.ts +1 -6
- package/dist/types/components/BaseTableCell.vue.d.ts +1 -1
- package/dist/types/components/BaseTableHead.vue.d.ts +1 -1
- package/dist/types/components/BaseTableHeader.vue.d.ts +1 -1
- package/dist/types/components/BaseTableRow.vue.d.ts +6 -1
- package/dist/types/services/table/types.d.ts +1 -0
- package/package.json +2 -2
- package/src/components/BaseTable.stories.js +17 -1
- package/src/components/BaseTable.vue +0 -2
- package/src/components/BaseTableCell.vue +37 -19
- package/src/components/BaseTableHeader.vue +11 -17
- package/src/components/BaseTableRow.vue +11 -0
- package/src/services/table/classes.ts +1 -2
- package/src/services/table/types.ts +1 -0
- package/dist/types/composables/isFirstColumn.d.ts +0 -4
- package/src/composables/isFirstColumn.ts +0 -31
|
@@ -61,7 +61,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
61
61
|
}>>> & {
|
|
62
62
|
onClick?: ((...args: any[]) => any) | undefined;
|
|
63
63
|
}, {
|
|
64
|
-
class: string | false | 0 | ClassNameValue[] | null;
|
|
64
|
+
class: string | false | 0 | 0n | ClassNameValue[] | null;
|
|
65
65
|
type: "button" | "submit" | "reset";
|
|
66
66
|
size: "xs" | "sm" | "md" | "lg" | "xl";
|
|
67
67
|
color: string;
|
|
@@ -16,7 +16,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
16
16
|
}>>> & {
|
|
17
17
|
onClick?: ((...args: any[]) => any) | undefined;
|
|
18
18
|
}, {
|
|
19
|
-
class: string | false | 0 | ClassNameValue[] | null;
|
|
19
|
+
class: string | false | 0 | 0n | ClassNameValue[] | null;
|
|
20
20
|
size: "xs" | "sm" | "lg" | "base";
|
|
21
21
|
}, {}>, {
|
|
22
22
|
default?(_: {}): any;
|
|
@@ -4,7 +4,6 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
4
4
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
5
5
|
fixedHeader?: boolean | undefined;
|
|
6
6
|
fixedColumn?: boolean | undefined;
|
|
7
|
-
grid?: boolean | undefined;
|
|
8
7
|
striped?: boolean | undefined;
|
|
9
8
|
flush?: boolean | undefined;
|
|
10
9
|
class?: ClassNameValue;
|
|
@@ -14,7 +13,6 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
14
13
|
size: string;
|
|
15
14
|
fixedHeader: boolean;
|
|
16
15
|
fixedColumn: boolean;
|
|
17
|
-
grid: boolean;
|
|
18
16
|
striped: boolean;
|
|
19
17
|
flush: boolean;
|
|
20
18
|
class: undefined;
|
|
@@ -26,7 +24,6 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
26
24
|
size?: "xs" | "sm" | "md" | "lg" | "xl" | undefined;
|
|
27
25
|
fixedHeader?: boolean | undefined;
|
|
28
26
|
fixedColumn?: boolean | undefined;
|
|
29
|
-
grid?: boolean | undefined;
|
|
30
27
|
striped?: boolean | undefined;
|
|
31
28
|
flush?: boolean | undefined;
|
|
32
29
|
class?: ClassNameValue;
|
|
@@ -36,20 +33,18 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
36
33
|
size: string;
|
|
37
34
|
fixedHeader: boolean;
|
|
38
35
|
fixedColumn: boolean;
|
|
39
|
-
grid: boolean;
|
|
40
36
|
striped: boolean;
|
|
41
37
|
flush: boolean;
|
|
42
38
|
class: undefined;
|
|
43
39
|
maxHeight: undefined;
|
|
44
40
|
loading: boolean;
|
|
45
41
|
}>>>, {
|
|
46
|
-
class: string | false | 0 | ClassNameValue[] | null;
|
|
42
|
+
class: string | false | 0 | 0n | ClassNameValue[] | null;
|
|
47
43
|
size: "xs" | "sm" | "md" | "lg" | "xl";
|
|
48
44
|
loading: boolean;
|
|
49
45
|
maxHeight: number;
|
|
50
46
|
fixedHeader: boolean;
|
|
51
47
|
fixedColumn: boolean;
|
|
52
|
-
grid: boolean;
|
|
53
48
|
striped: boolean;
|
|
54
49
|
flush: boolean;
|
|
55
50
|
}, {}>, {
|
|
@@ -46,7 +46,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
46
46
|
onClick: undefined;
|
|
47
47
|
ignoreRowInteractions: boolean;
|
|
48
48
|
}>>>, {
|
|
49
|
-
class: string | false | 0 | ClassNameValue[] | null;
|
|
49
|
+
class: string | false | 0 | 0n | ClassNameValue[] | null;
|
|
50
50
|
onClick: (e: MouseEvent) => void;
|
|
51
51
|
title: string;
|
|
52
52
|
to: RouteLocationRaw;
|
|
@@ -8,7 +8,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
8
8
|
}>, {
|
|
9
9
|
class: undefined;
|
|
10
10
|
}>>>, {
|
|
11
|
-
class: string | false | 0 | ClassNameValue[] | null;
|
|
11
|
+
class: string | false | 0 | 0n | ClassNameValue[] | null;
|
|
12
12
|
}, {}>, {
|
|
13
13
|
default?(_: {}): any;
|
|
14
14
|
}>;
|
|
@@ -25,7 +25,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
25
25
|
}>>> & {
|
|
26
26
|
onClick?: ((...args: any[]) => any) | undefined;
|
|
27
27
|
}, {
|
|
28
|
-
class: string | false | 0 | ClassNameValue[] | null;
|
|
28
|
+
class: string | false | 0 | 0n | ClassNameValue[] | null;
|
|
29
29
|
align: "right" | "left" | "center";
|
|
30
30
|
style: string | false | import("vue").CSSProperties | StyleValue[] | null;
|
|
31
31
|
colspan: number;
|
|
@@ -6,6 +6,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
6
6
|
target?: "_blank" | "_self" | "_parent" | "_top" | undefined;
|
|
7
7
|
title?: string | undefined;
|
|
8
8
|
class?: ClassNameValue;
|
|
9
|
+
selected?: boolean | undefined;
|
|
9
10
|
onClick?: ((e: MouseEvent) => void) | undefined;
|
|
10
11
|
}>, {
|
|
11
12
|
href: undefined;
|
|
@@ -13,6 +14,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
13
14
|
target: undefined;
|
|
14
15
|
title: undefined;
|
|
15
16
|
class: undefined;
|
|
17
|
+
selected: boolean;
|
|
16
18
|
onClick: undefined;
|
|
17
19
|
}>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
18
20
|
click: (...args: any[]) => void;
|
|
@@ -24,6 +26,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
24
26
|
target?: "_blank" | "_self" | "_parent" | "_top" | undefined;
|
|
25
27
|
title?: string | undefined;
|
|
26
28
|
class?: ClassNameValue;
|
|
29
|
+
selected?: boolean | undefined;
|
|
27
30
|
onClick?: ((e: MouseEvent) => void) | undefined;
|
|
28
31
|
}>, {
|
|
29
32
|
href: undefined;
|
|
@@ -31,18 +34,20 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
|
|
|
31
34
|
target: undefined;
|
|
32
35
|
title: undefined;
|
|
33
36
|
class: undefined;
|
|
37
|
+
selected: boolean;
|
|
34
38
|
onClick: undefined;
|
|
35
39
|
}>>> & {
|
|
36
40
|
onClick?: ((...args: any[]) => any) | undefined;
|
|
37
41
|
onMouseenter?: ((...args: any[]) => any) | undefined;
|
|
38
42
|
onMouseleave?: ((...args: any[]) => any) | undefined;
|
|
39
43
|
}, {
|
|
40
|
-
class: string | false | 0 | ClassNameValue[] | null;
|
|
44
|
+
class: string | false | 0 | 0n | ClassNameValue[] | null;
|
|
41
45
|
onClick: (e: MouseEvent) => void;
|
|
42
46
|
title: string;
|
|
43
47
|
to: RouteLocationRaw;
|
|
44
48
|
href: string;
|
|
45
49
|
target: "_blank" | "_self" | "_parent" | "_top";
|
|
50
|
+
selected: boolean;
|
|
46
51
|
}, {}>, {
|
|
47
52
|
default?(_: {}): any;
|
|
48
53
|
}>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sprintify-ui",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.24",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"build": "rimraf dist && vue-tsc && vite build",
|
|
6
6
|
"build-fast": "rimraf dist && vite build",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@fullcalendar/vue3": "^6.1.11",
|
|
49
49
|
"@headlessui/vue": "^1.7.19",
|
|
50
50
|
"color2k": "^2.0.3",
|
|
51
|
-
"tailwind-merge": "^
|
|
51
|
+
"tailwind-merge": "^2.4.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@babel/core": "^7.24.0",
|
|
@@ -18,6 +18,11 @@ export default {
|
|
|
18
18
|
},
|
|
19
19
|
options: ['none', 'xs', 'sm', 'md', 'lg'],
|
|
20
20
|
},
|
|
21
|
+
loading: {
|
|
22
|
+
control: {
|
|
23
|
+
type: 'boolean',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
21
26
|
},
|
|
22
27
|
};
|
|
23
28
|
|
|
@@ -72,6 +77,7 @@ const Template = (args) => ({
|
|
|
72
77
|
:key="option.value"
|
|
73
78
|
:href="'https://www.google.com/search?q=' + option.label"
|
|
74
79
|
target="_blank"
|
|
80
|
+
:selected="option.value === 'darth_maul'"
|
|
75
81
|
>
|
|
76
82
|
${cellsTemplate}
|
|
77
83
|
</BaseTableRow>
|
|
@@ -84,6 +90,16 @@ const Template = (args) => ({
|
|
|
84
90
|
export const Demo = Template.bind({});
|
|
85
91
|
Demo.args = {};
|
|
86
92
|
|
|
93
|
+
export const Striped = Template.bind({});
|
|
94
|
+
Striped.args = {
|
|
95
|
+
striped: true,
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export const Flush = Template.bind({});
|
|
99
|
+
Flush.args = {
|
|
100
|
+
flush: true,
|
|
101
|
+
};
|
|
102
|
+
|
|
87
103
|
export const FixedHeader = Template.bind({});
|
|
88
104
|
FixedHeader.args = {
|
|
89
105
|
fixedHeader: true,
|
|
@@ -171,7 +187,7 @@ const TemplateCellClick = (args) => ({
|
|
|
171
187
|
{{ option.type ?? 'N/A' }}
|
|
172
188
|
</BaseTableCell>
|
|
173
189
|
<BaseTableCell>
|
|
174
|
-
...
|
|
190
|
+
Actions...
|
|
175
191
|
</BaseTableCell>
|
|
176
192
|
<BaseTableCell @click="al()">
|
|
177
193
|
Click me
|
|
@@ -49,7 +49,6 @@ const props = withDefaults(defineProps<{
|
|
|
49
49
|
size?: Size,
|
|
50
50
|
fixedHeader?: boolean,
|
|
51
51
|
fixedColumn?: boolean,
|
|
52
|
-
grid?: boolean,
|
|
53
52
|
striped?: boolean,
|
|
54
53
|
flush?: boolean,
|
|
55
54
|
class?: ClassNameValue,
|
|
@@ -59,7 +58,6 @@ const props = withDefaults(defineProps<{
|
|
|
59
58
|
size: 'md',
|
|
60
59
|
fixedHeader: false,
|
|
61
60
|
fixedColumn: false,
|
|
62
|
-
grid: false,
|
|
63
61
|
striped: false,
|
|
64
62
|
flush: false,
|
|
65
63
|
class: undefined,
|
|
@@ -34,8 +34,6 @@ import { cellClasses } from '../services/table/classes'
|
|
|
34
34
|
import { ClassNameValue, twMerge } from 'tailwind-merge';
|
|
35
35
|
import { cloneDeep, merge } from 'lodash';
|
|
36
36
|
import { ComputedRef, StyleValue } from 'vue';
|
|
37
|
-
import { useIsFirstColumn } from '../composables/isFirstColumn'
|
|
38
|
-
import { useIsLastColumn } from '../composables/isLastColumn'
|
|
39
37
|
|
|
40
38
|
defineOptions({
|
|
41
39
|
inheritAttrs: false,
|
|
@@ -45,9 +43,11 @@ const baseTable = inject('table:props') as ComputedRef<TableProps> | undefined;
|
|
|
45
43
|
const baseTableHead = inject('tableHead:props', undefined);
|
|
46
44
|
const baseTableRow = inject('tableRow:props', undefined) as ComputedRef<CellProps> | undefined;
|
|
47
45
|
const baseTableRowHover = inject('tableRow:hover', undefined) as ComputedRef<boolean> | undefined;
|
|
46
|
+
const baseTableRowSelected = inject('tableRow:selected', undefined) as ComputedRef<boolean> | undefined;
|
|
48
47
|
const baseTableHorizontalScrolling = inject('table:horizontalScrolling', undefined) as ComputedRef<boolean> | undefined;
|
|
49
48
|
const hoverForFullRow = inject('tableRow:hoverForFullRow') as ComputedRef<boolean> | undefined;
|
|
50
49
|
const setHoverForFullRow = inject('tableRow:setHoverForFullRow') as (active: boolean) => void;
|
|
50
|
+
const baseTableStriped = computed(() => baseTable?.value.striped);
|
|
51
51
|
|
|
52
52
|
if (!baseTableRow) {
|
|
53
53
|
throw new Error('BaseTableCell must be used within a BaseTableRow.');
|
|
@@ -126,33 +126,51 @@ const hoverInternal = computed(() => {
|
|
|
126
126
|
});
|
|
127
127
|
|
|
128
128
|
const classes = computed(() => {
|
|
129
|
+
|
|
130
|
+
const hovered = clickable.value && hoverInternal.value;
|
|
131
|
+
const selected = baseTableRowSelected?.value;
|
|
132
|
+
|
|
129
133
|
const base = cellClasses(cellConfig.value);
|
|
130
|
-
const baseTd = 'relative
|
|
134
|
+
const baseTd = 'relative border-b group-last/row:border-b-0';
|
|
131
135
|
const click = clickable.value ? 'cursor-pointer' : '';
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
136
|
+
|
|
137
|
+
let backgroundColor = baseTableStriped.value ? 'group-even/row:bg-slate-100/70' : 'bg-white';
|
|
138
|
+
|
|
139
|
+
if (hovered) {
|
|
140
|
+
backgroundColor = 'bg-slate-100';
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (selected) {
|
|
144
|
+
backgroundColor = 'bg-slate-200';
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
let borderColor = 'border-slate-200';
|
|
148
|
+
|
|
149
|
+
if (selected) {
|
|
150
|
+
borderColor = 'border-slate-300';
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const firstCol = 'first:border-r first:border-r-transparent';
|
|
154
|
+
const horizontalScrolling = baseTable?.value.fixedColumn && baseTableHorizontalScrolling?.value ? 'first:sticky first:z-[1] first:left-0 first:border-r-slate-200' : '';
|
|
155
|
+
const flush = baseTable?.value.flush ? 'first:pl-0 last:pr-0' : '';
|
|
137
156
|
|
|
138
157
|
return twMerge(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
158
|
+
[
|
|
159
|
+
base,
|
|
160
|
+
baseTd,
|
|
161
|
+
click,
|
|
162
|
+
backgroundColor,
|
|
163
|
+
borderColor,
|
|
164
|
+
firstCol,
|
|
165
|
+
horizontalScrolling,
|
|
166
|
+
flush,
|
|
167
|
+
],
|
|
147
168
|
props.class,
|
|
148
169
|
);
|
|
149
170
|
});
|
|
150
171
|
|
|
151
172
|
const tdRef = ref<HTMLTableCellElement | null>(null);
|
|
152
173
|
|
|
153
|
-
const { isFirstColumn } = useIsFirstColumn(tdRef);
|
|
154
|
-
const { isLastColumn } = useIsLastColumn(tdRef);
|
|
155
|
-
|
|
156
174
|
function onClick(event: MouseEvent) {
|
|
157
175
|
propsInternal.value.onClick?.(event);
|
|
158
176
|
}
|
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
</template>
|
|
13
13
|
|
|
14
14
|
<script lang="ts" setup>
|
|
15
|
-
import { useIsFirstColumn } from '@/composables/isFirstColumn';
|
|
16
|
-
import { useIsLastColumn } from '@/composables/isLastColumn';
|
|
17
15
|
import { cellClasses } from '@/services/table/classes';
|
|
18
16
|
import { CellConfig, TableProps } from '@/services/table/types';
|
|
19
17
|
import { ClassNameValue, twMerge } from 'tailwind-merge';
|
|
@@ -59,27 +57,23 @@ const cellConfig = computed<CellConfig>(() => {
|
|
|
59
57
|
|
|
60
58
|
const thRef = ref<HTMLTableCellElement | null>(null);
|
|
61
59
|
|
|
62
|
-
const { isFirstColumn } = useIsFirstColumn(thRef);
|
|
63
|
-
const { isLastColumn } = useIsLastColumn(thRef);
|
|
64
|
-
|
|
65
|
-
|
|
66
60
|
const classes = computed(() => {
|
|
67
61
|
const base = cellClasses(cellConfig.value);
|
|
68
62
|
const baseTh = 'bg-white text-slate-500 border-b border-slate-300 group';
|
|
69
63
|
const sticky = baseTable?.value.fixedHeader ? 'sticky top-0 z-[2]' : '';
|
|
70
|
-
const firstCol =
|
|
71
|
-
const horizontalScrolling = baseTable?.value.fixedColumn && baseTableHorizontalScrolling?.value
|
|
72
|
-
const
|
|
73
|
-
const flushRight = baseTable?.value.flush && isLastColumn.value ? 'pr-0' : '';
|
|
64
|
+
const firstCol = 'first:border-r first:border-r-transparent';
|
|
65
|
+
const horizontalScrolling = baseTable?.value.fixedColumn && baseTableHorizontalScrolling?.value ? 'first:sticky first:z-[3] first:left-0 first:border-r-slate-200' : '';
|
|
66
|
+
const flush = baseTable?.value.flush ? 'first:pl-0 last:pr-0' : '';
|
|
74
67
|
|
|
75
68
|
return twMerge(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
69
|
+
[
|
|
70
|
+
base,
|
|
71
|
+
baseTh,
|
|
72
|
+
sticky,
|
|
73
|
+
firstCol,
|
|
74
|
+
horizontalScrolling,
|
|
75
|
+
flush,
|
|
76
|
+
],
|
|
83
77
|
props.class,
|
|
84
78
|
);
|
|
85
79
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<tr
|
|
3
|
+
ref="trRef"
|
|
3
4
|
:class="classes"
|
|
4
5
|
@mouseenter="onMouseEnter"
|
|
5
6
|
@mouseleave="onMouseLeave"
|
|
@@ -30,6 +31,7 @@ const props = withDefaults(defineProps<{
|
|
|
30
31
|
target?: '_blank' | '_self' | '_parent' | '_top',
|
|
31
32
|
title?: string,
|
|
32
33
|
class?: ClassNameValue,
|
|
34
|
+
selected?: boolean,
|
|
33
35
|
onClick?: (e: MouseEvent) => void,
|
|
34
36
|
}>(), {
|
|
35
37
|
href: undefined,
|
|
@@ -37,9 +39,17 @@ const props = withDefaults(defineProps<{
|
|
|
37
39
|
target: undefined,
|
|
38
40
|
title: undefined,
|
|
39
41
|
class: undefined,
|
|
42
|
+
selected: false,
|
|
40
43
|
onClick: undefined,
|
|
41
44
|
});
|
|
42
45
|
|
|
46
|
+
const trRef = ref<null | HTMLTableRowElement>(null);
|
|
47
|
+
const parent = ref<null | undefined | HTMLElement>(null);
|
|
48
|
+
|
|
49
|
+
onMounted(() => {
|
|
50
|
+
parent.value = trRef.value?.parentElement;
|
|
51
|
+
});
|
|
52
|
+
|
|
43
53
|
const classes = computed(() => {
|
|
44
54
|
const base = 'group/row';
|
|
45
55
|
|
|
@@ -68,6 +78,7 @@ function onMouseLeave() {
|
|
|
68
78
|
|
|
69
79
|
provide('tableRow:props', computed(() => props));
|
|
70
80
|
provide('tableRow:hover', computed(() => hover.value));
|
|
81
|
+
provide('tableRow:selected', computed(() => props.selected));
|
|
71
82
|
provide('tableRow:setHoverForFullRow', setHoverForFullRow);
|
|
72
83
|
provide('tableRow:hoverForFullRow', computed(() => hoverForFullRow.value));
|
|
73
84
|
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { twMerge } from "tailwind-merge";
|
|
2
1
|
import { CellConfig, CellSize } from "./types";
|
|
3
2
|
|
|
4
3
|
export function cellClasses(config: CellConfig): string {
|
|
5
4
|
const base = '';
|
|
6
5
|
const space = size(config.size ?? 'md');
|
|
7
6
|
|
|
8
|
-
return
|
|
7
|
+
return [base, space].join(' ');
|
|
9
8
|
}
|
|
10
9
|
|
|
11
10
|
function size(size: CellSize): string {
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { MaybeRef } from "vue";
|
|
2
|
-
|
|
3
|
-
export function useIsFirstColumn(tdOrTh: MaybeRef<HTMLTableCellElement | null>) {
|
|
4
|
-
|
|
5
|
-
const leftCol = ref<HTMLTableCellElement | null>();
|
|
6
|
-
|
|
7
|
-
onMounted(() => {
|
|
8
|
-
leftCol.value = unref(tdOrTh)?.previousElementSibling as HTMLTableCellElement | null;
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
const isFirstColumn = computed(() => {
|
|
12
|
-
|
|
13
|
-
if (!leftCol.value) {
|
|
14
|
-
return true;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
if (leftCol.value.tagName.toLowerCase() === 'th') {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (leftCol.value.tagName.toLowerCase() === 'td') {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
return true;
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
isFirstColumn,
|
|
30
|
-
};
|
|
31
|
-
}
|