@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.
Files changed (58) hide show
  1. package/dist/esm/ColumnChooser/ColumnChooser.js +7 -0
  2. package/dist/esm/ColumnChooser/ColumnChooser.vue?vue&type=style&index=0&scoped=9d3085bf&lang.css +1 -0
  3. package/dist/esm/ColumnChooser/ColumnChooser.vue_vue_type_script_setup_true_lang.js +97 -0
  4. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.js +7 -0
  5. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.module.css +3 -27
  6. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue?vue&type=style&index=0&scoped=7b7a41e5&lang.css +1 -0
  7. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue_vue_type_script_setup_true_lang.js +189 -0
  8. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.js +7 -0
  9. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue?vue&type=style&index=0&scoped=b40a6834&lang.css +1 -0
  10. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue_vue_type_script_setup_true_lang.js +68 -0
  11. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.js +7 -0
  12. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue?vue&type=style&index=0&scoped=58ce6f63&lang.css +1 -0
  13. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue_vue_type_script_setup_true_lang.js +104 -0
  14. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.js +7 -0
  15. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue?vue&type=style&index=0&scoped=0baa080d&lang.css +1 -0
  16. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue_vue_type_script_setup_true_lang.js +36 -0
  17. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.js +7 -0
  18. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue?vue&type=style&index=0&scoped=217034af&lang.css +1 -0
  19. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue_vue_type_script_setup_true_lang.js +77 -0
  20. package/dist/esm/DataGridTable/DataGridTable.css +1 -1
  21. package/dist/esm/DataGridTable/DataGridTable2.js +29 -0
  22. package/dist/esm/DataGridTable/EmptyState.js +8 -19
  23. package/dist/esm/DataGridTable/GridContextMenu.js +7 -0
  24. package/dist/esm/DataGridTable/GridContextMenu.vue?vue&type=style&index=0&scoped=204e9cc9&lang.css +1 -0
  25. package/dist/esm/DataGridTable/GridContextMenu.vue_vue_type_script_setup_true_lang.js +76 -0
  26. package/dist/esm/DataGridTable/InlineCellEditor.js +18 -15
  27. package/dist/esm/OGrid/OGrid.js +9 -9
  28. package/dist/esm/PaginationControls/PaginationControls.js +7 -0
  29. package/dist/esm/PaginationControls/PaginationControls.vue?vue&type=style&index=0&scoped=9f3ef127&lang.css +1 -0
  30. package/dist/esm/PaginationControls/PaginationControls.vue_vue_type_script_setup_true_lang.js +108 -0
  31. package/dist/esm/_virtual/_plugin-vue_export-helper.js +5 -6
  32. package/dist/esm/index.js +135 -135
  33. package/package.json +8 -8
  34. package/dist/esm/ColumnChooser/ColumnChooser.css +0 -1
  35. package/dist/esm/ColumnChooser/ColumnChooser.vue.js +0 -7
  36. package/dist/esm/ColumnChooser/ColumnChooser.vue2.js +0 -125
  37. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.css +0 -1
  38. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue.js +0 -7
  39. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue2.js +0 -180
  40. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.css +0 -1
  41. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue.js +0 -7
  42. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue2.js +0 -82
  43. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.css +0 -1
  44. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue.js +0 -7
  45. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue2.js +0 -116
  46. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.css +0 -1
  47. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue.js +0 -7
  48. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue2.js +0 -46
  49. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.css +0 -1
  50. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue.js +0 -7
  51. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue2.js +0 -84
  52. package/dist/esm/DataGridTable/DataGridTable.js +0 -34
  53. package/dist/esm/DataGridTable/GridContextMenu.css +0 -1
  54. package/dist/esm/DataGridTable/GridContextMenu.vue.js +0 -7
  55. package/dist/esm/DataGridTable/GridContextMenu.vue2.js +0 -84
  56. package/dist/esm/PaginationControls/PaginationControls.css +0 -1
  57. package/dist/esm/PaginationControls/PaginationControls.vue.js +0 -7
  58. package/dist/esm/PaginationControls/PaginationControls.vue2.js +0 -125
@@ -0,0 +1,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import _ from "./ColumnChooser.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ var u = /* @__PURE__ */ e(_, [["__scopeId", "data-v-9d3085bf"]]);
5
+ export {
6
+ u as default
7
+ };
@@ -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
+ };
@@ -0,0 +1,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./ColumnHeaderFilter.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ var u = /* @__PURE__ */ e(t, [["__scopeId", "data-v-7b7a41e5"]]);
5
+ export {
6
+ u as default
7
+ };
@@ -1,26 +1,15 @@
1
1
  .column-header {
2
2
  display: flex;
3
3
  align-items: center;
4
- gap: 4px;
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
- overflow: hidden;
7
+ box-sizing: border-box;
18
8
  }
19
9
 
20
10
  .column-name {
21
- display: block;
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,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./MultiSelectFilterPopover.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ var p = /* @__PURE__ */ e(t, [["__scopeId", "data-v-b40a6834"]]);
5
+ export {
6
+ p as default
7
+ };
@@ -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}
@@ -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,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./PeopleFilterPopover.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ var o = /* @__PURE__ */ e(t, [["__scopeId", "data-v-58ce6f63"]]);
5
+ export {
6
+ o as default
7
+ };
@@ -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)}
@@ -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,7 @@
1
+ import e from "./TextFilterPopover.vue_vue_type_script_setup_true_lang.js";
2
+ /* empty css */
3
+ import t from "../_virtual/_plugin-vue_export-helper.js";
4
+ var o = /* @__PURE__ */ t(e, [["__scopeId", "data-v-0baa080d"]]);
5
+ export {
6
+ o as default
7
+ };
@@ -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
+ };