@atscript/vue-table 0.1.146 → 0.1.148

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 (211) hide show
  1. package/dist/as-action-form-dialog.cjs +3 -2
  2. package/dist/as-action-form-dialog.mjs +3 -2
  3. package/dist/{as-action-menu-content-DoZnQP0I.mjs → as-action-menu-content-BBwL1YZU.mjs} +1 -1
  4. package/dist/{as-action-menu-content-FQ2miGid.cjs → as-action-menu-content-DAOjkslC.cjs} +1 -1
  5. package/dist/{as-cell-array-CCZ0Ajj9.cjs → as-cell-array-CB4Nt6Fo.cjs} +3 -2
  6. package/dist/{as-cell-array-Bgc4GYZf.mjs → as-cell-array-CnoVd9ps.mjs} +4 -3
  7. package/dist/as-cell-array.cjs +1 -1
  8. package/dist/as-cell-array.d.cts +1 -1
  9. package/dist/as-cell-array.d.mts +1 -1
  10. package/dist/as-cell-array.mjs +1 -1
  11. package/dist/{as-cell-date-RU5JPJhI.cjs → as-cell-date-DrnhvCr4.cjs} +3 -14
  12. package/dist/{as-cell-date-B9mu0OOD.mjs → as-cell-date-dhIM7hWA.mjs} +2 -13
  13. package/dist/as-cell-date.cjs +1 -1
  14. package/dist/as-cell-date.d.cts +1 -1
  15. package/dist/as-cell-date.d.mts +1 -1
  16. package/dist/as-cell-date.mjs +1 -1
  17. package/dist/{as-cell-json-ByEGYRST.mjs → as-cell-json-ChN_NDhO.mjs} +1 -1
  18. package/dist/{as-cell-json-w5YJxNuF.cjs → as-cell-json-CzHTpkjS.cjs} +1 -1
  19. package/dist/as-cell-json.cjs +1 -1
  20. package/dist/as-cell-json.d.cts +1 -1
  21. package/dist/as-cell-json.d.mts +1 -1
  22. package/dist/as-cell-json.mjs +1 -1
  23. package/dist/{as-cell-number-DGJCTXDf.cjs → as-cell-number-C4JMqvqa.cjs} +1 -1
  24. package/dist/{as-cell-number-CNDT6gfw.mjs → as-cell-number-D-mSaE_G.mjs} +1 -1
  25. package/dist/as-cell-number.cjs +1 -1
  26. package/dist/as-cell-number.d.cts +1 -1
  27. package/dist/as-cell-number.d.mts +1 -1
  28. package/dist/as-cell-number.mjs +1 -1
  29. package/dist/{as-cell-union-DMnoa7RM.mjs → as-cell-union-C9Bbnkrg.mjs} +1 -1
  30. package/dist/{as-cell-union-LOGvhPeK.cjs → as-cell-union-DpCEHLzN.cjs} +1 -1
  31. package/dist/as-cell-union.cjs +1 -1
  32. package/dist/as-cell-union.d.cts +1 -1
  33. package/dist/as-cell-union.d.mts +1 -1
  34. package/dist/as-cell-union.mjs +1 -1
  35. package/dist/as-column-menu.d.cts +1 -1
  36. package/dist/as-column-menu.d.mts +1 -1
  37. package/dist/{as-column-menu.vue-ByTECTbX.d.cts → as-column-menu.vue-4zJmC_M6.d.mts} +2 -2
  38. package/dist/{as-column-menu.vue-TChT482i.d.mts → as-column-menu.vue-CS_8jHG3.d.cts} +2 -2
  39. package/dist/{as-config-dialog-CpW1Qemf.cjs → as-config-dialog-CnIvMsK0.cjs} +10 -5
  40. package/dist/{as-config-dialog-ObHtungs.mjs → as-config-dialog-ZKMnfirD.mjs} +10 -5
  41. package/dist/as-config-dialog.cjs +1 -1
  42. package/dist/as-config-dialog.d.cts +1 -1
  43. package/dist/as-config-dialog.d.mts +1 -1
  44. package/dist/as-config-dialog.mjs +1 -1
  45. package/dist/{as-confirm-dialog-zg7jmS3u.mjs → as-confirm-dialog-DMiGquH1.mjs} +1 -1
  46. package/dist/{as-confirm-dialog-D3Vu1Rb_.cjs → as-confirm-dialog-cSEHVFBq.cjs} +1 -1
  47. package/dist/as-confirm-dialog.cjs +1 -1
  48. package/dist/as-confirm-dialog.d.cts +1 -1
  49. package/dist/as-confirm-dialog.d.mts +1 -1
  50. package/dist/as-confirm-dialog.mjs +1 -1
  51. package/dist/{as-filter-dialog-CWy0mjZl.mjs → as-filter-dialog-DNFR30fV.mjs} +61 -38
  52. package/dist/{as-filter-dialog-C4EyRr2_.cjs → as-filter-dialog-KjvJdaMg.cjs} +60 -37
  53. package/dist/as-filter-dialog.cjs +1 -1
  54. package/dist/as-filter-dialog.d.cts +1 -1
  55. package/dist/as-filter-dialog.d.mts +1 -1
  56. package/dist/as-filter-dialog.mjs +1 -1
  57. package/dist/{as-filter-field-BQ9UlV0y.cjs → as-filter-field-BsucQwbm.cjs} +247 -35
  58. package/dist/{as-filter-field-CW1_GHZT.mjs → as-filter-field-DE6MJMx7.mjs} +227 -39
  59. package/dist/as-filter-field.cjs +1 -1
  60. package/dist/as-filter-field.d.cts +1 -1
  61. package/dist/as-filter-field.d.mts +1 -1
  62. package/dist/as-filter-field.mjs +1 -1
  63. package/dist/as-filter-input-ChJ8JE6-.cjs +254 -0
  64. package/dist/as-filter-input-DmOW_jzK.mjs +249 -0
  65. package/dist/as-filter-input.cjs +1 -1
  66. package/dist/as-filter-input.d.cts +1 -1
  67. package/dist/as-filter-input.d.mts +1 -1
  68. package/dist/as-filter-input.mjs +1 -1
  69. package/dist/{as-filter-input.vue-CFZ33B--.d.mts → as-filter-input.vue-BLTzA2Iy.d.cts} +10 -1
  70. package/dist/{as-filter-input.vue-CS4nOk_Q.d.cts → as-filter-input.vue-CmWQGQCv.d.mts} +10 -1
  71. package/dist/{as-filters-DUfFkXAo.cjs → as-filters-CYC_SXaA.cjs} +4 -4
  72. package/dist/{as-filters-BLFSS_VP.mjs → as-filters-DErM2bFq.mjs} +4 -4
  73. package/dist/as-filters.cjs +1 -1
  74. package/dist/as-filters.d.mts +1 -1
  75. package/dist/as-filters.mjs +1 -1
  76. package/dist/{as-preset-dialog-CI2Hw8vi.mjs → as-preset-dialog-CY5dPfZa.mjs} +2 -2
  77. package/dist/{as-preset-dialog-BlXqTZiT.cjs → as-preset-dialog-tM-jrQgs.cjs} +2 -2
  78. package/dist/as-preset-dialog.cjs +1 -1
  79. package/dist/as-preset-dialog.d.cts +1 -1
  80. package/dist/as-preset-dialog.d.mts +1 -1
  81. package/dist/as-preset-dialog.mjs +1 -1
  82. package/dist/{as-preset-picker-CVgyZBG7.cjs → as-preset-picker-CjSXtx83.cjs} +2 -2
  83. package/dist/{as-preset-picker-CbZDGPaf.mjs → as-preset-picker-DkZ7sinz.mjs} +2 -2
  84. package/dist/as-preset-picker.cjs +1 -1
  85. package/dist/as-preset-picker.d.mts +1 -1
  86. package/dist/as-preset-picker.mjs +1 -1
  87. package/dist/{as-residual-filter-CUTouIn5.mjs → as-residual-filter-DHfbtTQj.mjs} +4 -5
  88. package/dist/{as-residual-filter-C8n7kdGW.cjs → as-residual-filter-XkXnMQNu.cjs} +4 -5
  89. package/dist/as-residual-filter.cjs +1 -1
  90. package/dist/as-residual-filter.d.cts +1 -1
  91. package/dist/as-residual-filter.d.mts +1 -1
  92. package/dist/as-residual-filter.mjs +1 -1
  93. package/dist/{as-row-actions-ed1P6GEJ.mjs → as-row-actions-BNQ7jrie.mjs} +7 -5
  94. package/dist/{as-row-actions-DfUL9sYB.cjs → as-row-actions-q_oMmUz1.cjs} +7 -5
  95. package/dist/as-row-actions.cjs +1 -1
  96. package/dist/as-row-actions.d.cts +1 -1
  97. package/dist/as-row-actions.d.mts +1 -1
  98. package/dist/as-row-actions.mjs +1 -1
  99. package/dist/{as-row-actions.vue-Ba3VO9W-.d.cts → as-row-actions.vue-BB8ATWBY.d.mts} +1 -1
  100. package/dist/{as-row-actions.vue-CKOnE0eb.d.mts → as-row-actions.vue-CnjcRD0P.d.cts} +1 -1
  101. package/dist/{as-select-cell-DwMfqBMV.cjs → as-select-cell-Dc3lArvR.cjs} +11 -6
  102. package/dist/{as-select-cell-BMptU5sQ.mjs → as-select-cell-DjcPorVb.mjs} +11 -6
  103. package/dist/as-selection-banner-Ca9DWVdW.mjs +189 -0
  104. package/dist/as-selection-banner-CxPXBztW.cjs +206 -0
  105. package/dist/as-table-BIAkCI4g.cjs +215 -0
  106. package/dist/as-table-Bcz-WOTS.mjs +210 -0
  107. package/dist/{as-table-actions-DQco4pGu.mjs → as-table-actions-DPq5SrGa.mjs} +32 -6
  108. package/dist/{as-table-actions-DplblFlK.cjs → as-table-actions-TaI-NeVv.cjs} +32 -6
  109. package/dist/as-table-actions.cjs +1 -1
  110. package/dist/as-table-actions.d.cts +1 -1
  111. package/dist/as-table-actions.d.mts +1 -1
  112. package/dist/as-table-actions.mjs +1 -1
  113. package/dist/{as-table-actions.vue-BYphfAe2.d.cts → as-table-actions.vue-C2szPEXd.d.mts} +8 -1
  114. package/dist/{as-table-actions.vue-C6hzRtS7.d.mts → as-table-actions.vue-CBD_tEpe.d.cts} +8 -1
  115. package/dist/{as-table-base-lfyjPgsO.mjs → as-table-base-CsK79vYe.mjs} +3 -3
  116. package/dist/{as-table-base-CNAn-vpa.cjs → as-table-base-Dvey_Gie.cjs} +3 -3
  117. package/dist/{as-table-cell-value-DoH8Mieo.mjs → as-table-cell-value-D-S127gr.mjs} +13 -2
  118. package/dist/{as-table-cell-value-COyZnwUj.cjs → as-table-cell-value-VWlXc5dA.cjs} +12 -1
  119. package/dist/as-table-cell-value.cjs +1 -1
  120. package/dist/as-table-cell-value.d.cts +1 -1
  121. package/dist/as-table-cell-value.d.mts +1 -1
  122. package/dist/as-table-cell-value.mjs +1 -1
  123. package/dist/{as-table-header-cell-BwaOPYwI.cjs → as-table-header-cell-DB7Cdskr.cjs} +1 -1
  124. package/dist/{as-table-header-cell-Csv1KQDa.mjs → as-table-header-cell-ahzAeHXj.mjs} +1 -1
  125. package/dist/as-table-header-cell.cjs +1 -1
  126. package/dist/as-table-header-cell.d.cts +1 -1
  127. package/dist/as-table-header-cell.d.mts +1 -1
  128. package/dist/as-table-header-cell.mjs +1 -1
  129. package/dist/{as-table-header-cell.vue-DU5h-2C_.d.cts → as-table-header-cell.vue-D2s9YLSJ.d.cts} +1 -1
  130. package/dist/{as-table-header-cell.vue-KkANwimG.d.mts → as-table-header-cell.vue-DfDNma_Z.d.mts} +1 -1
  131. package/dist/{as-table-root-BreMYhnv.mjs → as-table-root-BnkF5-rh.mjs} +78 -11
  132. package/dist/{as-table-root-DXewWV9h.cjs → as-table-root-Nsk-9XaH.cjs} +77 -10
  133. package/dist/as-table-root.cjs +1 -1
  134. package/dist/as-table-root.d.cts +1 -1
  135. package/dist/as-table-root.d.mts +1 -1
  136. package/dist/as-table-root.mjs +1 -1
  137. package/dist/{as-table-root.vue-XtDgUjO2.d.mts → as-table-root.vue-D56WcudY.d.mts} +515 -1530
  138. package/dist/{as-table-root.vue-Bjzp8TJl.d.cts → as-table-root.vue-DXXcBPu_.d.cts} +511 -1526
  139. package/dist/as-table.cjs +1 -1
  140. package/dist/as-table.d.cts +1 -1
  141. package/dist/as-table.d.mts +1 -1
  142. package/dist/as-table.mjs +1 -1
  143. package/dist/{as-window-table-JOTOi_Nm.mjs → as-window-table-DjplqWzr.mjs} +100 -54
  144. package/dist/{as-window-table-Bj1dXOS6.cjs → as-window-table-ubm2u8_i.cjs} +102 -56
  145. package/dist/as-window-table.cjs +1 -1
  146. package/dist/as-window-table.d.cts +1 -1
  147. package/dist/as-window-table.d.mts +1 -1
  148. package/dist/as-window-table.mjs +1 -1
  149. package/dist/index.cjs +73 -91
  150. package/dist/index.d.cts +19 -21
  151. package/dist/index.d.mts +21 -23
  152. package/dist/index.mjs +71 -93
  153. package/dist/{types-D1NxhrpW.d.cts → intent-scope-CGch9yhy.d.cts} +215 -35
  154. package/dist/{types-BEZ4_erB.d.mts → intent-scope-CvD4YOvf.d.mts} +215 -35
  155. package/dist/use-condition-format-5LcuInDy.mjs +34 -0
  156. package/dist/use-condition-format-DrgfX6xL.cjs +39 -0
  157. package/dist/{use-table-BTsNGBVx.mjs → use-table-BYNBpLJt.mjs} +27 -4
  158. package/dist/{use-table-W0KmaJ6L.cjs → use-table-C9qI-TL6.cjs} +26 -3
  159. package/dist/{use-table-component-BvAC82_c.cjs → use-table-component-CsdvdGJT.cjs} +1 -1
  160. package/dist/{use-table-component-DRMXTk9M.mjs → use-table-component-Dy397695.mjs} +1 -1
  161. package/dist/{use-table-nav-bridge-Bw0NFDSf.mjs → use-table-nav-bridge-CJBERyPB.mjs} +1 -1
  162. package/dist/{use-table-nav-bridge-CPI1tql6.cjs → use-table-nav-bridge-Gm4ZfOjJ.cjs} +1 -1
  163. package/dist/{use-table-selection-ULbKT2xW.mjs → use-table-selection-CdaOPo1d.mjs} +8 -3
  164. package/dist/{use-table-selection-DtCV3rhu.cjs → use-table-selection-Cs7-gjHg.cjs} +8 -3
  165. package/dist/{use-table-state-Ddr2UZzB.cjs → use-table-state-BQchKxUr.cjs} +499 -43
  166. package/dist/{use-table-state-DuY-Mf8e.mjs → use-table-state-CIoWhwTD.mjs} +466 -46
  167. package/package.json +11 -10
  168. package/dist/as-filter-input-BM23TNeh.mjs +0 -101
  169. package/dist/as-filter-input-DJu2k9gO.cjs +0 -106
  170. package/dist/as-table-BjKzKB0a.cjs +0 -207
  171. package/dist/as-table-DGWfzV4w.mjs +0 -202
  172. package/dist/as-table.vue-BULJe49x.d.cts +0 -115
  173. package/dist/as-table.vue-DgCtlV4u.d.mts +0 -115
  174. package/dist/as-window-table.vue-CYFgK10g.d.mts +0 -132
  175. package/dist/as-window-table.vue-ijutqrJ0.d.cts +0 -132
  176. package/dist/use-table-column-handlers-BitvioH4.mjs +0 -85
  177. package/dist/use-table-column-handlers-DksXpbON.cjs +0 -96
  178. /package/dist/{as-cell-array.vue-pFs5GcCR.d.cts → as-cell-array.vue-C4BTM8YW.d.cts} +0 -0
  179. /package/dist/{as-cell-array.vue-ow34clSF.d.mts → as-cell-array.vue-D4vS7C_D.d.mts} +0 -0
  180. /package/dist/{as-cell-date.vue-BBSps2B2.d.cts → as-cell-date.vue-BcMgxBfm.d.cts} +0 -0
  181. /package/dist/{as-cell-date.vue-B4JCr1qP.d.mts → as-cell-date.vue-Chs7WTZ9.d.mts} +0 -0
  182. /package/dist/{as-cell-json-popover-Dkdv5Y9E.mjs → as-cell-json-popover-CH5bAcLE.mjs} +0 -0
  183. /package/dist/{as-cell-json-popover-BM2QLgfk.cjs → as-cell-json-popover-vty5vMjW.cjs} +0 -0
  184. /package/dist/{as-cell-json.vue-B-T3TuFj.d.mts → as-cell-json.vue-C0_LDvQw.d.mts} +0 -0
  185. /package/dist/{as-cell-json.vue-C6wg4ARZ.d.cts → as-cell-json.vue-pwE9uJdv.d.cts} +0 -0
  186. /package/dist/{as-cell-number.vue-CNH2fbCB.d.mts → as-cell-number.vue-BBF0OuU8.d.mts} +0 -0
  187. /package/dist/{as-cell-number.vue-CJ2K5zeM.d.cts → as-cell-number.vue-pbgVCIWT.d.cts} +0 -0
  188. /package/dist/{as-cell-union.vue-CslPM_c2.d.cts → as-cell-union.vue-BK_M7opL.d.cts} +0 -0
  189. /package/dist/{as-cell-union.vue-CZwN81H4.d.mts → as-cell-union.vue-CL-Lf-Rm.d.mts} +0 -0
  190. /package/dist/{as-config-dialog.vue-BKo2GpzN.d.mts → as-config-dialog.vue-BvFZZRuY.d.mts} +0 -0
  191. /package/dist/{as-config-dialog.vue-DvvJi3xx.d.cts → as-config-dialog.vue-C-Jw_rb7.d.cts} +0 -0
  192. /package/dist/{as-confirm-dialog.vue-BN_yzu3h.d.mts → as-confirm-dialog.vue-Cz52-v6c.d.mts} +0 -0
  193. /package/dist/{as-confirm-dialog.vue-CXxLpzbu.d.cts → as-confirm-dialog.vue-D8hJ5qPY.d.cts} +0 -0
  194. /package/dist/{as-filter-dialog.vue-BV2J8PgZ.d.cts → as-filter-dialog.vue-CyD6qtuX.d.cts} +0 -0
  195. /package/dist/{as-filter-dialog.vue-Bl8OIKOf.d.mts → as-filter-dialog.vue-likNLqzF.d.mts} +0 -0
  196. /package/dist/{as-filter-field.vue-DD0IZXS1.d.mts → as-filter-field.vue-BbXLhd6O.d.mts} +0 -0
  197. /package/dist/{as-filter-field.vue-ByQ8xIGq.d.cts → as-filter-field.vue-ajAFhraz.d.cts} +0 -0
  198. /package/dist/{as-filters.vue-dHbGmcbr.d.mts → as-filters.vue-Bu4wK0iD.d.mts} +0 -0
  199. /package/dist/{as-preset-dialog.vue-ChM7H7B4.d.mts → as-preset-dialog.vue-BEM-L4BY.d.cts} +0 -0
  200. /package/dist/{as-preset-dialog.vue-DP9fy00Y.d.cts → as-preset-dialog.vue-BRjjfPty.d.mts} +0 -0
  201. /package/dist/{as-preset-picker.vue-OaAV2v9z.d.mts → as-preset-picker.vue-DAUZOlOD.d.mts} +0 -0
  202. /package/dist/{as-residual-filter.vue-Dfw1l2wS.d.cts → as-residual-filter.vue-CGXCipEn.d.cts} +0 -0
  203. /package/dist/{as-residual-filter.vue-N89YqlCz.d.mts → as-residual-filter.vue-DbeOOtR7.d.mts} +0 -0
  204. /package/dist/{as-table-cell-value.vue-DphckGq-.d.mts → as-table-cell-value.vue-BXIH_yfq.d.mts} +0 -0
  205. /package/dist/{as-table-cell-value.vue-C0VR9GRK.d.cts → as-table-cell-value.vue-UkAuJanv.d.cts} +0 -0
  206. /package/dist/{error-message-CfKpn_5w.cjs → error-message-CoUcpWal.cjs} +0 -0
  207. /package/dist/{error-message-gNEXnnbb.mjs → error-message-rziSiSjs.mjs} +0 -0
  208. /package/dist/{use-cell-locale-MQXoONh5.mjs → use-cell-locale-BTJZ6UcP.mjs} +0 -0
  209. /package/dist/{use-cell-locale-BGBRQB7s.cjs → use-cell-locale-Dv514-Al.cjs} +0 -0
  210. /package/dist/{use-has-emit-listener-DrBbsLHQ.mjs → use-has-emit-listener-CsF2w9iT.mjs} +0 -0
  211. /package/dist/{use-has-emit-listener-BaGFZDyM.cjs → use-has-emit-listener-gD1aWp6N.cjs} +0 -0
package/dist/index.mjs CHANGED
@@ -1,37 +1,36 @@
1
- import { F as ROW_ACTIONS_TYPE, T as extractIdentifier, a as useTableContext, n as createTableState, o as useTableContextOptional, r as provideTableContext, t as createStaticTableState, v as resolveRowActions } from "./use-table-state-DuY-Mf8e.mjs";
1
+ import { I as queryTargetGate, O as extractIdentifier, V as ROW_ACTIONS_TYPE, a as useTableContext, b as QUERY_TARGET_UNSUPPORTED_REASON, k as identifierFieldsOf, n as createTableState, o as useTableContextOptional, r as provideTableContext, t as createStaticTableState, v as resolveRowActions, x as actionIdentifiers } from "./use-table-state-CIoWhwTD.mjs";
2
2
  import { t as getCellValue } from "./get-cell-value-Cb3X8nUn.mjs";
3
- import { n as useTableSelection } from "./use-table-selection-ULbKT2xW.mjs";
4
- import { a as useLocalDraft, i as usePresets, o as AS_PRESETS_APP, r as useTable, s as injectPresetsApp, t as clearTableCache } from "./use-table-BTsNGBVx.mjs";
5
- import { t as useTableNavBridge } from "./use-table-nav-bridge-Bw0NFDSf.mjs";
6
- import { t as useTableComponent } from "./use-table-component-DRMXTk9M.mjs";
7
- import { t as as_cell_array_default } from "./as-cell-array-Bgc4GYZf.mjs";
8
- import { t as as_cell_date_default } from "./as-cell-date-B9mu0OOD.mjs";
9
- import { n as useCellLocale, t as provideCellLocale } from "./use-cell-locale-MQXoONh5.mjs";
10
- import { t as as_cell_json_default } from "./as-cell-json-ByEGYRST.mjs";
11
- import { t as as_cell_number_default } from "./as-cell-number-CNDT6gfw.mjs";
3
+ import { n as useTableSelection } from "./use-table-selection-CdaOPo1d.mjs";
4
+ import { a as useLocalDraft, i as usePresets, o as AS_PRESETS_APP, r as useTable, s as injectPresetsApp, t as clearTableCache } from "./use-table-BYNBpLJt.mjs";
5
+ import { n as useCellLocale, t as provideCellLocale } from "./use-cell-locale-BTJZ6UcP.mjs";
6
+ import { t as useTableNavBridge } from "./use-table-nav-bridge-CJBERyPB.mjs";
7
+ import { t as useTableComponent } from "./use-table-component-Dy397695.mjs";
8
+ import { t as as_cell_array_default } from "./as-cell-array-CnoVd9ps.mjs";
9
+ import { t as as_cell_date_default } from "./as-cell-date-dhIM7hWA.mjs";
10
+ import { t as as_cell_json_default } from "./as-cell-json-ChN_NDhO.mjs";
11
+ import { t as as_cell_number_default } from "./as-cell-number-D-mSaE_G.mjs";
12
12
  import { t as formatCellValue } from "./format-cell-D1Ziv96Q.mjs";
13
- import { t as as_cell_union_default } from "./as-cell-union-DMnoa7RM.mjs";
13
+ import { t as as_cell_union_default } from "./as-cell-union-C9Bbnkrg.mjs";
14
14
  import { t as as_column_menu_default } from "./as-column-menu-CBtUfYEE.mjs";
15
- import { t as as_config_dialog_default } from "./as-config-dialog-ObHtungs.mjs";
16
- import { t as as_confirm_dialog_default } from "./as-confirm-dialog-zg7jmS3u.mjs";
17
- import { t as as_filter_input_default } from "./as-filter-input-BM23TNeh.mjs";
18
- import { t as as_filter_dialog_default } from "./as-filter-dialog-CWy0mjZl.mjs";
19
- import { t as as_table_header_cell_default } from "./as-table-header-cell-Csv1KQDa.mjs";
20
- import { t as as_window_table_default } from "./as-window-table-JOTOi_Nm.mjs";
21
- import { t as as_filter_field_default } from "./as-filter-field-CW1_GHZT.mjs";
22
- import { t as as_residual_filter_default } from "./as-residual-filter-CUTouIn5.mjs";
23
- import { t as as_filters_default } from "./as-filters-BLFSS_VP.mjs";
24
- import { t as as_preset_dialog_default } from "./as-preset-dialog-CI2Hw8vi.mjs";
25
- import { t as as_row_actions_default } from "./as-row-actions-ed1P6GEJ.mjs";
26
- import { t as as_table_cell_value_default } from "./as-table-cell-value-DoH8Mieo.mjs";
27
- import { t as as_table_root_default } from "./as-table-root-BreMYhnv.mjs";
28
- import { t as as_table_default } from "./as-table-DGWfzV4w.mjs";
29
- import { t as as_table_actions_default } from "./as-table-actions-DQco4pGu.mjs";
30
- import { t as as_preset_picker_default } from "./as-preset-picker-CbZDGPaf.mjs";
15
+ import { t as as_config_dialog_default } from "./as-config-dialog-ZKMnfirD.mjs";
16
+ import { t as as_confirm_dialog_default } from "./as-confirm-dialog-DMiGquH1.mjs";
17
+ import { t as as_filter_field_default } from "./as-filter-field-DE6MJMx7.mjs";
18
+ import { t as as_filter_input_default } from "./as-filter-input-DmOW_jzK.mjs";
19
+ import { t as as_filter_dialog_default } from "./as-filter-dialog-DNFR30fV.mjs";
20
+ import { t as as_table_header_cell_default } from "./as-table-header-cell-ahzAeHXj.mjs";
21
+ import { t as as_window_table_default } from "./as-window-table-DjplqWzr.mjs";
22
+ import { t as as_residual_filter_default } from "./as-residual-filter-DHfbtTQj.mjs";
23
+ import { t as as_filters_default } from "./as-filters-DErM2bFq.mjs";
24
+ import { t as as_preset_dialog_default } from "./as-preset-dialog-CY5dPfZa.mjs";
25
+ import { t as as_row_actions_default } from "./as-row-actions-BNQ7jrie.mjs";
26
+ import { t as as_table_cell_value_default } from "./as-table-cell-value-D-S127gr.mjs";
27
+ import { t as as_table_root_default } from "./as-table-root-BnkF5-rh.mjs";
28
+ import { t as as_table_default } from "./as-table-Bcz-WOTS.mjs";
29
+ import { t as as_table_actions_default } from "./as-table-actions-DPq5SrGa.mjs";
30
+ import { t as as_preset_picker_default } from "./as-preset-picker-DkZ7sinz.mjs";
31
31
  import { getDefaultClientFactory, resetDefaultClientFactory, setDefaultClientFactory } from "@atscript/ui";
32
32
  import { computed, effectScope, ref, shallowRef } from "vue";
33
- import { AppPrefsClient, ExportAbortError, PRESET_ASPECTS, STANDARD_PRESET_ID, SYSTEM_PRESET_PREFIX, collectExportRows, columnDefaultCondition, columnFilterConditions, columnFilterType, isFilled, isSystemPresetId, isUnavailableError, resolveExportValue, resolveSystemPresets, toCsv, urlQueryConsumesKey, withStableOrder } from "@atscript/ui-table";
34
- import { splitUrlSegments } from "@uniqu/url";
33
+ import { AppPrefsClient, DEV, ExportAbortError, PRESET_ASPECTS, STANDARD_PRESET_ID, SYSTEM_PRESET_PREFIX, collectExportRows, columnFilter, isFilled, isSystemPresetId, isUnavailableError, leadingKey, mergeUrlQueryRecord, resolveExportValue, resolveSystemPresets, toCsv, urlQueryConsumesKey, urlQueryRecordToString, withStableOrder } from "@atscript/ui-table";
35
34
  import { StorageSerializers, useEventBus, useStorage } from "@vueuse/core";
36
35
  //#region src/composables/use-table-export.ts
37
36
  /**
@@ -71,13 +70,12 @@ function useTableExport(ctx) {
71
70
  }
72
71
  /**
73
72
  * One value resolver per column, built once per run: the formatter lookup
74
- * and the union-option index happen here instead of per cell.
73
+ * happens here instead of per cell (union-option labels are Map-backed in `optionLabel`).
75
74
  */
76
75
  function resolversFor(columns, opts) {
77
76
  return columns.map((column) => {
78
77
  const perColumn = opts.formatters?.[column.path];
79
78
  const formatCell = opts.formatCell;
80
- const labels = column.options?.length ? new Map(column.options.map((o) => [o.key, o.label])) : null;
81
79
  return (row) => {
82
80
  const raw = getCellValue(row, column.path);
83
81
  if (perColumn) {
@@ -88,11 +86,7 @@ function useTableExport(ctx) {
88
86
  const out = formatCell(raw, column, row);
89
87
  if (out !== void 0) return out;
90
88
  }
91
- if (labels !== null && (typeof raw === "string" || typeof raw === "number")) {
92
- const hit = labels.get(String(raw));
93
- if (hit !== void 0) return hit;
94
- }
95
- return resolveExportValue(raw);
89
+ return resolveExportValue(raw, column);
96
90
  };
97
91
  });
98
92
  }
@@ -198,9 +192,7 @@ function rawColumn(path) {
198
192
  * Accepts `state` directly rather than injecting — safe to call outside `setup`.
199
193
  */
200
194
  function useTableFilter(column, state) {
201
- const filterType = columnFilterType(column.type);
202
- const availableConditions = columnFilterConditions(column);
203
- const defCondition = columnDefaultCondition(column);
195
+ const { kind: filterType, conditions: availableConditions, defaultCondition: defCondition } = columnFilter(column);
204
196
  function cloneConditions() {
205
197
  const existing = state.filters.value[column.path];
206
198
  if (existing && existing.length > 0) return existing.map((c) => ({
@@ -294,26 +286,11 @@ function useTableActions() {
294
286
  }
295
287
  //#endregion
296
288
  //#region src/composables/use-table-url-query.ts
297
- const KEY_CHAR = /[A-Za-z0-9_.$-]/;
298
- /**
299
- * Index of `=` if every char before it is URL-key-safe. Returns -1 when any
300
- * non-key char (uniqu operator, whitespace, etc.) appears first — those
301
- * segments must round-trip as a single bare key because vue-router's `query`
302
- * record has no encoding for non-`=` separators.
303
- */
304
- function findCleanEq(segment) {
305
- for (let i = 0; i < segment.length; i++) {
306
- const c = segment[i];
307
- if (c === "=") return i > 0 ? i : -1;
308
- if (!KEY_CHAR.test(c)) return -1;
309
- }
310
- return -1;
311
- }
312
289
  /**
313
- * Bridge `<AsTableRoot v-model:url-query>` to vue-router. Uses **type-only**
314
- * imports of `Router` and `RouteLocationNormalizedLoaded` — no runtime
315
- * dependency on `vue-router` is added to `@atscript/vue-table`. Consumers
316
- * pass in their already-resolved `useRoute()` and `useRouter()` instances.
290
+ * Bridge `<AsTableRoot v-model:url-query>` to a router. Takes the structural
291
+ * {@link TableUrlQueryRoute} / {@link TableUrlQueryRouter} slices, so
292
+ * `@atscript/vue-table` imports nothing from `vue-router`: consumers pass
293
+ * their already-resolved `useRoute()` and `useRouter()` instances.
317
294
  *
318
295
  * Scope: the bridge owns **only what the table reads back** (since 0.1.133).
319
296
  * A key is the table's iff `urlQueryStringToState` would consume it — see
@@ -325,10 +302,11 @@ function findCleanEq(segment) {
325
302
  * written as one block in the table's order.
326
303
  *
327
304
  * Without a `prefix` the bridge cannot tell a plain `field=value` filter from
328
- * a page-owned flag of the same shape, so a plain key that was already in the
329
- * URL when the bridge mounted counts as foreign until the bridge writes it
330
- * itself. Pass `prefix` when a route carries a host key that could collide
331
- * with a column path, or when it carries two tables.
305
+ * a page-owned flag of the same shape: the table reads every unprefixed key,
306
+ * so a host key that is also a column path becomes a user filter. Pass
307
+ * `preserveKeys` to fence such host keys off (or `prefix` to namespace the
308
+ * table, which changes its URLs), and `prefix` when a route carries two
309
+ * tables.
332
310
  *
333
311
  * @example
334
312
  * ```vue
@@ -346,47 +324,47 @@ function findCleanEq(segment) {
346
324
  * ```
347
325
  */
348
326
  function useTableUrlQuery(route, router, opts = {}) {
349
- const navigate = (opts.mode ?? "replace") === "push" ? router.push.bind(router) : router.replace.bind(router);
327
+ const usePush = (opts.mode ?? "replace") === "push";
328
+ if (usePush && typeof router.push !== "function") throw new TypeError("[vue-table] useTableUrlQuery: mode \"push\" needs router.push.");
329
+ const navigate = (query) => usePush ? router.push?.({ query }) : router.replace({ query });
350
330
  const prefix = opts.prefix ? `${opts.prefix}.` : "";
331
+ const recordOpts = {
332
+ prefix: opts.prefix,
333
+ preserveKeys: opts.preserveKeys
334
+ };
351
335
  const written = /* @__PURE__ */ new Set();
352
336
  function isOwn(key) {
353
337
  if (prefix) return key.startsWith(prefix);
354
338
  return written.has(key) || urlQueryConsumesKey(key);
355
339
  }
340
+ let withheld;
341
+ const warned = /* @__PURE__ */ new Set();
356
342
  return computed({
357
343
  get: () => {
358
- const q = route.query;
359
- const parts = [];
360
- for (const key in q) {
361
- if (prefix && !key.startsWith(prefix)) continue;
362
- const own = prefix ? key.slice(prefix.length) : key;
363
- const v = q[key];
364
- if (Array.isArray(v)) for (const item of v) parts.push(item == null ? own : `${own}=${item}`);
365
- else if (v == null) parts.push(own);
366
- else parts.push(`${own}=${v}`);
367
- }
368
- return parts.join("&");
344
+ const own = urlQueryRecordToString(route.query, recordOpts);
345
+ if (!withheld) return own;
346
+ if (own === withheld.expectedOwn) return withheld.lastSet;
347
+ return [own, ...withheld.held].filter(Boolean).join("&");
369
348
  },
370
349
  set: (urlString) => {
371
- const serialized = /* @__PURE__ */ new Map();
372
- for (const segment of splitUrlSegments(urlString)) {
373
- if (!segment) continue;
374
- const eqIdx = findCleanEq(segment);
375
- const key = eqIdx > 0 ? `${prefix}${segment.slice(0, eqIdx)}` : `${prefix}${segment}`;
376
- serialized.set(key, eqIdx > 0 ? segment.slice(eqIdx + 1) : null);
377
- written.add(key);
350
+ const merged = mergeUrlQueryRecord(route.query, urlString, {
351
+ ...recordOpts,
352
+ isOwn
353
+ });
354
+ const { query } = merged;
355
+ for (const key of merged.own) written.add(key);
356
+ withheld = merged.withheld.length ? {
357
+ held: merged.withheld,
358
+ lastSet: urlString,
359
+ expectedOwn: urlQueryRecordToString(query, recordOpts)
360
+ } : void 0;
361
+ if (DEV) for (const segment of merged.withheld) {
362
+ const name = leadingKey(segment) || segment;
363
+ if (warned.has(name)) continue;
364
+ warned.add(name);
365
+ console.warn(`[vue-table] useTableUrlQuery: "${name}" is in preserveKeys, so the table's own "${name}" filter is kept private and is not written to the URL.`);
378
366
  }
379
- const query = {};
380
- let placed = false;
381
- const place = () => {
382
- if (placed) return;
383
- placed = true;
384
- for (const [key, value] of serialized) query[key] = value;
385
- };
386
- for (const key in route.query) if (isOwn(key)) place();
387
- else query[key] = route.query[key];
388
- place();
389
- navigate({ query });
367
+ navigate(query);
390
368
  }
391
369
  });
392
370
  }
@@ -658,4 +636,4 @@ function getColumnWidth(column) {
658
636
  return column.width || DEFAULT_WIDTHS[column.type] || "15em";
659
637
  }
660
638
  //#endregion
661
- export { AS_PRESETS_APP, as_cell_array_default as AsCellArray, as_cell_date_default as AsCellDate, as_cell_json_default as AsCellJson, as_cell_number_default as AsCellNumber, as_cell_union_default as AsCellUnion, as_column_menu_default as AsColumnMenu, as_config_dialog_default as AsConfigDialog, as_confirm_dialog_default as AsConfirmDialog, as_filter_dialog_default as AsFilterDialog, as_filter_field_default as AsFilterField, as_filter_input_default as AsFilterInput, as_filters_default as AsFilters, as_preset_dialog_default as AsPresetDialog, as_preset_picker_default as AsPresetPicker, as_row_actions_default as AsRowActions, as_table_default as AsTable, as_table_actions_default as AsTableActions, as_table_cell_value_default as AsTableCellValue, as_table_header_cell_default as AsTableHeaderCell, as_table_root_default as AsTableRoot, as_window_table_default as AsWindowTable, ExportAbortError, PRESET_ASPECTS, STANDARD_PRESET_ID, SYSTEM_PRESET_PREFIX, clearTableCache, createDefaultCellTypes, createDefaultControls, createStaticTableState, createTableState, downloadExport, extractIdentifier, formatCellValue, getCellValue, getColumnWidth, getDefaultClientFactory, injectPresetsApp, isSystemPresetId, provideCellLocale, provideTableContext, resetDefaultClientFactory, resolveRowActions, resolveSystemPresets, setDefaultClientFactory, useAppPrefs, useCellLocale, useLocalDraft, usePresets, useTable, useTableActions, useTableComponent, useTableContext, useTableContextOptional, useTableExport, useTableFilter, useTableNavBridge, useTableSearch, useTableSelection, useTableUrlQuery };
639
+ export { AS_PRESETS_APP, as_cell_array_default as AsCellArray, as_cell_date_default as AsCellDate, as_cell_json_default as AsCellJson, as_cell_number_default as AsCellNumber, as_cell_union_default as AsCellUnion, as_column_menu_default as AsColumnMenu, as_config_dialog_default as AsConfigDialog, as_confirm_dialog_default as AsConfirmDialog, as_filter_dialog_default as AsFilterDialog, as_filter_field_default as AsFilterField, as_filter_input_default as AsFilterInput, as_filters_default as AsFilters, as_preset_dialog_default as AsPresetDialog, as_preset_picker_default as AsPresetPicker, as_row_actions_default as AsRowActions, as_table_default as AsTable, as_table_actions_default as AsTableActions, as_table_cell_value_default as AsTableCellValue, as_table_header_cell_default as AsTableHeaderCell, as_table_root_default as AsTableRoot, as_window_table_default as AsWindowTable, ExportAbortError, PRESET_ASPECTS, QUERY_TARGET_UNSUPPORTED_REASON, STANDARD_PRESET_ID, SYSTEM_PRESET_PREFIX, actionIdentifiers, clearTableCache, createDefaultCellTypes, createDefaultControls, createStaticTableState, createTableState, downloadExport, extractIdentifier, formatCellValue, getCellValue, getColumnWidth, getDefaultClientFactory, identifierFieldsOf, injectPresetsApp, isSystemPresetId, provideCellLocale, provideTableContext, queryTargetGate, resetDefaultClientFactory, resolveRowActions, resolveSystemPresets, setDefaultClientFactory, useAppPrefs, useCellLocale, useLocalDraft, usePresets, useTable, useTableActions, useTableComponent, useTableContext, useTableContextOptional, useTableExport, useTableFilter, useTableNavBridge, useTableSearch, useTableSelection, useTableUrlQuery };
@@ -1,37 +1,9 @@
1
1
  import { Component, ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from "vue";
2
2
  import { ColumnDef, PaginationControl, SortControl, TableDef } from "@atscript/ui";
3
- import { ClientError, PageResult, TDbActionInfo, TDbActionProcessor, TDbDeleteResult } from "@atscript/db-client";
3
+ import { ClientError, PageResult, TDbActionInfo, TDbActionProcessor, TDbActionTargetSummary, TDbDeleteResult, TDbQueryTarget } from "@atscript/db-client";
4
+ import { AsPresetEntryRow, AspectMask, ColumnWidthsMap, ConfigTab, DroppedFields, FieldFilters, PresetAspect, PresetCapabilities, PresetSnapshot, SelectionMode, SelectionQuery, SystemPreset, SystemPresetInput, TableStateMethods } from "@atscript/ui-table";
4
5
  import { FilterExpr, Uniquery } from "@uniqu/core";
5
- import { AsPresetEntryRow, AspectMask, ColumnWidthsMap, ConfigTab, DroppedFields, FieldFilters, PresetAspect, PresetCapabilities, PresetSnapshot, SelectionMode, SystemPreset, SystemPresetInput, TableStateMethods } from "@atscript/ui-table";
6
6
 
7
- //#region src/composables/state/intent-scope.d.ts
8
- /**
9
- * Per-action verdict of a gate: `true` keeps the action as is, `false` drops
10
- * it (hidden), a non-empty string keeps it DISABLED with that string as the
11
- * reason (`""` counts as `true`).
12
- */
13
- type ActionVerdict = boolean | string;
14
- type ActionGate = (a: TVueTableActionInfo) => ActionVerdict;
15
- interface ActionBuckets {
16
- default: TVueTableActionInfo | undefined;
17
- others: TVueTableActionInfo[];
18
- rows: TVueTableActionInfo[];
19
- }
20
- /**
21
- * Build the identifier object to forward to `client.action` / `client.remove`.
22
- *
23
- * Per `@atscript/db-client` invariant #11, identifier bodies are object-only
24
- * — never bare scalars, even for single-field PK tables. This helper accepts:
25
- * - a row-shaped object (default `rowValueFn`) → picks `preferredId` fields;
26
- * - a scalar value when `preferredId` has exactly one field (consumers that
27
- * override `rowValueFn` to return the PK scalar) → wraps it.
28
- *
29
- * Returns `undefined` when no `preferredId` is declared, the source is
30
- * `null`/`undefined`, or a scalar can't be paired with a single-field
31
- * identifier.
32
- */
33
- declare function extractIdentifier(source: unknown, preferredId: readonly string[]): Record<string, unknown> | undefined;
34
- //#endregion
35
7
  //#region src/composables/state/row-actions-config.d.ts
36
8
  /**
37
9
  * A {@link RowActionsConfig} compiled into the two passes a surface runs per
@@ -117,6 +89,65 @@ interface InvokeOpts {
117
89
  * Since 0.1.134.
118
90
  */
119
91
  row?: Record<string, unknown>;
92
+ /**
93
+ * Run a `'rows'` action on every row matching this query instead of on
94
+ * `pk` (pass `pk` as `undefined`): `client.actionOnQuery`. The action's
95
+ * `/meta` entry must carry `queryTarget`. Since 0.1.147.
96
+ */
97
+ target?: ActionQueryTarget;
98
+ /**
99
+ * With `target`: the match count the user confirmed. The server answers
100
+ * `TARGET_CHANGED` when the query matches a different number of rows by
101
+ * the time it runs. Since 0.1.147.
102
+ */
103
+ expectCount?: number;
104
+ /**
105
+ * With `target` + `expectCount`: asked once with the new count when the
106
+ * server answers `TARGET_CHANGED`. Resolve `true` to run again on the new
107
+ * count; `false` settles the action as that error. Since 0.1.147.
108
+ */
109
+ confirmTargetChange?: (matched: number) => Promise<boolean>;
110
+ }
111
+ /**
112
+ * "Every row matching this query, minus `exclude`" — the target of a
113
+ * query-targeted action run (`InvokeOpts.target`). The `filter` / `search`
114
+ * / `index` of the table's query, never its sorting or paging. Since 0.1.147.
115
+ */
116
+ type ActionQueryTarget = Pick<TDbQueryTarget, "filter" | "search" | "index" | "exclude" | "maxRows">;
117
+ /**
118
+ * A symbolic selection of every row matching the table's query (the "Select
119
+ * all N matching" banner), held in `state.querySelection`. Since 0.1.147.
120
+ */
121
+ interface QuerySelection {
122
+ /** The filter / search / index the selection was made over. */
123
+ query: SelectionQuery;
124
+ /** `selectionSignature(query)` — a change of the live one drops the selection. */
125
+ signature: string;
126
+ /** `rowValueFn` values the user unticked after selecting all. */
127
+ excluded: unknown[];
128
+ /** Rows the query matched (`totalCount`), refreshed on same-scope refetches. */
129
+ total: number;
130
+ }
131
+ /**
132
+ * The selection as one value (`state.selection`): explicit row values, or
133
+ * every row matching a query minus the excluded ones. `count` is what the
134
+ * selection covers in both modes. Since 0.1.147.
135
+ */
136
+ type TableSelection = {
137
+ mode: "ids";
138
+ ids: unknown[];
139
+ count: number;
140
+ } | {
141
+ mode: "query";
142
+ query: SelectionQuery;
143
+ excluded: unknown[];
144
+ total: number;
145
+ count: number;
146
+ };
147
+ /** Why the table dropped a selection on its own (`selection-reset`). Since 0.1.147. */
148
+ interface SelectionResetEvent {
149
+ /** `"scope"` — the filter, search or index changed under a query selection. */
150
+ reason: "scope";
120
151
  }
121
152
  /**
122
153
  * A row action the APP owns — it has no server counterpart, so the backend
@@ -185,6 +216,15 @@ type ActionResult = {
185
216
  kind: "backend";
186
217
  data: unknown;
187
218
  message?: string;
219
+ /**
220
+ * A query-targeted run (`InvokeOpts.target`): how many rows the query
221
+ * matched, and the handler's `TDbActionTargetSummary` when it returned
222
+ * one (a delegated action always does). Since 0.1.147.
223
+ */
224
+ target?: {
225
+ matched: number;
226
+ summary?: TDbActionTargetSummary;
227
+ };
188
228
  } | {
189
229
  ok: true;
190
230
  kind: "navigate";
@@ -235,6 +275,14 @@ interface TableActionsState {
235
275
  * `{ id: '...' }`.
236
276
  */
237
277
  invoke: (action: TVueTableActionInfo, pk?: Record<string, unknown> | Record<string, unknown>[], opts?: InvokeOpts) => Promise<ActionResult>;
278
+ /**
279
+ * How many rows a query-targeted run of `action` would cover right now
280
+ * (`client.countActionTarget` — a dry run, the handler does not run).
281
+ * Resolves `undefined` when the count failed; that failure is settled as
282
+ * the action's error result (`lastResult` + the `@action` emit), like an
283
+ * invoke. Since 0.1.147.
284
+ */
285
+ countTarget: (action: TVueTableActionInfo, target: ActionQueryTarget, event?: KeyboardEvent | MouseEvent) => Promise<number | undefined>;
238
286
  /** Set of action names with an in-flight invoke. */
239
287
  invoking: ShallowRef<Set<string>>;
240
288
  /** Latest result keyed by action name. */
@@ -305,6 +353,11 @@ interface ActionFormRequest {
305
353
  /** Identifier objects for the targeted rows (used by `$1`/`$N` substitution in dialog copy). */
306
354
  identifiers: Record<string, unknown>[];
307
355
  preferredId: readonly string[];
356
+ /**
357
+ * A query-targeted run: how many rows it covers (`identifiers` is empty
358
+ * then). The dialog shows it in the title. Since 0.1.147.
359
+ */
360
+ count?: number;
308
361
  /** Internal — the dialog never calls this directly; use accept/dismiss. */
309
362
  resolve: (input: unknown) => void;
310
363
  }
@@ -533,6 +586,19 @@ interface ReactiveTableState extends TableStateMethods {
533
586
  * when present, otherwise type+`@expect.maxLen`-derived (see `computeDefaultColumnWidth`).
534
587
  */
535
588
  columnWidths: Ref<ColumnWidthsMap>;
589
+ /**
590
+ * The app-authored `forceFilters` scope, read live. For chrome such as a
591
+ * "scoped to ..." badge. Since 0.1.148.
592
+ */
593
+ forceFilters: ComputedRef<FilterExpr | undefined>;
594
+ /** The app-authored `forceSorters`, read live (empty when none). Since 0.1.148. */
595
+ forceSorters: ComputedRef<SortControl[]>;
596
+ /**
597
+ * The IANA time zone the table reads dates in (`undefined` = the browser's):
598
+ * the `timeZone` option, else the cell locale's. Date filters, their chips
599
+ * and their inputs all follow it. Since 0.1.148.
600
+ */
601
+ timeZone: ComputedRef<string | undefined>;
536
602
  filterFields: ShallowRef<string[]>;
537
603
  filters: ShallowRef<FieldFilters>;
538
604
  /**
@@ -693,15 +759,62 @@ interface ReactiveTableState extends TableStateMethods {
693
759
  deselectAll: (rows: readonly Record<string, unknown>[]) => void;
694
760
  /**
695
761
  * The header checkbox's action over `rows`: deselect them when every
696
- * eligible one is selected, otherwise select them. Since 0.1.142.
762
+ * eligible one is selected, otherwise select them. In a query selection
763
+ * a fully selected `rows` ends it. `indexOf` as in `selectAll` (since
764
+ * 0.1.147). Since 0.1.142.
697
765
  */
698
- toggleAll: (rows: readonly Record<string, unknown>[]) => void;
766
+ toggleAll: (rows: readonly Record<string, unknown>[], indexOf?: (position: number) => number) => void;
699
767
  /**
700
768
  * Empty the selection — every pk, whether or not its row is loaded or
701
769
  * eligible. The header checkbox only ever acts on loaded rows; this is the
702
- * real clear. Since 0.1.142.
770
+ * real clear. Ends a query selection too. Since 0.1.142.
703
771
  */
704
772
  clearSelection: () => void;
773
+ /**
774
+ * The symbolic "every row matching the query" selection, or `null` while
775
+ * the selection is the explicit `selectedRows` (bound by
776
+ * `v-model:query-selection` on `<AsTableRoot>`). While set, `selectedRows`
777
+ * is empty, row toggles edit `excluded`, `isPkSelected` is "not excluded"
778
+ * and `selectedCount` is `total − excluded.length`. Dropped (with a
779
+ * `selection-reset` `{ reason: "scope" }`) as soon as the filter, search
780
+ * or index changes — sorting, columns, paging and scrolling keep it. A
781
+ * successful query-targeted action clears it. Since 0.1.147.
782
+ */
783
+ querySelection: Ref<QuerySelection | null>;
784
+ /** The selection as one value, in either mode — see {@link TableSelection}. Since 0.1.147. */
785
+ selection: ComputedRef<TableSelection>;
786
+ /**
787
+ * Opt-in for selecting every row matching the query — writable ref owned
788
+ * by `<AsTableRoot>`'s `select-all-matching` prop (default `false`).
789
+ * Since 0.1.147.
790
+ */
791
+ allowSelectAllMatching: Ref<boolean>;
792
+ /**
793
+ * The renderer's `select` mode — writable ref pushed by `<AsTable>` /
794
+ * `<AsWindowTable>` (default `"none"`). Since 0.1.147.
795
+ */
796
+ selectMode: Ref<SelectionMode>;
797
+ /**
798
+ * `rowValueFn` values of the LOADED rows the `rowSelectable` predicate
799
+ * lets through — the set "all rows on this page" covers (every cached row
800
+ * in window mode). Since 0.1.147.
801
+ */
802
+ loadedEligiblePks: ComputedRef<unknown[]>;
803
+ /** How many of `loadedEligiblePks` are selected. Since 0.1.147. */
804
+ loadedSelectedCount: ComputedRef<number>;
805
+ /**
806
+ * Whether "Select all N matching" can be offered: `allowSelectAllMatching`
807
+ * ∧ `selectMode === "multi"` ∧ a server-backed table (no custom query
808
+ * function, not local mode) ∧ more matching rows than loaded ones
809
+ * ∧ at least one `'rows'` action that takes a query target. Since 0.1.147.
810
+ */
811
+ canSelectAllMatching: ComputedRef<boolean>;
812
+ /**
813
+ * Select every row matching the current query (filter, search, index —
814
+ * force filters and custom filter conditions included). A no-op unless
815
+ * {@link canSelectAllMatching}. Since 0.1.147.
816
+ */
817
+ selectAllMatching: () => void;
705
818
  /** Column currently open in the filter dialog (null when closed). */
706
819
  filterDialogColumn: Ref<ColumnDef | null>;
707
820
  /** Absolute index of the keyboard-active row. -1 = nothing active. */
@@ -793,7 +906,8 @@ interface ReactiveTableState extends TableStateMethods {
793
906
  */
794
907
  requestActionInput: (action: TVueTableActionInfo, ctx: {
795
908
  identifiers: Record<string, unknown>[];
796
- preferredId: readonly string[];
909
+ preferredId: readonly string[]; /** A query-targeted run's row count (since 0.1.147). */
910
+ count?: number;
797
911
  }) => Promise<unknown>;
798
912
  /** Resolve the active form request with `input`. Internal — used by the dialog. */
799
913
  acceptActionForm: (input: unknown) => void;
@@ -1012,4 +1126,70 @@ interface PresetSurface {
1012
1126
  lastError: Ref<Error | null>;
1013
1127
  }
1014
1128
  //#endregion
1015
- export { TableNavBridge as A, RowSelectableVerdict as C, TAsTableControls as D, TAsCellTypeComponents as E, extractIdentifier as M, TVueTableActionInfo as O, RowSelectableHook as S, SelectOn as T, RowActionsConfig as _, ConfirmOptions as a, RowDeleteOpt as b, InvokeOpts as c, NavKeyOptions as d, PresetConfig as f, RowActionsColumnPlacement as g, ResolvedRowActions as h, ConfigTab as i, resolveRowActions as j, TableActionsState as k, LocalRowAction as l, ReactiveTableState as m, ApplyUrlQueryOptions as n, DroppedFieldsReport as o, QueryErrorKind as p, ColumnMenuConfig as r, EnterAction as s, ActionResult as t, MainActionRequest as u, RowAttrsHook as v, SelectAllState as w, RowHookContext as x, RowClassHook as y };
1129
+ //#region src/composables/state/intent-scope.d.ts
1130
+ /**
1131
+ * Per-action verdict of a gate: `true` keeps the action as is, `false` drops
1132
+ * it (hidden), a non-empty string keeps it DISABLED with that string as the
1133
+ * reason (`""` counts as `true`).
1134
+ */
1135
+ type ActionVerdict = boolean | string;
1136
+ type ActionGate = (a: TVueTableActionInfo) => ActionVerdict;
1137
+ interface ActionBuckets {
1138
+ default: TVueTableActionInfo | undefined;
1139
+ others: TVueTableActionInfo[];
1140
+ rows: TVueTableActionInfo[];
1141
+ }
1142
+ /** Disabled reason of a non-query-target action in a query selection. Since 0.1.147. */
1143
+ declare const QUERY_TARGET_UNSUPPORTED_REASON = "Not available for all matching rows \u2014 select rows individually";
1144
+ /**
1145
+ * The gate a query selection ("every row matching the query") puts on the
1146
+ * `'rows'` actions: enabled iff the action takes a query target
1147
+ * (`queryTarget`) of at least `count` rows; otherwise kept DISABLED with the
1148
+ * reason ({@link QUERY_TARGET_UNSUPPORTED_REASON}, or "At most {max} rows").
1149
+ * The loaded rows' `$actions` are deliberately not consulted — a sample of
1150
+ * the matching rows cannot speak for the rest; the server gates every row
1151
+ * when the action runs. Since 0.1.147.
1152
+ */
1153
+ declare function queryTargetGate(count: number): ActionGate;
1154
+ /**
1155
+ * The fields an action identifier is built from — `tableDef.identifierFields`
1156
+ * (`preferredId` plus every delegated action's `idMap` path), falling back to
1157
+ * `preferredId` for a hand-built `TableDef` without it. Since 0.1.147.
1158
+ */
1159
+ declare function identifierFieldsOf(def: TableDef | null | undefined): readonly string[];
1160
+ /**
1161
+ * Build the identifier object to forward to `client.action` / `client.remove`.
1162
+ *
1163
+ * Per `@atscript/db-client` invariant #11, identifier bodies are object-only
1164
+ * — never bare scalars, even for single-field PK tables. This helper accepts:
1165
+ * - a row-shaped object (default `rowValueFn`) → picks the `fields` (a dot
1166
+ * path keeps the row's nesting: `ref.key` → `{ ref: { key } }`);
1167
+ * - a scalar value when `fields` has exactly one entry (consumers that
1168
+ * override `rowValueFn` to return the PK scalar) → wraps it.
1169
+ *
1170
+ * `fields` is usually `identifierFields` (see {@link identifierFieldsOf}), so
1171
+ * the identifier carries what a delegated action maps from; each action then
1172
+ * takes the part it needs ({@link actionIdentifiers}).
1173
+ *
1174
+ * Returns `undefined` when `fields` is empty, the source is
1175
+ * `null`/`undefined`, or a scalar can't be paired with a single field.
1176
+ */
1177
+ declare function extractIdentifier(source: unknown, fields: readonly string[]): Record<string, unknown> | undefined;
1178
+ /**
1179
+ * The identifiers `action` is sent, from the table's identifiers (built
1180
+ * from `identifierFields`): a delegated action (`idMap`) keeps exactly its
1181
+ * map's paths — the client maps them to the owner's identification — any
1182
+ * other action exactly the `preferredId` fields, the identification the
1183
+ * server validates. No fields → no identifiers. Identifiers already in that
1184
+ * shape come back as the same array. Since 0.1.147.
1185
+ */
1186
+ declare function actionIdentifiers(action: Pick<TVueTableActionInfo, "idMap">, ids: Record<string, unknown>[], preferredId: readonly string[]): Record<string, unknown>[];
1187
+ /**
1188
+ * The query a query selection targets, with the excluded rows' identifiers
1189
+ * (built from `identifierFields`) — see `PromptCtx.target`. Since 0.1.147.
1190
+ */
1191
+ type PromptTarget = SelectionQuery & {
1192
+ exclude: Record<string, unknown>[];
1193
+ };
1194
+ //#endregion
1195
+ export { RowSelectableHook as A, TableSelection as B, ResolvedRowActions as C, RowClassHook as D, RowAttrsHook as E, TAsCellTypeComponents as F, TAsTableControls as I, TVueTableActionInfo as L, SelectAllState as M, SelectOn as N, RowDeleteOpt as O, SelectionResetEvent as P, TableActionsState as R, ReactiveTableState as S, RowActionsConfig as T, resolveRowActions as V, MainActionRequest as _, identifierFieldsOf as a, QueryErrorKind as b, ActionResult as c, ConfigTab as d, ConfirmOptions as f, LocalRowAction as g, InvokeOpts as h, extractIdentifier as i, RowSelectableVerdict as j, RowHookContext as k, ApplyUrlQueryOptions as l, EnterAction as m, QUERY_TARGET_UNSUPPORTED_REASON as n, queryTargetGate as o, DroppedFieldsReport as p, actionIdentifiers as r, ActionQueryTarget as s, PromptTarget as t, ColumnMenuConfig as u, NavKeyOptions as v, RowActionsColumnPlacement as w, QuerySelection as x, PresetConfig as y, TableNavBridge as z };