@leaflink/stash 53.4.5 → 53.4.6
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/DataTable/index.js +2400 -0
- package/dist/DataTable/index.js.map +1 -0
- package/dist/Table.js +35 -35
- package/dist/Table.js.map +1 -1
- package/dist/Table.vue.d.ts +12 -0
- package/dist/TableCell.js +17 -17
- package/dist/TableCell.js.map +1 -1
- package/dist/TableHeaderCell.js +44 -38
- package/dist/TableHeaderCell.js.map +1 -1
- package/dist/TableHeaderCell.vue.d.ts +10 -0
- package/dist/TableHeaderRow.js +32 -32
- package/dist/TableHeaderRow.js.map +1 -1
- package/dist/TableRow.js +82 -74
- package/dist/TableRow.js.map +1 -1
- package/dist/TableRow.vue.d.ts +9 -2
- package/dist/components.css +1 -1
- package/package.json +7 -1
- package/types/tanstack-vue-table.d.ts +18 -0
|
@@ -2,6 +2,7 @@ import { ComponentOptionsMixin } from 'vue';
|
|
|
2
2
|
import { ComponentProvideOptions } from 'vue';
|
|
3
3
|
import { DefineComponent } from 'vue';
|
|
4
4
|
import { ExtractPropTypes } from 'vue';
|
|
5
|
+
import { Header } from '@tanstack/vue-table';
|
|
5
6
|
import { PropType } from 'vue';
|
|
6
7
|
import { PublicProps } from 'vue';
|
|
7
8
|
|
|
@@ -34,10 +35,13 @@ declare type __VLS_WithTemplateSlots<T, S> = T & {
|
|
|
34
35
|
|
|
35
36
|
declare const _default: __VLS_WithTemplateSlots<DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TableHeaderCellProps>, {
|
|
36
37
|
sortId: string;
|
|
38
|
+
schemaDrivenHeader: undefined;
|
|
37
39
|
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<TableHeaderCellProps>, {
|
|
38
40
|
sortId: string;
|
|
41
|
+
schemaDrivenHeader: undefined;
|
|
39
42
|
}>>> & Readonly<{}>, {
|
|
40
43
|
sortId: string;
|
|
44
|
+
schemaDrivenHeader: Header<any, any>;
|
|
41
45
|
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>, {
|
|
42
46
|
default?(_: {}): any;
|
|
43
47
|
}>;
|
|
@@ -67,6 +71,12 @@ export declare interface TableHeaderCellProps {
|
|
|
67
71
|
* For example: `'product_name'` (with no leading dash/hyphen).
|
|
68
72
|
*/
|
|
69
73
|
sortId?: SortValueDeserialized['id'];
|
|
74
|
+
/**
|
|
75
|
+
* TanStack header instance passed when Table is in schema-driven mode.
|
|
76
|
+
* When provided, sorting is controlled by TanStack instead of DataView.
|
|
77
|
+
* Typed as any so DataTable can pass Header<TData, unknown> without a type assertion.
|
|
78
|
+
*/
|
|
79
|
+
schemaDrivenHeader?: Header<any, any>;
|
|
70
80
|
}
|
|
71
81
|
|
|
72
82
|
export { }
|
package/dist/TableHeaderRow.js
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { t as
|
|
3
|
-
import
|
|
4
|
-
import { D as
|
|
1
|
+
import { defineComponent as C, inject as h, computed as E, ref as R, createElementBlock as x, openBlock as l, createBlock as o, createCommentVNode as s, renderSlot as B, unref as e, normalizeClass as a, withCtx as I } from "vue";
|
|
2
|
+
import { t as S } from "./locale.js";
|
|
3
|
+
import $ from "./Checkbox.js";
|
|
4
|
+
import { D as f } from "./DataView.keys-aSOnA4AD.js";
|
|
5
5
|
import "lodash-es/uniqueId";
|
|
6
6
|
import "lodash-es/cloneDeep";
|
|
7
7
|
import "./Module.keys-DcqBbvvT.js";
|
|
8
8
|
import "./Illustration.vue_vue_type_script_setup_true_lang-C1bPkWZZ.js";
|
|
9
|
-
import { T as
|
|
10
|
-
import
|
|
11
|
-
import { _ as
|
|
12
|
-
const
|
|
9
|
+
import { T as v } from "./Table.keys-LHQf6FEH.js";
|
|
10
|
+
import i from "./TableHeaderCell.js";
|
|
11
|
+
import { _ as N } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
12
|
+
const A = {
|
|
13
13
|
class: "stash-table-header-row",
|
|
14
14
|
"data-test": "stash-table-header-row"
|
|
15
|
-
},
|
|
15
|
+
}, H = /* @__PURE__ */ C({
|
|
16
16
|
__name: "TableHeaderRow",
|
|
17
17
|
props: {
|
|
18
18
|
allRowsSelected: { type: Boolean, default: !1 },
|
|
19
19
|
someRowsSelected: { type: Boolean, default: !1 }
|
|
20
20
|
},
|
|
21
21
|
emits: ["select"],
|
|
22
|
-
setup(
|
|
23
|
-
const c =
|
|
24
|
-
if (!
|
|
22
|
+
setup(_, { emit: b }) {
|
|
23
|
+
const c = _, y = b, m = h(v.key);
|
|
24
|
+
if (!m)
|
|
25
25
|
throw new Error("TableHeaderRow must be used within a Table component");
|
|
26
|
-
const { hasCustomExpandToggle:
|
|
27
|
-
function
|
|
28
|
-
|
|
26
|
+
const { hasCustomExpandToggle: k, isSchemaDriven: r, isExpandable: T, isSelectable: n } = m, p = E(() => (n == null ? void 0 : n.value) && !(r != null && r.value)), { hasToolbar: d } = h(f.key, f.defaults), u = R(0);
|
|
27
|
+
function w() {
|
|
28
|
+
y("select"), u.value++;
|
|
29
29
|
}
|
|
30
|
-
return (t,
|
|
31
|
-
e(
|
|
30
|
+
return (t, J) => (l(), x("tr", A, [
|
|
31
|
+
e(d) && p.value ? (l(), o(i, {
|
|
32
32
|
key: 0,
|
|
33
33
|
class: a(["stash-table-header-row__selection-cell-empty", t.$style["row-control-cell"]]),
|
|
34
34
|
"data-test": "table-row-header|selection-cell-empty"
|
|
35
35
|
}, null, 8, ["class"])) : s("", !0),
|
|
36
|
-
!e(
|
|
36
|
+
!e(d) && p.value ? (l(), o(i, {
|
|
37
37
|
key: 1,
|
|
38
|
-
class: a(["stash-table-header-row__selection-cell min-w-
|
|
38
|
+
class: a(["stash-table-header-row__selection-cell min-w-12", t.$style["row-control-cell"]]),
|
|
39
39
|
"data-test": "table-row-header|selection-cell"
|
|
40
40
|
}, {
|
|
41
|
-
default:
|
|
42
|
-
e(
|
|
43
|
-
key:
|
|
41
|
+
default: I(() => [
|
|
42
|
+
e(d) ? s("", !0) : (l(), o($, {
|
|
43
|
+
key: u.value,
|
|
44
44
|
class: a(t.$style["row-selection-checkbox"]),
|
|
45
45
|
checked: c.allRowsSelected,
|
|
46
46
|
indeterminate: c.someRowsSelected && !c.allRowsSelected,
|
|
47
|
-
title: e(
|
|
48
|
-
"onUpdate:indeterminate":
|
|
49
|
-
"onUpdate:checked":
|
|
47
|
+
title: e(S)("ll.selectAll"),
|
|
48
|
+
"onUpdate:indeterminate": w,
|
|
49
|
+
"onUpdate:checked": w
|
|
50
50
|
}, null, 8, ["class", "checked", "indeterminate", "title"]))
|
|
51
51
|
]),
|
|
52
52
|
_: 1
|
|
53
53
|
}, 8, ["class"])) : s("", !0),
|
|
54
|
-
e(
|
|
54
|
+
e(T) && !e(k) ? (l(), o(i, {
|
|
55
55
|
key: 2,
|
|
56
56
|
class: a(t.$style["row-control-cell"]),
|
|
57
57
|
"data-test": "table-row-header-expansion-cell"
|
|
58
58
|
}, null, 8, ["class"])) : s("", !0),
|
|
59
|
-
|
|
59
|
+
B(t.$slots, "default")
|
|
60
60
|
]));
|
|
61
61
|
}
|
|
62
|
-
}),
|
|
62
|
+
}), g = {
|
|
63
63
|
"row-selection-checkbox": "_row-selection-checkbox_102yd_5",
|
|
64
64
|
"row-control-cell": "_row-control-cell_102yd_11"
|
|
65
|
-
},
|
|
66
|
-
$style:
|
|
67
|
-
},
|
|
65
|
+
}, j = {
|
|
66
|
+
$style: g
|
|
67
|
+
}, G = /* @__PURE__ */ N(H, [["__cssModules", j]]);
|
|
68
68
|
export {
|
|
69
|
-
|
|
69
|
+
G as default
|
|
70
70
|
};
|
|
71
71
|
//# sourceMappingURL=TableHeaderRow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHeaderRow.js","sources":["../src/components/TableHeaderRow/TableHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { inject, ref } from 'vue';\n\n import { t } from '../../locale';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.keys';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableHeaderCell from '../TableHeaderCell/TableHeaderCell.vue';\n\n export interface TableHeaderRowProps {\n allRowsSelected?: boolean;\n someRowsSelected?: boolean;\n }\n\n const props = withDefaults(defineProps<TableHeaderRowProps>(), {\n allRowsSelected: false,\n someRowsSelected: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableHeaderRow must be used within a Table component');\n }\n\n const { hasCustomExpandToggle, isExpandable, isSelectable } = tableInjection;\n\n const { hasToolbar } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n</script>\n\n<template>\n <tr class=\"stash-table-header-row\" data-test=\"stash-table-header-row\">\n <!-- This is just an empty cell to ensure proper alignment. \"Select all\" control should be in the toolbar. -->\n <TableHeaderCell\n v-if=\"hasToolbar &&
|
|
1
|
+
{"version":3,"file":"TableHeaderRow.js","sources":["../src/components/TableHeaderRow/TableHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import { computed, inject, ref } from 'vue';\n\n import { t } from '../../locale';\n import Checkbox from '../Checkbox/Checkbox.vue';\n import { DATA_VIEW_INJECTION } from '../DataView/DataView.keys';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableHeaderCell from '../TableHeaderCell/TableHeaderCell.vue';\n\n export interface TableHeaderRowProps {\n allRowsSelected?: boolean;\n someRowsSelected?: boolean;\n }\n\n const props = withDefaults(defineProps<TableHeaderRowProps>(), {\n allRowsSelected: false,\n someRowsSelected: false,\n });\n\n const emit = defineEmits<{\n (e: 'select'): void;\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableHeaderRow must be used within a Table component');\n }\n\n const { hasCustomExpandToggle, isSchemaDriven, isExpandable, isSelectable } = tableInjection;\n\n const showSelectionCells = computed(() => isSelectable?.value && !isSchemaDriven?.value);\n\n const { hasToolbar } = inject(DATA_VIEW_INJECTION.key, DATA_VIEW_INJECTION.defaults);\n\n const checkboxKey = ref(0);\n\n function onSelect() {\n emit('select');\n\n /**\n * In Vue (as of this writing), if a user checks a native checkbox but the v-model is `false` and does not change from `false`, then the checkbox will display as checked even though the v-model is still `false`.\n * Forcing a re-render with a `key` change allows the checkbox to stay unchecked if its v-model is still `false` and its v-model not been changed.\n * To verify that this is necessary, test the \"select all\" checkbox in the SelectionWithSomeDisabled story in Table.story.ts with and without the `key` attribute.\n */\n checkboxKey.value++;\n }\n</script>\n\n<template>\n <tr class=\"stash-table-header-row\" data-test=\"stash-table-header-row\">\n <!-- This is just an empty cell to ensure proper alignment. \"Select all\" control should be in the toolbar. -->\n <TableHeaderCell\n v-if=\"hasToolbar && showSelectionCells\"\n class=\"stash-table-header-row__selection-cell-empty\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header|selection-cell-empty\"\n />\n\n <TableHeaderCell\n v-if=\"!hasToolbar && showSelectionCells\"\n class=\"stash-table-header-row__selection-cell min-w-12\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header|selection-cell\"\n >\n <Checkbox\n v-if=\"!hasToolbar\"\n :key=\"checkboxKey\"\n :class=\"$style['row-selection-checkbox']\"\n :checked=\"props.allRowsSelected\"\n :indeterminate=\"props.someRowsSelected && !props.allRowsSelected\"\n :title=\"t('ll.selectAll')\"\n @update:indeterminate=\"onSelect\"\n @update:checked=\"onSelect\"\n />\n </TableHeaderCell>\n\n <TableHeaderCell\n v-if=\"isExpandable && !hasCustomExpandToggle\"\n :class=\"$style['row-control-cell']\"\n data-test=\"table-row-header-expansion-cell\"\n />\n <!-- @slot default -->\n <slot></slot>\n </tr>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .row-selection-checkbox label {\n padding: 0;\n min-height: --spacing(6);\n vertical-align: middle;\n }\n\n .row-control-cell {\n border-right: 0;\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","tableInjection","inject","TABLE_INJECTION","hasCustomExpandToggle","isSchemaDriven","isExpandable","isSelectable","showSelectionCells","computed","hasToolbar","DATA_VIEW_INJECTION","checkboxKey","ref","onSelect","_openBlock","_createElementBlock","_hoisted_1","_unref","_createBlock","TableHeaderCell","_normalizeClass","$style","Checkbox","t","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcE,UAAMA,IAAQC,GAKRC,IAAOC,GAIPC,IAAiBC,EAAOC,EAAgB,GAAG;AAEjD,QAAI,CAACF;AACH,YAAM,IAAI,MAAM,sDAAsD;AAGxE,UAAM,EAAE,uBAAAG,GAAuB,gBAAAC,GAAgB,cAAAC,GAAc,cAAAC,MAAiBN,GAExEO,IAAqBC,EAAS,OAAMF,KAAA,gBAAAA,EAAc,UAAS,EAACF,KAAA,QAAAA,EAAgB,MAAK,GAEjF,EAAE,YAAAK,EAAA,IAAeR,EAAOS,EAAoB,KAAKA,EAAoB,QAAQ,GAE7EC,IAAcC,EAAI,CAAC;AAEzB,aAASC,IAAW;AAClB,MAAAf,EAAK,QAAQ,GAOba,EAAY;AAAA,IACd;sBAIAG,EAAA,GAAAC,EAkCK,MAlCLC,GAkCK;AAAA,MA/BKC,EAAAR,CAAA,KAAcF,EAAA,cADtBW,EAKEC,GAAA;AAAA;QAHA,OAAKC,EAAA,CAAC,gDACEC,EAAAA,OAAM,kBAAA,CAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;MAIH,CAAAJ,EAAAR,CAAA,KAAcF,EAAA,cADvBW,EAgBkBC,GAAA;AAAA;QAdhB,OAAKC,EAAA,CAAC,mDACEC,EAAAA,OAAM,kBAAA,CAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;mBAEV,MASE;AAAA,UAROJ,EAAAR,CAAA,sBADTS,EASEI,GAAA;AAAA,YAPC,KAAKX,EAAA;AAAA,YACL,SAAOU,EAAAA,OAAM,wBAAA,CAAA;AAAA,YACb,SAASzB,EAAM;AAAA,YACf,eAAeA,EAAM,oBAAgB,CAAKA,EAAM;AAAA,YAChD,OAAOqB,EAAAM,CAAA,EAAC,cAAA;AAAA,YACR,0BAAsBV;AAAA,YACtB,oBAAgBA;AAAA,UAAA;;;;MAKbI,EAAAZ,CAAA,MAAiBY,EAAAd,CAAA,UADzBe,EAIEC,GAAA;AAAA;QAFC,SAAOE,EAAAA,OAAM,kBAAA,CAAA;AAAA,QACd,aAAU;AAAA,MAAA;MAGZG,EAAaC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;"}
|
package/dist/TableRow.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import
|
|
3
|
-
import { t as
|
|
4
|
-
import
|
|
5
|
-
import { _ as
|
|
6
|
-
import { _ as
|
|
1
|
+
import { defineComponent as P, useAttrs as q, useCssModule as z, useSlots as F, inject as J, computed as _, ref as O, watch as U, createElementBlock as f, openBlock as i, Fragment as T, createElementVNode as G, createCommentVNode as w, mergeProps as H, unref as e, createBlock as B, renderSlot as R, normalizeClass as c, withCtx as m, createVNode as h } from "vue";
|
|
2
|
+
import K from "lodash-es/uniqueId";
|
|
3
|
+
import { t as v } from "./locale.js";
|
|
4
|
+
import Q from "./Checkbox.js";
|
|
5
|
+
import { _ as W } from "./ChevronToggle.vue_vue_type_script_setup_true_lang-Ce_qOXfR.js";
|
|
6
|
+
import { _ as X } from "./Expand.vue_vue_type_script_setup_true_lang-BmNJA0Xy.js";
|
|
7
7
|
import "lodash-es/cloneDeep";
|
|
8
8
|
import "./Module.keys-DcqBbvvT.js";
|
|
9
9
|
import "./DataView.keys-aSOnA4AD.js";
|
|
10
10
|
import "./Illustration.vue_vue_type_script_setup_true_lang-C1bPkWZZ.js";
|
|
11
|
-
import
|
|
12
|
-
import { T as
|
|
13
|
-
import { _ as
|
|
14
|
-
const
|
|
11
|
+
import A from "./TableCell.js";
|
|
12
|
+
import { T as Y } from "./Table.keys-LHQf6FEH.js";
|
|
13
|
+
import { _ as Z } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
14
|
+
const ee = /* @__PURE__ */ P({
|
|
15
15
|
inheritAttrs: !1,
|
|
16
16
|
__name: "TableRow",
|
|
17
17
|
props: {
|
|
@@ -22,81 +22,89 @@ const W = /* @__PURE__ */ D({
|
|
|
22
22
|
accentColor: { default: void 0 }
|
|
23
23
|
},
|
|
24
24
|
emits: ["update:isSelected", "update:isExpanded"],
|
|
25
|
-
setup(
|
|
26
|
-
const o =
|
|
27
|
-
if (!
|
|
25
|
+
setup(C, { emit: $ }) {
|
|
26
|
+
const o = C, y = $, N = q(), l = z(), d = F(), k = J(Y.key);
|
|
27
|
+
if (!k)
|
|
28
28
|
throw new Error("TableRow must be used within a Table component");
|
|
29
|
-
const { hasActions:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
const { hasActions: I, hasCustomExpandToggle: E, isSchemaDriven: x, isExpandable: V, isSelectable: j, layout: p, isLoading: D } = k, b = _(() => j.value && !(x != null && x.value)), s = O(o.isExpanded), r = _(() => V.value && !!d.expansion);
|
|
30
|
+
function M(a) {
|
|
31
|
+
return Array.isArray(a) && a.every((t) => t != null && typeof t == "object" && "type" in t);
|
|
32
|
+
}
|
|
33
|
+
function g(a) {
|
|
34
|
+
return a.reduce((t, n) => n.type === T && M(n.children) ? t + g(n.children) : t + 1, 0);
|
|
35
|
+
}
|
|
36
|
+
const L = _(() => {
|
|
37
|
+
var n;
|
|
38
|
+
const a = ((n = d.default) == null ? void 0 : n.call(d, { toggleExpand: u })) ?? [];
|
|
39
|
+
let t = g(a);
|
|
40
|
+
return b.value && (t += 1), r.value && !E.value && (t += 1), t;
|
|
41
|
+
}), S = K("table-row-");
|
|
42
|
+
function u(a) {
|
|
43
|
+
if (!r.value)
|
|
36
44
|
throw new Error("Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.");
|
|
37
|
-
const
|
|
38
|
-
|
|
45
|
+
const t = typeof a == "boolean" ? a : !s.value;
|
|
46
|
+
s.value = t, y("update:isExpanded", t);
|
|
39
47
|
}
|
|
40
|
-
return
|
|
48
|
+
return U(
|
|
41
49
|
() => o.isExpanded,
|
|
42
|
-
() =>
|
|
43
|
-
), (a,
|
|
44
|
-
|
|
50
|
+
() => u(o.isExpanded)
|
|
51
|
+
), (a, t) => (i(), f(T, null, [
|
|
52
|
+
G("tr", H({
|
|
45
53
|
class: ["stash-table-row", [
|
|
46
|
-
e(
|
|
47
|
-
e(
|
|
54
|
+
e(l).root,
|
|
55
|
+
e(l)[`layout--${e(p)}`],
|
|
48
56
|
{
|
|
49
|
-
[e(
|
|
50
|
-
[e(
|
|
51
|
-
[e(
|
|
52
|
-
"p-gutter": e(
|
|
53
|
-
"mb-6 shadow lg:mb-0 lg:shadow-none": e(
|
|
54
|
-
"pt-[60px]": e(
|
|
57
|
+
[e(l)["is-expandable"]]: r.value,
|
|
58
|
+
[e(l)["is-expanded"]]: s.value,
|
|
59
|
+
[e(l)["root--hidden-divider"]]: C.hideExpansionDivider,
|
|
60
|
+
"p-gutter": e(p) === "stack",
|
|
61
|
+
"mb-6 shadow lg:mb-0 lg:shadow-none": e(p) === "stack" && !r.value,
|
|
62
|
+
"pt-[60px]": e(I) && e(p) === "stack" && !b.value && !e(D),
|
|
55
63
|
"stash-table-row--accent": o.accentColor,
|
|
56
64
|
relative: o.accentColor
|
|
57
65
|
}
|
|
58
66
|
]],
|
|
59
67
|
"data-test": "stash-table-row"
|
|
60
|
-
}, e(
|
|
61
|
-
|
|
68
|
+
}, e(N)), [
|
|
69
|
+
b.value ? (i(), B(A, {
|
|
62
70
|
key: 0,
|
|
63
71
|
"is-control": "",
|
|
64
|
-
class: c(["stash-table-row__selection-cell min-w-
|
|
72
|
+
class: c(["stash-table-row__selection-cell min-w-12 lg:pl-3", e(l)["row-control-cell"]]),
|
|
65
73
|
"data-test": "stash-table-row|selection-cell"
|
|
66
74
|
}, {
|
|
67
|
-
default:
|
|
68
|
-
|
|
69
|
-
class: c(e(
|
|
75
|
+
default: m(() => [
|
|
76
|
+
h(Q, {
|
|
77
|
+
class: c(e(l)["row-selection-checkbox"]),
|
|
70
78
|
checked: o.isSelected,
|
|
71
79
|
disabled: o.isSelectDisabled,
|
|
72
|
-
title: e(
|
|
73
|
-
"onUpdate:checked":
|
|
80
|
+
title: e(v)("ll.select.self"),
|
|
81
|
+
"onUpdate:checked": t[0] || (t[0] = (n) => y("update:isSelected", n))
|
|
74
82
|
}, null, 8, ["class", "checked", "disabled", "title"])
|
|
75
83
|
]),
|
|
76
84
|
_: 1
|
|
77
|
-
}, 8, ["class"])) :
|
|
78
|
-
|
|
85
|
+
}, 8, ["class"])) : w("", !0),
|
|
86
|
+
r.value && !e(E) ? (i(), B(A, {
|
|
79
87
|
key: 1,
|
|
80
|
-
class: c(["stash-table-row__toggle-expansion-cell px-0", e(
|
|
88
|
+
class: c(["stash-table-row__toggle-expansion-cell px-0", e(l)["row-control-cell"]]),
|
|
81
89
|
"data-test": "stash-table-row|custom-expansion-cell",
|
|
82
90
|
"is-control": ""
|
|
83
91
|
}, {
|
|
84
|
-
default:
|
|
85
|
-
|
|
86
|
-
"aria-controls": e(
|
|
87
|
-
"aria-label":
|
|
88
|
-
direction:
|
|
89
|
-
"is-expanded":
|
|
90
|
-
onClick:
|
|
92
|
+
default: m(() => [
|
|
93
|
+
h(W, {
|
|
94
|
+
"aria-controls": e(S),
|
|
95
|
+
"aria-label": s.value ? e(v)("ll.table.collapseRow") : e(v)("ll.table.expandRow"),
|
|
96
|
+
direction: s.value ? "up" : "down",
|
|
97
|
+
"is-expanded": s.value,
|
|
98
|
+
onClick: u
|
|
91
99
|
}, null, 8, ["aria-controls", "aria-label", "direction", "is-expanded"])
|
|
92
100
|
]),
|
|
93
101
|
_: 1
|
|
94
|
-
}, 8, ["class"])) :
|
|
95
|
-
|
|
96
|
-
isRowExpanded:
|
|
97
|
-
toggleExpand:
|
|
102
|
+
}, 8, ["class"])) : w("", !0),
|
|
103
|
+
R(a.$slots, "default", {
|
|
104
|
+
isRowExpanded: s.value,
|
|
105
|
+
toggleExpand: u
|
|
98
106
|
}),
|
|
99
|
-
o.accentColor ? (
|
|
107
|
+
o.accentColor ? (i(), f("div", {
|
|
100
108
|
key: 2,
|
|
101
109
|
"data-test": "stash-table-row|accent",
|
|
102
110
|
class: c({
|
|
@@ -108,31 +116,31 @@ const W = /* @__PURE__ */ D({
|
|
|
108
116
|
"top-0": o.accentColor,
|
|
109
117
|
"left-0": o.accentColor
|
|
110
118
|
})
|
|
111
|
-
}, null, 2)) :
|
|
119
|
+
}, null, 2)) : w("", !0)
|
|
112
120
|
], 16),
|
|
113
|
-
|
|
121
|
+
r.value ? (i(), f("tr", {
|
|
114
122
|
key: 0,
|
|
115
|
-
class: c(["stash-table-row stash-table-row--expandable", e(
|
|
123
|
+
class: c(["stash-table-row stash-table-row--expandable", e(l)["row-expansion"]]),
|
|
116
124
|
"data-test": "stash-table-row|expansion-row"
|
|
117
125
|
}, [
|
|
118
|
-
|
|
126
|
+
h(X, {
|
|
119
127
|
is: "td",
|
|
120
|
-
id: e(
|
|
121
|
-
class: c(["border-none bg-white px-3 py-0", e(
|
|
128
|
+
id: e(S),
|
|
129
|
+
class: c(["border-none bg-white px-3 py-0", e(l)["row-expansion-content"]]),
|
|
122
130
|
"data-test": "stash-table-row|expansion-cell",
|
|
123
|
-
colspan:
|
|
124
|
-
"is-expanded":
|
|
131
|
+
colspan: L.value,
|
|
132
|
+
"is-expanded": s.value
|
|
125
133
|
}, {
|
|
126
|
-
default:
|
|
127
|
-
|
|
134
|
+
default: m(() => [
|
|
135
|
+
R(a.$slots, "expansion")
|
|
128
136
|
]),
|
|
129
137
|
_: 3
|
|
130
138
|
}, 8, ["id", "class", "colspan", "is-expanded"])
|
|
131
|
-
], 2)) :
|
|
139
|
+
], 2)) : w("", !0)
|
|
132
140
|
], 64));
|
|
133
141
|
}
|
|
134
|
-
}),
|
|
135
|
-
root:
|
|
142
|
+
}), oe = "_root_27247_5", te = {
|
|
143
|
+
root: oe,
|
|
136
144
|
"is-expandable": "_is-expandable_27247_12",
|
|
137
145
|
"root--hidden-divider": "_root--hidden-divider_27247_17",
|
|
138
146
|
"is-expanded": "_is-expanded_27247_17",
|
|
@@ -142,10 +150,10 @@ const W = /* @__PURE__ */ D({
|
|
|
142
150
|
"row-control-cell": "_row-control-cell_27247_64",
|
|
143
151
|
"row-expansion-content": "_row-expansion-content_27247_75",
|
|
144
152
|
"row-expansion": "_row-expansion_27247_75"
|
|
145
|
-
},
|
|
146
|
-
$style:
|
|
147
|
-
},
|
|
153
|
+
}, ae = {
|
|
154
|
+
$style: te
|
|
155
|
+
}, fe = /* @__PURE__ */ Z(ee, [["__cssModules", ae]]);
|
|
148
156
|
export {
|
|
149
|
-
|
|
157
|
+
fe as default
|
|
150
158
|
};
|
|
151
159
|
//# sourceMappingURL=TableRow.js.map
|
package/dist/TableRow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableRow.js","sources":["../src/components/TableRow/TableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, inject, ref, useAttrs, useCssModule, watch } from 'vue';\n\n import { StashCommonColor } from '../../../types/colors';\n import { t } from '../../locale';\n import Checkbox, { CheckboxProps } from '../Checkbox/Checkbox.vue';\n import ChevronToggle from '../ChevronToggle/ChevronToggle.vue';\n import Expand from '../Expand/Expand.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableCell from '../TableCell/TableCell.vue';\n\n defineOptions({ inheritAttrs: false });\n\n export interface TableRowProps {\n hideExpansionDivider?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n isSelectDisabled?: boolean;\n /**\n * The accent color for the TableRow.\n */\n accentColor?: StashCommonColor;\n }\n\n const props = withDefaults(defineProps<TableRowProps>(), {\n /**\n * If true, hides the divider between the parent row and expansion row\n */\n hideExpansionDivider: false,\n isExpanded: false,\n isSelected: false,\n isSelectDisabled: false,\n accentColor: undefined,\n });\n\n const emit = defineEmits<{\n 'update:isSelected': [isChecked: CheckboxProps['checked']];\n 'update:isExpanded': [isExpanded: boolean];\n }>();\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const slots = defineSlots<{\n default(props: { isRowExpanded?: boolean; toggleExpand: (value?: boolean) => void }): unknown[];\n expansion(): unknown[];\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableRow must be used within a Table component');\n }\n\n const { hasActions, hasCustomExpandToggle, isExpandable, isSelectable, layout, isLoading } = tableInjection;\n\n const isRowExpanded = ref(props.isExpanded);\n const isRowExpandable = computed(() => isExpandable.value && !!slots.expansion);\n\n const childCellCount = computed(() => {\n let count = slots.default?.({ toggleExpand }).length ?? 0;\n\n if (isSelectable.value) {\n count += 1;\n }\n\n if (isRowExpandable.value && !hasCustomExpandToggle.value) {\n count += 1;\n }\n\n return count;\n });\n const rowId = uniqueId('table-row-');\n\n function toggleExpand(value?: boolean) {\n if (!isRowExpandable.value) {\n throw new Error('Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.');\n }\n\n const isExpanded = typeof value === 'boolean' ? value : !isRowExpanded.value;\n\n isRowExpanded.value = isExpanded;\n emit('update:isExpanded', isExpanded);\n }\n\n watch(\n () => props.isExpanded,\n () => toggleExpand(props.isExpanded),\n );\n</script>\n\n<template>\n <tr\n class=\"stash-table-row\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['is-expandable']]: isRowExpandable,\n [classes['is-expanded']]: isRowExpanded,\n [classes['root--hidden-divider']]: hideExpansionDivider,\n 'p-gutter': layout === 'stack',\n 'mb-6 shadow lg:mb-0 lg:shadow-none': layout === 'stack' && !isRowExpandable,\n 'pt-[60px]': hasActions && layout === 'stack' && !isSelectable && !isLoading,\n 'stash-table-row--accent': props.accentColor,\n relative: props.accentColor,\n },\n ]\"\n data-test=\"stash-table-row\"\n v-bind=\"attrs\"\n >\n <TableCell\n v-if=\"isSelectable\"\n is-control\n class=\"stash-table-row__selection-cell min-w-[48px] lg:pl-3\"\n :class=\"classes['row-control-cell']\"\n data-test=\"stash-table-row|selection-cell\"\n >\n <Checkbox\n :class=\"classes['row-selection-checkbox']\"\n :checked=\"props.isSelected\"\n :disabled=\"props.isSelectDisabled\"\n :title=\"t('ll.select.self')\"\n @update:checked=\"emit('update:isSelected', $event)\"\n />\n </TableCell>\n <TableCell\n v-if=\"isRowExpandable && !hasCustomExpandToggle\"\n class=\"stash-table-row__toggle-expansion-cell px-0\"\n data-test=\"stash-table-row|custom-expansion-cell\"\n is-control\n :class=\"classes['row-control-cell']\"\n >\n <ChevronToggle\n :aria-controls=\"rowId\"\n :aria-label=\"isRowExpanded ? t('ll.table.collapseRow') : t('ll.table.expandRow')\"\n :direction=\"isRowExpanded ? 'up' : 'down'\"\n :is-expanded=\"isRowExpanded\"\n @click=\"toggleExpand\"\n />\n </TableCell>\n <!-- @slot default -->\n <slot :is-row-expanded=\"isRowExpanded\" :toggle-expand=\"toggleExpand\"></slot>\n <!-- Displays a 4px accent on the left of the table row -->\n <div\n v-if=\"props.accentColor\"\n data-test=\"stash-table-row|accent\"\n :class=\"{\n absolute: props.accentColor,\n [`bg-${props.accentColor}`]: props.accentColor,\n block: props.accentColor,\n 'h-full': props.accentColor,\n 'w-1': props.accentColor,\n 'top-0': props.accentColor,\n 'left-0': props.accentColor,\n }\"\n ></div>\n </tr>\n <tr\n v-if=\"isRowExpandable\"\n class=\"stash-table-row stash-table-row--expandable\"\n :class=\"classes['row-expansion']\"\n data-test=\"stash-table-row|expansion-row\"\n >\n <Expand\n is=\"td\"\n :id=\"rowId\"\n class=\"border-none bg-white px-3 py-0\"\n data-test=\"stash-table-row|expansion-cell\"\n :class=\"classes['row-expansion-content']\"\n :colspan=\"childCellCount\"\n :is-expanded=\"isRowExpanded\"\n >\n <!-- @slot expansion, for expandable content -->\n <slot name=\"expansion\"></slot>\n </Expand>\n </tr>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n border: 0;\n }\n\n /**\n * Only takes effect when hideExpansionDivider is true, for a softer collapse transition as the bottom border re-appears\n */\n .is-expandable > td {\n border-bottom-color: var(--color-ice-200);\n transition: border-bottom-color 0.5s;\n }\n\n .root--hidden-divider.is-expanded > td {\n transition: border-bottom-color 0s;\n /**\n * Removes the grey cell background for 'control' cells at lower breakpoints, letting the white of the tr come through.\n */\n border-bottom-color: transparent;\n }\n\n .layout--scroll {\n border-radius: 0;\n box-shadow: none !important;\n margin: 0;\n }\n\n .layout--scroll:last-of-type {\n border: 0;\n }\n\n .layout--scroll:last-of-type td {\n border-bottom: none;\n }\n\n .layout--stack {\n align-items: stretch;\n background-color: var(--color-white);\n column-gap: var(--grid-gutter);\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n position: relative;\n row-gap: var(--grid-gutter);\n }\n\n .layout--stack:not(.is-expanded) {\n border-radius: var(--radius-sm);\n transition: border-radius 0.5s;\n }\n\n .layout--stack.is-expanded {\n border-top-left-radius: var(--radius-sm);\n border-top-right-radius: var(--radius-sm);\n }\n\n .row-selection-checkbox label {\n padding: 0;\n vertical-align: middle;\n }\n\n .layout--stack .row-control-cell {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n /* On mobile, display controls on their own row, pushing other cells below */\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: 1;\n }\n\n .row-expansion-content {\n box-shadow: inset 0 -1px 0 0 var(--color-ice-200);\n }\n\n .layout--stack + .row-expansion,\n .layout--stack + .row-expansion > .row-expansion-content {\n display: block;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: 1px solid var(--color-ice-200);\n border-bottom-left-radius: var(--radius-sm);\n border-bottom-right-radius: var(--radius-sm);\n margin-bottom: --spacing(6);\n }\n\n .layout--stack.root--hidden-divider + .row-expansion > .row-expansion-content {\n border-top: none;\n }\n\n /* On large screens, match the styles for layout-SCROLL */\n @media (width >= theme(--breakpoint-lg)) {\n .layout--stack {\n align-items: unset;\n background-color: unset;\n border: 0;\n border-bottom: 1px solid var(--color-ice-200);\n border-radius: 0;\n box-shadow: none;\n column-gap: unset;\n display: table-row;\n grid-template-columns: unset;\n row-gap: unset;\n }\n\n .layout--stack:last-of-type {\n border-bottom: 0;\n }\n\n .layout--stack .row-control-cell {\n display: table-cell;\n }\n\n .layout--stack + .row-expansion {\n display: table-row;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n display: table-cell;\n margin-bottom: unset;\n }\n\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: unset;\n }\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","attrs","useAttrs","classes","useCssModule","slots","_useSlots","tableInjection","inject","TABLE_INJECTION","hasActions","hasCustomExpandToggle","isExpandable","isSelectable","layout","isLoading","isRowExpanded","ref","isRowExpandable","computed","childCellCount","count","_a","toggleExpand","rowId","uniqueId","value","isExpanded","watch","_createElementVNode","_mergeProps","_unref","_createBlock","TableCell","_normalizeClass","_createVNode","Checkbox","t","_cache","$event","ChevronToggle","_renderSlot","_ctx","_createElementBlock","Expand"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TableRow.js","sources":["../src/components/TableRow/TableRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\n import uniqueId from 'lodash-es/uniqueId';\n import { computed, Fragment, inject, ref, useAttrs, useCssModule, type VNode, watch } from 'vue';\n\n import { StashCommonColor } from '../../../types/colors';\n import { t } from '../../locale';\n import Checkbox, { CheckboxProps } from '../Checkbox/Checkbox.vue';\n import ChevronToggle from '../ChevronToggle/ChevronToggle.vue';\n import Expand from '../Expand/Expand.vue';\n import { TABLE_INJECTION } from '../Table/Table.vue';\n import TableCell from '../TableCell/TableCell.vue';\n\n defineOptions({ inheritAttrs: false });\n\n export interface TableRowProps {\n hideExpansionDivider?: boolean;\n isExpanded?: boolean;\n isSelected?: boolean;\n isSelectDisabled?: boolean;\n /**\n * The accent color for the TableRow.\n */\n accentColor?: StashCommonColor;\n }\n\n const props = withDefaults(defineProps<TableRowProps>(), {\n /**\n * If true, hides the divider between the parent row and expansion row\n */\n hideExpansionDivider: false,\n isExpanded: false,\n isSelected: false,\n isSelectDisabled: false,\n accentColor: undefined,\n });\n\n const emit = defineEmits<{\n 'update:isSelected': [isChecked: CheckboxProps['checked']];\n 'update:isExpanded': [isExpanded: boolean];\n }>();\n\n const attrs = useAttrs();\n const classes = useCssModule();\n const slots = defineSlots<{\n default(props: { isRowExpanded?: boolean; toggleExpand: (value?: boolean) => void }): VNode[];\n expansion(): unknown[];\n }>();\n\n const tableInjection = inject(TABLE_INJECTION.key);\n\n if (!tableInjection) {\n throw new Error('TableRow must be used within a Table component');\n }\n\n const { hasActions, hasCustomExpandToggle, isSchemaDriven, isExpandable, isSelectable, layout, isLoading } =\n tableInjection;\n\n const showSelectionCell = computed(() => isSelectable.value && !isSchemaDriven?.value);\n\n const isRowExpanded = ref(props.isExpanded);\n const isRowExpandable = computed(() => isExpandable.value && !!slots.expansion);\n\n function isVNodeArray(children: unknown): children is VNode[] {\n return (\n Array.isArray(children) && children.every((c): c is VNode => c != null && typeof c === 'object' && 'type' in c)\n );\n }\n\n // Children passed as part of a for loop have a different shape than children passed normally.\n function countSlotChildren(vnodes: VNode[]): number {\n return vnodes.reduce((total, node) => {\n if (node.type === Fragment && isVNodeArray(node.children)) {\n return total + countSlotChildren(node.children);\n }\n return total + 1;\n }, 0);\n }\n\n const childCellCount = computed(() => {\n const vnodes = slots.default?.({ toggleExpand }) ?? [];\n let count = countSlotChildren(vnodes);\n\n if (showSelectionCell.value) {\n count += 1;\n }\n\n if (isRowExpandable.value && !hasCustomExpandToggle.value) {\n count += 1;\n }\n\n return count;\n });\n const rowId = uniqueId('table-row-');\n\n function toggleExpand(value?: boolean) {\n if (!isRowExpandable.value) {\n throw new Error('Cannot call `toggleExpand` on a non-expandable row. Provide an `expansion` slot.');\n }\n\n const isExpanded = typeof value === 'boolean' ? value : !isRowExpanded.value;\n\n isRowExpanded.value = isExpanded;\n emit('update:isExpanded', isExpanded);\n }\n\n watch(\n () => props.isExpanded,\n () => toggleExpand(props.isExpanded),\n );\n</script>\n\n<template>\n <tr\n class=\"stash-table-row\"\n :class=\"[\n classes.root,\n classes[`layout--${layout}`],\n {\n [classes['is-expandable']]: isRowExpandable,\n [classes['is-expanded']]: isRowExpanded,\n [classes['root--hidden-divider']]: hideExpansionDivider,\n 'p-gutter': layout === 'stack',\n 'mb-6 shadow lg:mb-0 lg:shadow-none': layout === 'stack' && !isRowExpandable,\n 'pt-[60px]': hasActions && layout === 'stack' && !showSelectionCell && !isLoading,\n 'stash-table-row--accent': props.accentColor,\n relative: props.accentColor,\n },\n ]\"\n data-test=\"stash-table-row\"\n v-bind=\"attrs\"\n >\n <TableCell\n v-if=\"showSelectionCell\"\n is-control\n class=\"stash-table-row__selection-cell min-w-12 lg:pl-3\"\n :class=\"classes['row-control-cell']\"\n data-test=\"stash-table-row|selection-cell\"\n >\n <Checkbox\n :class=\"classes['row-selection-checkbox']\"\n :checked=\"props.isSelected\"\n :disabled=\"props.isSelectDisabled\"\n :title=\"t('ll.select.self')\"\n @update:checked=\"emit('update:isSelected', $event)\"\n />\n </TableCell>\n <TableCell\n v-if=\"isRowExpandable && !hasCustomExpandToggle\"\n class=\"stash-table-row__toggle-expansion-cell px-0\"\n data-test=\"stash-table-row|custom-expansion-cell\"\n is-control\n :class=\"classes['row-control-cell']\"\n >\n <ChevronToggle\n :aria-controls=\"rowId\"\n :aria-label=\"isRowExpanded ? t('ll.table.collapseRow') : t('ll.table.expandRow')\"\n :direction=\"isRowExpanded ? 'up' : 'down'\"\n :is-expanded=\"isRowExpanded\"\n @click=\"toggleExpand\"\n />\n </TableCell>\n <!-- @slot default -->\n <slot :is-row-expanded=\"isRowExpanded\" :toggle-expand=\"toggleExpand\"></slot>\n <!-- Displays a 4px accent on the left of the table row -->\n <div\n v-if=\"props.accentColor\"\n data-test=\"stash-table-row|accent\"\n :class=\"{\n absolute: props.accentColor,\n [`bg-${props.accentColor}`]: props.accentColor,\n block: props.accentColor,\n 'h-full': props.accentColor,\n 'w-1': props.accentColor,\n 'top-0': props.accentColor,\n 'left-0': props.accentColor,\n }\"\n ></div>\n </tr>\n <tr\n v-if=\"isRowExpandable\"\n class=\"stash-table-row stash-table-row--expandable\"\n :class=\"classes['row-expansion']\"\n data-test=\"stash-table-row|expansion-row\"\n >\n <Expand\n is=\"td\"\n :id=\"rowId\"\n class=\"border-none bg-white px-3 py-0\"\n data-test=\"stash-table-row|expansion-cell\"\n :class=\"classes['row-expansion-content']\"\n :colspan=\"childCellCount\"\n :is-expanded=\"isRowExpanded\"\n >\n <!-- @slot expansion, for expandable content -->\n <slot name=\"expansion\"></slot>\n </Expand>\n </tr>\n</template>\n\n<style module>\n @reference \"../../../styles/main.css\";\n\n @layer utilities {\n .root {\n border: 0;\n }\n\n /**\n * Only takes effect when hideExpansionDivider is true, for a softer collapse transition as the bottom border re-appears\n */\n .is-expandable > td {\n border-bottom-color: var(--color-ice-200);\n transition: border-bottom-color 0.5s;\n }\n\n .root--hidden-divider.is-expanded > td {\n transition: border-bottom-color 0s;\n /**\n * Removes the grey cell background for 'control' cells at lower breakpoints, letting the white of the tr come through.\n */\n border-bottom-color: transparent;\n }\n\n .layout--scroll {\n border-radius: 0;\n box-shadow: none !important;\n margin: 0;\n }\n\n .layout--scroll:last-of-type {\n border: 0;\n }\n\n .layout--scroll:last-of-type td {\n border-bottom: none;\n }\n\n .layout--stack {\n align-items: stretch;\n background-color: var(--color-white);\n column-gap: var(--grid-gutter);\n display: grid;\n grid-template-columns: repeat(12, 1fr);\n position: relative;\n row-gap: var(--grid-gutter);\n }\n\n .layout--stack:not(.is-expanded) {\n border-radius: var(--radius-sm);\n transition: border-radius 0.5s;\n }\n\n .layout--stack.is-expanded {\n border-top-left-radius: var(--radius-sm);\n border-top-right-radius: var(--radius-sm);\n }\n\n .row-selection-checkbox label {\n padding: 0;\n vertical-align: middle;\n }\n\n .layout--stack .row-control-cell {\n display: flex;\n align-items: center;\n min-width: 0;\n }\n\n /* On mobile, display controls on their own row, pushing other cells below */\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: 1;\n }\n\n .row-expansion-content {\n box-shadow: inset 0 -1px 0 0 var(--color-ice-200);\n }\n\n .layout--stack + .row-expansion,\n .layout--stack + .row-expansion > .row-expansion-content {\n display: block;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: 1px solid var(--color-ice-200);\n border-bottom-left-radius: var(--radius-sm);\n border-bottom-right-radius: var(--radius-sm);\n margin-bottom: --spacing(6);\n }\n\n .layout--stack.root--hidden-divider + .row-expansion > .row-expansion-content {\n border-top: none;\n }\n\n /* On large screens, match the styles for layout-SCROLL */\n @media (width >= theme(--breakpoint-lg)) {\n .layout--stack {\n align-items: unset;\n background-color: unset;\n border: 0;\n border-bottom: 1px solid var(--color-ice-200);\n border-radius: 0;\n box-shadow: none;\n column-gap: unset;\n display: table-row;\n grid-template-columns: unset;\n row-gap: unset;\n }\n\n .layout--stack:last-of-type {\n border-bottom: 0;\n }\n\n .layout--stack .row-control-cell {\n display: table-cell;\n }\n\n .layout--stack + .row-expansion {\n display: table-row;\n }\n\n .layout--stack + .row-expansion > .row-expansion-content {\n border-top: unset;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n display: table-cell;\n margin-bottom: unset;\n }\n\n .row-control-cell + :not(.row-control-cell) {\n grid-column-start: unset;\n }\n }\n }\n</style>\n"],"names":["props","__props","emit","__emit","attrs","useAttrs","classes","useCssModule","slots","_useSlots","tableInjection","inject","TABLE_INJECTION","hasActions","hasCustomExpandToggle","isSchemaDriven","isExpandable","isSelectable","layout","isLoading","showSelectionCell","computed","isRowExpanded","ref","isRowExpandable","isVNodeArray","children","c","countSlotChildren","vnodes","total","node","Fragment","childCellCount","_a","toggleExpand","count","rowId","uniqueId","value","isExpanded","watch","_createElementVNode","_mergeProps","_unref","_createBlock","TableCell","_normalizeClass","_createVNode","Checkbox","t","_cache","$event","ChevronToggle","_renderSlot","_ctx","_createElementBlock","Expand"],"mappings":"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"}
|
package/dist/TableRow.vue.d.ts
CHANGED
|
@@ -4,6 +4,9 @@ import { DefineComponent } from 'vue';
|
|
|
4
4
|
import { ExtractPropTypes } from 'vue';
|
|
5
5
|
import { PropType } from 'vue';
|
|
6
6
|
import { PublicProps } from 'vue';
|
|
7
|
+
import { RendererElement } from 'vue';
|
|
8
|
+
import { RendererNode } from 'vue';
|
|
9
|
+
import { VNode } from 'vue';
|
|
7
10
|
|
|
8
11
|
declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
|
|
9
12
|
|
|
@@ -66,13 +69,17 @@ isSelectDisabled: boolean;
|
|
|
66
69
|
default(props: {
|
|
67
70
|
isRowExpanded?: boolean | undefined;
|
|
68
71
|
toggleExpand: (value?: boolean | undefined) => void;
|
|
69
|
-
}):
|
|
72
|
+
}): VNode<RendererNode, RendererElement, {
|
|
73
|
+
[key: string]: any;
|
|
74
|
+
}>[];
|
|
70
75
|
expansion(): unknown[];
|
|
71
76
|
}> & {
|
|
72
77
|
default(props: {
|
|
73
78
|
isRowExpanded?: boolean | undefined;
|
|
74
79
|
toggleExpand: (value?: boolean | undefined) => void;
|
|
75
|
-
}):
|
|
80
|
+
}): VNode<RendererNode, RendererElement, {
|
|
81
|
+
[key: string]: any;
|
|
82
|
+
}>[];
|
|
76
83
|
expansion(): unknown[];
|
|
77
84
|
}>;
|
|
78
85
|
export default _default;
|