@alaarab/ogrid-vue-radix 2.7.0 → 2.7.2
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/esm/ColumnChooser/ColumnChooser.js +7 -0
- package/dist/esm/ColumnChooser/ColumnChooser.vue?vue&type=style&index=0&scoped=9d3085bf&lang.css +1 -0
- package/dist/esm/ColumnChooser/ColumnChooser.vue_vue_type_script_setup_true_lang.js +97 -0
- package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.js +7 -0
- package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.module.css +3 -27
- package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue?vue&type=style&index=0&scoped=7b7a41e5&lang.css +1 -0
- package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue_vue_type_script_setup_true_lang.js +189 -0
- package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.js +7 -0
- package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue?vue&type=style&index=0&scoped=b40a6834&lang.css +1 -0
- package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue_vue_type_script_setup_true_lang.js +68 -0
- package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.js +7 -0
- package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue?vue&type=style&index=0&scoped=58ce6f63&lang.css +1 -0
- package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue_vue_type_script_setup_true_lang.js +104 -0
- package/dist/esm/ColumnHeaderFilter/TextFilterPopover.js +7 -0
- package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue?vue&type=style&index=0&scoped=0baa080d&lang.css +1 -0
- package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue_vue_type_script_setup_true_lang.js +36 -0
- package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.js +7 -0
- package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue?vue&type=style&index=0&scoped=217034af&lang.css +1 -0
- package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue_vue_type_script_setup_true_lang.js +77 -0
- package/dist/esm/DataGridTable/DataGridTable.css +1 -1
- package/dist/esm/DataGridTable/DataGridTable2.js +29 -0
- package/dist/esm/DataGridTable/EmptyState.js +8 -19
- package/dist/esm/DataGridTable/GridContextMenu.js +7 -0
- package/dist/esm/DataGridTable/GridContextMenu.vue?vue&type=style&index=0&scoped=204e9cc9&lang.css +1 -0
- package/dist/esm/DataGridTable/GridContextMenu.vue_vue_type_script_setup_true_lang.js +76 -0
- package/dist/esm/DataGridTable/InlineCellEditor.js +18 -15
- package/dist/esm/OGrid/OGrid.js +9 -9
- package/dist/esm/PaginationControls/PaginationControls.js +7 -0
- package/dist/esm/PaginationControls/PaginationControls.vue?vue&type=style&index=0&scoped=9f3ef127&lang.css +1 -0
- package/dist/esm/PaginationControls/PaginationControls.vue_vue_type_script_setup_true_lang.js +108 -0
- package/dist/esm/_virtual/_plugin-vue_export-helper.js +5 -6
- package/dist/esm/index.js +135 -135
- package/package.json +8 -8
- package/dist/esm/ColumnChooser/ColumnChooser.css +0 -1
- package/dist/esm/ColumnChooser/ColumnChooser.vue.js +0 -7
- package/dist/esm/ColumnChooser/ColumnChooser.vue2.js +0 -125
- package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.css +0 -1
- package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue.js +0 -7
- package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue2.js +0 -180
- package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.css +0 -1
- package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue.js +0 -7
- package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue2.js +0 -82
- package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.css +0 -1
- package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue.js +0 -7
- package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue2.js +0 -116
- package/dist/esm/ColumnHeaderFilter/TextFilterPopover.css +0 -1
- package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue.js +0 -7
- package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue2.js +0 -46
- package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.css +0 -1
- package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue.js +0 -7
- package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue2.js +0 -84
- package/dist/esm/DataGridTable/DataGridTable.js +0 -34
- package/dist/esm/DataGridTable/GridContextMenu.css +0 -1
- package/dist/esm/DataGridTable/GridContextMenu.vue.js +0 -7
- package/dist/esm/DataGridTable/GridContextMenu.vue2.js +0 -84
- package/dist/esm/PaginationControls/PaginationControls.css +0 -1
- package/dist/esm/PaginationControls/PaginationControls.vue.js +0 -7
- package/dist/esm/PaginationControls/PaginationControls.vue2.js +0 -125
package/dist/esm/ColumnChooser/ColumnChooser.vue?vue&type=style&index=0&scoped=9d3085bf&lang.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.container[data-v-9d3085bf]{display:inline-flex;position:relative}.trigger-button[data-v-9d3085bf]{border:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-bg,#fff);cursor:pointer;color:var(--ogrid-fg,#000000de);border-radius:6px;align-items:center;gap:6px;padding:6px 12px;font-size:13px;font-weight:600;transition:background .15s,border-color .15s;display:inline-flex}.trigger-button[data-v-9d3085bf]:hover{background:var(--ogrid-hover-bg,#0000000a);border-color:var(--ogrid-fg-muted,#00000080)}.trigger-button[aria-expanded=true][data-v-9d3085bf]{border-color:var(--ogrid-accent,#0078d4)}.button-icon[data-v-9d3085bf]{font-size:16px;line-height:1}.chevron[data-v-9d3085bf]{color:var(--ogrid-fg-muted,#00000080);font-size:12px}.dropdown[data-v-9d3085bf]{background:var(--ogrid-bg,#fff);border:1px solid var(--ogrid-border,#0000001f);z-index:50;border-radius:6px;flex-direction:column;min-width:220px;padding:0;display:flex;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 4px 16px #0000001f}.header[data-v-9d3085bf]{border-bottom:1px solid var(--ogrid-border,#0000001f);color:var(--ogrid-fg,#000000de);background:var(--ogrid-header-bg,#0000000a);padding:8px 12px;font-size:13px;font-weight:600}.options-list[data-v-9d3085bf]{max-height:320px;padding:0;overflow-y:auto}.option-item[data-v-9d3085bf]{align-items:center;gap:8px;min-height:32px;padding:4px 12px;display:flex}.option-item[data-v-9d3085bf]:hover{background:var(--ogrid-hover-bg,#0000000a)}.checkbox-input[data-v-9d3085bf]{border:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-bg,#fff);cursor:pointer;border-radius:3px;flex-shrink:0;width:16px;height:16px}.checkbox-input[data-v-9d3085bf]:checked{background:var(--ogrid-accent,#0078d4);border-color:var(--ogrid-accent,#0078d4)}.checkbox-input[data-v-9d3085bf]:disabled{opacity:.5;cursor:not-allowed}.checkbox-label[data-v-9d3085bf]{cursor:pointer;color:var(--ogrid-fg,#000000de);-webkit-user-select:none;user-select:none;font-size:13px}.actions[data-v-9d3085bf]{border-top:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);justify-content:flex-end;gap:8px;padding:8px 12px;display:flex}.clear-button[data-v-9d3085bf]{border:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-bg,#fff);color:var(--ogrid-fg-secondary,#0009);cursor:pointer;border-radius:4px;padding:6px 12px;font-size:12px}.clear-button[data-v-9d3085bf]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.select-all-button[data-v-9d3085bf]{background:var(--ogrid-accent,#0078d4);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:6px 16px;font-size:12px;font-weight:600}.select-all-button[data-v-9d3085bf]:hover{opacity:.85}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { useColumnChooserState as I } from "@alaarab/ogrid-vue";
|
|
2
|
+
import { Fragment as V, Transition as S, computed as f, createElementBlock as c, createElementVNode as s, createVNode as i, defineComponent as A, normalizeClass as M, openBlock as m, renderList as N, toDisplayString as o, unref as l, withCtx as r, withModifiers as d } from "vue";
|
|
3
|
+
import { Menu as w, MenuButton as B, MenuItems as $ } from "@headlessui/vue";
|
|
4
|
+
var q = {
|
|
5
|
+
class: "chevron",
|
|
6
|
+
"aria-hidden": ""
|
|
7
|
+
}, E = { class: "header" }, z = { class: "options-list" }, D = ["aria-checked", "aria-disabled"], F = [
|
|
8
|
+
"id",
|
|
9
|
+
"checked",
|
|
10
|
+
"disabled",
|
|
11
|
+
"onChange"
|
|
12
|
+
], L = ["for"], T = { class: "actions" }, J = /* @__PURE__ */ A({
|
|
13
|
+
__name: "ColumnChooser",
|
|
14
|
+
props: {
|
|
15
|
+
columns: {},
|
|
16
|
+
visibleColumns: {},
|
|
17
|
+
onVisibilityChange: {},
|
|
18
|
+
className: { default: "" }
|
|
19
|
+
},
|
|
20
|
+
setup(a) {
|
|
21
|
+
const u = a, { open: k, setOpen: g, handleCheckboxChange: y, handleSelectAll: C, handleClearAll: p, visibleCount: b, totalCount: h } = I({
|
|
22
|
+
columns: f(() => u.columns),
|
|
23
|
+
visibleColumns: f(() => u.visibleColumns),
|
|
24
|
+
onVisibilityChange: u.onVisibilityChange
|
|
25
|
+
}), x = (v) => (e) => {
|
|
26
|
+
const n = e.target;
|
|
27
|
+
y(v)(n.checked);
|
|
28
|
+
};
|
|
29
|
+
return (v, e) => (m(), c("div", { class: M(["container", a.className]) }, [i(l(w), null, {
|
|
30
|
+
default: r(({ open: n }) => [i(l(B), {
|
|
31
|
+
class: "trigger-button",
|
|
32
|
+
"aria-expanded": n,
|
|
33
|
+
"aria-haspopup": "listbox",
|
|
34
|
+
onClick: e[0] || (e[0] = (t) => l(g)(!l(k)))
|
|
35
|
+
}, {
|
|
36
|
+
default: r(() => [
|
|
37
|
+
e[5] || (e[5] = s("span", {
|
|
38
|
+
class: "button-icon",
|
|
39
|
+
"aria-hidden": ""
|
|
40
|
+
}, "⚙", -1)),
|
|
41
|
+
s("span", null, "Column Visibility (" + o(l(b)) + " of " + o(l(h)) + ")", 1),
|
|
42
|
+
s("span", q, o(n ? "▲" : "▼"), 1)
|
|
43
|
+
]),
|
|
44
|
+
_: 2
|
|
45
|
+
}, 1032, ["aria-expanded"]), i(S, {
|
|
46
|
+
"enter-active-class": "transition duration-100 ease-out",
|
|
47
|
+
"enter-from-class": "opacity-0 scale-95",
|
|
48
|
+
"enter-to-class": "opacity-100 scale-100",
|
|
49
|
+
"leave-active-class": "transition duration-75 ease-in",
|
|
50
|
+
"leave-from-class": "opacity-100 scale-100",
|
|
51
|
+
"leave-to-class": "opacity-0 scale-95"
|
|
52
|
+
}, {
|
|
53
|
+
default: r(() => [i(l($), { class: "dropdown" }, {
|
|
54
|
+
default: r(() => [
|
|
55
|
+
s("div", E, "Select Columns (" + o(l(b)) + " of " + o(l(h)) + ")", 1),
|
|
56
|
+
s("div", z, [(m(!0), c(V, null, N(a.columns, (t) => (m(), c("div", {
|
|
57
|
+
key: t.columnId,
|
|
58
|
+
class: "option-item",
|
|
59
|
+
role: "menuitemcheckbox",
|
|
60
|
+
"aria-checked": a.visibleColumns.has(t.columnId),
|
|
61
|
+
"aria-disabled": t.required === !0
|
|
62
|
+
}, [s("input", {
|
|
63
|
+
id: `col-${t.columnId}`,
|
|
64
|
+
type: "checkbox",
|
|
65
|
+
checked: a.visibleColumns.has(t.columnId),
|
|
66
|
+
disabled: t.required === !0,
|
|
67
|
+
class: "checkbox-input",
|
|
68
|
+
onClick: e[1] || (e[1] = d(() => {
|
|
69
|
+
}, ["stop"])),
|
|
70
|
+
onChange: (_) => x(t.columnId)(_)
|
|
71
|
+
}, null, 40, F), s("label", {
|
|
72
|
+
for: `col-${t.columnId}`,
|
|
73
|
+
class: "checkbox-label",
|
|
74
|
+
onClick: e[2] || (e[2] = d(() => {
|
|
75
|
+
}, ["stop"]))
|
|
76
|
+
}, o(t.name), 9, L)], 8, D))), 128))]),
|
|
77
|
+
s("div", T, [s("button", {
|
|
78
|
+
type: "button",
|
|
79
|
+
class: "clear-button",
|
|
80
|
+
onClick: e[3] || (e[3] = d((...t) => l(p) && l(p)(...t), ["stop"]))
|
|
81
|
+
}, " Clear All "), s("button", {
|
|
82
|
+
type: "button",
|
|
83
|
+
class: "select-all-button",
|
|
84
|
+
onClick: e[4] || (e[4] = d((...t) => l(C) && l(C)(...t), ["stop"]))
|
|
85
|
+
}, " Select All ")])
|
|
86
|
+
]),
|
|
87
|
+
_: 1
|
|
88
|
+
})]),
|
|
89
|
+
_: 1
|
|
90
|
+
})]),
|
|
91
|
+
_: 1
|
|
92
|
+
})], 2));
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
export {
|
|
96
|
+
J as default
|
|
97
|
+
};
|
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
.column-header {
|
|
2
2
|
display: flex;
|
|
3
3
|
align-items: center;
|
|
4
|
-
gap:
|
|
5
|
-
width: 100%;
|
|
6
|
-
max-width: 100%;
|
|
7
|
-
min-width: 0;
|
|
8
|
-
position: relative;
|
|
9
|
-
box-sizing: border-box;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.header-content {
|
|
13
|
-
display: flex;
|
|
14
|
-
align-items: center;
|
|
4
|
+
gap: 2px;
|
|
15
5
|
flex: 1;
|
|
16
6
|
min-width: 0;
|
|
17
|
-
|
|
7
|
+
box-sizing: border-box;
|
|
18
8
|
}
|
|
19
9
|
|
|
20
10
|
.column-name {
|
|
21
|
-
|
|
11
|
+
flex: 1;
|
|
22
12
|
min-width: 0;
|
|
23
|
-
max-width: 100%;
|
|
24
13
|
overflow: hidden;
|
|
25
14
|
text-overflow: ellipsis;
|
|
26
15
|
white-space: nowrap;
|
|
@@ -29,14 +18,6 @@
|
|
|
29
18
|
color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
|
|
30
19
|
}
|
|
31
20
|
|
|
32
|
-
.header-actions {
|
|
33
|
-
display: flex;
|
|
34
|
-
align-items: center;
|
|
35
|
-
gap: 2px;
|
|
36
|
-
margin-left: auto;
|
|
37
|
-
flex-shrink: 0;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
21
|
.filter-icon {
|
|
41
22
|
display: flex;
|
|
42
23
|
align-items: center;
|
|
@@ -84,9 +65,6 @@
|
|
|
84
65
|
}
|
|
85
66
|
|
|
86
67
|
.popover-content {
|
|
87
|
-
position: absolute;
|
|
88
|
-
top: calc(100% + 4px);
|
|
89
|
-
right: 0;
|
|
90
68
|
z-index: 1000;
|
|
91
69
|
min-width: 280px;
|
|
92
70
|
max-width: 320px;
|
|
@@ -95,8 +73,6 @@
|
|
|
95
73
|
.popover-content {
|
|
96
74
|
min-width: calc(100vw - 24px);
|
|
97
75
|
max-width: calc(100vw - 24px);
|
|
98
|
-
right: auto;
|
|
99
|
-
left: 0;
|
|
100
76
|
}
|
|
101
77
|
}
|
|
102
78
|
.popover-content {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.column-header[data-v-7b7a41e5]{box-sizing:border-box;flex:1;align-items:center;gap:2px;min-width:0;display:flex}.column-name[data-v-7b7a41e5]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ogrid-fg,#000000de);flex:1;font-size:14px;font-weight:600;overflow:hidden}.filter-icon[data-v-7b7a41e5]{width:24px;height:24px;color:var(--ogrid-fg-muted,#00000080);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:4px;font-size:14px;display:flex;position:relative}@media (pointer:coarse){.filter-icon[data-v-7b7a41e5]{width:36px;height:36px;padding:6px}}.filter-icon[data-v-7b7a41e5]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.filter-icon.filter-active[data-v-7b7a41e5]{background:var(--ogrid-header-bg,#0000000a);color:var(--ogrid-accent,#0078d4)}.filter-icon.filter-open[data-v-7b7a41e5]{background:var(--ogrid-header-bg,#0000000a)}.filter-badge[data-v-7b7a41e5]{background:var(--ogrid-accent,#0078d4);border:1px solid var(--ogrid-bg,#fff);border-radius:50%;width:6px;height:6px;position:absolute;top:2px;right:2px}.popover-content[data-v-7b7a41e5]{z-index:1000;min-width:280px;max-width:320px}@media (width<=360px){.popover-content[data-v-7b7a41e5]{min-width:calc(100vw - 24px);max-width:calc(100vw - 24px)}}.popover-content[data-v-7b7a41e5]{background:var(--ogrid-bg,#fff);border:1px solid var(--ogrid-border,#0000001f);color:var(--ogrid-fg,#000000de);border-radius:8px;overflow:hidden;box-shadow:0 4px 16px #0000001f}.popover-header[data-v-7b7a41e5]{color:var(--ogrid-fg-muted,#00000080);border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);padding:10px 14px;font-size:12px;font-weight:600}.popover-search[data-v-7b7a41e5]{border-bottom:1px solid var(--ogrid-border,#0000001f);padding:10px 12px}.search-input[data-v-7b7a41e5]{border:1px solid var(--ogrid-border,#0000001f);box-sizing:border-box;background:var(--ogrid-bg,#fff);width:100%;color:var(--ogrid-fg,#000000de);border-radius:4px;padding:6px 10px;font-size:14px}.search-input[data-v-7b7a41e5]:focus{border-color:var(--ogrid-accent,#0078d4);outline:none}.result-count[data-v-7b7a41e5]{color:var(--ogrid-fg-muted,#00000080);margin-top:6px;font-size:11px}.select-all-row[data-v-7b7a41e5]{border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);gap:8px;padding:6px 12px;display:flex}.select-all-button[data-v-7b7a41e5]{color:var(--ogrid-accent,#0078d4);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-size:12px;font-weight:500}.select-all-button[data-v-7b7a41e5]:hover{background:var(--ogrid-hover-bg,#0000000a)}.popover-options[data-v-7b7a41e5]{max-height:250px;padding:6px 0;overflow-y:auto}.popover-option[data-v-7b7a41e5]{color:var(--ogrid-fg,#000000de);align-items:center;gap:8px;padding:4px 12px;font-size:13px;display:flex}@media (pointer:coarse){.popover-option[data-v-7b7a41e5]{min-height:44px}}.popover-option[data-v-7b7a41e5]:hover{background:var(--ogrid-hover-bg,#0000000a)}.filter-checkbox[data-v-7b7a41e5]{border:1px solid var(--ogrid-border,#0000001f);cursor:pointer;border-radius:3px;flex-shrink:0;width:16px;height:16px}.popover-actions[data-v-7b7a41e5]{border-top:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);justify-content:flex-end;gap:8px;padding:8px 12px;display:flex}.clear-button[data-v-7b7a41e5]{border:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-bg,#fff);color:var(--ogrid-fg-secondary,#0009);cursor:pointer;border-radius:4px;padding:6px 12px;font-size:12px}@media (pointer:coarse){.clear-button[data-v-7b7a41e5]{min-height:44px;padding:10px 16px}}.clear-button[data-v-7b7a41e5]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.clear-button[data-v-7b7a41e5]:disabled{opacity:.5;cursor:not-allowed}.apply-button[data-v-7b7a41e5]{background:var(--ogrid-accent,#0078d4);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:6px 16px;font-size:12px;font-weight:600}@media (pointer:coarse){.apply-button[data-v-7b7a41e5]{min-height:44px;padding:10px 20px}}.apply-button[data-v-7b7a41e5]:hover{opacity:.85}.loading-container[data-v-7b7a41e5],.no-results[data-v-7b7a41e5]{text-align:center;color:var(--ogrid-fg-secondary,#0009);padding:20px;font-size:13px}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import I from "./TextFilterPopover.js";
|
|
2
|
+
import z from "./MultiSelectFilterPopover.js";
|
|
3
|
+
import E from "./PeopleFilterPopover.js";
|
|
4
|
+
import { useColumnHeaderFilterState as H } from "@alaarab/ogrid-vue";
|
|
5
|
+
import { Teleport as M, createBlock as p, createCommentVNode as u, createElementBlock as s, createElementVNode as n, createTextVNode as y, defineComponent as $, normalizeClass as w, normalizeStyle as K, openBlock as r, toDisplayString as C, unref as e, withModifiers as j } from "vue";
|
|
6
|
+
var q = ["title"], G = [
|
|
7
|
+
"aria-label",
|
|
8
|
+
"aria-expanded",
|
|
9
|
+
"title"
|
|
10
|
+
], J = {
|
|
11
|
+
key: 0,
|
|
12
|
+
class: "filter-badge"
|
|
13
|
+
}, Q = { class: "popover-header" }, W = { key: 3 }, X = { style: {
|
|
14
|
+
padding: "8px 12px",
|
|
15
|
+
display: "flex",
|
|
16
|
+
"flex-direction": "column",
|
|
17
|
+
gap: "6px"
|
|
18
|
+
} }, Y = { style: {
|
|
19
|
+
display: "flex",
|
|
20
|
+
"align-items": "center",
|
|
21
|
+
gap: "6px",
|
|
22
|
+
"font-size": "12px"
|
|
23
|
+
} }, Z = ["value"], _ = { style: {
|
|
24
|
+
display: "flex",
|
|
25
|
+
"align-items": "center",
|
|
26
|
+
gap: "6px",
|
|
27
|
+
"font-size": "12px"
|
|
28
|
+
} }, ee = ["value"], te = { class: "popover-actions" }, le = ["disabled"], se = /* @__PURE__ */ $({
|
|
29
|
+
__name: "ColumnHeaderFilter",
|
|
30
|
+
props: {
|
|
31
|
+
columnKey: {},
|
|
32
|
+
columnName: {},
|
|
33
|
+
filterType: {},
|
|
34
|
+
isSorted: {
|
|
35
|
+
type: Boolean,
|
|
36
|
+
default: !1
|
|
37
|
+
},
|
|
38
|
+
isSortedDescending: {
|
|
39
|
+
type: Boolean,
|
|
40
|
+
default: !1
|
|
41
|
+
},
|
|
42
|
+
onSort: {},
|
|
43
|
+
selectedValues: {},
|
|
44
|
+
onFilterChange: {},
|
|
45
|
+
options: { default: () => [] },
|
|
46
|
+
isLoadingOptions: {
|
|
47
|
+
type: Boolean,
|
|
48
|
+
default: !1
|
|
49
|
+
},
|
|
50
|
+
textValue: { default: "" },
|
|
51
|
+
onTextChange: {},
|
|
52
|
+
selectedUser: {},
|
|
53
|
+
onUserChange: {},
|
|
54
|
+
peopleSearch: {},
|
|
55
|
+
dateValue: {},
|
|
56
|
+
onDateChange: {}
|
|
57
|
+
},
|
|
58
|
+
setup(l) {
|
|
59
|
+
const a = l, { headerRef: v, popoverRef: x, isFilterOpen: c, hasActiveFilter: g, tempSelected: S, tempTextValue: T, searchText: F, filteredOptions: k, peopleSearchText: V, peopleSuggestions: b, isPeopleLoading: D, peopleInputRef: U, tempDateFrom: h, tempDateTo: m, setTempTextValue: A, setSearchText: O, setPeopleSearchText: L, setTempDateFrom: N, setTempDateTo: P, popoverPosition: f, handlers: o } = H({
|
|
60
|
+
filterType: a.filterType,
|
|
61
|
+
isSorted: a.isSorted,
|
|
62
|
+
isSortedDescending: a.isSortedDescending,
|
|
63
|
+
onSort: a.onSort,
|
|
64
|
+
selectedValues: a.selectedValues,
|
|
65
|
+
onFilterChange: a.onFilterChange,
|
|
66
|
+
options: a.options,
|
|
67
|
+
isLoadingOptions: a.isLoadingOptions,
|
|
68
|
+
textValue: a.textValue,
|
|
69
|
+
onTextChange: a.onTextChange,
|
|
70
|
+
selectedUser: a.selectedUser,
|
|
71
|
+
onUserChange: a.onUserChange,
|
|
72
|
+
peopleSearch: a.peopleSearch,
|
|
73
|
+
dateValue: a.dateValue,
|
|
74
|
+
onDateChange: a.onDateChange
|
|
75
|
+
}), R = (d) => {
|
|
76
|
+
v.value = d;
|
|
77
|
+
}, B = (d) => {
|
|
78
|
+
x.value = d;
|
|
79
|
+
};
|
|
80
|
+
return (d, t) => (r(), s("div", {
|
|
81
|
+
class: "column-header",
|
|
82
|
+
ref: R
|
|
83
|
+
}, [
|
|
84
|
+
n("span", {
|
|
85
|
+
class: "column-name",
|
|
86
|
+
title: l.columnName,
|
|
87
|
+
"data-header-label": ""
|
|
88
|
+
}, C(l.columnName), 9, q),
|
|
89
|
+
l.filterType !== "none" ? (r(), s("button", {
|
|
90
|
+
key: 0,
|
|
91
|
+
class: w([
|
|
92
|
+
"filter-icon",
|
|
93
|
+
{ "filter-active": e(g) },
|
|
94
|
+
{ "filter-open": e(c) }
|
|
95
|
+
]),
|
|
96
|
+
onClick: t[0] || (t[0] = (...i) => e(o).handleFilterIconClick && e(o).handleFilterIconClick(...i)),
|
|
97
|
+
"aria-label": `Filter ${l.columnName}`,
|
|
98
|
+
"aria-expanded": e(c),
|
|
99
|
+
"aria-haspopup": "dialog",
|
|
100
|
+
title: `Filter ${l.columnName}`
|
|
101
|
+
}, [t[6] || (t[6] = n("span", { "aria-hidden": "" }, "▼", -1)), e(g) ? (r(), s("span", J)) : u("", !0)], 10, G)) : u("", !0),
|
|
102
|
+
(r(), p(M, { to: "body" }, [e(c) && l.filterType !== "none" ? (r(), s("div", {
|
|
103
|
+
key: 0,
|
|
104
|
+
ref: B,
|
|
105
|
+
class: "popover-content",
|
|
106
|
+
style: K(e(f) ? {
|
|
107
|
+
position: "fixed",
|
|
108
|
+
top: e(f).top + "px",
|
|
109
|
+
left: e(f).left + "px"
|
|
110
|
+
} : {}),
|
|
111
|
+
onClick: t[5] || (t[5] = j(() => {
|
|
112
|
+
}, ["stop"]))
|
|
113
|
+
}, [n("div", Q, "Filter: " + C(l.columnName), 1), l.filterType === "text" ? (r(), p(I, {
|
|
114
|
+
key: 0,
|
|
115
|
+
value: e(T) ?? "",
|
|
116
|
+
onValueChange: e(A),
|
|
117
|
+
onApply: e(o).handleTextApply,
|
|
118
|
+
onClear: e(o).handleTextClear
|
|
119
|
+
}, null, 8, [
|
|
120
|
+
"value",
|
|
121
|
+
"onValueChange",
|
|
122
|
+
"onApply",
|
|
123
|
+
"onClear"
|
|
124
|
+
])) : l.filterType === "multiSelect" ? (r(), p(z, {
|
|
125
|
+
key: 1,
|
|
126
|
+
searchText: e(F),
|
|
127
|
+
onSearchChange: e(O),
|
|
128
|
+
options: l.options,
|
|
129
|
+
filteredOptions: e(k),
|
|
130
|
+
selected: e(S),
|
|
131
|
+
onOptionToggle: e(o).handleCheckboxChange,
|
|
132
|
+
onSelectAll: e(o).handleSelectAll,
|
|
133
|
+
onClearSelection: e(o).handleClearSelection,
|
|
134
|
+
onApply: e(o).handleApplyMultiSelect,
|
|
135
|
+
isLoading: l.isLoadingOptions
|
|
136
|
+
}, null, 8, [
|
|
137
|
+
"searchText",
|
|
138
|
+
"onSearchChange",
|
|
139
|
+
"options",
|
|
140
|
+
"filteredOptions",
|
|
141
|
+
"selected",
|
|
142
|
+
"onOptionToggle",
|
|
143
|
+
"onSelectAll",
|
|
144
|
+
"onClearSelection",
|
|
145
|
+
"onApply",
|
|
146
|
+
"isLoading"
|
|
147
|
+
])) : l.filterType === "people" ? (r(), p(E, {
|
|
148
|
+
key: 2,
|
|
149
|
+
selectedUser: l.selectedUser,
|
|
150
|
+
searchText: e(V),
|
|
151
|
+
onSearchChange: e(L),
|
|
152
|
+
suggestions: e(b),
|
|
153
|
+
isLoading: e(D),
|
|
154
|
+
onUserSelect: e(o).handleUserSelect,
|
|
155
|
+
onClearUser: e(o).handleClearUser,
|
|
156
|
+
inputRef: e(U)
|
|
157
|
+
}, null, 8, [
|
|
158
|
+
"selectedUser",
|
|
159
|
+
"searchText",
|
|
160
|
+
"onSearchChange",
|
|
161
|
+
"suggestions",
|
|
162
|
+
"isLoading",
|
|
163
|
+
"onUserSelect",
|
|
164
|
+
"onClearUser",
|
|
165
|
+
"inputRef"
|
|
166
|
+
])) : l.filterType === "date" ? (r(), s("div", W, [n("div", X, [n("label", Y, [t[7] || (t[7] = y(" From: ", -1)), n("input", {
|
|
167
|
+
type: "date",
|
|
168
|
+
value: e(h),
|
|
169
|
+
onInput: t[1] || (t[1] = (i) => e(N)(i.target.value)),
|
|
170
|
+
style: { flex: "1" }
|
|
171
|
+
}, null, 40, Z)]), n("label", _, [t[8] || (t[8] = y(" To: ", -1)), n("input", {
|
|
172
|
+
type: "date",
|
|
173
|
+
value: e(m),
|
|
174
|
+
onInput: t[2] || (t[2] = (i) => e(P)(i.target.value)),
|
|
175
|
+
style: { flex: "1" }
|
|
176
|
+
}, null, 40, ee)])]), n("div", te, [n("button", {
|
|
177
|
+
class: "clear-button",
|
|
178
|
+
onClick: t[3] || (t[3] = (...i) => e(o).handleDateClear && e(o).handleDateClear(...i)),
|
|
179
|
+
disabled: !e(h) && !e(m)
|
|
180
|
+
}, " Clear ", 8, le), n("button", {
|
|
181
|
+
class: "apply-button",
|
|
182
|
+
onClick: t[4] || (t[4] = (...i) => e(o).handleDateApply && e(o).handleDateApply(...i))
|
|
183
|
+
}, " Apply ")])])) : u("", !0)], 4)) : u("", !0)]))
|
|
184
|
+
]));
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
export {
|
|
188
|
+
se as default
|
|
189
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.column-header[data-v-b40a6834]{box-sizing:border-box;flex:1;align-items:center;gap:2px;min-width:0;display:flex}.column-name[data-v-b40a6834]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ogrid-fg,#000000de);flex:1;font-size:14px;font-weight:600;overflow:hidden}.filter-icon[data-v-b40a6834]{width:24px;height:24px;color:var(--ogrid-fg-muted,#00000080);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:4px;font-size:14px;display:flex;position:relative}@media (pointer:coarse){.filter-icon[data-v-b40a6834]{width:36px;height:36px;padding:6px}}.filter-icon[data-v-b40a6834]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.filter-icon.filter-active[data-v-b40a6834]{background:var(--ogrid-header-bg,#0000000a);color:var(--ogrid-accent,#0078d4)}.filter-icon.filter-open[data-v-b40a6834]{background:var(--ogrid-header-bg,#0000000a)}.filter-badge[data-v-b40a6834]{background:var(--ogrid-accent,#0078d4);border:1px solid var(--ogrid-bg,#fff);border-radius:50%;width:6px;height:6px;position:absolute;top:2px;right:2px}.popover-content[data-v-b40a6834]{z-index:1000;min-width:280px;max-width:320px}@media (width<=360px){.popover-content[data-v-b40a6834]{min-width:calc(100vw - 24px);max-width:calc(100vw - 24px)}}.popover-content[data-v-b40a6834]{background:var(--ogrid-bg,#fff);border:1px solid var(--ogrid-border,#0000001f);color:var(--ogrid-fg,#000000de);border-radius:8px;overflow:hidden;box-shadow:0 4px 16px #0000001f}.popover-header[data-v-b40a6834]{color:var(--ogrid-fg-muted,#00000080);border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);padding:10px 14px;font-size:12px;font-weight:600}.popover-search[data-v-b40a6834]{border-bottom:1px solid var(--ogrid-border,#0000001f);padding:10px 12px}.search-input[data-v-b40a6834]{border:1px solid var(--ogrid-border,#0000001f);box-sizing:border-box;background:var(--ogrid-bg,#fff);width:100%;color:var(--ogrid-fg,#000000de);border-radius:4px;padding:6px 10px;font-size:14px}.search-input[data-v-b40a6834]:focus{border-color:var(--ogrid-accent,#0078d4);outline:none}.result-count[data-v-b40a6834]{color:var(--ogrid-fg-muted,#00000080);margin-top:6px;font-size:11px}.select-all-row[data-v-b40a6834]{border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);gap:8px;padding:6px 12px;display:flex}.select-all-button[data-v-b40a6834]{color:var(--ogrid-accent,#0078d4);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-size:12px;font-weight:500}.select-all-button[data-v-b40a6834]:hover{background:var(--ogrid-hover-bg,#0000000a)}.popover-options[data-v-b40a6834]{max-height:250px;padding:6px 0;overflow-y:auto}.popover-option[data-v-b40a6834]{color:var(--ogrid-fg,#000000de);align-items:center;gap:8px;padding:4px 12px;font-size:13px;display:flex}@media (pointer:coarse){.popover-option[data-v-b40a6834]{min-height:44px}}.popover-option[data-v-b40a6834]:hover{background:var(--ogrid-hover-bg,#0000000a)}.filter-checkbox[data-v-b40a6834]{border:1px solid var(--ogrid-border,#0000001f);cursor:pointer;border-radius:3px;flex-shrink:0;width:16px;height:16px}.popover-actions[data-v-b40a6834]{border-top:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);justify-content:flex-end;gap:8px;padding:8px 12px;display:flex}.clear-button[data-v-b40a6834]{border:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-bg,#fff);color:var(--ogrid-fg-secondary,#0009);cursor:pointer;border-radius:4px;padding:6px 12px;font-size:12px}@media (pointer:coarse){.clear-button[data-v-b40a6834]{min-height:44px;padding:10px 16px}}.clear-button[data-v-b40a6834]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.clear-button[data-v-b40a6834]:disabled{opacity:.5;cursor:not-allowed}.apply-button[data-v-b40a6834]{background:var(--ogrid-accent,#0078d4);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:6px 16px;font-size:12px;font-weight:600}@media (pointer:coarse){.apply-button[data-v-b40a6834]{min-height:44px;padding:10px 20px}}.apply-button[data-v-b40a6834]:hover{opacity:.85}.loading-container[data-v-b40a6834],.no-results[data-v-b40a6834]{text-align:center;color:var(--ogrid-fg-secondary,#0009);padding:20px;font-size:13px}
|
package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue_vue_type_script_setup_true_lang.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Fragment as r, createElementBlock as o, createElementVNode as l, defineComponent as c, openBlock as i, renderList as u, toDisplayString as a } from "vue";
|
|
2
|
+
var d = { class: "popover-search" }, v = ["value"], p = { class: "result-count" }, y = { class: "select-all-row" }, h = { class: "popover-options" }, g = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "loading-container"
|
|
5
|
+
}, f = {
|
|
6
|
+
key: 1,
|
|
7
|
+
class: "no-results"
|
|
8
|
+
}, C = ["checked", "onChange"], b = { style: {
|
|
9
|
+
"margin-left": "8px",
|
|
10
|
+
cursor: "pointer",
|
|
11
|
+
"font-size": "13px"
|
|
12
|
+
} }, k = { class: "popover-actions" }, x = /* @__PURE__ */ c({
|
|
13
|
+
__name: "MultiSelectFilterPopover",
|
|
14
|
+
props: {
|
|
15
|
+
searchText: {},
|
|
16
|
+
onSearchChange: { type: Function },
|
|
17
|
+
options: {},
|
|
18
|
+
filteredOptions: {},
|
|
19
|
+
selected: {},
|
|
20
|
+
onOptionToggle: { type: Function },
|
|
21
|
+
onSelectAll: { type: Function },
|
|
22
|
+
onClearSelection: { type: Function },
|
|
23
|
+
onApply: { type: Function },
|
|
24
|
+
isLoading: { type: Boolean }
|
|
25
|
+
},
|
|
26
|
+
setup(e) {
|
|
27
|
+
return (S, n) => (i(), o("div", null, [
|
|
28
|
+
l("div", d, [l("input", {
|
|
29
|
+
type: "text",
|
|
30
|
+
class: "search-input",
|
|
31
|
+
placeholder: "Search...",
|
|
32
|
+
value: e.searchText,
|
|
33
|
+
onInput: n[0] || (n[0] = (t) => e.onSearchChange(t.target.value)),
|
|
34
|
+
autocomplete: "off"
|
|
35
|
+
}, null, 40, v), l("div", p, a(e.filteredOptions.length) + " of " + a(e.options.length) + " options ", 1)]),
|
|
36
|
+
l("div", y, [l("button", {
|
|
37
|
+
type: "button",
|
|
38
|
+
class: "select-all-button",
|
|
39
|
+
onClick: n[1] || (n[1] = (...t) => e.onSelectAll && e.onSelectAll(...t))
|
|
40
|
+
}, " Select All (" + a(e.filteredOptions.length) + ") ", 1), l("button", {
|
|
41
|
+
type: "button",
|
|
42
|
+
class: "select-all-button",
|
|
43
|
+
onClick: n[2] || (n[2] = (...t) => e.onClearSelection && e.onClearSelection(...t))
|
|
44
|
+
}, " Clear ")]),
|
|
45
|
+
l("div", h, [e.isLoading ? (i(), o("div", g, "Loading...")) : e.filteredOptions.length === 0 ? (i(), o("div", f, " No options found ")) : (i(!0), o(r, { key: 2 }, u(e.filteredOptions, (t) => (i(), o("div", {
|
|
46
|
+
key: t,
|
|
47
|
+
class: "popover-option"
|
|
48
|
+
}, [l("input", {
|
|
49
|
+
type: "checkbox",
|
|
50
|
+
checked: e.selected.has(t),
|
|
51
|
+
onChange: (s) => e.onOptionToggle(t, s.target.checked),
|
|
52
|
+
class: "filter-checkbox"
|
|
53
|
+
}, null, 40, C), l("label", b, a(t), 1)]))), 128))]),
|
|
54
|
+
l("div", k, [l("button", {
|
|
55
|
+
type: "button",
|
|
56
|
+
class: "clear-button",
|
|
57
|
+
onClick: n[3] || (n[3] = (...t) => e.onClearSelection && e.onClearSelection(...t))
|
|
58
|
+
}, " Clear "), l("button", {
|
|
59
|
+
type: "button",
|
|
60
|
+
class: "apply-button",
|
|
61
|
+
onClick: n[4] || (n[4] = (...t) => e.onApply && e.onApply(...t))
|
|
62
|
+
}, " Apply ")])
|
|
63
|
+
]));
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
export {
|
|
67
|
+
x as default
|
|
68
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.column-header[data-v-58ce6f63]{box-sizing:border-box;flex:1;align-items:center;gap:2px;min-width:0;display:flex}.column-name[data-v-58ce6f63]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ogrid-fg,#000000de);flex:1;font-size:14px;font-weight:600;overflow:hidden}.filter-icon[data-v-58ce6f63]{width:24px;height:24px;color:var(--ogrid-fg-muted,#00000080);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:4px;font-size:14px;display:flex;position:relative}@media (pointer:coarse){.filter-icon[data-v-58ce6f63]{width:36px;height:36px;padding:6px}}.filter-icon[data-v-58ce6f63]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.filter-icon.filter-active[data-v-58ce6f63]{background:var(--ogrid-header-bg,#0000000a);color:var(--ogrid-accent,#0078d4)}.filter-icon.filter-open[data-v-58ce6f63]{background:var(--ogrid-header-bg,#0000000a)}.filter-badge[data-v-58ce6f63]{background:var(--ogrid-accent,#0078d4);border:1px solid var(--ogrid-bg,#fff);border-radius:50%;width:6px;height:6px;position:absolute;top:2px;right:2px}.popover-content[data-v-58ce6f63]{z-index:1000;min-width:280px;max-width:320px}@media (width<=360px){.popover-content[data-v-58ce6f63]{min-width:calc(100vw - 24px);max-width:calc(100vw - 24px)}}.popover-content[data-v-58ce6f63]{background:var(--ogrid-bg,#fff);border:1px solid var(--ogrid-border,#0000001f);color:var(--ogrid-fg,#000000de);border-radius:8px;overflow:hidden;box-shadow:0 4px 16px #0000001f}.popover-header[data-v-58ce6f63]{color:var(--ogrid-fg-muted,#00000080);border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);padding:10px 14px;font-size:12px;font-weight:600}.popover-search[data-v-58ce6f63]{border-bottom:1px solid var(--ogrid-border,#0000001f);padding:10px 12px}.search-input[data-v-58ce6f63]{border:1px solid var(--ogrid-border,#0000001f);box-sizing:border-box;background:var(--ogrid-bg,#fff);width:100%;color:var(--ogrid-fg,#000000de);border-radius:4px;padding:6px 10px;font-size:14px}.search-input[data-v-58ce6f63]:focus{border-color:var(--ogrid-accent,#0078d4);outline:none}.result-count[data-v-58ce6f63]{color:var(--ogrid-fg-muted,#00000080);margin-top:6px;font-size:11px}.select-all-row[data-v-58ce6f63]{border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);gap:8px;padding:6px 12px;display:flex}.select-all-button[data-v-58ce6f63]{color:var(--ogrid-accent,#0078d4);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-size:12px;font-weight:500}.select-all-button[data-v-58ce6f63]:hover{background:var(--ogrid-hover-bg,#0000000a)}.popover-options[data-v-58ce6f63]{max-height:250px;padding:6px 0;overflow-y:auto}.popover-option[data-v-58ce6f63]{color:var(--ogrid-fg,#000000de);align-items:center;gap:8px;padding:4px 12px;font-size:13px;display:flex}@media (pointer:coarse){.popover-option[data-v-58ce6f63]{min-height:44px}}.popover-option[data-v-58ce6f63]:hover{background:var(--ogrid-hover-bg,#0000000a)}.filter-checkbox[data-v-58ce6f63]{border:1px solid var(--ogrid-border,#0000001f);cursor:pointer;border-radius:3px;flex-shrink:0;width:16px;height:16px}.popover-actions[data-v-58ce6f63]{border-top:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);justify-content:flex-end;gap:8px;padding:8px 12px;display:flex}.clear-button[data-v-58ce6f63]{border:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-bg,#fff);color:var(--ogrid-fg-secondary,#0009);cursor:pointer;border-radius:4px;padding:6px 12px;font-size:12px}@media (pointer:coarse){.clear-button[data-v-58ce6f63]{min-height:44px;padding:10px 16px}}.clear-button[data-v-58ce6f63]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.clear-button[data-v-58ce6f63]:disabled{opacity:.5;cursor:not-allowed}.apply-button[data-v-58ce6f63]{background:var(--ogrid-accent,#0078d4);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:6px 16px;font-size:12px;font-weight:600}@media (pointer:coarse){.apply-button[data-v-58ce6f63]{min-height:44px;padding:10px 20px}}.apply-button[data-v-58ce6f63]:hover{opacity:.85}.loading-container[data-v-58ce6f63],.no-results[data-v-58ce6f63]{text-align:center;color:var(--ogrid-fg-secondary,#0009);padding:20px;font-size:13px}.selected-user-section[data-v-58ce6f63]{border-bottom:1px solid var(--ogrid-border,#e0e0e0);padding:8px 12px}.selected-user-label[data-v-58ce6f63]{color:var(--ogrid-muted,#666);margin-bottom:4px;font-size:11px}.selected-user[data-v-58ce6f63]{justify-content:space-between;align-items:center;gap:8px;display:flex}.user-info[data-v-58ce6f63]{align-items:center;gap:8px;min-width:0;display:flex}.user-text[data-v-58ce6f63]{min-width:0;font-size:13px}.user-text .user-secondary[data-v-58ce6f63]{color:var(--ogrid-muted,#666);font-size:12px}.remove-user-button[data-v-58ce6f63]{cursor:pointer;color:var(--ogrid-muted,#666);background:0 0;border:none;flex-shrink:0;padding:4px}.remove-user-button[data-v-58ce6f63]:hover{color:var(--ogrid-fg,#333)}.native-input-wrapper[data-v-58ce6f63]{border:1px solid var(--ogrid-border,#d1d1d1);background:var(--ogrid-bg,#fff);box-sizing:border-box;border-radius:4px;align-items:center;gap:8px;width:100%;min-height:36px;padding:6px 12px;display:flex}.native-input-wrapper[data-v-58ce6f63]:focus-within{border-color:var(--ogrid-primary,#06c);outline:none}.native-input[data-v-58ce6f63]{min-width:0;color:var(--ogrid-fg,#242424);background:0 0;border:none;outline:none;flex:1;padding:0;font-family:inherit;font-size:14px}.native-input[data-v-58ce6f63]::placeholder{color:var(--ogrid-muted,#707070)}.person-option[data-v-58ce6f63]{cursor:pointer;padding:8px 12px}.person-option[data-v-58ce6f63]:hover{background:var(--ogrid-bg-hover,#f5f5f5)}
|
package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue_vue_type_script_setup_true_lang.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Fragment as u, createCommentVNode as d, createElementBlock as r, createElementVNode as t, defineComponent as h, openBlock as i, renderList as y, toDisplayString as o, withKeys as g } from "vue";
|
|
2
|
+
var m = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "selected-user-section"
|
|
5
|
+
}, f = { class: "selected-user" }, b = { class: "user-info" }, k = ["src"], p = {
|
|
6
|
+
key: 1,
|
|
7
|
+
class: "user-avatar",
|
|
8
|
+
style: {
|
|
9
|
+
width: "32px",
|
|
10
|
+
height: "32px",
|
|
11
|
+
"border-radius": "50%",
|
|
12
|
+
background: "var(--ogrid-border, #e0e0e0)",
|
|
13
|
+
display: "flex",
|
|
14
|
+
"align-items": "center",
|
|
15
|
+
"justify-content": "center",
|
|
16
|
+
"font-size": "12px"
|
|
17
|
+
}
|
|
18
|
+
}, x = { class: "user-text" }, U = { class: "user-secondary" }, C = { class: "popover-search" }, w = { class: "native-input-wrapper" }, S = ["value"], F = { class: "popover-options" }, N = {
|
|
19
|
+
key: 0,
|
|
20
|
+
class: "loading-container"
|
|
21
|
+
}, T = {
|
|
22
|
+
key: 1,
|
|
23
|
+
class: "no-results"
|
|
24
|
+
}, K = ["onClick", "onKeydown"], P = { class: "user-info" }, _ = ["src"], B = {
|
|
25
|
+
key: 1,
|
|
26
|
+
style: {
|
|
27
|
+
width: "32px",
|
|
28
|
+
height: "32px",
|
|
29
|
+
"border-radius": "50%",
|
|
30
|
+
background: "var(--ogrid-border, #e0e0e0)",
|
|
31
|
+
display: "flex",
|
|
32
|
+
"align-items": "center",
|
|
33
|
+
"justify-content": "center",
|
|
34
|
+
"font-size": "12px"
|
|
35
|
+
}
|
|
36
|
+
}, L = { class: "user-text" }, R = { class: "user-secondary" }, j = {
|
|
37
|
+
key: 3,
|
|
38
|
+
class: "no-results"
|
|
39
|
+
}, z = {
|
|
40
|
+
key: 1,
|
|
41
|
+
class: "popover-actions"
|
|
42
|
+
}, I = /* @__PURE__ */ h({
|
|
43
|
+
__name: "PeopleFilterPopover",
|
|
44
|
+
props: {
|
|
45
|
+
selectedUser: {},
|
|
46
|
+
searchText: {},
|
|
47
|
+
onSearchChange: { type: Function },
|
|
48
|
+
suggestions: {},
|
|
49
|
+
isLoading: { type: Boolean },
|
|
50
|
+
onUserSelect: { type: Function },
|
|
51
|
+
onClearUser: { type: Function },
|
|
52
|
+
inputRef: {}
|
|
53
|
+
},
|
|
54
|
+
setup(e) {
|
|
55
|
+
const l = (n) => n.displayName?.charAt(0) ?? "?", c = (n) => n.id ?? n.email ?? n.displayName ?? "";
|
|
56
|
+
return (n, a) => (i(), r("div", null, [
|
|
57
|
+
e.selectedUser ? (i(), r("div", m, [a[3] || (a[3] = t("div", { class: "selected-user-label" }, "Currently filtered by:", -1)), t("div", f, [t("div", b, [e.selectedUser.photo ? (i(), r("img", {
|
|
58
|
+
key: 0,
|
|
59
|
+
src: e.selectedUser.photo,
|
|
60
|
+
alt: "",
|
|
61
|
+
width: "32",
|
|
62
|
+
height: "32",
|
|
63
|
+
style: { "border-radius": "50%" }
|
|
64
|
+
}, null, 8, k)) : (i(), r("span", p, o(l(e.selectedUser)), 1)), t("div", x, [t("div", null, o(e.selectedUser.displayName), 1), t("div", U, o(e.selectedUser.email), 1)])]), t("button", {
|
|
65
|
+
type: "button",
|
|
66
|
+
class: "remove-user-button",
|
|
67
|
+
onClick: a[0] || (a[0] = (...s) => e.onClearUser && e.onClearUser(...s)),
|
|
68
|
+
"aria-label": "Remove filter"
|
|
69
|
+
}, " ✕ ")])])) : d("", !0),
|
|
70
|
+
t("div", C, [t("div", w, [t("input", {
|
|
71
|
+
ref: e.inputRef,
|
|
72
|
+
type: "text",
|
|
73
|
+
class: "native-input",
|
|
74
|
+
placeholder: "Search for a person...",
|
|
75
|
+
value: e.searchText,
|
|
76
|
+
onInput: a[1] || (a[1] = (s) => e.onSearchChange(s.target.value)),
|
|
77
|
+
autocomplete: "off"
|
|
78
|
+
}, null, 40, S)])]),
|
|
79
|
+
t("div", F, [e.isLoading && e.searchText.trim() ? (i(), r("div", N, " Searching... ")) : e.suggestions.length === 0 && e.searchText.trim() ? (i(), r("div", T, " No results found ")) : e.searchText.trim() ? (i(!0), r(u, { key: 2 }, y(e.suggestions, (s) => (i(), r("div", {
|
|
80
|
+
key: c(s),
|
|
81
|
+
class: "person-option",
|
|
82
|
+
onClick: (v) => e.onUserSelect(s),
|
|
83
|
+
onKeydown: g((v) => e.onUserSelect(s), ["enter"]),
|
|
84
|
+
role: "button",
|
|
85
|
+
tabindex: "0"
|
|
86
|
+
}, [t("div", P, [s.photo ? (i(), r("img", {
|
|
87
|
+
key: 0,
|
|
88
|
+
src: s.photo,
|
|
89
|
+
alt: "",
|
|
90
|
+
width: "32",
|
|
91
|
+
height: "32",
|
|
92
|
+
style: { "border-radius": "50%" }
|
|
93
|
+
}, null, 8, _)) : (i(), r("span", B, o(l(s)), 1)), t("div", L, [t("div", null, o(s.displayName), 1), t("div", R, o(s.email), 1)])])], 40, K))), 128)) : (i(), r("div", j, "Type to search..."))]),
|
|
94
|
+
e.selectedUser ? (i(), r("div", z, [t("button", {
|
|
95
|
+
type: "button",
|
|
96
|
+
class: "clear-button",
|
|
97
|
+
onClick: a[2] || (a[2] = (...s) => e.onClearUser && e.onClearUser(...s))
|
|
98
|
+
}, " Clear Filter ")])) : d("", !0)
|
|
99
|
+
]));
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
export {
|
|
103
|
+
I as default
|
|
104
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.column-header[data-v-0baa080d]{box-sizing:border-box;flex:1;align-items:center;gap:2px;min-width:0;display:flex}.column-name[data-v-0baa080d]{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--ogrid-fg,#000000de);flex:1;font-size:14px;font-weight:600;overflow:hidden}.filter-icon[data-v-0baa080d]{width:24px;height:24px;color:var(--ogrid-fg-muted,#00000080);cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:4px;font-size:14px;display:flex;position:relative}@media (pointer:coarse){.filter-icon[data-v-0baa080d]{width:36px;height:36px;padding:6px}}.filter-icon[data-v-0baa080d]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.filter-icon.filter-active[data-v-0baa080d]{background:var(--ogrid-header-bg,#0000000a);color:var(--ogrid-accent,#0078d4)}.filter-icon.filter-open[data-v-0baa080d]{background:var(--ogrid-header-bg,#0000000a)}.filter-badge[data-v-0baa080d]{background:var(--ogrid-accent,#0078d4);border:1px solid var(--ogrid-bg,#fff);border-radius:50%;width:6px;height:6px;position:absolute;top:2px;right:2px}.popover-content[data-v-0baa080d]{z-index:1000;min-width:280px;max-width:320px}@media (width<=360px){.popover-content[data-v-0baa080d]{min-width:calc(100vw - 24px);max-width:calc(100vw - 24px)}}.popover-content[data-v-0baa080d]{background:var(--ogrid-bg,#fff);border:1px solid var(--ogrid-border,#0000001f);color:var(--ogrid-fg,#000000de);border-radius:8px;overflow:hidden;box-shadow:0 4px 16px #0000001f}.popover-header[data-v-0baa080d]{color:var(--ogrid-fg-muted,#00000080);border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);padding:10px 14px;font-size:12px;font-weight:600}.popover-search[data-v-0baa080d]{border-bottom:1px solid var(--ogrid-border,#0000001f);padding:10px 12px}.search-input[data-v-0baa080d]{border:1px solid var(--ogrid-border,#0000001f);box-sizing:border-box;background:var(--ogrid-bg,#fff);width:100%;color:var(--ogrid-fg,#000000de);border-radius:4px;padding:6px 10px;font-size:14px}.search-input[data-v-0baa080d]:focus{border-color:var(--ogrid-accent,#0078d4);outline:none}.result-count[data-v-0baa080d]{color:var(--ogrid-fg-muted,#00000080);margin-top:6px;font-size:11px}.select-all-row[data-v-0baa080d]{border-bottom:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);gap:8px;padding:6px 12px;display:flex}.select-all-button[data-v-0baa080d]{color:var(--ogrid-accent,#0078d4);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-size:12px;font-weight:500}.select-all-button[data-v-0baa080d]:hover{background:var(--ogrid-hover-bg,#0000000a)}.popover-options[data-v-0baa080d]{max-height:250px;padding:6px 0;overflow-y:auto}.popover-option[data-v-0baa080d]{color:var(--ogrid-fg,#000000de);align-items:center;gap:8px;padding:4px 12px;font-size:13px;display:flex}@media (pointer:coarse){.popover-option[data-v-0baa080d]{min-height:44px}}.popover-option[data-v-0baa080d]:hover{background:var(--ogrid-hover-bg,#0000000a)}.filter-checkbox[data-v-0baa080d]{border:1px solid var(--ogrid-border,#0000001f);cursor:pointer;border-radius:3px;flex-shrink:0;width:16px;height:16px}.popover-actions[data-v-0baa080d]{border-top:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-header-bg,#0000000a);justify-content:flex-end;gap:8px;padding:8px 12px;display:flex}.clear-button[data-v-0baa080d]{border:1px solid var(--ogrid-border,#0000001f);background:var(--ogrid-bg,#fff);color:var(--ogrid-fg-secondary,#0009);cursor:pointer;border-radius:4px;padding:6px 12px;font-size:12px}@media (pointer:coarse){.clear-button[data-v-0baa080d]{min-height:44px;padding:10px 16px}}.clear-button[data-v-0baa080d]:hover{background:var(--ogrid-hover-bg,#0000000a);color:var(--ogrid-fg,#000000de)}.clear-button[data-v-0baa080d]:disabled{opacity:.5;cursor:not-allowed}.apply-button[data-v-0baa080d]{background:var(--ogrid-accent,#0078d4);color:#fff;cursor:pointer;border:none;border-radius:4px;padding:6px 16px;font-size:12px;font-weight:600}@media (pointer:coarse){.apply-button[data-v-0baa080d]{min-height:44px;padding:10px 20px}}.apply-button[data-v-0baa080d]:hover{opacity:.85}.loading-container[data-v-0baa080d],.no-results[data-v-0baa080d]{text-align:center;color:var(--ogrid-fg-secondary,#0009);padding:20px;font-size:13px}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { createElementBlock as r, createElementVNode as o, defineComponent as p, openBlock as i } from "vue";
|
|
2
|
+
var s = { class: "popover-search" }, v = ["value"], d = { class: "popover-actions" }, y = ["disabled"], C = /* @__PURE__ */ p({
|
|
3
|
+
__name: "TextFilterPopover",
|
|
4
|
+
props: {
|
|
5
|
+
value: {},
|
|
6
|
+
onValueChange: { type: Function },
|
|
7
|
+
onApply: { type: Function },
|
|
8
|
+
onClear: { type: Function }
|
|
9
|
+
},
|
|
10
|
+
setup(e) {
|
|
11
|
+
const a = e, u = (l) => {
|
|
12
|
+
l.key === "Enter" && (l.preventDefault(), a.onApply());
|
|
13
|
+
};
|
|
14
|
+
return (l, t) => (i(), r("div", null, [o("div", s, [o("input", {
|
|
15
|
+
type: "text",
|
|
16
|
+
class: "search-input",
|
|
17
|
+
placeholder: "Enter search term...",
|
|
18
|
+
value: e.value,
|
|
19
|
+
onInput: t[0] || (t[0] = (n) => e.onValueChange(n.target.value)),
|
|
20
|
+
onKeydown: u,
|
|
21
|
+
autocomplete: "off"
|
|
22
|
+
}, null, 40, v)]), o("div", d, [o("button", {
|
|
23
|
+
type: "button",
|
|
24
|
+
class: "clear-button",
|
|
25
|
+
onClick: t[1] || (t[1] = (...n) => e.onClear && e.onClear(...n)),
|
|
26
|
+
disabled: !e.value
|
|
27
|
+
}, " Clear ", 8, y), o("button", {
|
|
28
|
+
type: "button",
|
|
29
|
+
class: "apply-button",
|
|
30
|
+
onClick: t[2] || (t[2] = (...n) => e.onApply && e.onApply(...n))
|
|
31
|
+
}, " Apply ")])]));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
export {
|
|
35
|
+
C as default
|
|
36
|
+
};
|