@affino/datagrid-vue-app 0.1.13 → 0.1.15

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/README.md CHANGED
@@ -268,6 +268,85 @@ Recommended usage:
268
268
  - enable them together for spreadsheet-heavy editing surfaces
269
269
  - keep them off for read-only, reporting, and embedded summary tables unless the interaction model is explicitly spreadsheet-like
270
270
 
271
+ ## Custom Toolbar Modules
272
+
273
+ `DataGrid` exposes a public `toolbar-modules` prop for additive toolbar actions.
274
+ Use it when you want to keep the built-in app renderer and append custom buttons, popovers, or small workflow panels to the same toolbar row.
275
+
276
+ - built-in modules such as column layout, advanced filter, and aggregations still render first
277
+ - custom modules are appended after the built-in modules in declaration order
278
+ - each module provides a stable `key`, a Vue `component`, and optional props passed into that component
279
+
280
+ Type shape:
281
+
282
+ ```ts
283
+ interface DataGridAppToolbarModule {
284
+ key: string
285
+ component: Component
286
+ props?: Record<string, unknown>
287
+ }
288
+ ```
289
+
290
+ Practical guidance:
291
+
292
+ - use a stable `key` per module instance
293
+ - keep the rendered trigger on the shared toolbar button class when you want built-in styling: `datagrid-app-toolbar__button`
294
+ - add your own `data-datagrid-toolbar-action` when you want deterministic selectors for tests or analytics
295
+
296
+ ```vue
297
+ <script setup lang="ts">
298
+ import { DataGrid, type DataGridAppToolbarModule } from "@affino/datagrid-vue-app"
299
+ import { defineComponent, h } from "vue"
300
+
301
+ const ExportButton = defineComponent({
302
+ name: "ExportButton",
303
+ props: {
304
+ label: {
305
+ type: String,
306
+ required: true,
307
+ },
308
+ onTrigger: {
309
+ type: Function,
310
+ required: true,
311
+ },
312
+ },
313
+ setup(props) {
314
+ return () => h("button", {
315
+ type: "button",
316
+ class: "datagrid-app-toolbar__button",
317
+ onClick: () => props.onTrigger(),
318
+ }, props.label)
319
+ },
320
+ })
321
+
322
+ const toolbarModules: readonly DataGridAppToolbarModule[] = [
323
+ {
324
+ key: "export",
325
+ component: ExportButton,
326
+ props: {
327
+ label: "Export",
328
+ onTrigger: () => {
329
+ console.log("export current view")
330
+ },
331
+ },
332
+ },
333
+ ]
334
+ </script>
335
+
336
+ <template>
337
+ <DataGrid
338
+ :rows="rows"
339
+ :columns="columns"
340
+ :toolbar-modules="toolbarModules"
341
+ column-layout
342
+ advanced-filter
343
+ />
344
+ </template>
345
+ ```
346
+
347
+ Prefer `toolbar-modules` over replacing the whole default slot when the only goal is to extend the built-in toolbar.
348
+ Use the default slot only when you need to take over the entire runtime renderer contract.
349
+
271
350
  ## Declarative Column Menu
272
351
 
273
352
  Enable the built-in header menu with one prop:
@@ -1106,6 +1185,8 @@ The component emits:
1106
1185
 
1107
1186
  - `cell-change`
1108
1187
  - `selection-change`
1188
+ - `row-selection-change`
1189
+ - `row-select` (legacy alias; prefer `row-selection-change` for typed row-selection snapshots)
1109
1190
  - `update:column-state`
1110
1191
  - `update:column-order`
1111
1192
  - `update:hidden-column-keys`
@@ -1114,6 +1195,11 @@ The component emits:
1114
1195
  - `update:state`
1115
1196
  - `ready`
1116
1197
 
1198
+ ## Advanced Filter UX
1199
+
1200
+ - When at least one filter is active, the `Advanced filter` toolbar button shows an active filter icon and active button styling.
1201
+ - Removing the only advanced-filter clause does not lock the UI; the builder keeps one empty clause row so the user can clear and rebuild the expression in place.
1202
+
1117
1203
  ## Ref API
1118
1204
 
1119
1205
  ### Runtime access
@@ -1,5 +1,6 @@
1
1
  import { type PropType, type VNode } from "vue";
2
- import { type CreateDataGridCoreOptions, type DataGridApiPluginDefinition, type DataGridAggregationModel, type DataGridColumnPin, type DataGridComputedFieldDefinition, type DataGridCoreServiceRegistry, type DataGridFilterSnapshot, type DataGridFormulaFieldDefinition, type DataGridFormulaFunctionRegistry, type DataGridRowModel, type DataGridSetStateOptions, type DataGridSortState, type DataGridUnifiedColumnState, type DataGridUnifiedState, type DataGridPivotSpec } from "@affino/datagrid-vue";
2
+ import { type CreateDataGridCoreOptions, type DataGridApi, type DataGridApiRowSelectionChangedEvent, type DataGridApiSelectionChangedEvent, type DataGridApiPluginDefinition, type DataGridAggregationModel, type DataGridColumnPin, type DataGridComputedFieldDefinition, type DataGridCoreServiceRegistry, type DataGridFilterSnapshot, type DataGridFormulaFieldDefinition, type DataGridFormulaFunctionRegistry, type DataGridGroupBySpec, type DataGridRowSelectionSnapshot, type DataGridRowModel, type DataGridSetStateOptions, type DataGridSortState, type DataGridUnifiedColumnState, type DataGridUnifiedState, type DataGridPivotSpec } from "@affino/datagrid-vue";
3
+ import type { DataGridAppToolbarModule } from "./host/DataGridModuleHost";
3
4
  import { type DataGridAppClientRowModelOptions, type DataGridAppColumnInput } from "./config/dataGridFormulaOptions";
4
5
  import { type DataGridThemeProp } from "./theme/dataGridTheme";
5
6
  import { type DataGridGroupByProp, type DataGridPaginationProp } from "./config/dataGridPublicProps";
@@ -212,7 +213,28 @@ declare const _default: import("vue").DefineComponent<{
212
213
  type: PropType<DataGridGanttProp | undefined>;
213
214
  default: undefined;
214
215
  };
215
- }, () => VNode, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("cell-change" | "selection-change" | "row-select" | "update:columnState" | "update:columnOrder" | "update:hiddenColumnKeys" | "update:columnWidths" | "update:columnPins" | "update:groupBy" | "update:viewMode" | "update:state" | "ready")[], "cell-change" | "selection-change" | "row-select" | "update:columnState" | "update:columnOrder" | "update:hiddenColumnKeys" | "update:columnWidths" | "update:columnPins" | "update:groupBy" | "update:viewMode" | "update:state" | "ready", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
216
+ toolbarModules: {
217
+ type: PropType<readonly DataGridAppToolbarModule[]>;
218
+ default: () => never[];
219
+ };
220
+ }, () => VNode, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
221
+ "cell-change": (_payload: unknown) => true;
222
+ "selection-change": (_payload: DataGridApiSelectionChangedEvent) => true;
223
+ "row-selection-change": (_payload: DataGridApiRowSelectionChangedEvent) => true;
224
+ "row-select": (_payload: DataGridRowSelectionSnapshot | null) => true;
225
+ "update:columnState": (_payload: DataGridUnifiedColumnState | null) => true;
226
+ "update:columnOrder": (_payload: readonly string[] | null) => true;
227
+ "update:hiddenColumnKeys": (_payload: readonly string[] | null) => true;
228
+ "update:columnWidths": (_payload: Readonly<Record<string, number | null>> | null) => true;
229
+ "update:columnPins": (_payload: Readonly<Record<string, DataGridColumnPin>> | null) => true;
230
+ "update:groupBy": (_payload: DataGridGroupBySpec | null) => true;
231
+ "update:viewMode": (_payload: DataGridAppViewMode) => true;
232
+ "update:state": (_payload: DataGridUnifiedState<Record<string, unknown>> | null) => true;
233
+ ready: (_payload: {
234
+ api: DataGridApi<Record<string, unknown>>;
235
+ rowModel: DataGridRowModel<Record<string, unknown>> | null;
236
+ }) => true;
237
+ }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
216
238
  rows: {
217
239
  type: PropType<readonly unknown[]>;
218
240
  default: () => never[];
@@ -409,19 +431,27 @@ declare const _default: import("vue").DefineComponent<{
409
431
  type: PropType<DataGridGanttProp | undefined>;
410
432
  default: undefined;
411
433
  };
434
+ toolbarModules: {
435
+ type: PropType<readonly DataGridAppToolbarModule[]>;
436
+ default: () => never[];
437
+ };
412
438
  }>> & {
413
- "onCell-change"?: ((...args: any[]) => any) | undefined;
414
- "onSelection-change"?: ((...args: any[]) => any) | undefined;
415
- "onRow-select"?: ((...args: any[]) => any) | undefined;
416
- "onUpdate:columnState"?: ((...args: any[]) => any) | undefined;
417
- "onUpdate:columnOrder"?: ((...args: any[]) => any) | undefined;
418
- "onUpdate:hiddenColumnKeys"?: ((...args: any[]) => any) | undefined;
419
- "onUpdate:columnWidths"?: ((...args: any[]) => any) | undefined;
420
- "onUpdate:columnPins"?: ((...args: any[]) => any) | undefined;
421
- "onUpdate:groupBy"?: ((...args: any[]) => any) | undefined;
422
- "onUpdate:viewMode"?: ((...args: any[]) => any) | undefined;
423
- "onUpdate:state"?: ((...args: any[]) => any) | undefined;
424
- onReady?: ((...args: any[]) => any) | undefined;
439
+ "onCell-change"?: ((_payload: unknown) => any) | undefined;
440
+ "onSelection-change"?: ((_payload: DataGridApiSelectionChangedEvent) => any) | undefined;
441
+ "onRow-selection-change"?: ((_payload: DataGridApiRowSelectionChangedEvent) => any) | undefined;
442
+ "onRow-select"?: ((_payload: DataGridRowSelectionSnapshot | null) => any) | undefined;
443
+ "onUpdate:columnState"?: ((_payload: DataGridUnifiedColumnState | null) => any) | undefined;
444
+ "onUpdate:columnOrder"?: ((_payload: readonly string[] | null) => any) | undefined;
445
+ "onUpdate:hiddenColumnKeys"?: ((_payload: readonly string[] | null) => any) | undefined;
446
+ "onUpdate:columnWidths"?: ((_payload: Readonly<Record<string, number | null>> | null) => any) | undefined;
447
+ "onUpdate:columnPins"?: ((_payload: Readonly<Record<string, DataGridColumnPin>> | null) => any) | undefined;
448
+ "onUpdate:groupBy"?: ((_payload: DataGridGroupBySpec | null) => any) | undefined;
449
+ "onUpdate:viewMode"?: ((_payload: DataGridAppViewMode) => any) | undefined;
450
+ "onUpdate:state"?: ((_payload: DataGridUnifiedState<Record<string, unknown>> | null) => any) | undefined;
451
+ onReady?: ((_payload: {
452
+ api: DataGridApi<Record<string, unknown>>;
453
+ rowModel: DataGridRowModel<Record<string, unknown>> | null;
454
+ }) => any) | undefined;
425
455
  }, {
426
456
  rows: readonly unknown[];
427
457
  columns: readonly DataGridAppColumnInput<unknown>[];
@@ -455,6 +485,7 @@ declare const _default: import("vue").DefineComponent<{
455
485
  fillHandle: boolean;
456
486
  rangeMove: boolean;
457
487
  viewMode: DataGridAppViewMode | undefined;
488
+ toolbarModules: readonly DataGridAppToolbarModule[];
458
489
  pageSize: number | undefined;
459
490
  currentPage: number | undefined;
460
491
  startupOrder: readonly import("@affino/datagrid-core").DataGridCoreServiceName[] | undefined;
@@ -1,4 +1,4 @@
1
- import { _ as e } from "./chunks/DataGridAdvancedFilterPopover.vue_vue_type_script_setup_true_lang-DixN56Qv.js";
1
+ import { _ as e } from "./chunks/DataGridAdvancedFilterPopover.vue_vue_type_script_setup_true_lang-x-cfVm5j.js";
2
2
  export {
3
3
  e as DataGridAdvancedFilterPopover
4
4
  };
@@ -1,4 +1,4 @@
1
- import { _ as f } from "./DataGridAdvancedFilterPopover.vue_vue_type_script_setup_true_lang-DixN56Qv.js";
1
+ import { _ as f } from "./DataGridAdvancedFilterPopover.vue_vue_type_script_setup_true_lang-x-cfVm5j.js";
2
2
  export {
3
3
  f as default
4
4
  };
@@ -1,19 +1,34 @@
1
- import { defineComponent as j, inject as q, ref as O, computed as c, watch as m, nextTick as k, openBlock as n, createElementBlock as s, Fragment as b, createElementVNode as e, mergeProps as w, unref as _, toDisplayString as P, createBlock as D, Teleport as z, renderList as S, createVNode as y, createCommentVNode as G } from "vue";
1
+ import { defineComponent as q, inject as D, ref as k, computed as c, watch as m, nextTick as w, openBlock as d, createElementBlock as i, Fragment as b, createElementVNode as e, mergeProps as A, unref as _, createCommentVNode as P, createTextVNode as L, toDisplayString as y, createBlock as z, Teleport as G, renderList as I, createVNode as h } from "vue";
2
2
  import { usePopoverController as J, useFloatingPopover as K } from "@affino/popover-vue";
3
- import { d as L, r as H, _ as h } from "./DataGridFilterableCombobox.vue_vue_type_script_setup_true_lang-_1TDQseN.js";
4
- const M = { class: "datagrid-advanced-filter__header" }, Q = /* @__PURE__ */ e("div", null, [
3
+ import { d as M, r as Z, _ as C } from "./DataGridFilterableCombobox.vue_vue_type_script_setup_true_lang-_1TDQseN.js";
4
+ const H = ["data-datagrid-advanced-filter-active"], Q = {
5
+ key: 0,
6
+ class: "datagrid-app-toolbar__button-icon datagrid-app-toolbar__button-icon--advanced-filter",
7
+ "data-datagrid-advanced-filter-icon": "true",
8
+ "aria-hidden": "true"
9
+ }, U = /* @__PURE__ */ e("svg", {
10
+ viewBox: "0 0 16 16",
11
+ focusable: "false"
12
+ }, [
13
+ /* @__PURE__ */ e("path", {
14
+ d: "M2 3.5h12l-4.6 5.2v3.2l-2.8 1.6V8.7L2 3.5Z",
15
+ fill: "currentColor"
16
+ })
17
+ ], -1), W = [
18
+ U
19
+ ], X = { class: "datagrid-advanced-filter__header" }, Y = /* @__PURE__ */ e("div", null, [
5
20
  /* @__PURE__ */ e("div", { class: "datagrid-advanced-filter__eyebrow" }, "Advanced filter"),
6
21
  /* @__PURE__ */ e("h3", { class: "datagrid-advanced-filter__title" }, "Build clause-based filter")
7
- ], -1), U = { class: "datagrid-advanced-filter__applied" }, W = { class: "datagrid-advanced-filter__applied-head" }, X = /* @__PURE__ */ e("div", null, [
22
+ ], -1), x = { class: "datagrid-advanced-filter__applied" }, ee = { class: "datagrid-advanced-filter__applied-head" }, ae = /* @__PURE__ */ e("div", null, [
8
23
  /* @__PURE__ */ e("div", { class: "datagrid-advanced-filter__eyebrow" }, "Applied on table"),
9
24
  /* @__PURE__ */ e("div", { class: "datagrid-advanced-filter__applied-title" }, "Current filters")
10
- ], -1), Y = ["disabled"], Z = {
25
+ ], -1), te = ["disabled"], le = {
11
26
  key: 0,
12
27
  class: "datagrid-advanced-filter__applied-list"
13
- }, x = {
28
+ }, oe = {
14
29
  key: 1,
15
30
  class: "datagrid-advanced-filter__applied-empty"
16
- }, ee = { class: "datagrid-advanced-filter__rows" }, ae = { class: "datagrid-advanced-filter__field datagrid-advanced-filter__field--join" }, te = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Join", -1), le = { class: "datagrid-advanced-filter__field" }, oe = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Column", -1), de = { class: "datagrid-advanced-filter__field" }, ne = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Operator", -1), ie = { class: "datagrid-advanced-filter__field datagrid-advanced-filter__field--value" }, se = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Value", -1), re = ["value", "onInput"], ce = { class: "datagrid-advanced-filter__row-actions" }, ue = ["disabled", "onClick"], pe = { class: "datagrid-advanced-filter__footer" }, ve = { class: "datagrid-advanced-filter__footer-actions" }, me = /* @__PURE__ */ j({
31
+ }, de = { class: "datagrid-advanced-filter__rows" }, ne = { class: "datagrid-advanced-filter__field datagrid-advanced-filter__field--join" }, ie = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Join", -1), re = { class: "datagrid-advanced-filter__field" }, se = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Column", -1), ce = { class: "datagrid-advanced-filter__field" }, ue = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Operator", -1), pe = { class: "datagrid-advanced-filter__field datagrid-advanced-filter__field--value" }, ve = /* @__PURE__ */ e("span", { class: "datagrid-advanced-filter__label" }, "Value", -1), _e = ["value", "onInput"], fe = { class: "datagrid-advanced-filter__row-actions" }, ge = ["onClick"], me = { class: "datagrid-advanced-filter__footer" }, be = { class: "datagrid-advanced-filter__footer-actions" }, Oe = /* @__PURE__ */ q({
17
32
  __name: "DataGridAdvancedFilterPopover",
18
33
  props: {
19
34
  isOpen: { type: Boolean },
@@ -22,14 +37,15 @@ const M = { class: "datagrid-advanced-filter__header" }, Q = /* @__PURE__ */ e("
22
37
  appliedFilterSummaryItems: { default: () => [] },
23
38
  hasAnyFilters: { type: Boolean, default: !1 },
24
39
  buttonLabel: { default: "Advanced filter" },
25
- active: { type: Boolean, default: !1 }
40
+ active: { type: Boolean, default: !1 },
41
+ showActiveIcon: { type: Boolean, default: !1 }
26
42
  },
27
43
  emits: ["open", "add", "remove", "apply", "cancel", "reset-all", "update-clause"],
28
- setup(T, { emit: A }) {
44
+ setup(T, { emit: S }) {
29
45
  const F = Object.freeze([
30
46
  { value: "and", label: "AND" },
31
47
  { value: "or", label: "OR" }
32
- ]), I = Object.freeze([
48
+ ]), N = Object.freeze([
33
49
  { value: "contains", label: "Contains" },
34
50
  { value: "equals", label: "Equals" },
35
51
  { value: "not-equals", label: "Not equals" },
@@ -39,7 +55,7 @@ const M = { class: "datagrid-advanced-filter__header" }, Q = /* @__PURE__ */ e("
39
55
  { value: "gte", label: ">=" },
40
56
  { value: "lt", label: "<" },
41
57
  { value: "lte", label: "<=" }
42
- ]), u = T, d = A, C = q(L, O(null)), f = O({}), o = J(
58
+ ]), u = T, n = S, O = D(M, k(null)), f = k({}), o = J(
43
59
  {
44
60
  id: "advanced-filter",
45
61
  role: "dialog",
@@ -48,13 +64,13 @@ const M = { class: "datagrid-advanced-filter__header" }, Q = /* @__PURE__ */ e("
48
64
  },
49
65
  {
50
66
  onOpen: () => {
51
- u.isOpen || d("open"), g();
67
+ u.isOpen || n("open"), g();
52
68
  },
53
69
  onClose: () => {
54
- u.isOpen && d("cancel");
70
+ u.isOpen && n("cancel");
55
71
  }
56
72
  }
57
- ), r = K(o, {
73
+ ), s = K(o, {
58
74
  placement: "bottom",
59
75
  align: "start",
60
76
  gutter: 10,
@@ -62,7 +78,7 @@ const M = { class: "datagrid-advanced-filter__header" }, Q = /* @__PURE__ */ e("
62
78
  zIndex: 180,
63
79
  lockScroll: !1,
64
80
  returnFocus: !0
65
- }), R = c(() => o.getTriggerProps({ role: "dialog" })), N = c(() => o.getContentProps({ role: "dialog", tabIndex: -1 })), E = c(() => o.state.value.open), V = c(() => r.contentStyle.value), $ = c(() => r.teleportTarget.value), B = c(() => u.columns.map((t) => ({
81
+ }), R = c(() => o.getTriggerProps({ role: "dialog" })), V = c(() => o.getContentProps({ role: "dialog", tabIndex: -1 })), B = c(() => o.state.value.open), E = c(() => s.contentStyle.value), $ = c(() => s.teleportTarget.value), j = c(() => u.columns.map((t) => ({
66
82
  value: t.key,
67
83
  label: t.label
68
84
  })));
@@ -70,75 +86,80 @@ const M = { class: "datagrid-advanced-filter__header" }, Q = /* @__PURE__ */ e("
70
86
  () => u.isOpen,
71
87
  async (t) => {
72
88
  if (t) {
73
- g(), o.state.value.open || o.open("programmatic"), await k(), r.contentRef.value?.querySelector('[data-advanced-filter-autofocus="true"]')?.focus({ preventScroll: !0 }), await r.updatePosition();
89
+ g(), o.state.value.open || o.open("programmatic"), await w(), s.contentRef.value?.querySelector('[data-advanced-filter-autofocus="true"]')?.focus({ preventScroll: !0 }), await s.updatePosition();
74
90
  return;
75
91
  }
76
92
  o.state.value.open && o.close("programmatic");
77
93
  },
78
94
  { immediate: !0 }
79
- ), m(C, () => {
95
+ ), m(O, () => {
80
96
  o.state.value.open && g();
81
97
  }), m(
82
98
  () => u.clauses.length,
83
99
  async () => {
84
- o.state.value.open && (await k(), await r.updatePosition());
100
+ o.state.value.open && (await w(), await s.updatePosition());
85
101
  }
86
102
  );
87
103
  function g() {
88
- f.value = H(C.value);
104
+ f.value = Z(O.value);
89
105
  }
90
106
  function p(t, l, a) {
91
- d("update-clause", { clauseId: t, field: l, value: a });
107
+ n("update-clause", { clauseId: t, field: l, value: a });
92
108
  }
93
- return (t, l) => (n(), s(b, null, [
94
- e("button", w({
95
- ref: _(r).triggerRef,
109
+ return (t, l) => (d(), i(b, null, [
110
+ e("button", A({
111
+ ref: _(s).triggerRef,
96
112
  type: "button",
97
113
  class: ["datagrid-app-toolbar__button", { "datagrid-app-toolbar__button--active": t.active }],
114
+ "data-datagrid-toolbar-action": "advanced-filter",
115
+ "data-datagrid-advanced-filter-active": t.showActiveIcon ? "true" : "false",
98
116
  style: f.value
99
- }, R.value), P(t.buttonLabel), 17),
100
- (n(), D(z, { to: $.value }, [
101
- E.value ? (n(), s("section", w({
117
+ }, R.value), [
118
+ t.showActiveIcon ? (d(), i("span", Q, W)) : P("", !0),
119
+ L(" " + y(t.buttonLabel), 1)
120
+ ], 16, H),
121
+ (d(), z(G, { to: $.value }, [
122
+ B.value ? (d(), i("section", A({
102
123
  key: 0,
103
- ref: _(r).contentRef,
124
+ ref: _(s).contentRef,
104
125
  class: "datagrid-advanced-filter",
105
126
  "data-datagrid-overlay-surface": "true",
106
- style: [V.value, f.value]
107
- }, N.value), [
108
- e("header", M, [
109
- Q,
127
+ style: [E.value, f.value]
128
+ }, V.value), [
129
+ e("header", X, [
130
+ Y,
110
131
  e("button", {
111
132
  type: "button",
112
133
  class: "datagrid-advanced-filter__ghost",
113
- onClick: l[0] || (l[0] = (a) => d("cancel"))
134
+ onClick: l[0] || (l[0] = (a) => n("cancel"))
114
135
  }, " Close ")
115
136
  ]),
116
- e("section", U, [
117
- e("div", W, [
118
- X,
137
+ e("section", x, [
138
+ e("div", ee, [
139
+ ae,
119
140
  e("button", {
120
141
  type: "button",
121
142
  class: "datagrid-advanced-filter__ghost",
122
143
  disabled: !t.hasAnyFilters,
123
144
  "data-datagrid-advanced-filter-action": "reset-all",
124
- onClick: l[1] || (l[1] = (a) => d("reset-all"))
125
- }, " Reset all filters ", 8, Y)
145
+ onClick: l[1] || (l[1] = (a) => n("reset-all"))
146
+ }, " Reset all filters ", 8, te)
126
147
  ]),
127
- t.appliedFilterSummaryItems.length > 0 ? (n(), s("div", Z, [
128
- (n(!0), s(b, null, S(t.appliedFilterSummaryItems, (a, v) => (n(), s("span", {
148
+ t.appliedFilterSummaryItems.length > 0 ? (d(), i("div", le, [
149
+ (d(!0), i(b, null, I(t.appliedFilterSummaryItems, (a, v) => (d(), i("span", {
129
150
  key: `applied-filter-${v}`,
130
151
  class: "datagrid-advanced-filter__applied-chip"
131
- }, P(a), 1))), 128))
132
- ])) : (n(), s("div", x, " No filters applied "))
152
+ }, y(a), 1))), 128))
153
+ ])) : (d(), i("div", oe, " No filters applied "))
133
154
  ]),
134
- e("div", ee, [
135
- (n(!0), s(b, null, S(t.clauses, (a, v) => (n(), s("div", {
155
+ e("div", de, [
156
+ (d(!0), i(b, null, I(t.clauses, (a, v) => (d(), i("div", {
136
157
  key: a.id,
137
158
  class: "datagrid-advanced-filter__row"
138
159
  }, [
139
- e("label", ae, [
140
- te,
141
- y(h, {
160
+ e("label", ne, [
161
+ ie,
162
+ h(C, {
142
163
  class: "datagrid-advanced-filter__select",
143
164
  value: a.join,
144
165
  options: _(F),
@@ -147,80 +168,79 @@ const M = { class: "datagrid-advanced-filter__header" }, Q = /* @__PURE__ */ e("
147
168
  "sticky-popover-id": "advanced-filter",
148
169
  disabled: v === 0,
149
170
  "aria-label": "Join operator",
150
- onCommit: (i) => p(a.id, "join", i)
171
+ onCommit: (r) => p(a.id, "join", r)
151
172
  }, null, 8, ["value", "options", "disabled", "onCommit"])
152
173
  ]),
153
- e("label", le, [
154
- oe,
155
- y(h, {
174
+ e("label", re, [
175
+ se,
176
+ h(C, {
156
177
  class: "datagrid-advanced-filter__select",
157
178
  value: a.columnKey,
158
- options: B.value,
179
+ options: j.value,
159
180
  "open-on-mount": !1,
160
181
  "open-on-focus": !1,
161
182
  "sticky-popover-id": "advanced-filter",
162
183
  "data-advanced-filter-autofocus": v === 0 ? "true" : null,
163
184
  "aria-label": "Column",
164
- onCommit: (i) => p(a.id, "columnKey", i)
185
+ onCommit: (r) => p(a.id, "columnKey", r)
165
186
  }, null, 8, ["value", "options", "data-advanced-filter-autofocus", "onCommit"])
166
187
  ]),
167
- e("label", de, [
168
- ne,
169
- y(h, {
188
+ e("label", ce, [
189
+ ue,
190
+ h(C, {
170
191
  class: "datagrid-advanced-filter__select",
171
192
  value: a.operator,
172
- options: _(I),
193
+ options: _(N),
173
194
  "open-on-mount": !1,
174
195
  "open-on-focus": !1,
175
196
  "sticky-popover-id": "advanced-filter",
176
197
  "aria-label": "Condition operator",
177
- onCommit: (i) => p(a.id, "operator", i)
198
+ onCommit: (r) => p(a.id, "operator", r)
178
199
  }, null, 8, ["value", "options", "onCommit"])
179
200
  ]),
180
- e("label", ie, [
181
- se,
201
+ e("label", pe, [
202
+ ve,
182
203
  e("input", {
183
204
  value: a.value,
184
205
  type: "text",
185
206
  placeholder: "Value",
186
207
  "aria-label": "Condition value",
187
- onInput: (i) => p(a.id, "value", i.target.value)
188
- }, null, 40, re)
208
+ onInput: (r) => p(a.id, "value", r.target.value)
209
+ }, null, 40, _e)
189
210
  ]),
190
- e("div", ce, [
211
+ e("div", fe, [
191
212
  e("button", {
192
213
  type: "button",
193
214
  class: "datagrid-advanced-filter__ghost datagrid-advanced-filter__ghost--danger",
194
- disabled: t.clauses.length <= 1,
195
- onClick: (i) => d("remove", a.id)
196
- }, " Remove ", 8, ue)
215
+ onClick: (r) => n("remove", a.id)
216
+ }, y(t.clauses.length <= 1 ? "Clear" : "Remove"), 9, ge)
197
217
  ])
198
218
  ]))), 128))
199
219
  ]),
200
- e("footer", pe, [
220
+ e("footer", me, [
201
221
  e("button", {
202
222
  type: "button",
203
223
  class: "datagrid-advanced-filter__secondary",
204
- onClick: l[2] || (l[2] = (a) => d("add"))
224
+ onClick: l[2] || (l[2] = (a) => n("add"))
205
225
  }, " Add clause "),
206
- e("div", ve, [
226
+ e("div", be, [
207
227
  e("button", {
208
228
  type: "button",
209
229
  class: "datagrid-advanced-filter__secondary",
210
- onClick: l[3] || (l[3] = (a) => d("cancel"))
230
+ onClick: l[3] || (l[3] = (a) => n("cancel"))
211
231
  }, " Cancel "),
212
232
  e("button", {
213
233
  type: "button",
214
234
  class: "datagrid-advanced-filter__primary",
215
- onClick: l[4] || (l[4] = (a) => d("apply"))
235
+ onClick: l[4] || (l[4] = (a) => n("apply"))
216
236
  }, " Apply ")
217
237
  ])
218
238
  ])
219
- ], 16)) : G("", !0)
239
+ ], 16)) : P("", !0)
220
240
  ], 8, ["to"]))
221
241
  ], 64));
222
242
  }
223
243
  });
224
244
  export {
225
- me as _
245
+ Oe as _
226
246
  };
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as yn, computed as u, ref as y, watch as de, nextTick as Mt, onMounted as wn, onBeforeUnmount as pn, openBlock as De, createElementBlock as We, createElementVNode as V, normalizeStyle as ne, createVNode as bn, mergeProps as Sn, unref as Mn, createCommentVNode as Tn } from "vue";
2
- import { o as Pn, q as Dn, _ as Wn } from "./DataGridTableStage.vue_vue_type_script_setup_true_lang-Cec3mpHC.js";
2
+ import { o as Pn, q as Dn, _ as Wn } from "./DataGridTableStage.vue_vue_type_script_setup_true_lang-C9CKLdfN.js";
3
3
  import { resolveDataGridGanttAnalysis as _n, buildDataGridGanttVisibleBars as kn, buildDataGridGanttDependencyPaths as Rn, resolveDataGridGanttRangeFrame as Xe, buildDataGridTimelineRenderModels as Tt, resolveDataGridTimelineDateToPixel as Pt, resolveDataGridTimelineScrollLeftForDate as En, applyDataGridGanttDragDelta as In, hitTestDataGridGanttBar as Dt, clampDataGridTimelineScrollLeft as xn, buildDataGridGanttRowEditPatch as Cn } from "@affino/datagrid-gantt";
4
4
  const be = 0.5, Ln = 1.25;
5
5
  function Hn(s) {
@@ -1,5 +1,5 @@
1
1
  import { defineComponent as e, h as r } from "vue";
2
- import { _ as a } from "./DataGridGanttStage.vue_vue_type_script_setup_true_lang-BY-MSNPc.js";
2
+ import { _ as a } from "./DataGridGanttStage.vue_vue_type_script_setup_true_lang-DPozU5Z5.js";
3
3
  import { normalizeDataGridGanttOptions as n } from "@affino/datagrid-gantt";
4
4
  const m = e({
5
5
  name: "DataGridGanttStageEntry",
@@ -2477,6 +2477,9 @@ const Wo = ["data-datagrid-pivot-group-label", "data-datagrid-pivot-group-span",
2477
2477
  }
2478
2478
 
2479
2479
  .datagrid-app-toolbar__button {
2480
+ display: inline-flex;
2481
+ align-items: center;
2482
+ gap: 8px;
2480
2483
  height: 32px;
2481
2484
  padding: 0 12px;
2482
2485
  border: 1px solid var(--datagrid-filter-trigger-border);
@@ -2515,6 +2518,25 @@ const Wo = ["data-datagrid-pivot-group-label", "data-datagrid-pivot-group-span",
2515
2518
  background: color-mix(in srgb, var(--datagrid-accent-strong) 14%, var(--datagrid-editor-bg));
2516
2519
  }
2517
2520
 
2521
+ .datagrid-app-toolbar__button-icon {
2522
+ display: inline-flex;
2523
+ align-items: center;
2524
+ justify-content: center;
2525
+ width: 14px;
2526
+ height: 14px;
2527
+ flex: 0 0 14px;
2528
+ }
2529
+
2530
+ .datagrid-app-toolbar__button-icon svg {
2531
+ display: block;
2532
+ width: 14px;
2533
+ height: 14px;
2534
+ }
2535
+
2536
+ .datagrid-app-toolbar__button-icon--advanced-filter {
2537
+ color: var(--datagrid-accent-strong);
2538
+ }
2539
+
2518
2540
  .datagrid-column-layout {
2519
2541
  display: flex;
2520
2542
  flex-direction: column;