@leaflink/stash 53.4.5 → 53.4.7
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/AppSidebar.js +43 -41
- package/dist/AppSidebar.js.map +1 -1
- package/dist/AppTopbar.js +1 -1
- package/dist/Copy.js +1 -1
- package/dist/DataTable/index.js +2400 -0
- package/dist/DataTable/index.js.map +1 -0
- package/dist/DataViewFilters.js +1 -1
- package/dist/DataViewFilters.js.map +1 -1
- package/dist/DataViewToolbar.js +139 -125
- package/dist/DataViewToolbar.js.map +1 -1
- package/dist/DatePicker.js +1114 -1113
- package/dist/DatePicker.js.map +1 -1
- package/dist/Modal.js +104 -90
- package/dist/Modal.js.map +1 -1
- package/dist/MoreActions.js +294 -288
- package/dist/MoreActions.js.map +1 -1
- package/dist/PageNavigation.js +1 -1
- package/dist/RadioGroup.js +69 -62
- package/dist/RadioGroup.js.map +1 -1
- package/dist/Select.js +90 -90
- package/dist/Select.js.map +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/Tab.js +1 -1
- package/dist/Table.js +36 -36
- 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/Tabs.js +2 -2
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js +131 -0
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js.map +1 -0
- package/dist/Thumbnail.js +42 -42
- package/dist/Thumbnail.js.map +1 -1
- package/dist/Toast.vue.d.ts +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-CFpM7Ldj.js → Tooltip.vue_vue_type_script_setup_true_lang-UUjw5O1x.js} +2 -2
- package/dist/{Tooltip.vue_vue_type_script_setup_true_lang-CFpM7Ldj.js.map → Tooltip.vue_vue_type_script_setup_true_lang-UUjw5O1x.js.map} +1 -1
- package/dist/components.css +1 -1
- package/dist/getContrastingTextColor.d.ts +8 -0
- package/dist/index-t9tXBnql.js +469 -0
- package/dist/{index-DA70nQCT.js.map → index-t9tXBnql.js.map} +1 -1
- package/dist/templateRefNarrowing-CeANDylX.js +22 -0
- package/dist/templateRefNarrowing-CeANDylX.js.map +1 -0
- package/dist/useMediaQuery.d.ts +12 -10
- package/dist/useMediaQuery.js +7 -29
- package/dist/useMediaQuery.js.map +1 -1
- package/dist/useSortable.js +1 -1
- package/dist/utils/getContrastingTextColor.js +36 -24
- package/dist/utils/getContrastingTextColor.js.map +1 -1
- package/package.json +7 -1
- package/types/tanstack-vue-table.d.ts +18 -0
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js +0 -130
- package/dist/Tabs.vue_vue_type_script_setup_true_lang-B3FBaVP5.js.map +0 -1
- package/dist/index-DA70nQCT.js +0 -424
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;
|
package/dist/Tabs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as r } from "./Tabs.vue_vue_type_script_setup_true_lang-
|
|
2
|
-
import { T as t, a as f } from "./Tabs.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
import { _ as r } from "./Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js";
|
|
2
|
+
import { T as t, a as f } from "./Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js";
|
|
3
3
|
export {
|
|
4
4
|
t as TABS_INJECTION,
|
|
5
5
|
f as TabVariant,
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { defineComponent as S, computed as u, provide as B, useTemplateRef as x, onMounted as $, onUpdated as D, watch as H, onBeforeUnmount as O, createElementBlock as y, openBlock as m, createBlock as j, unref as C, normalizeClass as f, withCtx as v, renderSlot as b, createElementVNode as A, createTextVNode as q, createVNode as z, toDisplayString as J } from "vue";
|
|
2
|
+
import { t as g } from "./locale.js";
|
|
3
|
+
import { t as w } from "./templateRefNarrowing-CeANDylX.js";
|
|
4
|
+
import U from "./Icon.js";
|
|
5
|
+
import V from "./MoreActions.js";
|
|
6
|
+
const K = Object.freeze({
|
|
7
|
+
key: Symbol("TABS_INJECTION_KEY")
|
|
8
|
+
});
|
|
9
|
+
var M = /* @__PURE__ */ ((e) => (e.Line = "line", e.Enclosed = "enclosed", e))(M || {});
|
|
10
|
+
const Y = ["aria-expanded", "onClick"], X = /* @__PURE__ */ S({
|
|
11
|
+
__name: "Tabs",
|
|
12
|
+
props: {
|
|
13
|
+
activeTab: {},
|
|
14
|
+
variant: { default: M.Line }
|
|
15
|
+
},
|
|
16
|
+
emits: ["update:activeTab"],
|
|
17
|
+
setup(e, { emit: I }) {
|
|
18
|
+
const L = I, s = e, o = u({
|
|
19
|
+
get() {
|
|
20
|
+
return s.activeTab;
|
|
21
|
+
},
|
|
22
|
+
set(t) {
|
|
23
|
+
L("update:activeTab", t);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
function N(t) {
|
|
27
|
+
o.value = t;
|
|
28
|
+
}
|
|
29
|
+
B(K.key, {
|
|
30
|
+
activeTab: u(() => o.value),
|
|
31
|
+
variant: u(() => s.variant),
|
|
32
|
+
setActiveTab: N
|
|
33
|
+
});
|
|
34
|
+
const p = x("moreDropdownMenuRef"), h = x("tabsContainerRef"), r = /* @__PURE__ */ new Map();
|
|
35
|
+
function k() {
|
|
36
|
+
r.forEach((t, c) => {
|
|
37
|
+
c.removeEventListener("click", t);
|
|
38
|
+
}), r.clear();
|
|
39
|
+
}
|
|
40
|
+
function i() {
|
|
41
|
+
const t = w(p.value);
|
|
42
|
+
if (!t) return;
|
|
43
|
+
k(), t.querySelectorAll("[data-action-id]").forEach((a) => {
|
|
44
|
+
const n = a.getAttribute("data-action-id");
|
|
45
|
+
if (!n) return;
|
|
46
|
+
const R = o.value === n;
|
|
47
|
+
a.setAttribute("aria-selected", R ? "true" : "false");
|
|
48
|
+
const T = () => {
|
|
49
|
+
const E = w(h.value);
|
|
50
|
+
if (E) {
|
|
51
|
+
const l = E.querySelector(`[role="tab"][data-action-id="${n}"]`), d = l == null ? void 0 : l.firstChild;
|
|
52
|
+
d && d instanceof HTMLElement && d.click();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
a.addEventListener("click", T), r.set(a, T);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return $(() => {
|
|
59
|
+
i();
|
|
60
|
+
}), D(() => {
|
|
61
|
+
i();
|
|
62
|
+
}), H(o, () => {
|
|
63
|
+
i();
|
|
64
|
+
}), O(() => {
|
|
65
|
+
k();
|
|
66
|
+
}), (t, c) => (m(), y("div", {
|
|
67
|
+
ref_key: "tabsContainerRef",
|
|
68
|
+
ref: h,
|
|
69
|
+
class: "stash-tabs relative",
|
|
70
|
+
role: "tabList",
|
|
71
|
+
"data-test": "stash-tabs"
|
|
72
|
+
}, [
|
|
73
|
+
t.$slots["more-actions"] ? (m(), j(V, {
|
|
74
|
+
key: 0,
|
|
75
|
+
class: f(["stash-tabs-list flex items-end", {
|
|
76
|
+
"stash-tabs-list--line": e.variant === "line",
|
|
77
|
+
"stash-tabs-list--enclosed": e.variant === "enclosed",
|
|
78
|
+
"gap-6": e.variant === "line"
|
|
79
|
+
}]),
|
|
80
|
+
"more-button-text": C(g)("ll.more"),
|
|
81
|
+
"dropdown-mode": "custom",
|
|
82
|
+
"actions-container-class": {
|
|
83
|
+
"gap-0": e.variant === "enclosed",
|
|
84
|
+
"gap-6": e.variant === "line"
|
|
85
|
+
},
|
|
86
|
+
"actions-container-tag": "ul"
|
|
87
|
+
}, {
|
|
88
|
+
"more-actions": v(() => [
|
|
89
|
+
A("div", {
|
|
90
|
+
ref_key: "moreDropdownMenuRef",
|
|
91
|
+
ref: p
|
|
92
|
+
}, [
|
|
93
|
+
b(t.$slots, "more-actions")
|
|
94
|
+
], 512)
|
|
95
|
+
]),
|
|
96
|
+
toggle: v(({ toggle: a, isOpen: n }) => [
|
|
97
|
+
A("button", {
|
|
98
|
+
"aria-haspopup": "menu",
|
|
99
|
+
"aria-expanded": n,
|
|
100
|
+
class: f(["flex cursor-pointer items-center justify-center border-solid px-6 pt-1.5 pb-1 text-sm font-medium text-blue-500 hover:text-blue-700", { "border-t-4 border-transparent": s.variant === "enclosed" }]),
|
|
101
|
+
type: "button",
|
|
102
|
+
onClick: a
|
|
103
|
+
}, [
|
|
104
|
+
q(J(C(g)("ll.more")) + " ", 1),
|
|
105
|
+
z(U, { name: "caret-down" })
|
|
106
|
+
], 10, Y)
|
|
107
|
+
]),
|
|
108
|
+
default: v(() => [
|
|
109
|
+
b(t.$slots, "default")
|
|
110
|
+
]),
|
|
111
|
+
_: 3
|
|
112
|
+
}, 8, ["class", "more-button-text", "actions-container-class"])) : (m(), y("ul", {
|
|
113
|
+
key: 1,
|
|
114
|
+
class: f(["stash-tabs-list flex items-end overflow-x-scroll", {
|
|
115
|
+
"stash-tabs-list--line": e.variant === "line",
|
|
116
|
+
"stash-tabs-list--enclosed": e.variant === "enclosed",
|
|
117
|
+
"gap-0": e.variant === "enclosed",
|
|
118
|
+
"gap-6": e.variant === "line"
|
|
119
|
+
}])
|
|
120
|
+
}, [
|
|
121
|
+
b(t.$slots, "default")
|
|
122
|
+
], 2))
|
|
123
|
+
], 512));
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
export {
|
|
127
|
+
K as T,
|
|
128
|
+
X as _,
|
|
129
|
+
M as a
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.vue_vue_type_script_setup_true_lang-DEopbeSY.js","sources":["../src/components/Tabs/keys.ts","../src/components/Tabs/models.ts","../src/components/Tabs/Tabs.vue"],"sourcesContent":["import { Injection } from '../../../types/utils';\nimport { TabsInjection } from './models';\n\nexport const TABS_INJECTION: Injection<TabsInjection> = Object.freeze({\n key: Symbol('TABS_INJECTION_KEY'),\n});\n","import { ComputedRef } from 'vue';\n\nexport enum TabVariant {\n Line = 'line',\n Enclosed = 'enclosed',\n}\n\nexport type TabVariants = `${TabVariant}`;\n\nexport interface TabsInjection {\n activeTab: ComputedRef<string>;\n variant: ComputedRef<TabVariants>;\n setActiveTab: (newTabValue: string) => void;\n}\n","<script lang=\"ts\">\n import { TabVariant, TabVariants } from './models';\n\n export * from './keys';\n export * from './models';\n\n export interface TabsProps {\n /**\n * The currently active tab value\n */\n activeTab: string;\n\n /**\n * Tabs variant\n */\n variant?: TabVariants;\n }\n</script>\n\n<script setup lang=\"ts\">\n import { computed, onBeforeUnmount, onMounted, onUpdated, provide, useTemplateRef, watch } from 'vue';\n\n import { t } from '../../locale';\n import { toElement } from '../../utils/templateRefNarrowing';\n import Icon from '../Icon/Icon.vue';\n import MoreActions from '../MoreActions/MoreActions.vue';\n import { TABS_INJECTION } from './keys';\n\n const emit = defineEmits<{\n (e: 'update:activeTab', newTabValue: TabsProps['activeTab']): void;\n }>();\n\n const props = withDefaults(defineProps<TabsProps>(), {\n variant: TabVariant.Line,\n });\n\n const currentActiveTab = computed({\n get() {\n return props.activeTab;\n },\n set(nv: TabsProps['activeTab']) {\n emit('update:activeTab', nv);\n },\n });\n\n function setActiveTab(newTabValue: TabsProps['activeTab']) {\n currentActiveTab.value = newTabValue;\n }\n\n provide(TABS_INJECTION.key, {\n activeTab: computed(() => currentActiveTab.value),\n variant: computed(() => props.variant),\n setActiveTab,\n });\n\n const moreDropdownMenuRef = useTemplateRef('moreDropdownMenuRef');\n const tabsContainerRef = useTemplateRef('tabsContainerRef');\n\n // Store event listeners to allow proper cleanup\n const eventListeners = new Map<Element, EventListener>();\n\n function cleanupMoreActionsHandlers() {\n eventListeners.forEach((listener, element) => {\n element.removeEventListener('click', listener);\n });\n eventListeners.clear();\n }\n\n // Setup automatic handlers for MenuItem elements in more-actions dropdown\n function setupMoreActionsHandlers() {\n const menuEl = toElement(moreDropdownMenuRef.value);\n if (!menuEl) return;\n\n // Remove existing listeners first to prevent duplication\n cleanupMoreActionsHandlers();\n\n const menuItems = menuEl.querySelectorAll('[data-action-id]');\n\n menuItems.forEach((item) => {\n const actionId = item.getAttribute('data-action-id');\n if (!actionId) return;\n\n // Update aria-selected based on active tab\n const isActive = currentActiveTab.value === actionId;\n item.setAttribute('aria-selected', isActive ? 'true' : 'false');\n\n // Create and store the listener\n const listener = () => {\n // Find and click the original tab in the actions container\n const container = toElement(tabsContainerRef.value);\n if (container) {\n const originalTab = container.querySelector<HTMLElement>(`[role=\"tab\"][data-action-id=\"${actionId}\"]`);\n const firstChild = originalTab?.firstChild;\n if (firstChild && firstChild instanceof HTMLElement) {\n firstChild.click();\n }\n }\n };\n\n item.addEventListener('click', listener);\n eventListeners.set(item, listener);\n });\n }\n\n onMounted(() => {\n setupMoreActionsHandlers();\n });\n\n onUpdated(() => {\n setupMoreActionsHandlers();\n });\n\n watch(currentActiveTab, () => {\n setupMoreActionsHandlers();\n });\n\n onBeforeUnmount(() => {\n cleanupMoreActionsHandlers();\n });\n</script>\n\n<template>\n <div ref=\"tabsContainerRef\" class=\"stash-tabs relative\" role=\"tabList\" data-test=\"stash-tabs\">\n <template v-if=\"$slots['more-actions']\">\n <MoreActions\n class=\"stash-tabs-list flex items-end\"\n :class=\"{\n 'stash-tabs-list--line': variant === 'line',\n 'stash-tabs-list--enclosed': variant === 'enclosed',\n 'gap-6': variant === 'line',\n }\"\n :more-button-text=\"t('ll.more')\"\n dropdown-mode=\"custom\"\n :actions-container-class=\"{\n 'gap-0': variant === 'enclosed',\n 'gap-6': variant === 'line',\n }\"\n actions-container-tag=\"ul\"\n >\n <slot></slot>\n\n <template #more-actions>\n <div ref=\"moreDropdownMenuRef\">\n <slot name=\"more-actions\"></slot>\n </div>\n </template>\n\n <template #toggle=\"{ toggle, isOpen }\">\n <button\n aria-haspopup=\"menu\"\n :aria-expanded=\"isOpen\"\n class=\"flex cursor-pointer items-center justify-center border-solid px-6 pt-1.5 pb-1 text-sm font-medium text-blue-500 hover:text-blue-700\"\n :class=\"{ 'border-t-4 border-transparent': props.variant === 'enclosed' }\"\n type=\"button\"\n @click=\"toggle\"\n >\n {{ t('ll.more') }}\n <Icon name=\"caret-down\" />\n </button>\n </template>\n </MoreActions>\n </template>\n\n <template v-else>\n <ul\n class=\"stash-tabs-list flex items-end overflow-x-scroll\"\n :class=\"{\n 'stash-tabs-list--line': variant === 'line',\n 'stash-tabs-list--enclosed': variant === 'enclosed',\n 'gap-0': variant === 'enclosed',\n 'gap-6': variant === 'line',\n }\"\n >\n <slot></slot>\n </ul>\n </template>\n </div>\n</template>\n"],"names":["TABS_INJECTION","TabVariant","emit","__emit","props","__props","currentActiveTab","computed","nv","setActiveTab","newTabValue","provide","moreDropdownMenuRef","useTemplateRef","tabsContainerRef","eventListeners","cleanupMoreActionsHandlers","listener","element","setupMoreActionsHandlers","menuEl","toElement","item","actionId","isActive","container","originalTab","firstChild","onMounted","onUpdated","watch","onBeforeUnmount","_createElementBlock","$slots","_createBlock","MoreActions","_unref","t","_createElementVNode","_renderSlot","_ctx","_withCtx","toggle","isOpen","_normalizeClass","_createTextVNode","_toDisplayString","_createVNode","Icon"],"mappings":"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"}
|
package/dist/Thumbnail.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as T, useCssModule as B, inject as I, computed as h, toValue as y, createElementBlock as M, openBlock as d, unref as t, normalizeClass as m, createVNode as _, createBlock as N, createCommentVNode as $, renderSlot as q, withModifiers as U, withCtx as V } from "vue";
|
|
2
2
|
import { t as w } from "./locale.js";
|
|
3
3
|
import z from "./Button.js";
|
|
4
4
|
import E from "./Icon.js";
|
|
5
|
-
import { _ as
|
|
6
|
-
import { T as
|
|
7
|
-
import { _ as
|
|
8
|
-
const
|
|
5
|
+
import { _ as j } from "./Image.vue_vue_type_script_setup_true_lang-CAj0FH9h.js";
|
|
6
|
+
import { T as v } from "./ThumbnailGroup.keys-EJ4qFNhx.js";
|
|
7
|
+
import { _ as A } from "./_plugin-vue_export-helper-CHgC5LLL.js";
|
|
8
|
+
const D = ["aria-current", "draggable"], H = /* @__PURE__ */ T({
|
|
9
9
|
__name: "Thumbnail",
|
|
10
10
|
props: {
|
|
11
11
|
thumbnail: {},
|
|
@@ -13,68 +13,68 @@ const A = ["aria-current", "draggable"], D = /* @__PURE__ */ k({
|
|
|
13
13
|
variant: { default: "opaque" }
|
|
14
14
|
},
|
|
15
15
|
emits: ["remove", "click"],
|
|
16
|
-
setup(
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
), a =
|
|
21
|
-
function
|
|
22
|
-
|
|
16
|
+
setup(s, { emit: p }) {
|
|
17
|
+
const l = s, r = p, e = B(), { thumbnails: f, activeThumbnail: i, draggable: g, isDragging: c, radius: n, removable: o } = I(
|
|
18
|
+
v.key,
|
|
19
|
+
v.defaults
|
|
20
|
+
), a = h(() => y(f).findIndex((u) => u === l.thumbnail)), x = h(() => l.thumbnail.imageUrl);
|
|
21
|
+
function k() {
|
|
22
|
+
i.value = a.value, r("click", a.value);
|
|
23
23
|
}
|
|
24
|
-
function
|
|
25
|
-
r("remove", a.value),
|
|
24
|
+
function C() {
|
|
25
|
+
r("remove", a.value), i.value = -1;
|
|
26
26
|
}
|
|
27
|
-
return (
|
|
28
|
-
class:
|
|
27
|
+
return (u, b) => (d(), M("li", {
|
|
28
|
+
class: m(["stash-thumbnail focus-visible:outline-hidden group relative cursor-pointer", [
|
|
29
29
|
{
|
|
30
|
-
[t(e)["thumbnail-translucent"]]:
|
|
31
|
-
[t(e)["thumbnail-opaque"]]:
|
|
30
|
+
[t(e)["thumbnail-translucent"]]: l.variant === "translucent",
|
|
31
|
+
[t(e)["thumbnail-opaque"]]: l.variant === "opaque",
|
|
32
32
|
[t(e)["thumbnail-removable"]]: t(o),
|
|
33
|
-
[t(e)["thumbnail-circle"]]: t(
|
|
34
|
-
[t(e)["thumbnail-rounded"]]: t(
|
|
33
|
+
[t(e)["thumbnail-circle"]]: t(n) === "circle",
|
|
34
|
+
[t(e)["thumbnail-rounded"]]: t(n) === "rounded"
|
|
35
35
|
}
|
|
36
36
|
]]),
|
|
37
|
-
"aria-current": t(
|
|
38
|
-
draggable: t(
|
|
37
|
+
"aria-current": t(i) === a.value,
|
|
38
|
+
draggable: t(g),
|
|
39
39
|
"data-test": "stash-thumbnail",
|
|
40
40
|
tabindex: "0",
|
|
41
|
-
onClick: b[0] || (b[0] = (
|
|
41
|
+
onClick: b[0] || (b[0] = (O) => k())
|
|
42
42
|
}, [
|
|
43
|
-
|
|
44
|
-
class:
|
|
43
|
+
_(j, {
|
|
44
|
+
class: m(["stash-thumbnail__img border-ice-200 outline-blue-500/15 transition-colors", [
|
|
45
45
|
t(e)["thumbnail-img"],
|
|
46
46
|
{
|
|
47
|
-
[t(e)["thumbnail-mask"]]: t(o) && t(
|
|
48
|
-
[t(e)["thumbnail-active"]]: t(
|
|
47
|
+
[t(e)["thumbnail-mask"]]: t(o) && t(n) !== "circle",
|
|
48
|
+
[t(e)["thumbnail-active"]]: t(i) === a.value && !t(c),
|
|
49
49
|
"group-hover:border-blue-500 group-focus-visible:border-blue-500 group-focus-visible:outline": !t(c)
|
|
50
50
|
}
|
|
51
51
|
]]),
|
|
52
52
|
"data-test": "stash-thumbnail|img",
|
|
53
|
-
radius: t(
|
|
54
|
-
src:
|
|
55
|
-
alt:
|
|
53
|
+
radius: t(n),
|
|
54
|
+
src: x.value,
|
|
55
|
+
alt: s.altText
|
|
56
56
|
}, null, 8, ["class", "radius", "src", "alt"]),
|
|
57
|
-
t(o) ? (
|
|
57
|
+
t(o) ? (d(), N(z, {
|
|
58
58
|
key: 0,
|
|
59
|
-
class:
|
|
59
|
+
class: m(["stash-thumbnail__remove", [t(e)["thumbnail-remove"]]]),
|
|
60
60
|
"data-test": "stash-thumbnail|remove",
|
|
61
61
|
"aria-label": t(w)("ll.thumbnail.removeButton", { index: a.value + 1 }),
|
|
62
62
|
type: "button",
|
|
63
63
|
icon: "",
|
|
64
|
-
onClick:
|
|
64
|
+
onClick: U(C, ["stop", "prevent"])
|
|
65
65
|
}, {
|
|
66
66
|
default: V(() => [
|
|
67
|
-
|
|
67
|
+
_(E, {
|
|
68
68
|
name: "close",
|
|
69
69
|
size: "small"
|
|
70
70
|
})
|
|
71
71
|
]),
|
|
72
72
|
_: 1
|
|
73
|
-
}, 8, ["class", "aria-label"])) :
|
|
74
|
-
|
|
75
|
-
], 10,
|
|
73
|
+
}, 8, ["class", "aria-label"])) : $("", !0),
|
|
74
|
+
q(u.$slots, "hint")
|
|
75
|
+
], 10, D));
|
|
76
76
|
}
|
|
77
|
-
}),
|
|
77
|
+
}), J = {
|
|
78
78
|
"thumbnail-remove": "_thumbnail-remove_pocxm_5",
|
|
79
79
|
"thumbnail-img": "_thumbnail-img_pocxm_27",
|
|
80
80
|
"thumbnail-translucent": "_thumbnail-translucent_pocxm_35",
|
|
@@ -82,10 +82,10 @@ const A = ["aria-current", "draggable"], D = /* @__PURE__ */ k({
|
|
|
82
82
|
"thumbnail-mask": "_thumbnail-mask_pocxm_49",
|
|
83
83
|
"thumbnail-full": "_thumbnail-full_pocxm_53",
|
|
84
84
|
"thumbnail-rounded": "_thumbnail-rounded_pocxm_57"
|
|
85
|
-
},
|
|
86
|
-
$style:
|
|
87
|
-
},
|
|
85
|
+
}, L = {
|
|
86
|
+
$style: J
|
|
87
|
+
}, W = /* @__PURE__ */ A(H, [["__cssModules", L]]);
|
|
88
88
|
export {
|
|
89
|
-
|
|
89
|
+
W as default
|
|
90
90
|
};
|
|
91
91
|
//# sourceMappingURL=Thumbnail.js.map
|