@atscript/vue-table 0.1.131 → 0.1.133

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 (111) hide show
  1. package/dist/as-action-form-dialog.cjs +42 -30
  2. package/dist/as-action-form-dialog.mjs +42 -30
  3. package/dist/{as-action-menu-content-4UfcabUe.mjs → as-action-menu-content-4D7CJNgr.mjs} +1 -1
  4. package/dist/{as-action-menu-content-C5qx9MPE.cjs → as-action-menu-content-DiS37BYK.cjs} +1 -1
  5. package/dist/as-column-menu.d.cts +1 -1
  6. package/dist/as-column-menu.d.mts +1 -1
  7. package/dist/{as-column-menu.vue-DL5N9mKR.d.mts → as-column-menu.vue-CZ8XqHl0.d.cts} +2 -2
  8. package/dist/{as-column-menu.vue-u_DNy3f-.d.cts → as-column-menu.vue-Cuelpv3p.d.mts} +2 -2
  9. package/dist/{as-config-dialog-BehfqIGd.mjs → as-config-dialog-BKsm8OHR.mjs} +30 -22
  10. package/dist/{as-config-dialog-BOYWPYYH.cjs → as-config-dialog-Bt8oP8qg.cjs} +29 -21
  11. package/dist/as-config-dialog.cjs +1 -1
  12. package/dist/as-config-dialog.mjs +1 -1
  13. package/dist/{as-confirm-dialog-bpN4A-KN.mjs → as-confirm-dialog-BV01t7dn.mjs} +12 -9
  14. package/dist/{as-confirm-dialog-UwhDHysk.cjs → as-confirm-dialog-Cw7KErhz.cjs} +12 -9
  15. package/dist/as-confirm-dialog.cjs +1 -1
  16. package/dist/as-confirm-dialog.mjs +1 -1
  17. package/dist/{as-filter-dialog-Dh2Ylthb.cjs → as-filter-dialog-Bxii-mYH.cjs} +31 -23
  18. package/dist/{as-filter-dialog-D1qzq-8b.mjs → as-filter-dialog-Ckrl79kU.mjs} +32 -24
  19. package/dist/as-filter-dialog.cjs +1 -1
  20. package/dist/as-filter-dialog.mjs +1 -1
  21. package/dist/{as-filter-field-DirBmnbb.mjs → as-filter-field-C-IFnj8K.mjs} +4 -4
  22. package/dist/{as-filter-field-DRsDJdpx.cjs → as-filter-field-xBr6TtKo.cjs} +4 -4
  23. package/dist/as-filter-field.cjs +1 -1
  24. package/dist/as-filter-field.mjs +1 -1
  25. package/dist/as-filters-DJEQj7_p.mjs +125 -0
  26. package/dist/as-filters-DuCk8nkk.cjs +130 -0
  27. package/dist/as-filters.cjs +1 -1
  28. package/dist/as-filters.d.cts +1 -1
  29. package/dist/as-filters.d.mts +1 -1
  30. package/dist/as-filters.mjs +1 -1
  31. package/dist/as-filters.vue-BG_ysCkC.d.mts +65 -0
  32. package/dist/as-filters.vue-DcxDnWAU.d.cts +65 -0
  33. package/dist/{as-preset-dialog-CDqCAR7N.mjs → as-preset-dialog-CCIacZ2C.mjs} +70 -20
  34. package/dist/{as-preset-dialog-DpM06jqR.cjs → as-preset-dialog-jZeyXJeJ.cjs} +74 -24
  35. package/dist/as-preset-dialog.cjs +1 -1
  36. package/dist/as-preset-dialog.mjs +1 -1
  37. package/dist/{as-preset-picker-jUS_YDX8.cjs → as-preset-picker-4xXU1KQz.cjs} +45 -21
  38. package/dist/{as-preset-picker-CISaxEZ0.mjs → as-preset-picker-DGSqQl9A.mjs} +39 -15
  39. package/dist/as-preset-picker.cjs +1 -1
  40. package/dist/as-preset-picker.mjs +1 -1
  41. package/dist/{as-row-actions-Bm6Bzyno.cjs → as-row-actions-B_OHWIAt.cjs} +2 -2
  42. package/dist/{as-row-actions-xqJeAdQl.mjs → as-row-actions-pukI1JT7.mjs} +2 -2
  43. package/dist/as-row-actions.cjs +1 -1
  44. package/dist/as-row-actions.mjs +1 -1
  45. package/dist/{as-table-BWUPzjRn.cjs → as-table-BejpMVid.cjs} +22 -4
  46. package/dist/{as-table-CDSG2yED.mjs → as-table-D5_bQ0p5.mjs} +22 -4
  47. package/dist/{as-table-actions-DMxeaczm.mjs → as-table-actions-DKYK_mTO.mjs} +57 -11
  48. package/dist/{as-table-actions-gV4lqqxc.cjs → as-table-actions-qb0gQz2D.cjs} +56 -10
  49. package/dist/as-table-actions.cjs +1 -1
  50. package/dist/as-table-actions.d.cts +1 -1
  51. package/dist/as-table-actions.d.mts +1 -1
  52. package/dist/as-table-actions.mjs +1 -1
  53. package/dist/{as-table-actions.vue-DTGYOsZh.d.mts → as-table-actions.vue-CckRRsL6.d.cts} +1 -1
  54. package/dist/{as-table-actions.vue-WXkllHVw.d.cts → as-table-actions.vue-DsqauvXR.d.mts} +1 -1
  55. package/dist/{as-table-base-BaTE3VSN.mjs → as-table-base-B0arhJI8.mjs} +141 -46
  56. package/dist/{as-table-base-RG2TEIgV.cjs → as-table-base-Dfw012G5.cjs} +141 -46
  57. package/dist/{as-table-header-cell-CIqlO6Lw.cjs → as-table-header-cell-Bb4ddLmQ.cjs} +1 -1
  58. package/dist/{as-table-header-cell-Bdhl5Lox.mjs → as-table-header-cell-q-c_QklI.mjs} +1 -1
  59. package/dist/as-table-header-cell.cjs +1 -1
  60. package/dist/as-table-header-cell.d.cts +1 -1
  61. package/dist/as-table-header-cell.d.mts +1 -1
  62. package/dist/as-table-header-cell.mjs +1 -1
  63. package/dist/{as-table-header-cell.vue-BCszzxtU.d.mts → as-table-header-cell.vue-BjVOEFqz.d.mts} +1 -1
  64. package/dist/{as-table-header-cell.vue-BzTzfGRo.d.cts → as-table-header-cell.vue-qS1Xfc-U.d.cts} +1 -1
  65. package/dist/{as-table-root-BLReUbRH.mjs → as-table-root-Bpsrp0Vz.mjs} +5 -5
  66. package/dist/{as-table-root-DLJ_3Jf4.cjs → as-table-root-CUDO9ybm.cjs} +5 -5
  67. package/dist/as-table-root.cjs +1 -1
  68. package/dist/as-table-root.d.cts +1 -1
  69. package/dist/as-table-root.d.mts +1 -1
  70. package/dist/as-table-root.mjs +1 -1
  71. package/dist/{as-table-root.vue-BqZl6JQ0.d.mts → as-table-root.vue-BPU92_Ns.d.mts} +59 -16
  72. package/dist/{as-table-root.vue-umgSvVUB.d.cts → as-table-root.vue-szvjZsCn.d.cts} +59 -16
  73. package/dist/{as-table-status-DGTZlpyq.mjs → as-table-status-B9jlzPPV.mjs} +53 -37
  74. package/dist/{as-table-status-Du4WLF4k.cjs → as-table-status-BgDexT2x.cjs} +53 -37
  75. package/dist/as-table.cjs +1 -1
  76. package/dist/as-table.d.cts +1 -1
  77. package/dist/as-table.d.mts +1 -1
  78. package/dist/as-table.mjs +1 -1
  79. package/dist/{as-table.vue-DxtfL26P.d.mts → as-table.vue-4WhMA8AM.d.mts} +27 -3
  80. package/dist/{as-table.vue-D9cCjbtr.d.cts → as-table.vue-_urybtQj.d.cts} +27 -3
  81. package/dist/{as-window-table-jD_y9yet.cjs → as-window-table-CXq6UuUx.cjs} +98 -19
  82. package/dist/{as-window-table-DWujiUQy.mjs → as-window-table-S1XWpDHQ.mjs} +98 -19
  83. package/dist/as-window-table.cjs +1 -1
  84. package/dist/as-window-table.d.cts +1 -1
  85. package/dist/as-window-table.d.mts +1 -1
  86. package/dist/as-window-table.mjs +1 -1
  87. package/dist/{as-window-table.vue-BpvgmsC1.d.mts → as-window-table.vue-CWsJvOkL.d.mts} +26 -3
  88. package/dist/{as-window-table.vue-BavmqDeH.d.cts → as-window-table.vue-h1bdyMv7.d.cts} +26 -3
  89. package/dist/error-message-CglODWl4.cjs +18 -0
  90. package/dist/error-message-hPSAu8Ug.mjs +13 -0
  91. package/dist/index.cjs +61 -29
  92. package/dist/index.d.cts +9 -9
  93. package/dist/index.d.mts +9 -9
  94. package/dist/index.mjs +62 -30
  95. package/dist/{types-CTMxE_zA.d.cts → types-BZ0HssRY.d.cts} +126 -4
  96. package/dist/{types-ByU4O0Yf.d.mts → types-CXz-4dPz.d.mts} +126 -4
  97. package/dist/{use-table-CyFcVtUN.mjs → use-table-Bk-jSxOM.mjs} +26 -11
  98. package/dist/{use-table-nvBq1dZ4.cjs → use-table-CdFFqaEx.cjs} +24 -9
  99. package/dist/{use-table-component-DO_kvKSf.cjs → use-table-component-DlLganVc.cjs} +1 -1
  100. package/dist/{use-table-component-K6xj1obF.mjs → use-table-component-KuzZxAP8.mjs} +1 -1
  101. package/dist/{use-table-nav-bridge-DeGeaQX-.mjs → use-table-nav-bridge-B9SSEajW.mjs} +1 -1
  102. package/dist/{use-table-nav-bridge-uOQUDooh.cjs → use-table-nav-bridge-CVUmTjDr.cjs} +1 -1
  103. package/dist/{use-table-state-Oi2ds4_a.cjs → use-table-state-D6dHOFrA.cjs} +329 -53
  104. package/dist/{use-table-state-BxX3SpeW.mjs → use-table-state-DLJbW753.mjs} +295 -55
  105. package/package.json +9 -9
  106. package/dist/as-filters-DCZTHjf5.cjs +0 -51
  107. package/dist/as-filters-beIud9sF.mjs +0 -46
  108. package/dist/as-filters.vue-DmECMd1v.d.mts +0 -10
  109. package/dist/as-filters.vue-fv-tRL2H.d.cts +0 -10
  110. package/dist/preset-aspect-display-IICxAlVo.mjs +0 -43
  111. package/dist/preset-aspect-display-TWwf6j1B.cjs +0 -72
@@ -1,4 +1,4 @@
1
- const require_use_table_component = require("./use-table-component-DO_kvKSf.cjs");
1
+ const require_use_table_component = require("./use-table-component-DlLganVc.cjs");
2
2
  const require_as_column_menu = require("./as-column-menu-fZVbJ9lU.cjs");
3
3
  let vue = require("vue");
4
4
  let _atscript_ui_table = require("@atscript/ui-table");
@@ -1,4 +1,4 @@
1
- import { t as useTableComponent } from "./use-table-component-K6xj1obF.mjs";
1
+ import { t as useTableComponent } from "./use-table-component-KuzZxAP8.mjs";
2
2
  import { t as as_column_menu_default } from "./as-column-menu-kTIQfLTi.mjs";
3
3
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, resolveDynamicComponent, toDisplayString, unref, withCtx, withModifiers } from "vue";
4
4
  import { isFilled } from "@atscript/ui-table";
@@ -1,2 +1,2 @@
1
- const require_as_table_header_cell = require("./as-table-header-cell-CIqlO6Lw.cjs");
1
+ const require_as_table_header_cell = require("./as-table-header-cell-Bb4ddLmQ.cjs");
2
2
  module.exports = require_as_table_header_cell.as_table_header_cell_default;
@@ -1,2 +1,2 @@
1
- import { t as _default } from "./as-table-header-cell.vue-BzTzfGRo.cjs";
1
+ import { t as _default } from "./as-table-header-cell.vue-qS1Xfc-U.cjs";
2
2
  export = _default;
@@ -1,2 +1,2 @@
1
- import { t as _default } from "./as-table-header-cell.vue-BCszzxtU.mjs";
1
+ import { t as _default } from "./as-table-header-cell.vue-BjVOEFqz.mjs";
2
2
  export { _default as default };
@@ -1,2 +1,2 @@
1
- import { t as as_table_header_cell_default } from "./as-table-header-cell-Bdhl5Lox.mjs";
1
+ import { t as as_table_header_cell_default } from "./as-table-header-cell-q-c_QklI.mjs";
2
2
  export { as_table_header_cell_default as default };
@@ -1,4 +1,4 @@
1
- import { n as ColumnMenuConfig } from "./types-ByU4O0Yf.mjs";
1
+ import { n as ColumnMenuConfig } from "./types-CXz-4dPz.mjs";
2
2
  import { ColumnDef } from "@atscript/ui";
3
3
  import * as vue from "vue";
4
4
  import { ColumnWidthEntry, FilterCondition } from "@atscript/ui-table";
@@ -1,4 +1,4 @@
1
- import { n as ColumnMenuConfig } from "./types-CTMxE_zA.cjs";
1
+ import { n as ColumnMenuConfig } from "./types-BZ0HssRY.cjs";
2
2
  import * as vue from "vue";
3
3
  import { ColumnDef } from "@atscript/ui";
4
4
  import { ColumnWidthEntry, FilterCondition } from "@atscript/ui-table";
@@ -1,8 +1,8 @@
1
- import { i as useRegisterMainActionListener } from "./use-table-state-BxX3SpeW.mjs";
2
- import { n as useTable } from "./use-table-CyFcVtUN.mjs";
3
- import { t as useTableNavBridge } from "./use-table-nav-bridge-DeGeaQX-.mjs";
1
+ import { i as useRegisterMainActionListener } from "./use-table-state-DLJbW753.mjs";
2
+ import { n as useTable } from "./use-table-Bk-jSxOM.mjs";
3
+ import { t as useTableNavBridge } from "./use-table-nav-bridge-B9SSEajW.mjs";
4
4
  import { t as useHasEmitListener } from "./use-has-emit-listener-BTMDIv2e.mjs";
5
- import { t as as_confirm_dialog_default } from "./as-confirm-dialog-bpN4A-KN.mjs";
5
+ import { t as as_confirm_dialog_default } from "./as-confirm-dialog-BV01t7dn.mjs";
6
6
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, defineAsyncComponent, defineComponent, mergeModels, openBlock, ref, renderSlot, resolveDynamicComponent, unref, useModel, watch } from "vue";
7
7
  //#endregion
8
8
  //#region src/components/as-table-root.vue
@@ -183,7 +183,7 @@ var as_table_root_default = /* @__PURE__ */ defineComponent({
183
183
  alwaysSelected: props.alwaysSelected,
184
184
  queryFn: props.queryFn,
185
185
  queryOnMount: props.queryOnMount,
186
- blockQuery: props.blockQuery,
186
+ blockQuery: () => props.blockQuery === true,
187
187
  blockSize: props.blockSize,
188
188
  dragReleaseDebounceMs: props.dragReleaseDebounceMs,
189
189
  clientFactory: props.clientFactory,
@@ -1,8 +1,8 @@
1
- const require_use_table_state = require("./use-table-state-Oi2ds4_a.cjs");
2
- const require_use_table = require("./use-table-nvBq1dZ4.cjs");
3
- const require_use_table_nav_bridge = require("./use-table-nav-bridge-uOQUDooh.cjs");
1
+ const require_use_table_state = require("./use-table-state-D6dHOFrA.cjs");
2
+ const require_use_table = require("./use-table-CdFFqaEx.cjs");
3
+ const require_use_table_nav_bridge = require("./use-table-nav-bridge-CVUmTjDr.cjs");
4
4
  const require_use_has_emit_listener = require("./use-has-emit-listener-hhOH8CBI.cjs");
5
- const require_as_confirm_dialog = require("./as-confirm-dialog-UwhDHysk.cjs");
5
+ const require_as_confirm_dialog = require("./as-confirm-dialog-Cw7KErhz.cjs");
6
6
  let vue = require("vue");
7
7
  //#endregion
8
8
  //#region src/components/as-table-root.vue
@@ -183,7 +183,7 @@ var as_table_root_default = /* @__PURE__ */ (0, vue.defineComponent)({
183
183
  alwaysSelected: props.alwaysSelected,
184
184
  queryFn: props.queryFn,
185
185
  queryOnMount: props.queryOnMount,
186
- blockQuery: props.blockQuery,
186
+ blockQuery: () => props.blockQuery === true,
187
187
  blockSize: props.blockSize,
188
188
  dragReleaseDebounceMs: props.dragReleaseDebounceMs,
189
189
  clientFactory: props.clientFactory,
@@ -1,2 +1,2 @@
1
- const require_as_table_root = require("./as-table-root-DLJ_3Jf4.cjs");
1
+ const require_as_table_root = require("./as-table-root-CUDO9ybm.cjs");
2
2
  module.exports = require_as_table_root.as_table_root_default;
@@ -1,2 +1,2 @@
1
- import { t as _default } from "./as-table-root.vue-umgSvVUB.cjs";
1
+ import { t as _default } from "./as-table-root.vue-szvjZsCn.cjs";
2
2
  export = _default;
@@ -1,2 +1,2 @@
1
- import { t as _default } from "./as-table-root.vue-BqZl6JQ0.mjs";
1
+ import { t as _default } from "./as-table-root.vue-BPU92_Ns.mjs";
2
2
  export { _default as default };
@@ -1,2 +1,2 @@
1
- import { t as as_table_root_default } from "./as-table-root-BLReUbRH.mjs";
1
+ import { t as as_table_root_default } from "./as-table-root-Bpsrp0Vz.mjs";
2
2
  export { as_table_root_default as default };
@@ -1,4 +1,4 @@
1
- import { _ as TableNavBridge, c as NavKeyOptions, d as ReactiveTableState, g as TableActionsState, h as TVueTableActionInfo, i as ConfirmOptions, l as PresetConfig, m as TAsTableControls, p as TAsCellTypeComponents, t as ActionResult } from "./types-ByU4O0Yf.mjs";
1
+ import { S as TableNavBridge, b as TVueTableActionInfo, c as NavKeyOptions, d as ReactiveTableState, i as ConfirmOptions, l as PresetConfig, t as ActionResult, v as TAsCellTypeComponents, x as TableActionsState, y as TAsTableControls } from "./types-CXz-4dPz.mjs";
2
2
  import * as _atscript_ui0 from "@atscript/ui";
3
3
  import { ClientFactory, ClientFactory as ClientFactory$1, ColumnDef, SortControl, TableDef, getDefaultClientFactory, resetDefaultClientFactory, setDefaultClientFactory } from "@atscript/ui";
4
4
  import * as vue from "vue";
@@ -30,6 +30,14 @@ interface UseLocalDraftOptions {
30
30
  enabled: Ref<boolean> | boolean;
31
31
  /** Persisted-aspect gate — drafts only persist aspects in this set. */
32
32
  availableAspects: readonly PresetAspect[];
33
+ /**
34
+ * Identity the draft is keyed under — pass the signed-in user's id so a
35
+ * shared browser never restores the previous user's draft. Reactive: when
36
+ * it changes, reads and writes move to the new key and the old scope's
37
+ * draft is neither read nor overwritten. Omitted (or `undefined`) keeps
38
+ * the pre-0.1.133 unscoped key. Since 0.1.133.
39
+ */
40
+ scope?: MaybeRefOrGetter<string | undefined>;
33
41
  /** Optional debounce override (default 300ms). */
34
42
  debounceMs?: number;
35
43
  /**
@@ -67,8 +75,9 @@ interface UseLocalDraftReturn {
67
75
  }
68
76
  /**
69
77
  * localStorage overlay manager for table presets. One overlay per
70
- * `(app, tableKey)`; switching presets clears it (caller's responsibility
71
- * — this composable only tracks state, not which preset is active).
78
+ * `(app, scope, tableKey)`; switching presets clears it (caller's
79
+ * responsibility — this composable only tracks state, not which preset is
80
+ * active).
72
81
  */
73
82
  declare function useLocalDraft(opts: UseLocalDraftOptions): UseLocalDraftReturn;
74
83
  //#endregion
@@ -104,6 +113,11 @@ interface UsePresetsReturn {
104
113
  /** False on 401/403 from initial load — UI hides itself. */
105
114
  available: ComputedRef<boolean>;
106
115
  loading: Ref<boolean>;
116
+ /**
117
+ * Load failure from `reload()`, or null. Mutator failures are NOT recorded
118
+ * here — they rethrow, and the table-state slice's
119
+ * `state.preset.lastError` is the single channel UI renders.
120
+ */
107
121
  error: Ref<unknown>;
108
122
  /**
109
123
  * Authoritative current-user id. `capabilities.userId` when caps are
@@ -212,8 +226,12 @@ interface TableQueryOptions {
212
226
  * meta), regardless of which columns are visible. Additive only.
213
227
  */
214
228
  alwaysSelected?: string[];
215
- /** When true, all triggers (query/queryNext/loadRange) early-return. */
216
- blockQuery?: boolean;
229
+ /**
230
+ * When true, all triggers (query/queryNext/loadRange) early-return. Pass a
231
+ * getter (or a ref) to keep it reactive: when it flips back to `false` the
232
+ * table runs the query it was holding back, once. Since 0.1.133.
233
+ */
234
+ blockQuery?: boolean | (() => boolean);
217
235
  /**
218
236
  * Configured default for the runtime `ignoreSortersWhenSearched` flag
219
237
  * (default `false`). Opt-in for relevance-ranked backends: while the
@@ -275,6 +293,8 @@ interface TablePresetOptions {
275
293
  draftHandle?: UseLocalDraftReturn | null;
276
294
  /** App-declared aspect set; default `['columns','filters','filterOps','sorters']`. */
277
295
  availableAspects?: PresetAspect[];
296
+ /** Aspects a system preset owns; intersected with `availableAspects`, default all. */
297
+ systemAspects?: PresetAspect[];
278
298
  /** Static fallback for system presets when no `presetsHandle` is wired. */
279
299
  fallbackSystemPresets?: SystemPreset[];
280
300
  /** Whether localStorage drafts should be hydrated + persisted on bootstrap. */
@@ -420,8 +440,12 @@ interface UseTableOptions {
420
440
  queryFn?: QueryFn;
421
441
  /** Auto-query when metadata loads (default: true). */
422
442
  queryOnMount?: boolean;
423
- /** When true, all triggers (query/queryNext/loadRange) early-return. */
424
- blockQuery?: boolean;
443
+ /**
444
+ * When true, all triggers (query/queryNext/loadRange) early-return. Pass a
445
+ * getter to keep it reactive — the held-back query runs once when it flips
446
+ * back to `false`. Since 0.1.133.
447
+ */
448
+ blockQuery?: boolean | (() => boolean);
425
449
  /** Page-alignment unit for `loadRange` and the `queryNext` extension. */
426
450
  blockSize?: number;
427
451
  /** Debounce window for the topIndex/viewportRowCount watcher. */
@@ -1982,6 +2006,14 @@ interface UseTableUrlQueryOptions {
1982
2006
  * navigation-recoverable.
1983
2007
  */
1984
2008
  mode?: "replace" | "push";
2009
+ /**
2010
+ * Namespace for this table's query keys. With `prefix: "t1"` every key the
2011
+ * bridge writes becomes `t1.<key>` (`t1.$skip`, `t1.status`, `t1.total>100`)
2012
+ * and only keys under that prefix are read back or removed. Keys with no
2013
+ * prefix — or another table's prefix — are foreign and preserved untouched,
2014
+ * so two tables can share one route. Since 0.1.133.
2015
+ */
2016
+ prefix?: string;
1985
2017
  }
1986
2018
  /**
1987
2019
  * Bridge `<AsTableRoot v-model:url-query>` to vue-router. Uses **type-only**
@@ -1989,11 +2021,19 @@ interface UseTableUrlQueryOptions {
1989
2021
  * dependency on `vue-router` is added to `@atscript/vue-table`. Consumers
1990
2022
  * pass in their already-resolved `useRoute()` and `useRouter()` instances.
1991
2023
  *
1992
- * Scope: **owns the whole query string**. The getter returns the entire
1993
- * `route.query` serialized; the setter replaces `route.query` wholesale.
1994
- * Apps that need the table to coexist with non-table query params should
1995
- * write their own `computed` instead — that pattern is small and keeps the
1996
- * library's contract crisp.
2024
+ * Scope: the bridge owns **only what the table reads back** (since 0.1.133).
2025
+ * A key is the table's iff `urlQueryStringToState` would consume it — see
2026
+ * `urlQueryConsumesKey` — or the bridge has written it before. Read and
2027
+ * write therefore agree in both directions: a key the parser ignores (a host
2028
+ * flag, an unrecognised `$control`) is never removed, and a key the parser
2029
+ * reads is the bridge's to remove. Every write merges into the current
2030
+ * `route.query`, in place.
2031
+ *
2032
+ * Without a `prefix` the bridge cannot tell a plain `field=value` filter from
2033
+ * a page-owned flag of the same shape, so a plain key that was already in the
2034
+ * URL when the bridge mounted counts as foreign until the bridge writes it
2035
+ * itself. Pass `prefix` when a route carries a host key that could collide
2036
+ * with a column path, or when it carries two tables.
1997
2037
  *
1998
2038
  * @example
1999
2039
  * ```vue
@@ -2001,6 +2041,9 @@ interface UseTableUrlQueryOptions {
2001
2041
  * import { useRoute, useRouter } from 'vue-router';
2002
2042
  * import { useTableUrlQuery } from '@atscript/vue-table';
2003
2043
  * const urlQuery = useTableUrlQuery(useRoute(), useRouter());
2044
+ * // Two tables on one route:
2045
+ * // const left = useTableUrlQuery(useRoute(), useRouter(), { prefix: 'a' });
2046
+ * // const right = useTableUrlQuery(useRoute(), useRouter(), { prefix: 'b' });
2004
2047
  * </script>
2005
2048
  * <template>
2006
2049
  * <AsTableRoot v-model:url-query="urlQuery" url="/db/products" .../>
@@ -2310,10 +2353,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_PublicProps, {
2310
2353
  "update:selectedRows": (value: unknown[]) => any;
2311
2354
  "update:urlQuery": (value: string | undefined) => any;
2312
2355
  } & {
2313
- "main-action": (row: Record<string, unknown>, absIndex: number, event: MouseEvent | KeyboardEvent) => any;
2314
- action: (action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: MouseEvent | KeyboardEvent | undefined) => any;
2356
+ action: (action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: KeyboardEvent | MouseEvent | undefined) => any;
2357
+ "main-action": (row: Record<string, unknown>, absIndex: number, event: KeyboardEvent | MouseEvent) => any;
2315
2358
  }, string, vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
2316
- "onMain-action"?: ((row: Record<string, unknown>, absIndex: number, event: MouseEvent | KeyboardEvent) => any) | undefined;
2317
2359
  "onUpdate:filterFields"?: ((value: string[]) => any) | undefined;
2318
2360
  "onUpdate:columnNames"?: ((value: string[]) => any) | undefined;
2319
2361
  "onUpdate:columnWidths"?: ((value: ColumnWidthsMap) => any) | undefined;
@@ -2321,7 +2363,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_PublicProps, {
2321
2363
  "onUpdate:ignoreSortersWhenSearched"?: ((value: boolean) => any) | undefined;
2322
2364
  "onUpdate:selectedRows"?: ((value: unknown[]) => any) | undefined;
2323
2365
  "onUpdate:urlQuery"?: ((value: string | undefined) => any) | undefined;
2324
- onAction?: ((action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: MouseEvent | KeyboardEvent | undefined) => any) | undefined;
2366
+ onAction?: ((action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: KeyboardEvent | MouseEvent | undefined) => any) | undefined;
2367
+ "onMain-action"?: ((row: Record<string, unknown>, absIndex: number, event: KeyboardEvent | MouseEvent) => any) | undefined;
2325
2368
  }>, {
2326
2369
  queryOnMount: boolean;
2327
2370
  selectionPersistence: SelectionPersistence;
@@ -1,4 +1,4 @@
1
- import { _ as TableNavBridge, c as NavKeyOptions, d as ReactiveTableState, g as TableActionsState, h as TVueTableActionInfo, i as ConfirmOptions, l as PresetConfig, m as TAsTableControls, p as TAsCellTypeComponents, t as ActionResult } from "./types-CTMxE_zA.cjs";
1
+ import { S as TableNavBridge, b as TVueTableActionInfo, c as NavKeyOptions, d as ReactiveTableState, i as ConfirmOptions, l as PresetConfig, t as ActionResult, v as TAsCellTypeComponents, x as TableActionsState, y as TAsTableControls } from "./types-BZ0HssRY.cjs";
2
2
  import * as vue from "vue";
3
3
  import { AllowedComponentProps, AnchorHTMLAttributes, App, Component as Component$1, ComponentCustomProps, ComponentPublicInstance, ComputedRef, DefineComponent, InjectionKey, MaybeRef, MaybeRefOrGetter, Ref, ShallowRef, UnwrapRef, VNode, VNodeProps, WritableComputedRef } from "vue";
4
4
  import { Client, PageResult, TDbActionInfo } from "@atscript/db-client";
@@ -30,6 +30,14 @@ interface UseLocalDraftOptions {
30
30
  enabled: Ref<boolean> | boolean;
31
31
  /** Persisted-aspect gate — drafts only persist aspects in this set. */
32
32
  availableAspects: readonly PresetAspect[];
33
+ /**
34
+ * Identity the draft is keyed under — pass the signed-in user's id so a
35
+ * shared browser never restores the previous user's draft. Reactive: when
36
+ * it changes, reads and writes move to the new key and the old scope's
37
+ * draft is neither read nor overwritten. Omitted (or `undefined`) keeps
38
+ * the pre-0.1.133 unscoped key. Since 0.1.133.
39
+ */
40
+ scope?: MaybeRefOrGetter<string | undefined>;
33
41
  /** Optional debounce override (default 300ms). */
34
42
  debounceMs?: number;
35
43
  /**
@@ -67,8 +75,9 @@ interface UseLocalDraftReturn {
67
75
  }
68
76
  /**
69
77
  * localStorage overlay manager for table presets. One overlay per
70
- * `(app, tableKey)`; switching presets clears it (caller's responsibility
71
- * — this composable only tracks state, not which preset is active).
78
+ * `(app, scope, tableKey)`; switching presets clears it (caller's
79
+ * responsibility — this composable only tracks state, not which preset is
80
+ * active).
72
81
  */
73
82
  declare function useLocalDraft(opts: UseLocalDraftOptions): UseLocalDraftReturn;
74
83
  //#endregion
@@ -104,6 +113,11 @@ interface UsePresetsReturn {
104
113
  /** False on 401/403 from initial load — UI hides itself. */
105
114
  available: ComputedRef<boolean>;
106
115
  loading: Ref<boolean>;
116
+ /**
117
+ * Load failure from `reload()`, or null. Mutator failures are NOT recorded
118
+ * here — they rethrow, and the table-state slice's
119
+ * `state.preset.lastError` is the single channel UI renders.
120
+ */
107
121
  error: Ref<unknown>;
108
122
  /**
109
123
  * Authoritative current-user id. `capabilities.userId` when caps are
@@ -212,8 +226,12 @@ interface TableQueryOptions {
212
226
  * meta), regardless of which columns are visible. Additive only.
213
227
  */
214
228
  alwaysSelected?: string[];
215
- /** When true, all triggers (query/queryNext/loadRange) early-return. */
216
- blockQuery?: boolean;
229
+ /**
230
+ * When true, all triggers (query/queryNext/loadRange) early-return. Pass a
231
+ * getter (or a ref) to keep it reactive: when it flips back to `false` the
232
+ * table runs the query it was holding back, once. Since 0.1.133.
233
+ */
234
+ blockQuery?: boolean | (() => boolean);
217
235
  /**
218
236
  * Configured default for the runtime `ignoreSortersWhenSearched` flag
219
237
  * (default `false`). Opt-in for relevance-ranked backends: while the
@@ -275,6 +293,8 @@ interface TablePresetOptions {
275
293
  draftHandle?: UseLocalDraftReturn | null;
276
294
  /** App-declared aspect set; default `['columns','filters','filterOps','sorters']`. */
277
295
  availableAspects?: PresetAspect[];
296
+ /** Aspects a system preset owns; intersected with `availableAspects`, default all. */
297
+ systemAspects?: PresetAspect[];
278
298
  /** Static fallback for system presets when no `presetsHandle` is wired. */
279
299
  fallbackSystemPresets?: SystemPreset[];
280
300
  /** Whether localStorage drafts should be hydrated + persisted on bootstrap. */
@@ -420,8 +440,12 @@ interface UseTableOptions {
420
440
  queryFn?: QueryFn;
421
441
  /** Auto-query when metadata loads (default: true). */
422
442
  queryOnMount?: boolean;
423
- /** When true, all triggers (query/queryNext/loadRange) early-return. */
424
- blockQuery?: boolean;
443
+ /**
444
+ * When true, all triggers (query/queryNext/loadRange) early-return. Pass a
445
+ * getter to keep it reactive — the held-back query runs once when it flips
446
+ * back to `false`. Since 0.1.133.
447
+ */
448
+ blockQuery?: boolean | (() => boolean);
425
449
  /** Page-alignment unit for `loadRange` and the `queryNext` extension. */
426
450
  blockSize?: number;
427
451
  /** Debounce window for the topIndex/viewportRowCount watcher. */
@@ -1982,6 +2006,14 @@ interface UseTableUrlQueryOptions {
1982
2006
  * navigation-recoverable.
1983
2007
  */
1984
2008
  mode?: "replace" | "push";
2009
+ /**
2010
+ * Namespace for this table's query keys. With `prefix: "t1"` every key the
2011
+ * bridge writes becomes `t1.<key>` (`t1.$skip`, `t1.status`, `t1.total>100`)
2012
+ * and only keys under that prefix are read back or removed. Keys with no
2013
+ * prefix — or another table's prefix — are foreign and preserved untouched,
2014
+ * so two tables can share one route. Since 0.1.133.
2015
+ */
2016
+ prefix?: string;
1985
2017
  }
1986
2018
  /**
1987
2019
  * Bridge `<AsTableRoot v-model:url-query>` to vue-router. Uses **type-only**
@@ -1989,11 +2021,19 @@ interface UseTableUrlQueryOptions {
1989
2021
  * dependency on `vue-router` is added to `@atscript/vue-table`. Consumers
1990
2022
  * pass in their already-resolved `useRoute()` and `useRouter()` instances.
1991
2023
  *
1992
- * Scope: **owns the whole query string**. The getter returns the entire
1993
- * `route.query` serialized; the setter replaces `route.query` wholesale.
1994
- * Apps that need the table to coexist with non-table query params should
1995
- * write their own `computed` instead — that pattern is small and keeps the
1996
- * library's contract crisp.
2024
+ * Scope: the bridge owns **only what the table reads back** (since 0.1.133).
2025
+ * A key is the table's iff `urlQueryStringToState` would consume it — see
2026
+ * `urlQueryConsumesKey` — or the bridge has written it before. Read and
2027
+ * write therefore agree in both directions: a key the parser ignores (a host
2028
+ * flag, an unrecognised `$control`) is never removed, and a key the parser
2029
+ * reads is the bridge's to remove. Every write merges into the current
2030
+ * `route.query`, in place.
2031
+ *
2032
+ * Without a `prefix` the bridge cannot tell a plain `field=value` filter from
2033
+ * a page-owned flag of the same shape, so a plain key that was already in the
2034
+ * URL when the bridge mounted counts as foreign until the bridge writes it
2035
+ * itself. Pass `prefix` when a route carries a host key that could collide
2036
+ * with a column path, or when it carries two tables.
1997
2037
  *
1998
2038
  * @example
1999
2039
  * ```vue
@@ -2001,6 +2041,9 @@ interface UseTableUrlQueryOptions {
2001
2041
  * import { useRoute, useRouter } from 'vue-router';
2002
2042
  * import { useTableUrlQuery } from '@atscript/vue-table';
2003
2043
  * const urlQuery = useTableUrlQuery(useRoute(), useRouter());
2044
+ * // Two tables on one route:
2045
+ * // const left = useTableUrlQuery(useRoute(), useRouter(), { prefix: 'a' });
2046
+ * // const right = useTableUrlQuery(useRoute(), useRouter(), { prefix: 'b' });
2004
2047
  * </script>
2005
2048
  * <template>
2006
2049
  * <AsTableRoot v-model:url-query="urlQuery" url="/db/products" .../>
@@ -2310,10 +2353,9 @@ declare const __VLS_base: vue.DefineComponent<__VLS_PublicProps, {
2310
2353
  "update:selectedRows": (value: unknown[]) => any;
2311
2354
  "update:urlQuery": (value: string | undefined) => any;
2312
2355
  } & {
2313
- "main-action": (row: Record<string, unknown>, absIndex: number, event: MouseEvent | KeyboardEvent) => any;
2314
- action: (action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: MouseEvent | KeyboardEvent | undefined) => any;
2356
+ action: (action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: KeyboardEvent | MouseEvent | undefined) => any;
2357
+ "main-action": (row: Record<string, unknown>, absIndex: number, event: KeyboardEvent | MouseEvent) => any;
2315
2358
  }, string, vue.PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
2316
- "onMain-action"?: ((row: Record<string, unknown>, absIndex: number, event: MouseEvent | KeyboardEvent) => any) | undefined;
2317
2359
  "onUpdate:filterFields"?: ((value: string[]) => any) | undefined;
2318
2360
  "onUpdate:columnNames"?: ((value: string[]) => any) | undefined;
2319
2361
  "onUpdate:columnWidths"?: ((value: ColumnWidthsMap) => any) | undefined;
@@ -2321,7 +2363,8 @@ declare const __VLS_base: vue.DefineComponent<__VLS_PublicProps, {
2321
2363
  "onUpdate:ignoreSortersWhenSearched"?: ((value: boolean) => any) | undefined;
2322
2364
  "onUpdate:selectedRows"?: ((value: unknown[]) => any) | undefined;
2323
2365
  "onUpdate:urlQuery"?: ((value: string | undefined) => any) | undefined;
2324
- onAction?: ((action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: MouseEvent | KeyboardEvent | undefined) => any) | undefined;
2366
+ onAction?: ((action: TVueTableActionInfo, ids: unknown[], result: ActionResult, event?: KeyboardEvent | MouseEvent | undefined) => any) | undefined;
2367
+ "onMain-action"?: ((row: Record<string, unknown>, absIndex: number, event: KeyboardEvent | MouseEvent) => any) | undefined;
2325
2368
  }>, {
2326
2369
  queryOnMount: boolean;
2327
2370
  selectionPersistence: SelectionPersistence;
@@ -1,7 +1,7 @@
1
- import { o as useTableContextOptional } from "./use-table-state-BxX3SpeW.mjs";
2
- import { t as useTableComponent } from "./use-table-component-K6xj1obF.mjs";
3
- import { t as as_table_header_cell_default } from "./as-table-header-cell-Bdhl5Lox.mjs";
4
- import { t as as_row_actions_default } from "./as-row-actions-xqJeAdQl.mjs";
1
+ import { o as useTableContextOptional } from "./use-table-state-DLJbW753.mjs";
2
+ import { t as useTableComponent } from "./use-table-component-KuzZxAP8.mjs";
3
+ import { t as as_table_header_cell_default } from "./as-table-header-cell-q-c_QklI.mjs";
4
+ import { t as as_row_actions_default } from "./as-row-actions-pukI1JT7.mjs";
5
5
  import { t as as_table_cell_value_default } from "./as-table-cell-value-CPcFxSOj.mjs";
6
6
  import { UI_TABLE_ATTR, UI_TABLE_CLASSES, UI_TABLE_FN_ATTR, UI_TABLE_FN_CLASSES, UI_TABLE_FN_STYLES, UI_TABLE_STYLES, getFieldMeta, parseStaticAttrs, resolveAttrs, resolveFieldProp } from "@atscript/ui";
7
7
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, defineComponent, normalizeClass, normalizeStyle, onBeforeUnmount, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, unref, withModifiers } from "vue";
@@ -532,6 +532,18 @@ var as_table_header_default = /* @__PURE__ */ defineComponent({
532
532
  table.style.tableLayout = origTableLayout;
533
533
  return measured;
534
534
  }
535
+ /**
536
+ * The select-all control is a `role="checkbox"` span, not a `<button>`, so
537
+ * it gets no native key activation: bind Space (checkbox semantics) and
538
+ * Enter (the table's row-activation key) explicitly.
539
+ */
540
+ function onSelectAllKeydown(event) {
541
+ if (event.key !== " " && event.key !== "Enter") return;
542
+ if (!props.selectAllState) return;
543
+ event.preventDefault();
544
+ event.stopPropagation();
545
+ emit("select-all-toggle", props.selectAllState);
546
+ }
535
547
  return (_ctx, _cache) => {
536
548
  return openBlock(), createElementBlock("thead", null, [createElementVNode("tr", null, [
537
549
  __props.hasSelectColumn ? (openBlock(), createElementBlock("th", _hoisted_1$1, [__props.selectAllState ? (openBlock(), createElementBlock("span", {
@@ -542,9 +554,11 @@ var as_table_header_default = /* @__PURE__ */ defineComponent({
542
554
  }]),
543
555
  role: "checkbox",
544
556
  tabindex: "0",
557
+ "aria-label": "Select all rows",
545
558
  "aria-checked": __props.selectAllState === "none" ? "false" : __props.selectAllState === "all" ? "true" : "mixed",
546
- onClick: _cache[0] || (_cache[0] = ($event) => emit("select-all-toggle", __props.selectAllState))
547
- }, [__props.selectAllState === "all" ? (openBlock(), createElementBlock("span", _hoisted_3$1)) : __props.selectAllState === "some" ? (openBlock(), createElementBlock("span", _hoisted_4$1)) : createCommentVNode("v-if", true)], 10, _hoisted_2$1)) : createCommentVNode("v-if", true)])) : createCommentVNode("v-if", true),
559
+ onClick: _cache[0] || (_cache[0] = ($event) => emit("select-all-toggle", __props.selectAllState)),
560
+ onKeydown: onSelectAllKeydown
561
+ }, [__props.selectAllState === "all" ? (openBlock(), createElementBlock("span", _hoisted_3$1)) : __props.selectAllState === "some" ? (openBlock(), createElementBlock("span", _hoisted_4$1)) : createCommentVNode("v-if", true)], 42, _hoisted_2$1)) : createCommentVNode("v-if", true)])) : createCommentVNode("v-if", true),
548
562
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.columns, (col) => {
549
563
  return openBlock(), createElementBlock("th", {
550
564
  key: col.path,
@@ -557,37 +571,39 @@ var as_table_header_default = /* @__PURE__ */ defineComponent({
557
571
  onDragover: ($event) => col.fixed ? void 0 : unref(onHeaderDragOver)($event),
558
572
  onDrop: ($event) => col.fixed ? void 0 : unref(onHeaderDrop)($event),
559
573
  onDragend: ($event) => col.fixed ? void 0 : unref(onHeaderDragEnd)()
560
- }, [!col.fixed ? renderSlot(_ctx.$slots, `header-${col.path}`, {
561
- key: 0,
562
- column: col
563
- }, () => [(openBlock(), createBlock(resolveDynamicComponent(unref(HeaderCell)), {
564
- column: col,
565
- "sort-direction": sortMap.value[col.path] ?? null,
566
- filters: __props.filters?.[col.path],
567
- "column-menu": __props.columnMenu,
568
- "width-entry": __props.columnWidths[col.path],
569
- onSort: _cache[1] || (_cache[1] = (c, d) => emit("sort", c, d)),
570
- onHide: _cache[2] || (_cache[2] = (c) => emit("hide", c)),
571
- onFilter: _cache[3] || (_cache[3] = (c) => emit("filter", c)),
572
- onFiltersOff: _cache[4] || (_cache[4] = (c) => emit("filters-off", c)),
573
- onResetWidth: _cache[5] || (_cache[5] = (c) => emit("reset-width", c))
574
- }, null, 40, [
575
- "column",
576
- "sort-direction",
577
- "filters",
578
- "column-menu",
579
- "width-entry"
580
- ]))]) : createCommentVNode("v-if", true), __props.resizable && !col.fixed ? (openBlock(), createElementBlock("div", {
581
- key: 1,
582
- class: "as-th-resize-handle",
583
- draggable: "false",
584
- onDragstart: _cache[6] || (_cache[6] = withModifiers(() => {}, ["prevent", "stop"])),
585
- onPointerdown: _cache[7] || (_cache[7] = withModifiers((...args) => unref(onResizeHandlePointerDown) && unref(onResizeHandlePointerDown)(...args), ["stop"])),
586
- onPointermove: _cache[8] || (_cache[8] = (...args) => unref(onResizeHandlePointerMove) && unref(onResizeHandlePointerMove)(...args)),
587
- onPointerup: _cache[9] || (_cache[9] = (...args) => unref(onResizeHandleEnd) && unref(onResizeHandleEnd)(...args)),
588
- onPointercancel: _cache[10] || (_cache[10] = (...args) => unref(onResizeHandleEnd) && unref(onResizeHandleEnd)(...args)),
589
- onDblclick: _cache[11] || (_cache[11] = withModifiers((...args) => unref(onResizeHandleDoubleClick) && unref(onResizeHandleDoubleClick)(...args), ["stop"]))
590
- }, null, 32)) : createCommentVNode("v-if", true)], 46, _hoisted_5$1);
574
+ }, [
575
+ createCommentVNode(" An explicitly supplied `header-<path>` slot renders for fixed\n (synthesised) columns too; only the DEFAULT header cell is\n suppressed there, so `__actions` keeps its blank gutter unless\n the consumer fills it. Reorder/resize stay disabled regardless. "),
576
+ renderSlot(_ctx.$slots, `header-${col.path}`, { column: col }, () => [!col.fixed ? (openBlock(), createBlock(resolveDynamicComponent(unref(HeaderCell)), {
577
+ key: 0,
578
+ column: col,
579
+ "sort-direction": sortMap.value[col.path] ?? null,
580
+ filters: __props.filters?.[col.path],
581
+ "column-menu": __props.columnMenu,
582
+ "width-entry": __props.columnWidths[col.path],
583
+ onSort: _cache[1] || (_cache[1] = (c, d) => emit("sort", c, d)),
584
+ onHide: _cache[2] || (_cache[2] = (c) => emit("hide", c)),
585
+ onFilter: _cache[3] || (_cache[3] = (c) => emit("filter", c)),
586
+ onFiltersOff: _cache[4] || (_cache[4] = (c) => emit("filters-off", c)),
587
+ onResetWidth: _cache[5] || (_cache[5] = (c) => emit("reset-width", c))
588
+ }, null, 40, [
589
+ "column",
590
+ "sort-direction",
591
+ "filters",
592
+ "column-menu",
593
+ "width-entry"
594
+ ])) : createCommentVNode("v-if", true)]),
595
+ __props.resizable && !col.fixed ? (openBlock(), createElementBlock("div", {
596
+ key: 0,
597
+ class: "as-th-resize-handle",
598
+ draggable: "false",
599
+ onDragstart: _cache[6] || (_cache[6] = withModifiers(() => {}, ["prevent", "stop"])),
600
+ onPointerdown: _cache[7] || (_cache[7] = withModifiers((...args) => unref(onResizeHandlePointerDown) && unref(onResizeHandlePointerDown)(...args), ["stop"])),
601
+ onPointermove: _cache[8] || (_cache[8] = (...args) => unref(onResizeHandlePointerMove) && unref(onResizeHandlePointerMove)(...args)),
602
+ onPointerup: _cache[9] || (_cache[9] = (...args) => unref(onResizeHandleEnd) && unref(onResizeHandleEnd)(...args)),
603
+ onPointercancel: _cache[10] || (_cache[10] = (...args) => unref(onResizeHandleEnd) && unref(onResizeHandleEnd)(...args)),
604
+ onDblclick: _cache[11] || (_cache[11] = withModifiers((...args) => unref(onResizeHandleDoubleClick) && unref(onResizeHandleDoubleClick)(...args), ["stop"]))
605
+ }, null, 32)) : createCommentVNode("v-if", true)
606
+ ], 46, _hoisted_5$1);
591
607
  }), 128)),
592
608
  __props.withFiller ? (openBlock(), createElementBlock("th", _hoisted_6$1)) : createCommentVNode("v-if", true)
593
609
  ])]);