nuxt-ui-tools 1.1.0 → 1.3.0

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 (213) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +10 -1
  3. package/dist/runtime/dashboard/components/block/dashboard-block-state.d.vue.ts +2 -0
  4. package/dist/runtime/dashboard/components/block/dashboard-block-state.vue +4 -1
  5. package/dist/runtime/dashboard/components/block/dashboard-block-state.vue.d.ts +2 -0
  6. package/dist/runtime/dashboard/components/block/dashboard-chips.d.vue.ts +20 -0
  7. package/dist/runtime/dashboard/components/block/dashboard-chips.vue +42 -0
  8. package/dist/runtime/dashboard/components/block/dashboard-chips.vue.d.ts +20 -0
  9. package/dist/runtime/dashboard/components/block/dashboard-series-picker.d.vue.ts +8 -0
  10. package/dist/runtime/dashboard/components/block/dashboard-series-picker.vue +29 -0
  11. package/dist/runtime/dashboard/components/block/dashboard-series-picker.vue.d.ts +8 -0
  12. package/dist/runtime/dashboard/components/block/dashboard-skeleton.d.vue.ts +1 -1
  13. package/dist/runtime/dashboard/components/block/dashboard-skeleton.vue +6 -3
  14. package/dist/runtime/dashboard/components/block/dashboard-skeleton.vue.d.ts +1 -1
  15. package/dist/runtime/dashboard/components/block/dashboard-view-scope.d.vue.ts +21 -0
  16. package/dist/runtime/dashboard/components/block/dashboard-view-scope.vue +12 -0
  17. package/dist/runtime/dashboard/components/block/dashboard-view-scope.vue.d.ts +21 -0
  18. package/dist/runtime/dashboard/components/dashboard-alerts.vue +3 -3
  19. package/dist/runtime/dashboard/components/dashboard-bar-chart.d.vue.ts +14 -3
  20. package/dist/runtime/dashboard/components/dashboard-bar-chart.vue +30 -9
  21. package/dist/runtime/dashboard/components/dashboard-bar-chart.vue.d.ts +14 -3
  22. package/dist/runtime/dashboard/components/dashboard-bars.vue +4 -4
  23. package/dist/runtime/dashboard/components/dashboard-card.vue +28 -6
  24. package/dist/runtime/dashboard/components/dashboard-combo-chart.d.vue.ts +6 -1
  25. package/dist/runtime/dashboard/components/dashboard-combo-chart.vue +13 -3
  26. package/dist/runtime/dashboard/components/dashboard-combo-chart.vue.d.ts +6 -1
  27. package/dist/runtime/dashboard/components/dashboard-donut-chart.vue +5 -5
  28. package/dist/runtime/dashboard/components/dashboard-feed.vue +8 -7
  29. package/dist/runtime/dashboard/components/dashboard-filter.d.vue.ts +67 -0
  30. package/dist/runtime/dashboard/components/dashboard-filter.vue +134 -0
  31. package/dist/runtime/dashboard/components/dashboard-filter.vue.d.ts +67 -0
  32. package/dist/runtime/dashboard/components/dashboard-filters.d.vue.ts +49 -0
  33. package/dist/runtime/dashboard/components/dashboard-filters.vue +96 -0
  34. package/dist/runtime/dashboard/components/dashboard-filters.vue.d.ts +49 -0
  35. package/dist/runtime/dashboard/components/dashboard-funnel.vue +5 -5
  36. package/dist/runtime/dashboard/components/dashboard-gauge.vue +3 -3
  37. package/dist/runtime/dashboard/components/dashboard-grid.d.vue.ts +10 -3
  38. package/dist/runtime/dashboard/components/dashboard-grid.vue +24 -9
  39. package/dist/runtime/dashboard/components/dashboard-grid.vue.d.ts +10 -3
  40. package/dist/runtime/dashboard/components/dashboard-line-chart.d.vue.ts +14 -3
  41. package/dist/runtime/dashboard/components/dashboard-line-chart.vue +30 -9
  42. package/dist/runtime/dashboard/components/dashboard-line-chart.vue.d.ts +14 -3
  43. package/dist/runtime/dashboard/components/dashboard-list.d.vue.ts +3 -0
  44. package/dist/runtime/dashboard/components/dashboard-list.vue +18 -6
  45. package/dist/runtime/dashboard/components/dashboard-list.vue.d.ts +3 -0
  46. package/dist/runtime/dashboard/components/dashboard-page.d.vue.ts +53 -0
  47. package/dist/runtime/dashboard/components/dashboard-page.vue +156 -0
  48. package/dist/runtime/dashboard/components/dashboard-page.vue.d.ts +53 -0
  49. package/dist/runtime/dashboard/components/dashboard-paired-bars.vue +4 -4
  50. package/dist/runtime/dashboard/components/dashboard-refresh.d.vue.ts +1 -1
  51. package/dist/runtime/dashboard/components/dashboard-refresh.vue +1 -0
  52. package/dist/runtime/dashboard/components/dashboard-refresh.vue.d.ts +1 -1
  53. package/dist/runtime/dashboard/components/dashboard-stack-bar.vue +4 -4
  54. package/dist/runtime/dashboard/components/dashboard-stat.d.vue.ts +14 -2
  55. package/dist/runtime/dashboard/components/dashboard-stat.vue +28 -10
  56. package/dist/runtime/dashboard/components/dashboard-stat.vue.d.ts +14 -2
  57. package/dist/runtime/dashboard/components/dashboard-stats.vue +3 -3
  58. package/dist/runtime/dashboard/components/dashboard-table.d.vue.ts +1 -1
  59. package/dist/runtime/dashboard/components/dashboard-table.vue +3 -3
  60. package/dist/runtime/dashboard/components/dashboard-table.vue.d.ts +1 -1
  61. package/dist/runtime/dashboard/components/dashboard-tabs.d.vue.ts +1 -1
  62. package/dist/runtime/dashboard/components/dashboard-tabs.vue.d.ts +1 -1
  63. package/dist/runtime/dashboard/components/dashboard-total.d.vue.ts +7 -2
  64. package/dist/runtime/dashboard/components/dashboard-total.vue +10 -2
  65. package/dist/runtime/dashboard/components/dashboard-total.vue.d.ts +7 -2
  66. package/dist/runtime/dashboard/components/dashboard-view-tabs.d.vue.ts +33 -0
  67. package/dist/runtime/dashboard/components/dashboard-view-tabs.vue +66 -0
  68. package/dist/runtime/dashboard/components/dashboard-view-tabs.vue.d.ts +33 -0
  69. package/dist/runtime/dashboard/components/dashboard-widget.vue +1 -1
  70. package/dist/runtime/dashboard/components/filter/dashboard-filter-menu.d.vue.ts +44 -0
  71. package/dist/runtime/dashboard/components/filter/dashboard-filter-menu.vue +220 -0
  72. package/dist/runtime/dashboard/components/filter/dashboard-filter-menu.vue.d.ts +44 -0
  73. package/dist/runtime/dashboard/composables/use-dashboard-api.d.ts +6 -1
  74. package/dist/runtime/dashboard/composables/use-dashboard-api.js +29 -6
  75. package/dist/runtime/dashboard/composables/use-dashboard-block.d.ts +5 -4
  76. package/dist/runtime/dashboard/composables/use-dashboard-block.js +32 -15
  77. package/dist/runtime/dashboard/composables/use-dashboard-chart.d.ts +8 -1
  78. package/dist/runtime/dashboard/composables/use-dashboard-chart.js +16 -4
  79. package/dist/runtime/dashboard/composables/use-dashboard-context.d.ts +50 -0
  80. package/dist/runtime/dashboard/composables/use-dashboard-context.js +56 -0
  81. package/dist/runtime/dashboard/composables/use-dashboard-derived.js +6 -1
  82. package/dist/runtime/dashboard/composables/use-dashboard-filter-control.d.ts +16 -0
  83. package/dist/runtime/dashboard/composables/use-dashboard-filter-control.js +161 -0
  84. package/dist/runtime/dashboard/composables/use-dashboard-filter-scope.d.ts +37 -0
  85. package/dist/runtime/dashboard/composables/use-dashboard-filter-scope.js +107 -0
  86. package/dist/runtime/dashboard/composables/use-dashboard-format.d.ts +46 -6
  87. package/dist/runtime/dashboard/composables/use-dashboard-format.js +51 -8
  88. package/dist/runtime/dashboard/composables/use-dashboard-options.d.ts +11 -4
  89. package/dist/runtime/dashboard/composables/use-dashboard-options.js +33 -47
  90. package/dist/runtime/dashboard/composables/use-dashboard-remote-options.d.ts +8 -5
  91. package/dist/runtime/dashboard/composables/use-dashboard-remote-options.js +66 -77
  92. package/dist/runtime/dashboard/composables/use-dashboard-resource.d.ts +15 -4
  93. package/dist/runtime/dashboard/composables/use-dashboard-resource.js +52 -17
  94. package/dist/runtime/dashboard/composables/use-dashboard-scope.d.ts +10 -7
  95. package/dist/runtime/dashboard/composables/use-dashboard-scope.js +26 -16
  96. package/dist/runtime/dashboard/composables/use-dashboard-series-picker.d.ts +20 -0
  97. package/dist/runtime/dashboard/composables/use-dashboard-series-picker.js +30 -0
  98. package/dist/runtime/dashboard/composables/use-dashboard-time.d.ts +2 -0
  99. package/dist/runtime/dashboard/composables/use-dashboard-time.js +4 -1
  100. package/dist/runtime/dashboard/composables/use-dashboard-ui.d.ts +12 -2
  101. package/dist/runtime/dashboard/composables/use-dashboard-ui.js +3 -0
  102. package/dist/runtime/dashboard/composables/use-dashboard-views.d.ts +15 -3
  103. package/dist/runtime/dashboard/composables/use-dashboard-views.js +33 -10
  104. package/dist/runtime/dashboard/composables/use-dashboard.d.ts +18 -12
  105. package/dist/runtime/dashboard/composables/use-dashboard.js +98 -9
  106. package/dist/runtime/dashboard/index.d.ts +3 -1
  107. package/dist/runtime/dashboard/index.js +3 -1
  108. package/dist/runtime/dashboard/schema/index.d.ts +62 -30
  109. package/dist/runtime/dashboard/schema/index.js +3 -0
  110. package/dist/runtime/dashboard/types/blocks.d.ts +30 -4
  111. package/dist/runtime/dashboard/types/charts.d.ts +2 -2
  112. package/dist/runtime/dashboard/types/controls.d.ts +123 -0
  113. package/dist/runtime/dashboard/types/filters.d.ts +236 -0
  114. package/dist/runtime/dashboard/types/index.d.ts +3 -2
  115. package/dist/runtime/dashboard/types/page.d.ts +17 -0
  116. package/dist/runtime/dashboard/types/page.js +0 -0
  117. package/dist/runtime/dashboard/types/resource.d.ts +66 -28
  118. package/dist/runtime/dashboard/types/runtime.d.ts +39 -8
  119. package/dist/runtime/dashboard/types/schema.d.ts +94 -54
  120. package/dist/runtime/dashboard/types/ui.d.ts +78 -0
  121. package/dist/runtime/dashboard/utils/builders/dashboard-filters.d.ts +142 -0
  122. package/dist/runtime/dashboard/utils/builders/dashboard-filters.js +135 -0
  123. package/dist/runtime/dashboard/utils/charts.d.ts +4 -15
  124. package/dist/runtime/dashboard/utils/charts.js +26 -28
  125. package/dist/runtime/dashboard/utils/{params/codecs.d.ts → codecs.d.ts} +2 -2
  126. package/dist/runtime/dashboard/utils/{params/codecs.js → codecs.js} +1 -1
  127. package/dist/runtime/dashboard/utils/environment.d.ts +36 -0
  128. package/dist/runtime/dashboard/utils/environment.js +30 -0
  129. package/dist/runtime/dashboard/utils/filters.d.ts +44 -0
  130. package/dist/runtime/dashboard/utils/filters.js +62 -0
  131. package/dist/runtime/dashboard/utils/format.d.ts +25 -0
  132. package/dist/runtime/dashboard/utils/format.js +66 -0
  133. package/dist/runtime/dashboard/utils/grid.d.ts +17 -0
  134. package/dist/runtime/dashboard/utils/grid.js +14 -0
  135. package/dist/runtime/dashboard/utils/options.d.ts +3 -8
  136. package/dist/runtime/dashboard/utils/options.js +6 -5
  137. package/dist/runtime/dashboard/utils/remote.d.ts +7 -0
  138. package/dist/runtime/dashboard/utils/remote.js +14 -0
  139. package/dist/runtime/dashboard/utils/resource.d.ts +16 -7
  140. package/dist/runtime/dashboard/utils/resource.js +15 -9
  141. package/dist/runtime/dashboard/utils/schema.d.ts +8 -3
  142. package/dist/runtime/dashboard/utils/schema.js +9 -4
  143. package/dist/runtime/dashboard/utils/state.d.ts +11 -6
  144. package/dist/runtime/dashboard/utils/state.js +10 -5
  145. package/dist/runtime/dashboard/utils/time.d.ts +2 -0
  146. package/dist/runtime/dashboard/utils/time.js +11 -1
  147. package/dist/runtime/dashboard/utils/ui.d.ts +1 -1
  148. package/dist/runtime/dashboard/utils/ui.js +1 -1
  149. package/dist/runtime/form/components/root/form.vue +1 -1
  150. package/dist/runtime/form/fields/card-selection.d.ts +1 -0
  151. package/dist/runtime/form/fields/card-selection.js +1 -0
  152. package/dist/runtime/form/fields/checkbox-card/component.vue +3 -1
  153. package/dist/runtime/form/fields/checkbox-group/component.vue +5 -0
  154. package/dist/runtime/form/fields/radio/component.vue +10 -0
  155. package/dist/runtime/form/fields/radio-card/component.vue +3 -1
  156. package/dist/runtime/form/types/options.d.ts +1 -11
  157. package/dist/runtime/form/utils/focus.js +1 -1
  158. package/dist/runtime/i18n/locales/en.js +32 -1
  159. package/dist/runtime/i18n/locales/fr.js +32 -1
  160. package/dist/runtime/i18n/types.d.ts +44 -0
  161. package/dist/runtime/shared/styles/scrollbars.css +1 -1
  162. package/dist/runtime/shared/styles/tokens.css +1 -1
  163. package/dist/runtime/shared/types/query.d.ts +8 -0
  164. package/dist/runtime/shared/utils/remote-options.d.ts +10 -0
  165. package/dist/runtime/shared/utils/remote-options.js +6 -0
  166. package/dist/runtime/table/components/filters/shared/filter-option-list-end.d.vue.ts +11 -0
  167. package/dist/runtime/table/components/filters/shared/filter-option-list-end.vue +76 -0
  168. package/dist/runtime/table/components/filters/shared/filter-option-list-end.vue.d.ts +11 -0
  169. package/dist/runtime/table/components/filters/shared/filter-option-loading-list.d.vue.ts +3 -0
  170. package/dist/runtime/table/components/filters/shared/filter-option-loading-list.vue +2 -1
  171. package/dist/runtime/table/components/filters/shared/filter-option-loading-list.vue.d.ts +3 -0
  172. package/dist/runtime/table/components/filters/shared/filter-option-multiple-list.vue +1 -1
  173. package/dist/runtime/table/components/filters/shared/filter-option-picker-content.vue +13 -0
  174. package/dist/runtime/table/components/filters/shared/filter-option-single-list.d.vue.ts +2 -0
  175. package/dist/runtime/table/components/filters/shared/filter-option-single-list.vue +1 -1
  176. package/dist/runtime/table/components/filters/shared/filter-option-single-list.vue.d.ts +2 -0
  177. package/dist/runtime/table/components/filters/shared/filter-option-tree-content.d.vue.ts +3 -0
  178. package/dist/runtime/table/components/filters/shared/filter-option-tree-content.vue +2 -2
  179. package/dist/runtime/table/components/filters/shared/filter-option-tree-content.vue.d.ts +3 -0
  180. package/dist/runtime/table/components/filters/shared/filter-searchable-panel.vue +1 -0
  181. package/dist/runtime/table/composables/use-option-filter-editor-state.d.ts +13 -1
  182. package/dist/runtime/table/composables/use-option-filter-editor-state.js +6 -2
  183. package/dist/runtime/table/composables/use-table-filter-options.d.ts +11 -1
  184. package/dist/runtime/table/composables/use-table-filter-options.js +128 -17
  185. package/dist/runtime/table/composables/use-table-filter-selected-options.d.ts +20 -0
  186. package/dist/runtime/table/composables/use-table-filter-selected-options.js +99 -0
  187. package/dist/runtime/table/composables/use-table-filters.d.ts +5 -0
  188. package/dist/runtime/table/composables/use-table-filters.js +20 -1
  189. package/dist/runtime/table/composables/use-table-internals.d.ts +15 -0
  190. package/dist/runtime/table/composables/use-table-remote-filter-options.d.ts +42 -0
  191. package/dist/runtime/table/composables/use-table-remote-filter-options.js +102 -0
  192. package/dist/runtime/table/types/filters.d.ts +42 -0
  193. package/dist/runtime/table/types/index.d.ts +1 -0
  194. package/dist/runtime/table/types/remote-options.d.ts +64 -0
  195. package/dist/runtime/table/types/remote-options.js +0 -0
  196. package/dist/runtime/table/types/source.d.ts +15 -1
  197. package/dist/runtime/table/utils/builders/table-source.d.ts +2 -6
  198. package/dist/runtime/table/utils/filters/options.d.ts +2 -0
  199. package/dist/runtime/table/utils/filters/options.js +1 -1
  200. package/dist/runtime/table/utils/index.d.ts +1 -0
  201. package/dist/runtime/table/utils/index.js +1 -0
  202. package/dist/runtime/table/utils/prefetch.js +21 -1
  203. package/dist/runtime/table/utils/remote-table-options.d.ts +26 -0
  204. package/dist/runtime/table/utils/remote-table-options.js +88 -0
  205. package/package.json +4 -1
  206. package/dist/runtime/dashboard/composables/use-dashboard-param-scope.d.ts +0 -30
  207. package/dist/runtime/dashboard/composables/use-dashboard-param-scope.js +0 -71
  208. package/dist/runtime/dashboard/types/options.d.ts +0 -46
  209. package/dist/runtime/dashboard/types/params.d.ts +0 -115
  210. package/dist/runtime/dashboard/utils/builders/dashboard-params.d.ts +0 -85
  211. package/dist/runtime/dashboard/utils/builders/dashboard-params.js +0 -87
  212. /package/dist/runtime/dashboard/types/{options.js → controls.js} +0 -0
  213. /package/dist/runtime/dashboard/types/{params.js → filters.js} +0 -0
@@ -19,6 +19,27 @@ export default defineUiToolsLocale({
19
19
  series: "{label} (p\xE9riode pr\xE9c\xE9dente)",
20
20
  year: "Ann\xE9e pr\xE9c\xE9dente"
21
21
  },
22
+ filters: {
23
+ all: "Tous",
24
+ clear: "Effacer le filtre {label}",
25
+ clearSelection: "Effacer la s\xE9lection",
26
+ empty: "Aucun r\xE9sultat",
27
+ label: "Filtres",
28
+ loadError: "Impossible de charger les options",
29
+ loading: "Chargement\u2026",
30
+ more: "{label} +{count}",
31
+ no: "Non",
32
+ presets: "Pr\xE9r\xE9glages",
33
+ reset: "R\xE9initialiser",
34
+ retry: "R\xE9essayer",
35
+ search: "Rechercher\u2026",
36
+ views: "Vues",
37
+ yes: "Oui"
38
+ },
39
+ format: {
40
+ pointsOne: "{value} pt",
41
+ pointsOther: "{value} pts"
42
+ },
22
43
  freshness: {
23
44
  prefix: "Mis \xE0 jour",
24
45
  updated: "Mis \xE0 jour {time}"
@@ -39,6 +60,14 @@ export default defineUiToolsLocale({
39
60
  label: "Actualiser",
40
61
  off: "D\xE9sactiv\xE9e"
41
62
  },
63
+ page: {
64
+ loading: "chargement\u2026",
65
+ updated: "mis \xE0 jour"
66
+ },
67
+ series: {
68
+ add: "Ajouter",
69
+ remove: "Retirer {label}"
70
+ },
42
71
  rowActions: "Actions pour {label}",
43
72
  stat: {
44
73
  goal: "Objectif {value}"
@@ -352,7 +381,9 @@ export default defineUiToolsLocale({
352
381
  lte: "au plus"
353
382
  },
354
383
  options: {
355
- empty: "Aucune option correspondante."
384
+ empty: "Aucune option correspondante.",
385
+ loadError: "Impossible de charger les options.",
386
+ retry: "R\xE9essayer"
356
387
  },
357
388
  panel: {
358
389
  apply: "Appliquer",
@@ -78,6 +78,9 @@ export interface UiToolsTableMessages {
78
78
  };
79
79
  options: {
80
80
  empty: string;
81
+ /** Remote option pages failed to load. */
82
+ loadError: string;
83
+ retry: string;
81
84
  };
82
85
  booleans: {
83
86
  true: string;
@@ -416,6 +419,47 @@ export interface UiToolsDashboardMessages {
416
419
  auto: string;
417
420
  off: string;
418
421
  };
422
+ page: {
423
+ /** Before the time the data on screen was fetched, after the date: "updated" 3 min ago. */
424
+ updated: string;
425
+ /** While the first data loads, after the date. */
426
+ loading: string;
427
+ };
428
+ series: {
429
+ /** Button of a chart whose series a filter picks, listing the options. */
430
+ add: string;
431
+ /** Accessible name of a series chip's remove button: "Remove {label}". */
432
+ remove: string;
433
+ };
434
+ filters: {
435
+ /** Accessible name of a filter bar. */
436
+ label: string;
437
+ /** Accessible name of the view tabs. */
438
+ views: string;
439
+ /** Text of an empty selection. */
440
+ all: string;
441
+ /** Items of a boolean filter. */
442
+ yes: string;
443
+ no: string;
444
+ /** Pill text of several selected values: "{label} +{count}". */
445
+ more: string;
446
+ search: string;
447
+ empty: string;
448
+ loading: string;
449
+ loadError: string;
450
+ retry: string;
451
+ clearSelection: string;
452
+ /** Heading of the presets under a filter's options. */
453
+ presets: string;
454
+ /** Accessible name of a pill's clear button: "Clear {label}". */
455
+ clear: string;
456
+ reset: string;
457
+ };
458
+ format: {
459
+ /** Signed difference of two percentages, `Intl.PluralRules` "one" form: "{value} pt". */
460
+ pointsOne: string;
461
+ pointsOther: string;
462
+ };
419
463
  /** Accessible name of a row's `⋮` menu. */
420
464
  rowActions: string;
421
465
  alerts: {
@@ -1 +1 @@
1
- :root{--nut-scrollbar-size:11px;--nut-scrollbar-gap:3px;--nut-scrollbar-thumb:color-mix(in srgb,var(--ui-text,#1f1d1a) 18%,transparent);--nut-scrollbar-thumb-hover:color-mix(in srgb,var(--ui-text,#1f1d1a) 32%,transparent);--nut-scrollbar-thumb-active:color-mix(in srgb,var(--ui-text,#1f1d1a) 44%,transparent)}@supports not selector(::-webkit-scrollbar){*{scrollbar-color:transparent transparent;scrollbar-width:thin;transition:scrollbar-color .2s ease}:hover{scrollbar-color:var(--nut-scrollbar-thumb) transparent}}@supports selector(::-webkit-scrollbar){::-webkit-scrollbar{background:transparent;height:var(--nut-scrollbar-size);width:var(--nut-scrollbar-size)}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:transparent;border:var(--nut-scrollbar-gap) solid transparent;border-radius:999px}:hover::-webkit-scrollbar-thumb{background-color:var(--nut-scrollbar-thumb)}::-webkit-scrollbar-thumb:hover{background-color:var(--nut-scrollbar-thumb-hover)}::-webkit-scrollbar-thumb:active{background-color:var(--nut-scrollbar-thumb-active)}}
1
+ :root{--nut-scrollbar-size:11px;--nut-scrollbar-gap:3px;--nut-scrollbar-thumb:color-mix(in srgb,var(--ui-text,#1f1d1a) 18%,transparent);--nut-scrollbar-thumb-hover:color-mix(in srgb,var(--ui-text,#1f1d1a) 32%,transparent);--nut-scrollbar-thumb-active:color-mix(in srgb,var(--ui-text,#1f1d1a) 44%,transparent)}@supports (scrollbar-width:thin){*{scrollbar-color:transparent transparent;scrollbar-width:thin;transition:scrollbar-color .2s ease}:hover{scrollbar-color:var(--nut-scrollbar-thumb) transparent}}@supports not (scrollbar-width:thin){::-webkit-scrollbar{background:transparent;height:var(--nut-scrollbar-size);width:var(--nut-scrollbar-size)}::-webkit-scrollbar-corner,::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:transparent;border:var(--nut-scrollbar-gap) solid transparent;border-radius:999px}:hover::-webkit-scrollbar-thumb{background-color:var(--nut-scrollbar-thumb)}::-webkit-scrollbar-thumb:hover{background-color:var(--nut-scrollbar-thumb-hover)}::-webkit-scrollbar-thumb:active{background-color:var(--nut-scrollbar-thumb-active)}}
@@ -1 +1 @@
1
- :root{--nut-form-veil:rgba(31,29,26,.18)}.dark{--nut-form-veil:rgba(0,0,0,.45)}:where(:root){--nut-dash-s1:var(--ui-primary);--nut-dash-s2:var(--ui-color-neutral-400);--nut-dash-s3:var(--ui-secondary);--nut-dash-s4:color-mix(in oklab,var(--ui-primary) 20%,var(--ui-bg));--nut-dash-s5:var(--ui-warning);--nut-dash-s6:color-mix(in oklab,var(--ui-secondary) 35%,var(--ui-bg));--nut-dash-up:var(--ui-success);--nut-dash-up-mark:var(--nut-dash-up);--nut-dash-down:var(--ui-error);--nut-dash-muted:var(--ui-border-accented);--nut-dash-track:var(--ui-bg-elevated);--nut-dash-grid:var(--ui-border-muted);--nut-dash-axis:var(--ui-text-dimmed);--nut-dash-ref:var(--ui-text-dimmed);--nut-dash-ref-label:var(--ui-text-muted);--nut-dash-ghost:var(--ui-bg-accented);--nut-dash-ghost-shine:color-mix(in oklab,var(--ui-bg) 70%,transparent)}:where(.dark){--nut-dash-s2:var(--ui-color-neutral-500);--nut-dash-s4:color-mix(in oklab,var(--ui-primary) 30%,var(--ui-bg));--nut-dash-s6:color-mix(in oklab,var(--ui-secondary) 40%,var(--ui-bg))}@supports (color:oklch(from red l c h)){:where(:root){--nut-dash-s4:oklch(from var(--ui-primary) 0.88 calc(c * 0.45) h);--nut-dash-s6:oklch(from var(--ui-secondary) 0.8 calc(c * 0.55) h)}:where(.dark){--nut-dash-s4:oklch(from var(--ui-primary) 0.42 calc(c * 0.6) h);--nut-dash-s6:oklch(from var(--ui-secondary) 0.45 calc(c * 0.65) h)}}.nut-dash-chart{--vis-font-family:inherit;--vis-axis-tick-label-color:var(--nut-dash-axis);--vis-axis-tick-label-font-size:10px;--vis-axis-grid-color:var(--nut-dash-grid);--vis-axis-domain-color:var(--nut-dash-grid);--vis-crosshair-line-stroke-color:var(--ui-border-accented);--vis-crosshair-circle-stroke-color:var(--ui-bg);--vis-tooltip-background-color:var(--ui-bg);--vis-tooltip-border-color:var(--ui-border);--vis-tooltip-text-color:var(--ui-text);--vis-tooltip-padding:8px 10px;--vis-tooltip-border-radius:calc(var(--ui-radius)*1.5);--vis-tooltip-shadow-color:rgb(0 0 0/8%);--vis-plotline-label-font-size:10px}.nut-dash-chart--bars [data-vis-component] rect:hover{opacity:.8}.nut-dash-tip{display:flex;flex-direction:column;font-size:12px;gap:4px;min-width:9rem}.nut-dash-tip-title{color:var(--ui-text-muted);font-weight:500}.nut-dash-tip-row{align-items:center;display:flex;gap:6px}.nut-dash-tip-row i{border-radius:2px;height:8px;width:8px}.nut-dash-tip-row span{color:var(--ui-text-muted);flex:1}.nut-dash-tip-row b{font-variant-numeric:tabular-nums;font-weight:600}.nut-dash-ghost{background:var(--nut-dash-ghost)}.nut-dash-shimmer{overflow:hidden;position:relative}.nut-dash-shimmer:after{animation:nut-dash-shimmer 1.6s ease-in-out infinite;background:linear-gradient(100deg,transparent 25%,var(--nut-dash-ghost-shine) 50%,transparent 75%);content:"";inset:0;pointer-events:none;position:absolute;transform:translateX(-100%);will-change:transform}@keyframes nut-dash-shimmer{to{transform:translateX(100%)}}.nut-dash-enter{animation:nut-dash-enter .28s ease-out}@keyframes nut-dash-enter{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}.nut-dash-progress{animation:nut-dash-progress 1.1s ease-in-out infinite}@keyframes nut-dash-progress{0%{transform:translateX(-100%)}to{transform:translateX(300%)}}@media (prefers-reduced-motion:reduce){.nut-dash-shimmer:after{display:none}.nut-dash-enter{animation:none}.nut-dash-progress{animation-duration:3s}}
1
+ :root{--nut-form-veil:rgba(31,29,26,.18)}.dark{--nut-form-veil:rgba(0,0,0,.45)}:where(:root){--nut-dash-s1:var(--ui-primary);--nut-dash-s2:var(--ui-color-neutral-400);--nut-dash-s3:var(--ui-secondary);--nut-dash-s4:color-mix(in oklab,var(--ui-primary) 20%,var(--ui-bg));--nut-dash-s5:var(--ui-warning);--nut-dash-s6:color-mix(in oklab,var(--ui-secondary) 35%,var(--ui-bg));--nut-dash-up:var(--ui-success);--nut-dash-up-mark:var(--nut-dash-up);--nut-dash-down:var(--ui-error);--nut-dash-muted:var(--ui-border-accented);--nut-dash-track:var(--ui-bg-elevated);--nut-dash-grid:var(--ui-border-muted);--nut-dash-axis:var(--ui-text-dimmed);--nut-dash-ref:var(--ui-text-dimmed);--nut-dash-ref-label:var(--ui-text-muted);--nut-dash-ghost:var(--ui-bg-accented);--nut-dash-ghost-shine:color-mix(in oklab,var(--ui-bg) 70%,transparent);--nut-dash-filter-active:color-mix(in oklab,var(--ui-primary) 9%,var(--ui-bg));--nut-dash-filter-active-line:color-mix(in oklab,var(--ui-primary) 35%,var(--ui-border));--nut-dash-filter-ink:var(--nut-dl-accent-ink,var(--ui-primary));--nut-dash-row-hover:var(--ui-bg-elevated)}:where(.dark){--nut-dash-s2:var(--ui-color-neutral-500);--nut-dash-s4:color-mix(in oklab,var(--ui-primary) 30%,var(--ui-bg));--nut-dash-s6:color-mix(in oklab,var(--ui-secondary) 40%,var(--ui-bg))}@supports (color:oklch(from red l c h)){:where(:root){--nut-dash-s4:oklch(from var(--ui-primary) 0.88 calc(c * 0.45) h);--nut-dash-s6:oklch(from var(--ui-secondary) 0.8 calc(c * 0.55) h)}:where(.dark){--nut-dash-s4:oklch(from var(--ui-primary) 0.42 calc(c * 0.6) h);--nut-dash-s6:oklch(from var(--ui-secondary) 0.45 calc(c * 0.65) h)}}.nut-dash-chart{--vis-font-family:inherit;--vis-axis-tick-label-color:var(--nut-dash-axis);--vis-axis-tick-label-font-size:10px;--vis-axis-grid-color:var(--nut-dash-grid);--vis-axis-domain-color:var(--nut-dash-grid);--vis-crosshair-line-stroke-color:var(--ui-border-accented);--vis-crosshair-circle-stroke-color:var(--ui-bg);--vis-tooltip-background-color:var(--ui-bg);--vis-tooltip-border-color:var(--ui-border);--vis-tooltip-text-color:var(--ui-text);--vis-tooltip-padding:8px 10px;--vis-tooltip-border-radius:calc(var(--ui-radius)*1.5);--vis-tooltip-shadow-color:rgb(0 0 0/8%);--vis-plotline-label-font-size:10px}.nut-dash-chart--bars [data-vis-component] rect:hover{opacity:.8}.nut-dash-tip{display:flex;flex-direction:column;font-size:12px;gap:4px;min-width:9rem}.nut-dash-tip-title{color:var(--ui-text-muted);font-weight:500}.nut-dash-tip-row{align-items:center;display:flex;gap:6px}.nut-dash-tip-row i{border-radius:2px;height:8px;width:8px}.nut-dash-tip-row span{color:var(--ui-text-muted);flex:1}.nut-dash-tip-row b{font-variant-numeric:tabular-nums;font-weight:600}.nut-dash-ghost{background:var(--nut-dash-ghost)}.nut-dash-shimmer{overflow:hidden;position:relative}.nut-dash-shimmer:after{animation:nut-dash-shimmer 1.6s ease-in-out infinite;background:linear-gradient(100deg,transparent 25%,var(--nut-dash-ghost-shine) 50%,transparent 75%);content:"";inset:0;pointer-events:none;position:absolute;transform:translateX(-100%);will-change:transform}@keyframes nut-dash-shimmer{to{transform:translateX(100%)}}.nut-dash-enter{animation:nut-dash-enter .28s ease-out}@keyframes nut-dash-enter{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}.nut-dash-progress{animation:nut-dash-progress 1.1s ease-in-out infinite}@keyframes nut-dash-progress{0%{transform:translateX(-100%)}to{transform:translateX(300%)}}@media (prefers-reduced-motion:reduce){.nut-dash-shimmer:after{display:none}.nut-dash-enter{animation:none}.nut-dash-progress{animation-duration:3s}}
@@ -8,3 +8,11 @@ export type QueryDefinition<TData = unknown> = Omit<UseQueryOptions<TData>, 'que
8
8
  queryKey: QueryKey;
9
9
  queryFn?: QueryFunction<TData, QueryKey, string | null>;
10
10
  };
11
+ /**
12
+ * The smallest query definition: a key and the function that fetches it. Covariant in its data, so
13
+ * a definition of specific options fits wherever a broader option type is expected.
14
+ */
15
+ export interface QueryFnDefinition<TData = unknown> {
16
+ queryKey: QueryKey;
17
+ queryFn: QueryFunction<TData, QueryKey, string | null>;
18
+ }
@@ -0,0 +1,10 @@
1
+ import type { RemoteOptionsResult } from '../types/remote-options.js';
2
+ /** Position of a page in a remote option source: its 1-based index, and its cursor when paged by cursor. */
3
+ export interface RemoteOptionsPageParam {
4
+ index: number;
5
+ cursor: string | null;
6
+ }
7
+ /** First page of any remote option source. */
8
+ export declare const REMOTE_OPTIONS_FIRST_PAGE: RemoteOptionsPageParam;
9
+ /** Next page of a page- or cursor-paginated remote option source, or `undefined` at the end. */
10
+ export declare function resolveRemoteOptionsNextPage<TOption>(page: RemoteOptionsResult<TOption>, loadedPages: number): RemoteOptionsPageParam | undefined;
@@ -0,0 +1,6 @@
1
+ export const REMOTE_OPTIONS_FIRST_PAGE = { cursor: null, index: 1 };
2
+ export function resolveRemoteOptionsNextPage(page, loadedPages) {
3
+ if ("nextCursor" in page)
4
+ return page.nextCursor ? { cursor: page.nextCursor, index: loadedPages + 1 } : void 0;
5
+ return page.hasMore ? { cursor: null, index: loadedPages + 1 } : void 0;
6
+ }
@@ -0,0 +1,11 @@
1
+ import type { useTableFilterOptions } from '../../../composables/use-table-filter-options.js';
2
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
3
+ type __VLS_Props = {
4
+ remote: ReturnType<typeof useTableFilterOptions>['remote'];
5
+ indicator: 'checkbox' | 'radio';
6
+ size?: DataListControlSize;
7
+ ui?: DataListFilterEditorUi;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -0,0 +1,76 @@
1
+ <script setup>
2
+ import { useEventListener } from "@vueuse/core";
3
+ import { nextTick, shallowRef, watch } from "vue";
4
+ import { useUiToolsLocale } from "#ui-tools/i18n";
5
+ import FilterOptionLoadingList from "./filter-option-loading-list.vue";
6
+ const PREFETCH_VIEWPORTS = 3;
7
+ const props = defineProps({
8
+ remote: { type: null, required: true },
9
+ indicator: { type: String, required: true },
10
+ size: { type: String, required: false },
11
+ ui: { type: Object, required: false }
12
+ });
13
+ const { t } = useUiToolsLocale();
14
+ const sentinel = shallowRef(null);
15
+ const viewport = shallowRef(null);
16
+ watch(sentinel, (element) => {
17
+ viewport.value = findScrollContainer(element);
18
+ });
19
+ useEventListener(viewport, "scroll", loadAhead, { passive: true });
20
+ watch(
21
+ () => [props.remote.hasMore.value, props.remote.loadingMore.value, viewport.value],
22
+ async () => {
23
+ await nextTick();
24
+ loadAhead();
25
+ },
26
+ { immediate: true }
27
+ );
28
+ function loadAhead() {
29
+ const element = viewport.value;
30
+ const { failed, hasMore, loadingMore, prefetchDistance } = props.remote;
31
+ if (!element || element.clientHeight === 0) return;
32
+ if (!hasMore.value || loadingMore.value || failed.value) return;
33
+ const distance = prefetchDistance.value;
34
+ const threshold = distance === "viewport" ? element.clientHeight * PREFETCH_VIEWPORTS : Math.max(0, distance);
35
+ if (element.scrollHeight - element.scrollTop - element.clientHeight <= threshold) {
36
+ props.remote.loadMore();
37
+ }
38
+ }
39
+ function findScrollContainer(element) {
40
+ const marked = element?.closest("[data-filter-option-scroll]");
41
+ if (marked instanceof HTMLElement) return marked;
42
+ for (let current = element?.parentElement; current; current = current.parentElement) {
43
+ if (/(auto|scroll)/.test(getComputedStyle(current).overflowY)) return current;
44
+ }
45
+ return null;
46
+ }
47
+ </script>
48
+
49
+ <template>
50
+ <div data-filter-option-list-end>
51
+ <FilterOptionLoadingList
52
+ v-if="remote.loadingMore.value"
53
+ :count="3"
54
+ :indicator="indicator"
55
+ :size="size"
56
+ :ui="ui"
57
+ data-filter-option-loading-more
58
+ />
59
+ <div
60
+ v-else-if="remote.failed.value"
61
+ class="flex items-center justify-between gap-2 px-2 py-1.5 text-xs text-error"
62
+ data-filter-option-error
63
+ >
64
+ <span class="truncate">{{ t("table.filters.options.loadError") }}</span>
65
+ <button
66
+ type="button"
67
+ class="shrink-0 font-medium underline-offset-2 hover:underline focus-visible:underline focus-visible:outline-none"
68
+ data-filter-option-retry
69
+ @click="remote.retry()"
70
+ >
71
+ {{ t("table.filters.options.retry") }}
72
+ </button>
73
+ </div>
74
+ <span ref="sentinel" aria-hidden="true" class="block h-px w-full" />
75
+ </div>
76
+ </template>
@@ -0,0 +1,11 @@
1
+ import type { useTableFilterOptions } from '../../../composables/use-table-filter-options.js';
2
+ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types/index.js';
3
+ type __VLS_Props = {
4
+ remote: ReturnType<typeof useTableFilterOptions>['remote'];
5
+ indicator: 'checkbox' | 'radio';
6
+ size?: DataListControlSize;
7
+ ui?: DataListFilterEditorUi;
8
+ };
9
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -2,9 +2,12 @@ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types
2
2
  type __VLS_Props = {
3
3
  size?: DataListControlSize;
4
4
  indicator?: 'checkbox' | 'radio';
5
+ /** Placeholder rows. */
6
+ count?: number;
5
7
  ui?: DataListFilterEditorUi;
6
8
  };
7
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
10
+ count: number;
8
11
  indicator: "checkbox" | "radio";
9
12
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
13
  declare const _default: typeof __VLS_export;
@@ -6,6 +6,7 @@ import { mergeDataListUiClass, resolveFilterEditorSizeClasses } from "../../../u
6
6
  const props = defineProps({
7
7
  size: { type: String, required: false },
8
8
  indicator: { type: String, required: false, default: "radio" },
9
+ count: { type: Number, required: false, default: 5 },
9
10
  ui: { type: Object, required: false }
10
11
  });
11
12
  const dataListUi = useDataListUi();
@@ -18,7 +19,7 @@ const sizeClasses = computed(() => resolveFilterEditorSizeClasses(resolvedSize.v
18
19
  <template>
19
20
  <div :class="mergeDataListUiClass('grid gap-0.5', void 0, ui?.list)">
20
21
  <div
21
- v-for="index in 5"
22
+ v-for="index in props.count"
22
23
  :key="index"
23
24
  :class="
24
25
  mergeDataListUiClass(
@@ -2,9 +2,12 @@ import type { DataListControlSize, DataListFilterEditorUi } from '../../../types
2
2
  type __VLS_Props = {
3
3
  size?: DataListControlSize;
4
4
  indicator?: 'checkbox' | 'radio';
5
+ /** Placeholder rows. */
6
+ count?: number;
5
7
  ui?: DataListFilterEditorUi;
6
8
  };
7
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
10
+ count: number;
8
11
  indicator: "checkbox" | "radio";
9
12
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
13
  declare const _default: typeof __VLS_export;
@@ -100,7 +100,7 @@ const geometry = computed(() => resolveDataListControlGeometry(size.value));
100
100
  </button>
101
101
 
102
102
  <USkeleton
103
- v-if="props.showCounts && props.countLoading"
103
+ v-if="props.showCounts && (props.countLoading || entry.count == null)"
104
104
  :class="[sizeClasses.skeletonCount, 'shrink-0 rounded-full']"
105
105
  />
106
106
  <span
@@ -1,5 +1,6 @@
1
1
  <script setup>
2
2
  import { isNullish } from "../../../../shared/utils/predicate";
3
+ import FilterOptionListEnd from "./filter-option-list-end.vue";
3
4
  import FilterOptionLoadingList from "./filter-option-loading-list.vue";
4
5
  import FilterOptionMultipleList from "./filter-option-multiple-list.vue";
5
6
  import FilterOptionSingleList from "./filter-option-single-list.vue";
@@ -105,5 +106,17 @@ function handleSelect(options) {
105
106
  :ui="props.ui"
106
107
  />
107
108
  </template>
109
+
110
+ <FilterOptionListEnd
111
+ v-if="
112
+ props.state.optionSource.remote.enabled.value && !props.state.optionSource.isLoading.value
113
+ "
114
+ :remote="props.state.optionSource.remote"
115
+ :indicator="
116
+ props.state.filterUi.value.selection.mode === 'multiple' || props.state.filterUi.value.presentation === 'tree' ? 'checkbox' : 'radio'
117
+ "
118
+ :size="props.size"
119
+ :ui="props.ui"
120
+ />
108
121
  </FilterSearchablePanel>
109
122
  </template>
@@ -4,6 +4,8 @@ type __VLS_Props = {
4
4
  label: string;
5
5
  value: string;
6
6
  count?: number;
7
+ /** Counts are shown but this option's is not known yet. */
8
+ countPending?: boolean;
7
9
  icon?: string;
8
10
  truncate?: boolean;
9
11
  }[];
@@ -71,7 +71,7 @@ const modelValue = defineModel({ type: null, ...{
71
71
  {{ item.label }}
72
72
  </span>
73
73
  <USkeleton
74
- v-if="countLoading"
74
+ v-if="countLoading || item.countPending"
75
75
  :class="[sizeClasses.skeletonCount, 'shrink-0 rounded-full']"
76
76
  />
77
77
  <span v-else-if="item.count != null" class="shrink-0 text-muted">
@@ -4,6 +4,8 @@ type __VLS_Props = {
4
4
  label: string;
5
5
  value: string;
6
6
  count?: number;
7
+ /** Counts are shown but this option's is not known yet. */
8
+ countPending?: boolean;
7
9
  icon?: string;
8
10
  truncate?: boolean;
9
11
  }[];
@@ -4,6 +4,8 @@ interface TreeEntry {
4
4
  label: string;
5
5
  value?: string | number | boolean;
6
6
  count?: number;
7
+ /** Counts are shown but this option's is not known yet. */
8
+ countPending?: boolean;
7
9
  icon?: string;
8
10
  depth: number;
9
11
  expandable: boolean;
@@ -21,6 +23,7 @@ type __VLS_Props = {
21
23
  label: string;
22
24
  value: string;
23
25
  count?: number;
26
+ countPending?: boolean;
24
27
  icon?: string;
25
28
  truncate?: boolean;
26
29
  depth: number;
@@ -138,7 +138,7 @@ function activateTreeEntry(entry) {
138
138
  </button>
139
139
 
140
140
  <USkeleton
141
- v-if="countLoading"
141
+ v-if="countLoading || entry.countPending"
142
142
  :class="[sizeClasses.skeletonCount, 'shrink-0 rounded-full']"
143
143
  />
144
144
  <span
@@ -210,7 +210,7 @@ function activateTreeEntry(entry) {
210
210
  {{ item.label }}
211
211
  </span>
212
212
  <USkeleton
213
- v-if="countLoading"
213
+ v-if="countLoading || item.countPending"
214
214
  :class="[sizeClasses.skeletonCount, 'shrink-0 rounded-full']"
215
215
  />
216
216
  <span v-else-if="item.count != null" class="shrink-0 text-muted">
@@ -4,6 +4,8 @@ interface TreeEntry {
4
4
  label: string;
5
5
  value?: string | number | boolean;
6
6
  count?: number;
7
+ /** Counts are shown but this option's is not known yet. */
8
+ countPending?: boolean;
7
9
  icon?: string;
8
10
  depth: number;
9
11
  expandable: boolean;
@@ -21,6 +23,7 @@ type __VLS_Props = {
21
23
  label: string;
22
24
  value: string;
23
25
  count?: number;
26
+ countPending?: boolean;
24
27
  icon?: string;
25
28
  truncate?: boolean;
26
29
  depth: number;
@@ -59,6 +59,7 @@ const sizeClasses = computed(() => resolveFilterEditorSizeClasses(size));
59
59
  </div>
60
60
 
61
61
  <UScrollArea
62
+ data-filter-option-scroll
62
63
  type="hover"
63
64
  :class="
64
65
  mergeDataListUiClass(
@@ -30,6 +30,7 @@ export declare function useOptionFilterEditorState(options: UseOptionFilterEdito
30
30
  flatRadioItems: ComputedRef<{
31
31
  color: string | undefined;
32
32
  count: number | undefined;
33
+ countPending: boolean;
33
34
  icon: string | undefined;
34
35
  label: string;
35
36
  truncate: boolean;
@@ -47,7 +48,16 @@ export declare function useOptionFilterEditorState(options: UseOptionFilterEdito
47
48
  isError: ComputedRef<boolean>;
48
49
  isLoading: ComputedRef<boolean>;
49
50
  isStaleLoading: ComputedRef<boolean>;
50
- refresh: () => Promise<[import("@tanstack/vue-query").QueryObserverResult<TableFilterOptionEntry[] | import("../types/index.js").TableFilterOptionQueryResult, Error>, import("@tanstack/vue-query").QueryObserverResult<import("../types/index.js").TableFacetExecutionResult<string, unknown>, Error>]>;
51
+ refresh: () => Promise<[import("@tanstack/vue-query").QueryObserverResult<import("@tanstack/vue-query").InfiniteData<import("../../shared/index.js").RemoteOptionsPage<TableFilterOptionEntry> | import("../../shared/index.js").RemoteCursorOptionsPage<TableFilterOptionEntry>, import("../../shared/utils/remote-options.js").RemoteOptionsPageParam>, Error> | import("@tanstack/vue-query").QueryObserverResult<TableFilterOptionEntry[] | import("../types/index.js").TableFilterOptionQueryResult, Error>, import("@tanstack/vue-query").QueryObserverResult<import("../types/index.js").TableFacetExecutionResult<string, unknown>, Error>]>;
52
+ remote: {
53
+ enabled: ComputedRef<boolean>;
54
+ failed: ComputedRef<boolean>;
55
+ hasMore: ComputedRef<boolean>;
56
+ loadMore: () => void;
57
+ loadingMore: ComputedRef<boolean>;
58
+ prefetchDistance: ComputedRef<number | "viewport">;
59
+ retry: () => Promise<import("@tanstack/vue-query").QueryObserverResult<import("@tanstack/vue-query").InfiniteData<import("../../shared/index.js").RemoteOptionsPage<TableFilterOptionEntry> | import("../../shared/index.js").RemoteCursorOptionsPage<TableFilterOptionEntry>, import("../../shared/utils/remote-options.js").RemoteOptionsPageParam>, Error>>;
60
+ };
51
61
  searchExpandedIds: ComputedRef<string[]>;
52
62
  showCounts: ComputedRef<boolean>;
53
63
  sourceEntries: ComputedRef<(TableResolvedFilterOptionEntry<import("../types/index.js").TableFilterPrimitiveValue> & {
@@ -68,6 +78,7 @@ export declare function useOptionFilterEditorState(options: UseOptionFilterEdito
68
78
  treeRadioItems: ComputedRef<{
69
79
  color: string | undefined;
70
80
  count: number | undefined;
81
+ countPending: boolean;
71
82
  depth: number;
72
83
  disabled: boolean;
73
84
  expandable: boolean;
@@ -82,6 +93,7 @@ export declare function useOptionFilterEditorState(options: UseOptionFilterEdito
82
93
  treeRadioValue: import("vue").WritableComputedRef<string | undefined, string | undefined>;
83
94
  triggerSummary: ComputedRef<string>;
84
95
  visibleTreeEntries: ComputedRef<{
96
+ countPending: boolean;
85
97
  expanded: boolean;
86
98
  indeterminate: boolean;
87
99
  id: string;
@@ -88,6 +88,7 @@ export function useOptionFilterEditorState(options) {
88
88
  if (!entry.branchSelectable) {
89
89
  return {
90
90
  ...entry,
91
+ countPending: optionSource.showCounts.value && isNullish(entry.count),
91
92
  expanded: effectiveExpandedIds.value.has(entry.id),
92
93
  indeterminate: false
93
94
  };
@@ -102,6 +103,7 @@ export function useOptionFilterEditorState(options) {
102
103
  ).length;
103
104
  return {
104
105
  ...entry,
106
+ countPending: optionSource.showCounts.value && isNullish(entry.count),
105
107
  expanded: effectiveExpandedIds.value.has(entry.id),
106
108
  indeterminate: selectedCount > 0 && selectedCount < descendantValues.length,
107
109
  selected: descendantValues.length > 0 && selectedCount === descendantValues.length
@@ -111,7 +113,8 @@ export function useOptionFilterEditorState(options) {
111
113
  const flatRadioItems = computed(
112
114
  () => displayEntries.value.map((entry) => ({
113
115
  color: entry.color,
114
- count: optionSource.showCounts.value ? entry.count ?? 0 : void 0,
116
+ count: optionSource.showCounts.value ? entry.count : void 0,
117
+ countPending: optionSource.showCounts.value && isNullish(entry.count),
115
118
  icon: entry.icon,
116
119
  label: entry.label,
117
120
  truncate: filterUi.value.row.truncate,
@@ -134,7 +137,8 @@ export function useOptionFilterEditorState(options) {
134
137
  const treeRadioItems = computed(
135
138
  () => visibleTreeEntries.value.map((entry) => ({
136
139
  color: entry.color,
137
- count: optionSource.showCounts.value ? entry.count ?? 0 : void 0,
140
+ count: optionSource.showCounts.value ? entry.count : void 0,
141
+ countPending: optionSource.showCounts.value && isNullish(entry.count),
138
142
  depth: entry.depth,
139
143
  disabled: !entry.selectable,
140
144
  expandable: entry.expandable,
@@ -22,7 +22,17 @@ export declare function useTableFilterOptions(options: UseTableFilterOptionsPara
22
22
  isError: ComputedRef<boolean>;
23
23
  isLoading: ComputedRef<boolean>;
24
24
  isStaleLoading: ComputedRef<boolean>;
25
- refresh: () => Promise<[import("@tanstack/vue-query").QueryObserverResult<TableFilterOptionEntry[] | TableFilterOptionQueryResult, Error>, import("@tanstack/vue-query").QueryObserverResult<TableFacetExecutionResult<string, unknown>, Error>]>;
25
+ refresh: () => Promise<[import("@tanstack/vue-query").QueryObserverResult<import("@tanstack/vue-query").InfiniteData<import("../../shared/index.js").RemoteOptionsPage<TableFilterOptionEntry> | import("../../shared/index.js").RemoteCursorOptionsPage<TableFilterOptionEntry>, import("../../shared/utils/remote-options.js").RemoteOptionsPageParam>, Error> | import("@tanstack/vue-query").QueryObserverResult<TableFilterOptionEntry[] | TableFilterOptionQueryResult, Error>, import("@tanstack/vue-query").QueryObserverResult<TableFacetExecutionResult<string, unknown>, Error>]>;
26
+ /** Paging of `source.remote`: the editor list loads the next page ahead of the scroll. */
27
+ remote: {
28
+ enabled: ComputedRef<boolean>;
29
+ failed: ComputedRef<boolean>;
30
+ hasMore: ComputedRef<boolean>;
31
+ loadMore: () => void;
32
+ loadingMore: ComputedRef<boolean>;
33
+ prefetchDistance: ComputedRef<number | "viewport">;
34
+ retry: () => Promise<import("@tanstack/vue-query").QueryObserverResult<import("@tanstack/vue-query").InfiniteData<import("../../shared/index.js").RemoteOptionsPage<TableFilterOptionEntry> | import("../../shared/index.js").RemoteCursorOptionsPage<TableFilterOptionEntry>, import("../../shared/utils/remote-options.js").RemoteOptionsPageParam>, Error>>;
35
+ };
26
36
  searchExpandedIds: ComputedRef<string[]>;
27
37
  showCounts: ComputedRef<boolean>;
28
38
  sourceEntries: ComputedRef<(TableResolvedFilterOptionEntry<import("../types/index.js").TableFilterPrimitiveValue> & {