@atscript/vue-table 0.1.58

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 (202) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/as-action-form-dialog.cjs +221 -0
  4. package/dist/as-action-form-dialog.d.cts +6 -0
  5. package/dist/as-action-form-dialog.d.mts +7 -0
  6. package/dist/as-action-form-dialog.mjs +221 -0
  7. package/dist/as-action-menu-content-CXsdPn42.mjs +104 -0
  8. package/dist/as-action-menu-content-CyUfBrWH.cjs +109 -0
  9. package/dist/as-cell-array-CXeZzZqt.cjs +69 -0
  10. package/dist/as-cell-array-DOQKR6t5.mjs +64 -0
  11. package/dist/as-cell-array.cjs +3 -0
  12. package/dist/as-cell-array.d.cts +2 -0
  13. package/dist/as-cell-array.d.mts +2 -0
  14. package/dist/as-cell-array.mjs +3 -0
  15. package/dist/as-cell-array.vue-DZGM2VHh.d.mts +12 -0
  16. package/dist/as-cell-array.vue-pFs5GcCR.d.cts +12 -0
  17. package/dist/as-cell-date-CTrvxS1h.cjs +78 -0
  18. package/dist/as-cell-date-Cq49RHmL.mjs +73 -0
  19. package/dist/as-cell-date.cjs +3 -0
  20. package/dist/as-cell-date.d.cts +2 -0
  21. package/dist/as-cell-date.d.mts +2 -0
  22. package/dist/as-cell-date.mjs +3 -0
  23. package/dist/as-cell-date.vue-BBSps2B2.d.cts +12 -0
  24. package/dist/as-cell-date.vue-Zlt4mHWb.d.mts +12 -0
  25. package/dist/as-cell-json-BynWIs1d.mjs +37 -0
  26. package/dist/as-cell-json-DvHvQ6IL.cjs +42 -0
  27. package/dist/as-cell-json-popover-BWdNs1YU.cjs +70 -0
  28. package/dist/as-cell-json-popover-DUq25I0L.mjs +65 -0
  29. package/dist/as-cell-json.cjs +3 -0
  30. package/dist/as-cell-json.d.cts +2 -0
  31. package/dist/as-cell-json.d.mts +2 -0
  32. package/dist/as-cell-json.mjs +3 -0
  33. package/dist/as-cell-json.vue-C6wg4ARZ.d.cts +12 -0
  34. package/dist/as-cell-json.vue-CESWuCer.d.mts +12 -0
  35. package/dist/as-cell-number-0_WrSCzu.cjs +76 -0
  36. package/dist/as-cell-number-Bc1C97Vg.mjs +71 -0
  37. package/dist/as-cell-number.cjs +3 -0
  38. package/dist/as-cell-number.d.cts +2 -0
  39. package/dist/as-cell-number.d.mts +2 -0
  40. package/dist/as-cell-number.mjs +3 -0
  41. package/dist/as-cell-number.vue-1Oq7nVI3.d.mts +12 -0
  42. package/dist/as-cell-number.vue-CJ2K5zeM.d.cts +12 -0
  43. package/dist/as-cell-union-C1w3B38J.mjs +88 -0
  44. package/dist/as-cell-union-CFAI0utz.cjs +93 -0
  45. package/dist/as-cell-union.cjs +4 -0
  46. package/dist/as-cell-union.d.cts +2 -0
  47. package/dist/as-cell-union.d.mts +2 -0
  48. package/dist/as-cell-union.mjs +4 -0
  49. package/dist/as-cell-union.vue-CslPM_c2.d.cts +12 -0
  50. package/dist/as-cell-union.vue-NnDmQZOA.d.mts +12 -0
  51. package/dist/as-column-menu-CH9Htz0Q.cjs +220 -0
  52. package/dist/as-column-menu-DCfhorMP.mjs +215 -0
  53. package/dist/as-column-menu.cjs +2 -0
  54. package/dist/as-column-menu.d.cts +2 -0
  55. package/dist/as-column-menu.d.mts +2 -0
  56. package/dist/as-column-menu.mjs +2 -0
  57. package/dist/as-column-menu.vue-C9e6wJ3z.d.mts +47 -0
  58. package/dist/as-column-menu.vue-o0qFdzoL.d.cts +47 -0
  59. package/dist/as-config-dialog-d2k7_l0U.cjs +699 -0
  60. package/dist/as-config-dialog-vRklaKbi.mjs +688 -0
  61. package/dist/as-config-dialog.cjs +3 -0
  62. package/dist/as-config-dialog.d.cts +2 -0
  63. package/dist/as-config-dialog.d.mts +2 -0
  64. package/dist/as-config-dialog.mjs +3 -0
  65. package/dist/as-config-dialog.vue-C6Q62xF5.d.mts +7 -0
  66. package/dist/as-config-dialog.vue-DvvJi3xx.d.cts +7 -0
  67. package/dist/as-confirm-dialog-BLh3Ju4-.mjs +52 -0
  68. package/dist/as-confirm-dialog-BgpIEE2z.cjs +57 -0
  69. package/dist/as-confirm-dialog.cjs +3 -0
  70. package/dist/as-confirm-dialog.d.cts +2 -0
  71. package/dist/as-confirm-dialog.d.mts +2 -0
  72. package/dist/as-confirm-dialog.mjs +3 -0
  73. package/dist/as-confirm-dialog.vue-CXxLpzbu.d.cts +7 -0
  74. package/dist/as-confirm-dialog.vue-pas8jGhv.d.mts +7 -0
  75. package/dist/as-filter-dialog-C0HMpUPT.mjs +610 -0
  76. package/dist/as-filter-dialog-DcGvIV3h.cjs +621 -0
  77. package/dist/as-filter-dialog.cjs +15 -0
  78. package/dist/as-filter-dialog.d.cts +2 -0
  79. package/dist/as-filter-dialog.d.mts +2 -0
  80. package/dist/as-filter-dialog.mjs +15 -0
  81. package/dist/as-filter-dialog.vue-BV2J8PgZ.d.cts +7 -0
  82. package/dist/as-filter-dialog.vue-RDZjp4gJ.d.mts +7 -0
  83. package/dist/as-filter-field-B_tYzvvl.cjs +984 -0
  84. package/dist/as-filter-field-Bqvu2ASN.mjs +943 -0
  85. package/dist/as-filter-field.cjs +9 -0
  86. package/dist/as-filter-field.d.cts +2 -0
  87. package/dist/as-filter-field.d.mts +2 -0
  88. package/dist/as-filter-field.mjs +9 -0
  89. package/dist/as-filter-field.vue-ByQ8xIGq.d.cts +11 -0
  90. package/dist/as-filter-field.vue-QY8wi5S5.d.mts +11 -0
  91. package/dist/as-filter-input--nr72iwX.cjs +106 -0
  92. package/dist/as-filter-input-P1i0CW2-.mjs +101 -0
  93. package/dist/as-filter-input.cjs +2 -0
  94. package/dist/as-filter-input.d.cts +2 -0
  95. package/dist/as-filter-input.d.mts +2 -0
  96. package/dist/as-filter-input.mjs +2 -0
  97. package/dist/as-filter-input.vue-CBQ71eNg.d.mts +18 -0
  98. package/dist/as-filter-input.vue-CS4nOk_Q.d.cts +18 -0
  99. package/dist/as-filters-Bxa9ZEMm.mjs +44 -0
  100. package/dist/as-filters-xRT2qv56.cjs +49 -0
  101. package/dist/as-filters.cjs +10 -0
  102. package/dist/as-filters.d.cts +2 -0
  103. package/dist/as-filters.d.mts +2 -0
  104. package/dist/as-filters.mjs +10 -0
  105. package/dist/as-filters.vue-BsMgYUcX.d.mts +10 -0
  106. package/dist/as-filters.vue-fv-tRL2H.d.cts +10 -0
  107. package/dist/as-preset-dialog-BaTfwMnh.cjs +569 -0
  108. package/dist/as-preset-dialog-BdDRgwf_.mjs +564 -0
  109. package/dist/as-preset-dialog.cjs +4 -0
  110. package/dist/as-preset-dialog.d.cts +2 -0
  111. package/dist/as-preset-dialog.d.mts +2 -0
  112. package/dist/as-preset-dialog.mjs +4 -0
  113. package/dist/as-preset-dialog.vue-Bzv-ON9W.d.mts +7 -0
  114. package/dist/as-preset-dialog.vue-DP9fy00Y.d.cts +7 -0
  115. package/dist/as-preset-picker-BQbNEiy9.mjs +427 -0
  116. package/dist/as-preset-picker-Ce3crTQy.cjs +432 -0
  117. package/dist/as-preset-picker.cjs +4 -0
  118. package/dist/as-preset-picker.d.cts +2 -0
  119. package/dist/as-preset-picker.d.mts +2 -0
  120. package/dist/as-preset-picker.mjs +4 -0
  121. package/dist/as-preset-picker.vue-CTBk6leV.d.mts +7 -0
  122. package/dist/as-preset-picker.vue-DfXS3pGl.d.cts +7 -0
  123. package/dist/as-row-actions-B6Kob6gt.cjs +120 -0
  124. package/dist/as-row-actions-CeWBBGqh.mjs +115 -0
  125. package/dist/as-row-actions.cjs +4 -0
  126. package/dist/as-row-actions.d.cts +2 -0
  127. package/dist/as-row-actions.d.mts +2 -0
  128. package/dist/as-row-actions.mjs +4 -0
  129. package/dist/as-row-actions.vue-BPaQfGev.d.mts +11 -0
  130. package/dist/as-row-actions.vue-Bvcc2tUN.d.cts +11 -0
  131. package/dist/as-table-Cnw2fOqZ.mjs +204 -0
  132. package/dist/as-table-DlDFxdXI.cjs +209 -0
  133. package/dist/as-table-actions-BK1Thy2G.cjs +142 -0
  134. package/dist/as-table-actions-BpMiNFni.mjs +137 -0
  135. package/dist/as-table-actions.cjs +4 -0
  136. package/dist/as-table-actions.d.cts +2 -0
  137. package/dist/as-table-actions.d.mts +2 -0
  138. package/dist/as-table-actions.mjs +4 -0
  139. package/dist/as-table-actions.vue-B7Q-JA3z.d.cts +47 -0
  140. package/dist/as-table-actions.vue-Bs1Jl1ep.d.mts +47 -0
  141. package/dist/as-table-base-D0k4k7k_.mjs +646 -0
  142. package/dist/as-table-base-VIz-B_6_.cjs +651 -0
  143. package/dist/as-table-cell-value-B1CiJYFn.mjs +26 -0
  144. package/dist/as-table-cell-value-CuxRtFn9.cjs +31 -0
  145. package/dist/as-table-cell-value.cjs +3 -0
  146. package/dist/as-table-cell-value.d.cts +2 -0
  147. package/dist/as-table-cell-value.d.mts +2 -0
  148. package/dist/as-table-cell-value.mjs +3 -0
  149. package/dist/as-table-cell-value.vue-BgFDv2JQ.d.cts +12 -0
  150. package/dist/as-table-cell-value.vue-BuPCQ8YA.d.mts +12 -0
  151. package/dist/as-table-header-cell-C3zeZUZo.cjs +117 -0
  152. package/dist/as-table-header-cell-CBn_ioCe.mjs +112 -0
  153. package/dist/as-table-header-cell.cjs +3 -0
  154. package/dist/as-table-header-cell.d.cts +2 -0
  155. package/dist/as-table-header-cell.d.mts +2 -0
  156. package/dist/as-table-header-cell.mjs +3 -0
  157. package/dist/as-table-header-cell.vue-Bc_DSsGY.d.cts +31 -0
  158. package/dist/as-table-header-cell.vue-DNMOHfek.d.mts +31 -0
  159. package/dist/as-table-root-Br6WcGRo.cjs +263 -0
  160. package/dist/as-table-root-gG7pTIdD.mjs +258 -0
  161. package/dist/as-table-root.cjs +28 -0
  162. package/dist/as-table-root.d.cts +2 -0
  163. package/dist/as-table-root.d.mts +2 -0
  164. package/dist/as-table-root.mjs +28 -0
  165. package/dist/as-table-root.vue-5_OhVwse.d.mts +2258 -0
  166. package/dist/as-table-root.vue-CSqEtIll.d.cts +2258 -0
  167. package/dist/as-table-status-BjRGGuhC.mjs +683 -0
  168. package/dist/as-table-status-DWYoJIMC.cjs +724 -0
  169. package/dist/as-table.cjs +10 -0
  170. package/dist/as-table.d.cts +2 -0
  171. package/dist/as-table.d.mts +2 -0
  172. package/dist/as-table.mjs +10 -0
  173. package/dist/as-table.vue-BTYg-e3Z.d.mts +81 -0
  174. package/dist/as-table.vue-wdRARLIe.d.cts +81 -0
  175. package/dist/as-window-table-CKIfo3M_.mjs +709 -0
  176. package/dist/as-window-table-DE7_NyEP.cjs +714 -0
  177. package/dist/as-window-table.cjs +9 -0
  178. package/dist/as-window-table.d.cts +2 -0
  179. package/dist/as-window-table.d.mts +2 -0
  180. package/dist/as-window-table.mjs +9 -0
  181. package/dist/as-window-table.vue-Bf8xGC9M.d.mts +86 -0
  182. package/dist/as-window-table.vue-CA8qsrz4.d.cts +86 -0
  183. package/dist/format-cell-B2xMDYO9.mjs +27 -0
  184. package/dist/format-cell-D4mqaN0E.cjs +32 -0
  185. package/dist/get-cell-value-CZSVfDLg.cjs +19 -0
  186. package/dist/get-cell-value-DiH84HKL.mjs +14 -0
  187. package/dist/index.cjs +598 -0
  188. package/dist/index.d.cts +21 -0
  189. package/dist/index.d.mts +21 -0
  190. package/dist/index.mjs +505 -0
  191. package/dist/preset-aspect-display-BYeiSgcc.mjs +43 -0
  192. package/dist/preset-aspect-display-y8aal_EF.cjs +72 -0
  193. package/dist/types-BvvXN72P.d.mts +531 -0
  194. package/dist/types-CNMmF6W2.d.cts +531 -0
  195. package/dist/use-cell-locale-1uQaFTLQ.mjs +23 -0
  196. package/dist/use-cell-locale-B480_QYK.cjs +34 -0
  197. package/dist/use-table-column-handlers-CGYAY2xH.cjs +65 -0
  198. package/dist/use-table-column-handlers-t6xi1yCE.mjs +54 -0
  199. package/dist/use-table-state-C4JbonEZ.mjs +1822 -0
  200. package/dist/use-table-state-MU-vuzui.cjs +1917 -0
  201. package/package.json +195 -0
  202. package/styles.d.ts +2 -0
@@ -0,0 +1,651 @@
1
+ const require_use_table_state = require("./use-table-state-MU-vuzui.cjs");
2
+ const require_as_table_status = require("./as-table-status-DWYoJIMC.cjs");
3
+ const require_get_cell_value = require("./get-cell-value-CZSVfDLg.cjs");
4
+ let vue = require("vue");
5
+ let _atscript_ui_table = require("@atscript/ui-table");
6
+ let _vueuse_core = require("@vueuse/core");
7
+ let reka_ui = require("reka-ui");
8
+ let _tanstack_vue_virtual = require("@tanstack/vue-virtual");
9
+ //#region src/components/internal/as-table-virtualizer.vue?vue&type=script&setup=true&lang.ts
10
+ const _hoisted_1$1 = {
11
+ key: 0,
12
+ "aria-hidden": "true"
13
+ };
14
+ const _hoisted_2$1 = {
15
+ key: 1,
16
+ "aria-hidden": "true"
17
+ };
18
+ //#endregion
19
+ //#region src/components/internal/as-table-virtualizer.vue
20
+ var as_table_virtualizer_default = /* @__PURE__ */ (0, vue.defineComponent)({
21
+ __name: "as-table-virtualizer",
22
+ props: {
23
+ options: {
24
+ type: Array,
25
+ required: true
26
+ },
27
+ estimateSize: {
28
+ type: Number,
29
+ required: false,
30
+ default: 40
31
+ },
32
+ overscan: {
33
+ type: Number,
34
+ required: false,
35
+ default: 5
36
+ },
37
+ bypass: {
38
+ type: Boolean,
39
+ required: false
40
+ },
41
+ scrollPaddingStart: {
42
+ type: Number,
43
+ required: false,
44
+ default: 0
45
+ }
46
+ },
47
+ setup(__props, { expose: __expose }) {
48
+ const props = __props;
49
+ const parentEl = (0, _vueuse_core.useParentElement)();
50
+ const virtualizer = (0, _tanstack_vue_virtual.useVirtualizer)({
51
+ get count() {
52
+ return props.options.length;
53
+ },
54
+ estimateSize() {
55
+ return props.estimateSize;
56
+ },
57
+ getScrollElement() {
58
+ return parentEl.value?.closest("[data-virtual-scroll]");
59
+ },
60
+ overscan: props.overscan,
61
+ get scrollPaddingStart() {
62
+ return props.scrollPaddingStart;
63
+ }
64
+ });
65
+ const virtualItems = (0, vue.computed)(() => virtualizer.value.getVirtualItems());
66
+ const tailFillCount = (0, vue.computed)(() => {
67
+ const items = virtualItems.value;
68
+ if (items.length === 0) return 0;
69
+ const last = items[items.length - 1];
70
+ const remaining = props.options.length - 1 - last.index;
71
+ if (remaining <= 0 || remaining > props.overscan) return 0;
72
+ return virtualizer.value.getTotalSize() - last.end <= (remaining + 1) * props.estimateSize ? remaining : 0;
73
+ });
74
+ const virtualizedItems = (0, vue.computed)(() => {
75
+ const items = virtualItems.value;
76
+ if (tailFillCount.value === 0) return items.map((vItem) => ({
77
+ item: props.options[vItem.index],
78
+ index: vItem.index
79
+ }));
80
+ const result = [];
81
+ for (const vItem of items) result.push({
82
+ item: props.options[vItem.index],
83
+ index: vItem.index
84
+ });
85
+ const start = items[items.length - 1].index + 1;
86
+ for (let i = start; i < props.options.length; i++) result.push({
87
+ item: props.options[i],
88
+ index: i
89
+ });
90
+ return result;
91
+ });
92
+ const paddingTop = (0, vue.computed)(() => {
93
+ const items = virtualItems.value;
94
+ if (items.length >= props.options.length) return 0;
95
+ return items[0]?.start ?? 0;
96
+ });
97
+ const paddingBottom = (0, vue.computed)(() => {
98
+ const items = virtualItems.value;
99
+ if (items.length === 0) return 0;
100
+ if (items.length + tailFillCount.value >= props.options.length) return 0;
101
+ return virtualizer.value.getTotalSize() - items[items.length - 1].end;
102
+ });
103
+ __expose({ scrollToIndex(index, opts) {
104
+ if (props.bypass) return;
105
+ virtualizer.value.scrollToIndex(index, { align: opts?.align ?? "auto" });
106
+ } });
107
+ return (_ctx, _cache) => {
108
+ return __props.bypass ? ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(reka_ui.Primitive), { key: 0 }, {
109
+ default: (0, vue.withCtx)(() => [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(__props.options, (item, index) => {
110
+ return (0, vue.renderSlot)(_ctx.$slots, "default", (0, vue.mergeProps)({ key: index }, { ref_for: true }, {
111
+ item,
112
+ index,
113
+ spaceBefore: void 0
114
+ }));
115
+ }), 128))]),
116
+ _: 3
117
+ })) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(reka_ui.Primitive), { key: 1 }, {
118
+ default: (0, vue.withCtx)(() => [
119
+ paddingTop.value > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("tr", _hoisted_1$1, [(0, vue.createElementVNode)("td", { style: (0, vue.normalizeStyle)({
120
+ height: `${paddingTop.value}px`,
121
+ padding: "0",
122
+ border: "none"
123
+ }) }, null, 4)])) : (0, vue.createCommentVNode)("v-if", true),
124
+ ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)(virtualizedItems.value, (vItem) => {
125
+ return (0, vue.renderSlot)(_ctx.$slots, "default", (0, vue.mergeProps)({ key: vItem.index }, { ref_for: true }, {
126
+ item: vItem.item,
127
+ index: vItem.index,
128
+ spaceBefore: void 0
129
+ }));
130
+ }), 128)),
131
+ paddingBottom.value > 0 ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("tr", _hoisted_2$1, [(0, vue.createElementVNode)("td", { style: (0, vue.normalizeStyle)({
132
+ height: `${paddingBottom.value}px`,
133
+ padding: "0",
134
+ border: "none"
135
+ }) }, null, 4)])) : (0, vue.createCommentVNode)("v-if", true)
136
+ ]),
137
+ _: 3
138
+ }));
139
+ };
140
+ }
141
+ });
142
+ //#endregion
143
+ //#region src/components/internal/as-table-base.vue?vue&type=script&setup=true&lang.ts
144
+ const _hoisted_1 = [
145
+ "role",
146
+ "aria-rowcount",
147
+ "aria-multiselectable"
148
+ ];
149
+ const _hoisted_2 = {
150
+ key: 0,
151
+ class: "as-td-select"
152
+ };
153
+ const _hoisted_3 = { class: "as-table-checkbox" };
154
+ const _hoisted_4 = { key: 0 };
155
+ const _hoisted_5 = {
156
+ key: 3,
157
+ class: "as-td-filler"
158
+ };
159
+ const _hoisted_6 = [
160
+ "id",
161
+ "aria-rowindex",
162
+ "aria-selected",
163
+ "onClick",
164
+ "onDblclick"
165
+ ];
166
+ const _hoisted_7 = {
167
+ key: 0,
168
+ class: "as-td-select",
169
+ role: "gridcell"
170
+ };
171
+ const _hoisted_8 = {
172
+ key: 0,
173
+ class: "as-table-checkbox-tick",
174
+ "aria-hidden": "true"
175
+ };
176
+ const _hoisted_9 = {
177
+ key: 0,
178
+ role: "gridcell"
179
+ };
180
+ const _hoisted_10 = {
181
+ key: 3,
182
+ class: "as-td-filler",
183
+ role: "gridcell"
184
+ };
185
+ const SCROLL_TOL = 1.5;
186
+ //#endregion
187
+ //#region src/components/internal/as-table-base.vue
188
+ var as_table_base_default = /* @__PURE__ */ (0, vue.defineComponent)({
189
+ __name: "as-table-base",
190
+ props: {
191
+ columns: {
192
+ type: Array,
193
+ required: true
194
+ },
195
+ rows: {
196
+ type: Array,
197
+ required: true
198
+ },
199
+ sorters: {
200
+ type: Array,
201
+ required: true
202
+ },
203
+ selectedRows: {
204
+ type: Array,
205
+ required: false
206
+ },
207
+ select: {
208
+ type: String,
209
+ required: false,
210
+ default: "none"
211
+ },
212
+ renderMode: {
213
+ type: String,
214
+ required: false,
215
+ default: "standalone"
216
+ },
217
+ rowValueFn: {
218
+ type: Function,
219
+ required: false
220
+ },
221
+ querying: {
222
+ type: Boolean,
223
+ required: false
224
+ },
225
+ queryError: {
226
+ type: [Error, null],
227
+ required: false
228
+ },
229
+ onRetry: {
230
+ type: Function,
231
+ required: false
232
+ },
233
+ stickyHeader: {
234
+ type: Boolean,
235
+ required: false,
236
+ default: true
237
+ },
238
+ virtualRowHeight: {
239
+ type: Number,
240
+ required: false
241
+ },
242
+ virtualOverscan: {
243
+ type: Number,
244
+ required: false,
245
+ default: 5
246
+ },
247
+ filters: {
248
+ type: Object,
249
+ required: false
250
+ },
251
+ searchTerm: {
252
+ type: String,
253
+ required: false
254
+ },
255
+ onClearFilters: {
256
+ type: Function,
257
+ required: false
258
+ },
259
+ columnMenu: {
260
+ type: Object,
261
+ required: false
262
+ },
263
+ stretch: {
264
+ type: Boolean,
265
+ required: false,
266
+ default: true
267
+ },
268
+ reorderable: {
269
+ type: Boolean,
270
+ required: false,
271
+ default: true
272
+ },
273
+ resizable: {
274
+ type: Boolean,
275
+ required: false,
276
+ default: true
277
+ },
278
+ columnMinWidth: {
279
+ type: Number,
280
+ required: false,
281
+ default: 48
282
+ },
283
+ columnWidths: {
284
+ type: Object,
285
+ required: false,
286
+ default: () => ({})
287
+ }
288
+ },
289
+ emits: [
290
+ "sort",
291
+ "hide",
292
+ "filter",
293
+ "filters-off",
294
+ "row-click",
295
+ "row-dblclick",
296
+ "select-all",
297
+ "deselect-all",
298
+ "reorder",
299
+ "resize",
300
+ "reset-width"
301
+ ],
302
+ setup(__props, { emit: __emit }) {
303
+ const props = __props;
304
+ const ctx = require_use_table_state.useTableContextOptional();
305
+ const { resolve: cellResolver, hasAnyCellBindings } = require_as_table_status.useCellResolver(() => ctx?.state.tableDef.value ?? null);
306
+ const cellComponents = require_as_table_status.useCellComponents(() => props.columns);
307
+ const isStandalone = (0, vue.computed)(() => props.renderMode === "standalone");
308
+ const isCombobox = (0, vue.computed)(() => props.renderMode === "combobox");
309
+ const isListbox = (0, vue.computed)(() => props.renderMode === "listbox");
310
+ const isRekaWrapped = (0, vue.computed)(() => isCombobox.value || isListbox.value);
311
+ const hasValue = (0, vue.computed)(() => isRekaWrapped.value || props.select !== "none");
312
+ const hasActiveFilters = (0, vue.computed)(() => props.filters ? (0, _atscript_ui_table.filledFilterCount)(props.filters) > 0 : false);
313
+ const showSelectAllCheckbox = (0, vue.computed)(() => isStandalone.value && props.select === "multi" && !!props.selectedRows);
314
+ const selectAllState = (0, vue.computed)(() => {
315
+ if (!showSelectAllCheckbox.value) return void 0;
316
+ const sel = props.selectedRows ?? [];
317
+ if (sel.length === 0) return "none";
318
+ if (sel.length === props.rows.length && props.rows.length > 0) return "all";
319
+ return "some";
320
+ });
321
+ const emit = __emit;
322
+ const slots = (0, vue.useSlots)();
323
+ const cellSlotFlags = (0, vue.computed)(() => {
324
+ const out = {};
325
+ for (const c of props.columns) out[c.path] = !!slots[`cell-${c.path}`];
326
+ return out;
327
+ });
328
+ function isPkSelected(row) {
329
+ if (!ctx || !props.rowValueFn) return false;
330
+ return ctx.state.isPkSelected(props.rowValueFn(row));
331
+ }
332
+ function ariaSelectedFor(row) {
333
+ if (props.select === "none") return void 0;
334
+ return isPkSelected(row) ? "true" : "false";
335
+ }
336
+ function onRowClick(row, event, index) {
337
+ emit("row-click", row, event);
338
+ if (!isStandalone.value) return;
339
+ if (ctx) ctx.state.setActive(index);
340
+ if (props.select === "none") return;
341
+ if (!ctx) return;
342
+ ctx.state.toggleActiveSelection(props.select);
343
+ }
344
+ function onRowDblClick(row, event, index) {
345
+ emit("row-dblclick", row, event);
346
+ if (!isStandalone.value || !ctx) return;
347
+ ctx.state.setActive(index);
348
+ ctx.state.requestMainAction(event);
349
+ }
350
+ function onSelectAllToggle(state) {
351
+ if (state === "all") emit("deselect-all");
352
+ else emit("select-all");
353
+ }
354
+ function onTbodyKeydown(event) {
355
+ if (!isStandalone.value || !ctx) return;
356
+ ctx.state.handleNavKey(event, { mode: props.select });
357
+ }
358
+ const scrollContainerRef = (0, vue.ref)(null);
359
+ function alignActiveRow(idx) {
360
+ if (!ctx) return;
361
+ const container = scrollContainerRef.value;
362
+ if (!container) return;
363
+ const rowHeight = props.virtualRowHeight;
364
+ const theadHeight = container.querySelector("thead")?.offsetHeight ?? 0;
365
+ if (rowHeight) {
366
+ const total = props.rows.length;
367
+ const maxScrollTop = Math.max(0, container.scrollHeight - container.clientHeight);
368
+ let target = container.scrollTop;
369
+ if (idx >= total - 1) target = maxScrollTop;
370
+ else if (idx <= 0) target = 0;
371
+ else {
372
+ const rowTop = theadHeight + idx * rowHeight;
373
+ const rowBottom = rowTop + rowHeight;
374
+ const visibleTop = container.scrollTop + theadHeight;
375
+ const visibleBottom = container.scrollTop + container.clientHeight;
376
+ if (rowTop < visibleTop - SCROLL_TOL) target = rowTop - theadHeight;
377
+ else if (rowBottom > visibleBottom + SCROLL_TOL) target = rowBottom - container.clientHeight;
378
+ else return;
379
+ }
380
+ target = Math.round(Math.max(0, Math.min(maxScrollTop, target)));
381
+ if (Math.abs(target - container.scrollTop) < 1) return;
382
+ container.scrollTop = target;
383
+ return;
384
+ }
385
+ const el = document.getElementById(ctx.state.rowId(idx));
386
+ if (!el) return;
387
+ const containerRect = container.getBoundingClientRect();
388
+ const rowRect = el.getBoundingClientRect();
389
+ const stickyTop = containerRect.top + theadHeight;
390
+ if (rowRect.top < stickyTop - SCROLL_TOL) container.scrollTop -= stickyTop - rowRect.top;
391
+ else if (rowRect.bottom > containerRect.bottom + SCROLL_TOL) container.scrollTop += rowRect.bottom - containerRect.bottom;
392
+ }
393
+ function recomputeViewportRows() {
394
+ if (!isStandalone.value || !ctx) return;
395
+ const container = scrollContainerRef.value;
396
+ if (!container) return;
397
+ const rowHeight = props.virtualRowHeight ?? _atscript_ui_table.DEFAULT_ROW_HEIGHT_PX;
398
+ if (rowHeight <= 0) return;
399
+ const headerHeight = container.querySelector("thead")?.offsetHeight ?? 0;
400
+ const usable = Math.max(0, container.clientHeight - headerHeight);
401
+ const fits = Math.max(0, Math.floor(usable / rowHeight));
402
+ if (ctx.state.navViewportRowCount.value !== fits) ctx.state.navViewportRowCount.value = fits;
403
+ }
404
+ if (ctx) {
405
+ (0, vue.watch)(() => ctx.state.activeIndex.value, (idx) => {
406
+ if (!isStandalone.value || idx < 0) return;
407
+ alignActiveRow(idx);
408
+ }, { flush: "post" });
409
+ (0, _vueuse_core.useResizeObserver)(scrollContainerRef, recomputeViewportRows);
410
+ (0, vue.onMounted)(() => void (0, vue.nextTick)(recomputeViewportRows));
411
+ (0, vue.watch)(() => props.virtualRowHeight, recomputeViewportRows);
412
+ (0, vue.watch)(() => props.columns, () => void (0, vue.nextTick)(recomputeViewportRows));
413
+ }
414
+ const ariaRowCount = (0, vue.computed)(() => {
415
+ if (!isStandalone.value || !ctx) return void 0;
416
+ return ctx.state.totalCount.value + 1;
417
+ });
418
+ const ariaActiveDescendant = (0, vue.computed)(() => {
419
+ if (!isStandalone.value || !ctx) return void 0;
420
+ const idx = ctx.state.activeIndex.value;
421
+ if (idx < 0) return "";
422
+ return ctx.state.rowId(idx);
423
+ });
424
+ function rowIdFor(index) {
425
+ if (!isStandalone.value || !ctx) return void 0;
426
+ return ctx.state.rowId(index);
427
+ }
428
+ function isActiveRow(index) {
429
+ if (!isStandalone.value || !ctx) return false;
430
+ return ctx.state.activeIndex.value === index;
431
+ }
432
+ return (_ctx, _cache) => {
433
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, null, [(0, vue.createCommentVNode)("\n Always render the table + header so filter/sort/hide menus stay reachable\n even when rows are empty or the last query errored. The empty/error block\n renders AFTER </table> (but inside the scroll container) so its width is\n bound to the container, not the table's intrinsic fit-content width.\n "), (0, vue.createElementVNode)("div", {
434
+ ref_key: "scrollContainerRef",
435
+ ref: scrollContainerRef,
436
+ class: "as-table-scroll-container",
437
+ "data-virtual-scroll": ""
438
+ }, [
439
+ (0, vue.createElementVNode)("table", {
440
+ class: (0, vue.normalizeClass)(["as-table", {
441
+ "as-table-sticky": __props.stickyHeader,
442
+ "as-table-stretch": __props.stretch
443
+ }]),
444
+ role: isStandalone.value ? "grid" : void 0,
445
+ "aria-rowcount": ariaRowCount.value,
446
+ "aria-multiselectable": isStandalone.value && __props.select === "multi" ? "true" : void 0
447
+ }, [
448
+ (0, vue.createVNode)(require_as_table_status.as_table_header_default, {
449
+ columns: __props.columns,
450
+ sorters: __props.sorters,
451
+ filters: __props.filters,
452
+ "column-menu": __props.columnMenu,
453
+ "column-widths": __props.columnWidths,
454
+ reorderable: __props.reorderable,
455
+ resizable: __props.resizable,
456
+ "column-min-width": __props.columnMinWidth,
457
+ "has-select-column": hasValue.value,
458
+ "select-all-state": selectAllState.value,
459
+ "with-filler": __props.stretch,
460
+ "enable-auto-fit": true,
461
+ "aria-rowindex": isStandalone.value ? 1 : void 0,
462
+ onSort: _cache[0] || (_cache[0] = (c, d) => emit("sort", c, d)),
463
+ onHide: _cache[1] || (_cache[1] = (c) => emit("hide", c)),
464
+ onFilter: _cache[2] || (_cache[2] = (c) => emit("filter", c)),
465
+ onFiltersOff: _cache[3] || (_cache[3] = (c) => emit("filters-off", c)),
466
+ onResetWidth: _cache[4] || (_cache[4] = (c) => emit("reset-width", c)),
467
+ onReorder: _cache[5] || (_cache[5] = (f, t, p) => emit("reorder", f, t, p)),
468
+ onResize: _cache[6] || (_cache[6] = (p, w) => emit("resize", p, w)),
469
+ onSelectAllToggle
470
+ }, (0, vue.createSlots)({ _: 2 }, [(0, vue.renderList)(__props.columns, (col) => {
471
+ return {
472
+ name: `header-${col.path}`,
473
+ fn: (0, vue.withCtx)((scope) => [(0, vue.renderSlot)(_ctx.$slots, `header-${col.path}`, (0, vue.normalizeProps)((0, vue.guardReactiveProps)(scope)))])
474
+ };
475
+ })]), 1032, [
476
+ "columns",
477
+ "sorters",
478
+ "filters",
479
+ "column-menu",
480
+ "column-widths",
481
+ "reorderable",
482
+ "resizable",
483
+ "column-min-width",
484
+ "has-select-column",
485
+ "select-all-state",
486
+ "with-filler",
487
+ "aria-rowindex"
488
+ ]),
489
+ (0, vue.createCommentVNode)(" Combobox / listbox branches: rows render as Reka items. "),
490
+ isRekaWrapped.value && !__props.queryError ? ((0, vue.openBlock)(), (0, vue.createBlock)(as_table_virtualizer_default, {
491
+ key: 0,
492
+ options: __props.rows,
493
+ "estimate-size": __props.virtualRowHeight,
494
+ overscan: __props.virtualOverscan,
495
+ bypass: !__props.virtualRowHeight,
496
+ as: "tbody"
497
+ }, {
498
+ default: (0, vue.withCtx)(({ item, index, spaceBefore }) => [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(isCombobox.value ? (0, vue.unref)(reka_ui.ComboboxItem) : (0, vue.unref)(reka_ui.ListboxItem)), {
499
+ as: "tr",
500
+ value: __props.rowValueFn ? __props.rowValueFn(item) : void 0,
501
+ style: (0, vue.normalizeStyle)({
502
+ height: __props.virtualRowHeight ? `${__props.virtualRowHeight}px` : void 0,
503
+ transform: spaceBefore ? `translateY(${spaceBefore}px)` : void 0
504
+ }),
505
+ onClick: ($event) => emit("row-click", item, $event),
506
+ onDblclick: ($event) => emit("row-dblclick", item, $event)
507
+ }, {
508
+ default: (0, vue.withCtx)(() => [
509
+ hasValue.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", _hoisted_2, [(0, vue.createElementVNode)("span", _hoisted_3, [((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)(isCombobox.value ? (0, vue.unref)(reka_ui.ComboboxItemIndicator) : (0, vue.unref)(reka_ui.ListboxItemIndicator)), {
510
+ class: "as-table-checkbox-tick",
511
+ "aria-hidden": "true"
512
+ }))])])) : (0, vue.createCommentVNode)("v-if", true),
513
+ (0, vue.unref)(hasAnyCellBindings) ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)(__props.columns, (col) => {
514
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: col.path }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)([(0, vue.unref)(cellResolver)(col, item, index)], (bindings) => {
515
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [cellSlotFlags.value[col.path] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", (0, vue.mergeProps)({
516
+ key: 0,
517
+ ref_for: true
518
+ }, bindings), [(0, vue.renderSlot)(_ctx.$slots, `cell-${col.path}`, {
519
+ row: item,
520
+ value: (0, vue.unref)(require_get_cell_value.getCellValue)(item, col.path),
521
+ column: col
522
+ })], 16)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(cellComponents)[col.path]), (0, vue.mergeProps)({
523
+ key: 1,
524
+ row: item,
525
+ column: col
526
+ }, { ref_for: true }, bindings), null, 16, ["row", "column"]))], 64);
527
+ }), 128))], 64);
528
+ }), 128)) : ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, (0, vue.renderList)(__props.columns, (col) => {
529
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: col.path }, [cellSlotFlags.value[col.path] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", _hoisted_4, [(0, vue.renderSlot)(_ctx.$slots, `cell-${col.path}`, {
530
+ row: item,
531
+ value: (0, vue.unref)(require_get_cell_value.getCellValue)(item, col.path),
532
+ column: col
533
+ })])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(cellComponents)[col.path]), {
534
+ key: 1,
535
+ row: item,
536
+ column: col
537
+ }, null, 8, ["row", "column"]))], 64);
538
+ }), 128)),
539
+ __props.stretch ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", _hoisted_5)) : (0, vue.createCommentVNode)("v-if", true)
540
+ ]),
541
+ _: 2
542
+ }, 1064, [
543
+ "value",
544
+ "style",
545
+ "onClick",
546
+ "onDblclick"
547
+ ]))]),
548
+ _: 3
549
+ }, 8, [
550
+ "options",
551
+ "estimate-size",
552
+ "overscan",
553
+ "bypass"
554
+ ])) : isStandalone.value && !__props.queryError ? ((0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, [(0, vue.createCommentVNode)(" Standalone branch — plain rows + custom keyboard nav, ARIA grid. "), (0, vue.createVNode)(as_table_virtualizer_default, {
555
+ options: __props.rows,
556
+ "estimate-size": __props.virtualRowHeight,
557
+ overscan: __props.virtualOverscan,
558
+ bypass: !__props.virtualRowHeight,
559
+ as: "tbody",
560
+ tabindex: 0,
561
+ "aria-activedescendant": ariaActiveDescendant.value,
562
+ onKeydown: onTbodyKeydown
563
+ }, {
564
+ default: (0, vue.withCtx)(({ item, index, spaceBefore }) => [(0, vue.createElementVNode)("tr", {
565
+ id: rowIdFor(index),
566
+ role: "row",
567
+ "aria-rowindex": index + 2,
568
+ "aria-selected": ariaSelectedFor(item),
569
+ class: (0, vue.normalizeClass)({ "as-table-row-active": isActiveRow(index) }),
570
+ style: (0, vue.normalizeStyle)({
571
+ height: __props.virtualRowHeight ? `${__props.virtualRowHeight}px` : void 0,
572
+ transform: spaceBefore ? `translateY(${spaceBefore}px)` : void 0
573
+ }),
574
+ onClick: ($event) => onRowClick(item, $event, index),
575
+ onDblclick: ($event) => onRowDblClick(item, $event, index)
576
+ }, [
577
+ hasValue.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", _hoisted_7, [(0, vue.createElementVNode)("span", { class: (0, vue.normalizeClass)(["as-table-checkbox", { "as-table-checkbox-checked": isPkSelected(item) }]) }, [isPkSelected(item) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("span", _hoisted_8)) : (0, vue.createCommentVNode)("v-if", true)], 2)])) : (0, vue.createCommentVNode)("v-if", true),
578
+ (0, vue.unref)(hasAnyCellBindings) ? ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 1 }, (0, vue.renderList)(__props.columns, (col) => {
579
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: col.path }, [((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, null, (0, vue.renderList)([(0, vue.unref)(cellResolver)(col, item, index)], (bindings) => {
580
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: 0 }, [cellSlotFlags.value[col.path] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", (0, vue.mergeProps)({
581
+ key: 0,
582
+ role: "gridcell"
583
+ }, { ref_for: true }, bindings), [(0, vue.renderSlot)(_ctx.$slots, `cell-${col.path}`, {
584
+ row: item,
585
+ value: (0, vue.unref)(require_get_cell_value.getCellValue)(item, col.path),
586
+ column: col
587
+ })], 16)) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(cellComponents)[col.path]), (0, vue.mergeProps)({
588
+ key: 1,
589
+ row: item,
590
+ column: col,
591
+ role: "gridcell"
592
+ }, { ref_for: true }, bindings), null, 16, ["row", "column"]))], 64);
593
+ }), 128))], 64);
594
+ }), 128)) : ((0, vue.openBlock)(true), (0, vue.createElementBlock)(vue.Fragment, { key: 2 }, (0, vue.renderList)(__props.columns, (col) => {
595
+ return (0, vue.openBlock)(), (0, vue.createElementBlock)(vue.Fragment, { key: col.path }, [cellSlotFlags.value[col.path] ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", _hoisted_9, [(0, vue.renderSlot)(_ctx.$slots, `cell-${col.path}`, {
596
+ row: item,
597
+ value: (0, vue.unref)(require_get_cell_value.getCellValue)(item, col.path),
598
+ column: col
599
+ })])) : ((0, vue.openBlock)(), (0, vue.createBlock)((0, vue.resolveDynamicComponent)((0, vue.unref)(cellComponents)[col.path]), {
600
+ key: 1,
601
+ row: item,
602
+ column: col,
603
+ role: "gridcell"
604
+ }, null, 8, ["row", "column"]))], 64);
605
+ }), 128)),
606
+ __props.stretch ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("td", _hoisted_10)) : (0, vue.createCommentVNode)("v-if", true)
607
+ ], 46, _hoisted_6)]),
608
+ _: 3
609
+ }, 8, [
610
+ "options",
611
+ "estimate-size",
612
+ "overscan",
613
+ "bypass",
614
+ "aria-activedescendant"
615
+ ])], 2112)) : (0, vue.createCommentVNode)("v-if", true)
616
+ ], 10, _hoisted_1),
617
+ (0, vue.createVNode)(require_as_table_status.as_table_status_default, {
618
+ "query-error": __props.queryError,
619
+ "is-empty": __props.rows.length === 0,
620
+ querying: !!__props.querying,
621
+ columns: __props.columns,
622
+ "search-term": __props.searchTerm,
623
+ "has-active-filters": hasActiveFilters.value,
624
+ "on-clear-filters": __props.onClearFilters,
625
+ "on-retry": __props.onRetry
626
+ }, {
627
+ error: (0, vue.withCtx)((scope) => [(0, vue.renderSlot)(_ctx.$slots, "error", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(scope)))]),
628
+ empty: (0, vue.withCtx)((scope) => [(0, vue.renderSlot)(_ctx.$slots, "empty", (0, vue.normalizeProps)((0, vue.guardReactiveProps)(scope)))]),
629
+ _: 3
630
+ }, 8, [
631
+ "query-error",
632
+ "is-empty",
633
+ "querying",
634
+ "columns",
635
+ "search-term",
636
+ "has-active-filters",
637
+ "on-clear-filters",
638
+ "on-retry"
639
+ ]),
640
+ (0, vue.renderSlot)(_ctx.$slots, "last-row")
641
+ ], 512)], 2112);
642
+ };
643
+ }
644
+ });
645
+ //#endregion
646
+ Object.defineProperty(exports, "as_table_base_default", {
647
+ enumerable: true,
648
+ get: function() {
649
+ return as_table_base_default;
650
+ }
651
+ });
@@ -0,0 +1,26 @@
1
+ import { t as getCellValue } from "./get-cell-value-DiH84HKL.mjs";
2
+ import { t as formatCellValue } from "./format-cell-B2xMDYO9.mjs";
3
+ import { createElementBlock, defineComponent, normalizeClass, openBlock, toDisplayString, unref } from "vue";
4
+ //#endregion
5
+ //#region src/components/defaults/as-table-cell-value.vue
6
+ var as_table_cell_value_default = /* @__PURE__ */ defineComponent({
7
+ __name: "as-table-cell-value",
8
+ props: {
9
+ row: {
10
+ type: Object,
11
+ required: true
12
+ },
13
+ column: {
14
+ type: Object,
15
+ required: true
16
+ }
17
+ },
18
+ setup(__props) {
19
+ const props = __props;
20
+ return (_ctx, _cache) => {
21
+ return openBlock(), createElementBlock("td", { class: normalizeClass({ "as-cell-number": props.column.type === "number" }) }, toDisplayString(unref(formatCellValue)(unref(getCellValue)(props.row, props.column.path), props.column.type)), 3);
22
+ };
23
+ }
24
+ });
25
+ //#endregion
26
+ export { as_table_cell_value_default as t };