@alaarab/ogrid-vue-radix 2.0.8 → 2.0.12

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 (59) hide show
  1. package/dist/esm/ColumnChooser/ColumnChooser.css +127 -0
  2. package/dist/esm/ColumnChooser/ColumnChooser.module.css +25 -25
  3. package/dist/esm/ColumnChooser/ColumnChooser.vue.js +7 -0
  4. package/dist/esm/ColumnChooser/ColumnChooser.vue2.js +128 -0
  5. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.css +228 -0
  6. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.module.css +42 -39
  7. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue.js +7 -0
  8. package/dist/esm/ColumnHeaderFilter/ColumnHeaderFilter.vue2.js +217 -0
  9. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.css +228 -0
  10. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue.js +7 -0
  11. package/dist/esm/ColumnHeaderFilter/MultiSelectFilterPopover.vue2.js +96 -0
  12. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.css +305 -0
  13. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue.js +7 -0
  14. package/dist/esm/ColumnHeaderFilter/PeopleFilterPopover.vue2.js +146 -0
  15. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.css +228 -0
  16. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue.js +7 -0
  17. package/dist/esm/ColumnHeaderFilter/TextFilterPopover.vue2.js +56 -0
  18. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.css +32 -0
  19. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue.js +7 -0
  20. package/dist/esm/ColumnHeaderMenu/ColumnHeaderMenu.vue2.js +101 -0
  21. package/dist/esm/DataGridTable/DataGridTable.css +358 -0
  22. package/dist/esm/DataGridTable/DataGridTable.module.css +59 -0
  23. package/dist/esm/DataGridTable/DataGridTable.vue.js +7 -0
  24. package/dist/esm/DataGridTable/DataGridTable.vue2.js +529 -0
  25. package/dist/esm/DataGridTable/GridContextMenu.css +48 -0
  26. package/dist/esm/DataGridTable/GridContextMenu.vue.js +7 -0
  27. package/dist/esm/DataGridTable/GridContextMenu.vue2.js +91 -0
  28. package/dist/esm/DataGridTable/InlineCellEditor.css +85 -0
  29. package/dist/esm/DataGridTable/InlineCellEditor.vue.js +7 -0
  30. package/dist/esm/DataGridTable/InlineCellEditor.vue2.js +177 -0
  31. package/dist/esm/OGrid/OGrid.vue.js +516 -0
  32. package/dist/esm/OGrid/OGrid.vue2.js +4 -0
  33. package/dist/esm/PaginationControls/PaginationControls.css +104 -0
  34. package/dist/esm/PaginationControls/PaginationControls.module.css +15 -14
  35. package/dist/esm/PaginationControls/PaginationControls.vue.js +7 -0
  36. package/dist/esm/PaginationControls/PaginationControls.vue2.js +145 -0
  37. package/dist/esm/_virtual/_plugin-vue_export-helper.js +10 -0
  38. package/dist/esm/index.js +22 -15
  39. package/dist/types/ColumnChooser/ColumnChooser.vue.d.ts +5 -0
  40. package/dist/types/ColumnChooser/types.d.ts +1 -1
  41. package/dist/types/ColumnHeaderFilter/ColumnHeaderFilter.vue.d.ts +9 -0
  42. package/dist/types/ColumnHeaderFilter/MultiSelectFilterPopover.vue.d.ts +14 -0
  43. package/dist/types/ColumnHeaderFilter/PeopleFilterPopover.vue.d.ts +13 -0
  44. package/dist/types/ColumnHeaderFilter/TextFilterPopover.vue.d.ts +8 -0
  45. package/dist/types/ColumnHeaderFilter/types.d.ts +1 -1
  46. package/dist/types/ColumnHeaderMenu/ColumnHeaderMenu.vue.d.ts +5 -0
  47. package/dist/types/ColumnHeaderMenu/types.d.ts +8 -0
  48. package/dist/types/DataGridTable/DataGridTable.vue.d.ts +6 -0
  49. package/dist/types/DataGridTable/GridContextMenu.vue.d.ts +16 -0
  50. package/dist/types/DataGridTable/InlineCellEditor.vue.d.ts +15 -0
  51. package/dist/types/OGrid/OGrid.vue.d.ts +16 -0
  52. package/dist/types/PaginationControls/PaginationControls.vue.d.ts +7 -0
  53. package/package.json +9 -5
  54. package/dist/esm/ColumnChooser/types.js +0 -1
  55. package/dist/esm/ColumnHeaderFilter/types.js +0 -1
  56. package/dist/esm/ColumnHeaderMenu/types.js +0 -1
  57. package/dist/esm/DataGridTable/MarchingAntsOverlay.js +0 -163
  58. package/dist/esm/PaginationControls/types.js +0 -1
  59. package/dist/types/DataGridTable/MarchingAntsOverlay.d.ts +0 -69
@@ -0,0 +1,127 @@
1
+ .container[data-v-b4568bb4] {
2
+ position: relative;
3
+ display: inline-flex;
4
+ }
5
+ .trigger-button[data-v-b4568bb4] {
6
+ display: inline-flex;
7
+ align-items: center;
8
+ gap: 6px;
9
+ padding: 6px 12px;
10
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
11
+ border-radius: 6px;
12
+ background: var(--ogrid-bg, #fff);
13
+ cursor: pointer;
14
+ font-size: 13px;
15
+ font-weight: 600;
16
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
17
+ transition: background 0.15s, border-color 0.15s;
18
+ }
19
+ .trigger-button[data-v-b4568bb4]:hover {
20
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
21
+ border-color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
22
+ }
23
+ .trigger-button[aria-expanded=true][data-v-b4568bb4] {
24
+ border-color: var(--ogrid-accent, #0078d4);
25
+ }
26
+ .button-icon[data-v-b4568bb4] {
27
+ font-size: 16px;
28
+ line-height: 1;
29
+ }
30
+ .chevron[data-v-b4568bb4] {
31
+ font-size: 12px;
32
+ color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
33
+ }
34
+ .dropdown[data-v-b4568bb4] {
35
+ position: absolute;
36
+ right: 0;
37
+ top: calc(100% + 4px);
38
+ min-width: 220px;
39
+ background: var(--ogrid-bg, #fff);
40
+ border-radius: 6px;
41
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
42
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
43
+ display: flex;
44
+ flex-direction: column;
45
+ padding: 0;
46
+ z-index: 50;
47
+ }
48
+ .header[data-v-b4568bb4] {
49
+ padding: 8px 12px;
50
+ border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
51
+ font-weight: 600;
52
+ font-size: 13px;
53
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
54
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
55
+ }
56
+ .options-list[data-v-b4568bb4] {
57
+ max-height: 320px;
58
+ overflow-y: auto;
59
+ padding: 0;
60
+ }
61
+ .option-item[data-v-b4568bb4] {
62
+ padding: 4px 12px;
63
+ display: flex;
64
+ align-items: center;
65
+ min-height: 32px;
66
+ gap: 8px;
67
+ }
68
+ .option-item[data-v-b4568bb4]:hover {
69
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
70
+ }
71
+ .checkbox-input[data-v-b4568bb4] {
72
+ width: 16px;
73
+ height: 16px;
74
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
75
+ border-radius: 3px;
76
+ background: var(--ogrid-bg, #fff);
77
+ cursor: pointer;
78
+ flex-shrink: 0;
79
+ }
80
+ .checkbox-input[data-v-b4568bb4]:checked {
81
+ background: var(--ogrid-accent, #0078d4);
82
+ border-color: var(--ogrid-accent, #0078d4);
83
+ }
84
+ .checkbox-input[data-v-b4568bb4]:disabled {
85
+ opacity: 0.5;
86
+ cursor: not-allowed;
87
+ }
88
+ .checkbox-label[data-v-b4568bb4] {
89
+ cursor: pointer;
90
+ font-size: 13px;
91
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
92
+ user-select: none;
93
+ }
94
+ .actions[data-v-b4568bb4] {
95
+ display: flex;
96
+ justify-content: flex-end;
97
+ gap: 8px;
98
+ padding: 8px 12px;
99
+ border-top: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
100
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
101
+ }
102
+ .clear-button[data-v-b4568bb4] {
103
+ padding: 6px 12px;
104
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
105
+ border-radius: 4px;
106
+ background: var(--ogrid-bg, #fff);
107
+ color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));
108
+ font-size: 12px;
109
+ cursor: pointer;
110
+ }
111
+ .clear-button[data-v-b4568bb4]:hover {
112
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
113
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
114
+ }
115
+ .select-all-button[data-v-b4568bb4] {
116
+ padding: 6px 16px;
117
+ border: none;
118
+ border-radius: 4px;
119
+ background: var(--ogrid-accent, #0078d4);
120
+ color: #fff;
121
+ font-size: 12px;
122
+ font-weight: 600;
123
+ cursor: pointer;
124
+ }
125
+ .select-all-button[data-v-b4568bb4]:hover {
126
+ opacity: 0.85;
127
+ }
@@ -8,21 +8,21 @@
8
8
  align-items: center;
9
9
  gap: 6px;
10
10
  padding: 6px 12px;
11
- border: 1px solid var(--ogrid-border, #ccc);
11
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
12
12
  border-radius: 6px;
13
13
  background: var(--ogrid-bg, #fff);
14
14
  cursor: pointer;
15
15
  font-size: 13px;
16
16
  font-weight: 600;
17
- color: var(--ogrid-fg, #333);
17
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
18
18
  transition: background 0.15s, border-color 0.15s;
19
19
  }
20
20
  .trigger-button:hover {
21
- background: var(--ogrid-bg-hover, #f5f5f5);
22
- border-color: var(--ogrid-border-hover, #999);
21
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
22
+ border-color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
23
23
  }
24
24
  .trigger-button[aria-expanded=true] {
25
- border-color: var(--ogrid-primary, #0066cc);
25
+ border-color: var(--ogrid-accent, #0078d4);
26
26
  }
27
27
 
28
28
  .button-icon {
@@ -32,7 +32,7 @@
32
32
 
33
33
  .chevron {
34
34
  font-size: 12px;
35
- color: var(--ogrid-muted, #888);
35
+ color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
36
36
  }
37
37
 
38
38
  .dropdown {
@@ -42,8 +42,8 @@
42
42
  min-width: 220px;
43
43
  background: var(--ogrid-bg, #fff);
44
44
  border-radius: 6px;
45
- box-shadow: var(--ogrid-shadow, 0 4px 16px rgba(0, 0, 0, 0.12));
46
- border: 1px solid var(--ogrid-border, #e0e0e0);
45
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
46
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
47
47
  display: flex;
48
48
  flex-direction: column;
49
49
  padding: 0;
@@ -52,11 +52,11 @@
52
52
 
53
53
  .header {
54
54
  padding: 8px 12px;
55
- border-bottom: 1px solid var(--ogrid-border, #e5e5e5);
55
+ border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
56
56
  font-weight: 600;
57
57
  font-size: 13px;
58
- color: var(--ogrid-fg, #333);
59
- background: var(--ogrid-bg-subtle, #f5f5f5);
58
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
59
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
60
60
  }
61
61
 
62
62
  .options-list {
@@ -73,21 +73,21 @@
73
73
  gap: 8px;
74
74
  }
75
75
  .option-item:hover {
76
- background: var(--ogrid-bg-hover, #f0f0f0);
76
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
77
77
  }
78
78
 
79
79
  .checkbox-input {
80
80
  width: 16px;
81
81
  height: 16px;
82
- border: 1px solid var(--ogrid-border, #888);
82
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
83
83
  border-radius: 3px;
84
84
  background: var(--ogrid-bg, #fff);
85
85
  cursor: pointer;
86
86
  flex-shrink: 0;
87
87
  }
88
88
  .checkbox-input:checked {
89
- background: var(--ogrid-primary, #0066cc);
90
- border-color: var(--ogrid-primary, #0066cc);
89
+ background: var(--ogrid-accent, #0078d4);
90
+ border-color: var(--ogrid-accent, #0078d4);
91
91
  }
92
92
  .checkbox-input:disabled {
93
93
  opacity: 0.5;
@@ -97,7 +97,7 @@
97
97
  .checkbox-label {
98
98
  cursor: pointer;
99
99
  font-size: 13px;
100
- color: var(--ogrid-fg, #333);
100
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
101
101
  user-select: none;
102
102
  }
103
103
 
@@ -106,34 +106,34 @@
106
106
  justify-content: flex-end;
107
107
  gap: 8px;
108
108
  padding: 8px 12px;
109
- border-top: 1px solid var(--ogrid-border, #e5e5e5);
110
- background: var(--ogrid-bg-subtle, #f5f5f5);
109
+ border-top: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
110
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
111
111
  }
112
112
 
113
113
  .clear-button {
114
114
  padding: 6px 12px;
115
- border: 1px solid var(--ogrid-border, #ccc);
115
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
116
116
  border-radius: 4px;
117
117
  background: var(--ogrid-bg, #fff);
118
- color: var(--ogrid-muted, #666);
118
+ color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));
119
119
  font-size: 12px;
120
120
  cursor: pointer;
121
121
  }
122
122
  .clear-button:hover {
123
- background: var(--ogrid-bg-hover, #f5f5f5);
124
- color: var(--ogrid-fg, #333);
123
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
124
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
125
125
  }
126
126
 
127
127
  .select-all-button {
128
128
  padding: 6px 16px;
129
129
  border: none;
130
130
  border-radius: 4px;
131
- background: var(--ogrid-primary, #0066cc);
132
- color: var(--ogrid-primary-fg, #fff);
131
+ background: var(--ogrid-accent, #0078d4);
132
+ color: #fff;
133
133
  font-size: 12px;
134
134
  font-weight: 600;
135
135
  cursor: pointer;
136
136
  }
137
137
  .select-all-button:hover {
138
- background: var(--ogrid-primary-hover, #0052a3);
138
+ opacity: 0.85;
139
139
  }
@@ -0,0 +1,7 @@
1
+ import _sfc_main from "./ColumnChooser.vue2.js";
2
+ import './ColumnChooser.css';
3
+ import _export_sfc from "../_virtual/_plugin-vue_export-helper.js";
4
+ const ColumnChooser = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-b4568bb4"]]);
5
+ export {
6
+ ColumnChooser as default
7
+ };
@@ -0,0 +1,128 @@
1
+ import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, createVNode, unref, withCtx, createElementVNode, toDisplayString, Transition, Fragment, renderList, createBlock } from "vue";
2
+ import { Menu, MenuButton, MenuItems, MenuItem } from "@headlessui/vue";
3
+ import { useColumnChooserState } from "@alaarab/ogrid-vue";
4
+ const _hoisted_1 = {
5
+ class: "chevron",
6
+ "aria-hidden": ""
7
+ };
8
+ const _hoisted_2 = { class: "header" };
9
+ const _hoisted_3 = { class: "options-list" };
10
+ const _hoisted_4 = ["id", "checked", "disabled", "onChange"];
11
+ const _hoisted_5 = ["for"];
12
+ const _hoisted_6 = { class: "actions" };
13
+ const _sfc_main = /* @__PURE__ */ defineComponent({
14
+ __name: "ColumnChooser",
15
+ props: {
16
+ columns: {},
17
+ visibleColumns: {},
18
+ onVisibilityChange: {},
19
+ className: { default: "" }
20
+ },
21
+ setup(__props) {
22
+ const props = __props;
23
+ const {
24
+ open,
25
+ setOpen,
26
+ handleCheckboxChange: setColumnVisible,
27
+ handleSelectAll,
28
+ handleClearAll,
29
+ visibleCount,
30
+ totalCount
31
+ } = useColumnChooserState({
32
+ columns: computed(() => props.columns),
33
+ visibleColumns: computed(() => props.visibleColumns),
34
+ onVisibilityChange: props.onVisibilityChange
35
+ });
36
+ const handleCheckboxChange = (columnKey) => (e) => {
37
+ const target = e.target;
38
+ setColumnVisible(columnKey)(target.checked);
39
+ };
40
+ return (_ctx, _cache) => {
41
+ return openBlock(), createElementBlock("div", {
42
+ class: normalizeClass(["container", __props.className])
43
+ }, [
44
+ createVNode(unref(Menu), null, {
45
+ default: withCtx(({ open: isOpen }) => [
46
+ createVNode(unref(MenuButton), {
47
+ class: "trigger-button",
48
+ "aria-expanded": isOpen,
49
+ "aria-haspopup": "listbox",
50
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(setOpen)(!unref(open)))
51
+ }, {
52
+ default: withCtx(() => [
53
+ _cache[3] || (_cache[3] = createElementVNode("span", {
54
+ class: "button-icon",
55
+ "aria-hidden": ""
56
+ }, "⚙", -1)),
57
+ createElementVNode("span", null, "Column Visibility (" + toDisplayString(unref(visibleCount)) + " of " + toDisplayString(unref(totalCount)) + ")", 1),
58
+ createElementVNode("span", _hoisted_1, toDisplayString(isOpen ? "▲" : "▼"), 1)
59
+ ]),
60
+ _: 2
61
+ }, 1032, ["aria-expanded"]),
62
+ createVNode(Transition, {
63
+ "enter-active-class": "transition duration-100 ease-out",
64
+ "enter-from-class": "opacity-0 scale-95",
65
+ "enter-to-class": "opacity-100 scale-100",
66
+ "leave-active-class": "transition duration-75 ease-in",
67
+ "leave-from-class": "opacity-100 scale-100",
68
+ "leave-to-class": "opacity-0 scale-95"
69
+ }, {
70
+ default: withCtx(() => [
71
+ createVNode(unref(MenuItems), { class: "dropdown" }, {
72
+ default: withCtx(() => [
73
+ createElementVNode("div", _hoisted_2, "Select Columns (" + toDisplayString(unref(visibleCount)) + " of " + toDisplayString(unref(totalCount)) + ")", 1),
74
+ createElementVNode("div", _hoisted_3, [
75
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (column) => {
76
+ return openBlock(), createBlock(unref(MenuItem), {
77
+ key: column.columnId,
78
+ as: "div",
79
+ class: "option-item"
80
+ }, {
81
+ default: withCtx(() => [
82
+ createElementVNode("input", {
83
+ id: `col-${column.columnId}`,
84
+ type: "checkbox",
85
+ checked: __props.visibleColumns.has(column.columnId),
86
+ disabled: column.required === true,
87
+ class: "checkbox-input",
88
+ onChange: ($event) => handleCheckboxChange(column.columnId)
89
+ }, null, 40, _hoisted_4),
90
+ createElementVNode("label", {
91
+ for: `col-${column.columnId}`,
92
+ class: "checkbox-label"
93
+ }, toDisplayString(column.name), 9, _hoisted_5)
94
+ ]),
95
+ _: 2
96
+ }, 1024);
97
+ }), 128))
98
+ ]),
99
+ createElementVNode("div", _hoisted_6, [
100
+ createElementVNode("button", {
101
+ type: "button",
102
+ class: "clear-button",
103
+ onClick: _cache[1] || (_cache[1] = //@ts-ignore
104
+ (...args) => unref(handleClearAll) && unref(handleClearAll)(...args))
105
+ }, " Clear All "),
106
+ createElementVNode("button", {
107
+ type: "button",
108
+ class: "select-all-button",
109
+ onClick: _cache[2] || (_cache[2] = //@ts-ignore
110
+ (...args) => unref(handleSelectAll) && unref(handleSelectAll)(...args))
111
+ }, " Select All ")
112
+ ])
113
+ ]),
114
+ _: 1
115
+ })
116
+ ]),
117
+ _: 1
118
+ })
119
+ ]),
120
+ _: 1
121
+ })
122
+ ], 2);
123
+ };
124
+ }
125
+ });
126
+ export {
127
+ _sfc_main as default
128
+ };
@@ -0,0 +1,228 @@
1
+ .column-header[data-v-daf1f1c5] {
2
+ display: flex;
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
+ .header-content[data-v-daf1f1c5] {
12
+ display: flex;
13
+ align-items: center;
14
+ flex: 1;
15
+ min-width: 0;
16
+ overflow: hidden;
17
+ }
18
+ .column-name[data-v-daf1f1c5] {
19
+ display: block;
20
+ min-width: 0;
21
+ max-width: 100%;
22
+ overflow: hidden;
23
+ text-overflow: ellipsis;
24
+ white-space: nowrap;
25
+ font-weight: 600;
26
+ font-size: 14px;
27
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
28
+ }
29
+ .header-actions[data-v-daf1f1c5] {
30
+ display: flex;
31
+ align-items: center;
32
+ gap: 2px;
33
+ margin-left: auto;
34
+ flex-shrink: 0;
35
+ }
36
+ .sort-icon[data-v-daf1f1c5] {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ width: 24px;
41
+ height: 24px;
42
+ padding: 4px;
43
+ border: none;
44
+ border-radius: 4px;
45
+ background: transparent;
46
+ color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
47
+ cursor: pointer;
48
+ flex-shrink: 0;
49
+ font-size: 14px;
50
+ }
51
+ .sort-icon[data-v-daf1f1c5]:hover {
52
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
53
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
54
+ }
55
+ .sort-icon.sort-active[data-v-daf1f1c5] {
56
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
57
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
58
+ }
59
+ .filter-icon[data-v-daf1f1c5] {
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: center;
63
+ width: 24px;
64
+ height: 24px;
65
+ padding: 4px;
66
+ border: none;
67
+ border-radius: 4px;
68
+ background: transparent;
69
+ color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
70
+ cursor: pointer;
71
+ flex-shrink: 0;
72
+ position: relative;
73
+ font-size: 14px;
74
+ }
75
+ .filter-icon[data-v-daf1f1c5]:hover {
76
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
77
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
78
+ }
79
+ .filter-icon.filter-active[data-v-daf1f1c5] {
80
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
81
+ color: var(--ogrid-accent, #0078d4);
82
+ }
83
+ .filter-icon.filter-open[data-v-daf1f1c5] {
84
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
85
+ }
86
+ .filter-badge[data-v-daf1f1c5] {
87
+ position: absolute;
88
+ top: 2px;
89
+ right: 2px;
90
+ width: 6px;
91
+ height: 6px;
92
+ background: var(--ogrid-accent, #0078d4);
93
+ border-radius: 50%;
94
+ border: 1px solid var(--ogrid-bg, #fff);
95
+ }
96
+ .popover-content[data-v-daf1f1c5] {
97
+ position: absolute;
98
+ top: calc(100% + 4px);
99
+ right: 0;
100
+ z-index: 1000;
101
+ min-width: 280px;
102
+ max-width: 320px;
103
+ background: var(--ogrid-bg, #fff);
104
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
105
+ border-radius: 8px;
106
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
107
+ overflow: hidden;
108
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
109
+ }
110
+ .popover-header[data-v-daf1f1c5] {
111
+ padding: 10px 14px;
112
+ font-size: 12px;
113
+ font-weight: 600;
114
+ color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
115
+ border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
116
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
117
+ }
118
+ .popover-search[data-v-daf1f1c5] {
119
+ padding: 10px 12px;
120
+ border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
121
+ }
122
+ .search-input[data-v-daf1f1c5] {
123
+ width: 100%;
124
+ padding: 6px 10px;
125
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
126
+ border-radius: 4px;
127
+ font-size: 14px;
128
+ box-sizing: border-box;
129
+ background: var(--ogrid-bg, #fff);
130
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
131
+ }
132
+ .search-input[data-v-daf1f1c5]:focus {
133
+ outline: none;
134
+ border-color: var(--ogrid-accent, #0078d4);
135
+ }
136
+ .result-count[data-v-daf1f1c5] {
137
+ margin-top: 6px;
138
+ font-size: 11px;
139
+ color: var(--ogrid-fg-muted, rgba(0, 0, 0, 0.5));
140
+ }
141
+ .select-all-row[data-v-daf1f1c5] {
142
+ display: flex;
143
+ gap: 8px;
144
+ padding: 6px 12px;
145
+ border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
146
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
147
+ }
148
+ .select-all-button[data-v-daf1f1c5] {
149
+ background: none;
150
+ border: none;
151
+ color: var(--ogrid-accent, #0078d4);
152
+ font-size: 12px;
153
+ font-weight: 500;
154
+ cursor: pointer;
155
+ padding: 4px 8px;
156
+ border-radius: 4px;
157
+ }
158
+ .select-all-button[data-v-daf1f1c5]:hover {
159
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
160
+ }
161
+ .popover-options[data-v-daf1f1c5] {
162
+ overflow-y: auto;
163
+ max-height: 250px;
164
+ padding: 6px 0;
165
+ }
166
+ .popover-option[data-v-daf1f1c5] {
167
+ padding: 4px 12px;
168
+ display: flex;
169
+ align-items: center;
170
+ gap: 8px;
171
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
172
+ }
173
+ .popover-option[data-v-daf1f1c5]:hover {
174
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
175
+ }
176
+ .filter-checkbox[data-v-daf1f1c5] {
177
+ width: 16px;
178
+ height: 16px;
179
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
180
+ border-radius: 3px;
181
+ cursor: pointer;
182
+ flex-shrink: 0;
183
+ }
184
+ .popover-actions[data-v-daf1f1c5] {
185
+ display: flex;
186
+ justify-content: flex-end;
187
+ gap: 8px;
188
+ padding: 8px 12px;
189
+ border-top: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
190
+ background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));
191
+ }
192
+ .clear-button[data-v-daf1f1c5] {
193
+ padding: 6px 12px;
194
+ border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));
195
+ border-radius: 4px;
196
+ background: var(--ogrid-bg, #fff);
197
+ color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));
198
+ font-size: 12px;
199
+ cursor: pointer;
200
+ }
201
+ .clear-button[data-v-daf1f1c5]:hover {
202
+ background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04));
203
+ color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));
204
+ }
205
+ .clear-button[data-v-daf1f1c5]:disabled {
206
+ opacity: 0.5;
207
+ cursor: not-allowed;
208
+ }
209
+ .apply-button[data-v-daf1f1c5] {
210
+ padding: 6px 16px;
211
+ border: none;
212
+ border-radius: 4px;
213
+ background: var(--ogrid-accent, #0078d4);
214
+ color: #fff;
215
+ font-size: 12px;
216
+ font-weight: 600;
217
+ cursor: pointer;
218
+ }
219
+ .apply-button[data-v-daf1f1c5]:hover {
220
+ opacity: 0.85;
221
+ }
222
+ .loading-container[data-v-daf1f1c5],
223
+ .no-results[data-v-daf1f1c5] {
224
+ padding: 20px;
225
+ text-align: center;
226
+ font-size: 13px;
227
+ color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));
228
+ }