@oneb/ui-vue 0.2.14 → 0.2.16

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.
@@ -0,0 +1,796 @@
1
+ import { openBlock as l, createElementBlock as n, createElementVNode as c, defineComponent as D, computed as f, normalizeClass as g, toDisplayString as S, Fragment as R, renderList as B, createCommentVNode as y, createBlock as m, resolveDynamicComponent as k, unref as p, useSlots as be, ref as z, provide as Ee, watch as T, withDirectives as ze, renderSlot as F, vShow as Be, normalizeStyle as de, createTextVNode as J, withModifiers as ue, createVNode as je, inject as Ne, onBeforeUnmount as Ke } from "vue";
2
+ import { b as ve, r as Ae, a as pe } from "./ChevronRightIcon-8df1af46.js";
3
+ import { S as ce } from "./SpinnerIcon-24e552a8.js";
4
+ function fe(a, d) {
5
+ return l(), n("svg", {
6
+ xmlns: "http://www.w3.org/2000/svg",
7
+ fill: "none",
8
+ viewBox: "0 0 24 24",
9
+ "stroke-width": "1.8",
10
+ stroke: "currentColor",
11
+ "aria-hidden": "true"
12
+ }, [
13
+ c("path", {
14
+ "stroke-linecap": "round",
15
+ "stroke-linejoin": "round",
16
+ d: "M4.5 12.75l6 6 9-13.5"
17
+ })
18
+ ]);
19
+ }
20
+ function Te(a, d) {
21
+ return l(), n("svg", {
22
+ xmlns: "http://www.w3.org/2000/svg",
23
+ fill: "none",
24
+ viewBox: "0 0 24 24",
25
+ "stroke-width": "1.8",
26
+ stroke: "currentColor",
27
+ "aria-hidden": "true"
28
+ }, [
29
+ c("path", {
30
+ "stroke-linecap": "round",
31
+ "stroke-linejoin": "round",
32
+ d: "M15.75 19.5L8.25 12l7.5-7.5"
33
+ })
34
+ ]);
35
+ }
36
+ function ye(a, d) {
37
+ return l(), n("svg", {
38
+ xmlns: "http://www.w3.org/2000/svg",
39
+ fill: "none",
40
+ viewBox: "0 0 24 24",
41
+ "stroke-width": "1.8",
42
+ stroke: "currentColor",
43
+ "aria-hidden": "true"
44
+ }, [
45
+ c("path", {
46
+ "stroke-linecap": "round",
47
+ "stroke-linejoin": "round",
48
+ d: "M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9"
49
+ })
50
+ ]);
51
+ }
52
+ const Ve = {
53
+ field: {
54
+ type: String,
55
+ required: !1
56
+ },
57
+ header: {
58
+ type: String,
59
+ required: !1
60
+ },
61
+ sortable: {
62
+ type: Boolean,
63
+ default: !1
64
+ },
65
+ sortField: {
66
+ type: String,
67
+ required: !1
68
+ },
69
+ filterable: {
70
+ type: Boolean,
71
+ default: !1
72
+ },
73
+ filterField: {
74
+ type: String,
75
+ required: !1
76
+ },
77
+ expander: {
78
+ type: Boolean,
79
+ default: !1
80
+ },
81
+ width: {
82
+ type: String,
83
+ required: !1
84
+ },
85
+ headerClass: {
86
+ type: String,
87
+ required: !1
88
+ },
89
+ bodyClass: {
90
+ type: String,
91
+ required: !1
92
+ },
93
+ headerStyle: {
94
+ type: [String, Object],
95
+ required: !1
96
+ },
97
+ bodyStyle: {
98
+ type: [String, Object],
99
+ required: !1
100
+ }
101
+ }, Ue = {
102
+ value: {
103
+ type: Array,
104
+ default: () => []
105
+ },
106
+ dataKey: {
107
+ type: String,
108
+ required: !1
109
+ },
110
+ lazy: {
111
+ type: Boolean,
112
+ default: !1
113
+ },
114
+ paginator: {
115
+ type: Boolean,
116
+ default: !1
117
+ },
118
+ rows: {
119
+ type: Number,
120
+ default: 10
121
+ },
122
+ first: {
123
+ type: Number,
124
+ default: 0
125
+ },
126
+ totalRecords: {
127
+ type: Number,
128
+ required: !1
129
+ },
130
+ rowsPerPageOptions: {
131
+ type: Array,
132
+ default: () => [10, 25, 50, 100]
133
+ },
134
+ sortField: {
135
+ type: String,
136
+ required: !1
137
+ },
138
+ sortOrder: {
139
+ type: Number,
140
+ default: null
141
+ },
142
+ selectionMode: {
143
+ type: String,
144
+ required: !1
145
+ },
146
+ selection: {
147
+ type: [Object, Array],
148
+ required: !1
149
+ },
150
+ expandedRows: {
151
+ type: [Array, Object],
152
+ default: () => []
153
+ },
154
+ filters: {
155
+ type: Object,
156
+ required: !1
157
+ },
158
+ filterDisplay: {
159
+ type: String,
160
+ default: null
161
+ },
162
+ globalFilterFields: {
163
+ type: Array,
164
+ required: !1
165
+ },
166
+ loading: {
167
+ type: Boolean,
168
+ default: !1
169
+ },
170
+ emptyMessage: {
171
+ type: String,
172
+ default: "No records found"
173
+ },
174
+ striped: {
175
+ type: Boolean,
176
+ default: !1
177
+ },
178
+ hoverable: {
179
+ type: Boolean,
180
+ default: !0
181
+ },
182
+ bordered: {
183
+ type: Boolean,
184
+ default: !1
185
+ },
186
+ size: {
187
+ type: String,
188
+ default: "md"
189
+ },
190
+ tableClass: {
191
+ type: String,
192
+ required: !1
193
+ },
194
+ hasNextPage: {
195
+ type: Boolean,
196
+ default: !1
197
+ },
198
+ loadingNext: {
199
+ type: Boolean,
200
+ default: !1
201
+ },
202
+ loadMoreLabel: {
203
+ type: String,
204
+ default: "Show more"
205
+ }
206
+ }, me = Symbol("OneDataTable"), ge = {
207
+ contains: (a, d) => String(a ?? "").toLowerCase().includes(String(d).toLowerCase()),
208
+ startsWith: (a, d) => String(a ?? "").toLowerCase().startsWith(String(d).toLowerCase()),
209
+ endsWith: (a, d) => String(a ?? "").toLowerCase().endsWith(String(d).toLowerCase()),
210
+ equals: (a, d) => String(a ?? "").toLowerCase() === String(d).toLowerCase(),
211
+ notEquals: (a, d) => String(a ?? "").toLowerCase() !== String(d).toLowerCase()
212
+ }, We = () => ["overflow-x-auto", "w-full", "border", "border-gray-100", "rounded"], He = (a) => {
213
+ const d = ["min-w-full", "border-collapse", "text-left", "relative"];
214
+ return a === "sm" ? d.push("text-xs") : a === "lg" ? d.push("text-base") : d.push("text-sm"), d;
215
+ }, Q = (a, d) => {
216
+ const t = [
217
+ "bg-gray-100",
218
+ "text-gray-600",
219
+ "font-semibold",
220
+ "text-xs",
221
+ "uppercase",
222
+ "tracking-wide",
223
+ "border-b",
224
+ "border-gray-200",
225
+ "whitespace-nowrap"
226
+ ];
227
+ return d && t.push("cursor-pointer", "select-none", "hover:text-primary-base", "transition-colors"), a === "sm" ? t.push("px-1.5", "py-1") : a === "lg" ? t.push("px-4", "py-3") : t.push("p-2"), t;
228
+ }, X = (a, d) => {
229
+ const t = ["border-b", "border-gray-100", "text-gray-900"];
230
+ return d && t.push("border-r"), a === "sm" ? t.push("px-1.5", "py-1") : a === "lg" ? t.push("px-4", "py-3") : t.push("px-2", "py-1.5"), t;
231
+ }, Ge = (a, d, t, i) => {
232
+ const w = [];
233
+ return i ? w.push("bg-primary-25") : a && t && w.push("bg-gray-50"), d && w.push("hover:bg-gray-50", "transition-colors"), w;
234
+ }, V = (a, d) => {
235
+ const t = ["w-3.5", "h-3.5", "inline-block", "ml-1"];
236
+ return a ? (t.push("text-primary-base"), d === -1 && t.push("rotate-180")) : t.push("text-gray-400"), t.push("transition-transform", "duration-200"), t;
237
+ }, Z = (a) => {
238
+ const d = ["text-center"];
239
+ return a === "sm" ? d.push("w-8") : a === "lg" ? d.push("w-14") : d.push("w-12"), d;
240
+ }, he = (a) => Z(a), Ie = () => [
241
+ "flex",
242
+ "items-center",
243
+ "justify-between",
244
+ "px-2",
245
+ "py-2",
246
+ "border-t",
247
+ "border-gray-100",
248
+ "bg-white",
249
+ "text-sm"
250
+ ], Y = (a) => {
251
+ const d = ["bg-gray-100", "border-b", "border-gray-200"];
252
+ return a === "sm" ? d.push("px-1.5", "py-1") : a === "lg" ? d.push("px-4", "py-2") : d.push("px-2", "py-1.5"), d;
253
+ }, Je = { class: "flex items-center gap-4" }, Qe = { class: "text-gray-600" }, Xe = ["value"], Ye = ["value"], Ze = { class: "flex items-center gap-1" }, De = ["disabled"], et = { class: "px-2 text-gray-600" }, tt = ["disabled"], st = /* @__PURE__ */ D({
254
+ __name: "OneDataTablePaginator",
255
+ props: {
256
+ first: {
257
+ type: Number,
258
+ required: !0
259
+ },
260
+ rows: {
261
+ type: Number,
262
+ required: !0
263
+ },
264
+ totalRecords: {
265
+ type: Number,
266
+ required: !0
267
+ },
268
+ rowsPerPageOptions: {
269
+ type: Array,
270
+ default: () => [10, 25, 50, 100]
271
+ }
272
+ },
273
+ emits: ["update:first", "update:rows", "page"],
274
+ setup(a, { emit: d }) {
275
+ const t = a, i = d, w = f(() => Math.ceil(t.totalRecords / t.rows)), C = f(() => Math.floor(t.first / t.rows) + 1), U = f(() => t.totalRecords === 0 ? 0 : t.first + 1), ee = f(() => Math.min(t.first + t.rows, t.totalRecords)), _ = f(() => t.first === 0), O = f(() => t.first + t.rows >= t.totalRecords), q = f(() => Ie()), P = (b) => {
276
+ b < 0 || b >= t.totalRecords || (i("update:first", b), i("page", {
277
+ first: b,
278
+ rows: t.rows,
279
+ page: Math.floor(b / t.rows),
280
+ pageCount: w.value
281
+ }));
282
+ }, j = () => {
283
+ P(Math.max(0, t.first - t.rows));
284
+ }, N = () => {
285
+ P(t.first + t.rows);
286
+ }, M = (b) => {
287
+ const v = parseInt(b.target.value);
288
+ i("update:rows", v), i("update:first", 0), i("page", {
289
+ first: 0,
290
+ rows: v,
291
+ page: 0,
292
+ pageCount: Math.ceil(t.totalRecords / v)
293
+ });
294
+ };
295
+ return (b, v) => (l(), n("div", {
296
+ class: g(q.value)
297
+ }, [
298
+ c("div", Je, [
299
+ c("span", Qe, S(U.value) + "–" + S(ee.value) + " of " + S(a.totalRecords), 1),
300
+ a.rowsPerPageOptions.length > 1 ? (l(), n("select", {
301
+ key: 0,
302
+ value: a.rows,
303
+ class: "border border-gray-300 rounded px-2 py-1 text-sm bg-white focus:outline-none focus:ring-1 focus:ring-primary-glow",
304
+ onChange: M
305
+ }, [
306
+ (l(!0), n(R, null, B(a.rowsPerPageOptions, (L) => (l(), n("option", {
307
+ key: L,
308
+ value: L
309
+ }, S(L) + " / page ", 9, Ye))), 128))
310
+ ], 40, Xe)) : y("", !0)
311
+ ]),
312
+ c("div", Ze, [
313
+ c("button", {
314
+ disabled: _.value,
315
+ class: "p-1.5 rounded hover:bg-gray-100 disabled:opacity-30 disabled:cursor-default transition-colors",
316
+ onClick: j
317
+ }, [
318
+ (l(), m(k(p(Te)), { class: "w-4 h-4 text-gray-600" }))
319
+ ], 8, De),
320
+ c("span", et, S(C.value) + " / " + S(w.value), 1),
321
+ c("button", {
322
+ disabled: O.value,
323
+ class: "p-1.5 rounded hover:bg-gray-100 disabled:opacity-30 disabled:cursor-default transition-colors",
324
+ onClick: N
325
+ }, [
326
+ (l(), m(k(p(ve)), { class: "w-4 h-4 text-gray-600" }))
327
+ ], 8, tt)
328
+ ])
329
+ ], 2));
330
+ }
331
+ }), rt = {
332
+ key: 0,
333
+ class: "mb-3"
334
+ }, lt = {
335
+ key: 0,
336
+ class: "w-5 h-5 rounded bg-primary-base flex items-center justify-center text-white"
337
+ }, ot = {
338
+ key: 1,
339
+ class: "w-5 h-5 rounded border border-gray-300 bg-white"
340
+ }, at = ["onClick"], nt = {
341
+ key: 1,
342
+ class: "inline-flex items-center gap-1"
343
+ }, it = { key: 0 }, dt = ["value", "placeholder", "onInput"], ut = { key: 0 }, pt = ["onClick"], ct = ["onClick"], ft = {
344
+ key: 0,
345
+ class: "w-5 h-5 rounded bg-primary-base flex items-center justify-center text-white"
346
+ }, yt = {
347
+ key: 1,
348
+ class: "w-5 h-5 rounded border border-gray-300 bg-white"
349
+ }, gt = ["onClick"], ht = {
350
+ key: 0,
351
+ class: "w-5 h-5 rounded-full bg-primary-base flex items-center justify-center"
352
+ }, bt = {
353
+ key: 1,
354
+ class: "w-5 h-5 rounded-full border border-gray-300 bg-white"
355
+ }, vt = ["onClick"], mt = { key: 0 }, wt = ["colspan"], kt = { key: 1 }, Ct = ["colspan"], xt = { class: "flex items-center justify-center gap-2 text-gray-500" }, St = { key: 2 }, _t = ["colspan"], Rt = { class: "text-gray-400" }, Mt = { key: 3 }, Ft = ["colspan"], Pt = ["disabled"], Lt = {
356
+ key: 2,
357
+ class: "mt-3"
358
+ }, Et = /* @__PURE__ */ D({
359
+ __name: "OneDataTable",
360
+ props: Ue,
361
+ emits: [
362
+ "update:selection",
363
+ "update:expandedRows",
364
+ "update:first",
365
+ "update:rows",
366
+ "update:sortField",
367
+ "update:sortOrder",
368
+ "update:filters",
369
+ "sort",
370
+ "page",
371
+ "filter",
372
+ "row-click",
373
+ "row-select",
374
+ "row-unselect",
375
+ "row-expand",
376
+ "row-collapse",
377
+ "load:next"
378
+ ],
379
+ setup(a, { emit: d }) {
380
+ const t = a, i = d, w = be(), C = z([]);
381
+ Ee(me, { registerColumn: (e) => {
382
+ C.value.push(e);
383
+ }, unregisterColumn: (e) => {
384
+ const s = C.value.indexOf(e);
385
+ s > -1 && C.value.splice(s, 1);
386
+ } });
387
+ const _ = z(t.first), O = z(t.rows), q = z(t.sortField), P = z(t.sortOrder);
388
+ T(() => t.first, (e) => {
389
+ _.value = e;
390
+ }), T(() => t.rows, (e) => {
391
+ O.value = e;
392
+ }), T(() => t.sortField, (e) => {
393
+ q.value = e;
394
+ }), T(() => t.sortOrder, (e) => {
395
+ P.value = e;
396
+ });
397
+ const j = f(() => _.value), N = f(() => O.value), M = f(() => q.value), b = f(() => P.value), v = (e, s) => s ? s.split(".").reduce((r, u) => r == null ? void 0 : r[u], e) : e, L = (e) => t.dataKey ? v(e, t.dataKey) : e, x = (e, s) => e == null || s == null ? e === s : t.dataKey ? v(e, t.dataKey) === v(s, t.dataKey) : e === s, we = (e, s) => t.dataKey ? v(e, t.dataKey) : s, E = f(
398
+ () => C.value.some((e) => e.props.expander)
399
+ ), K = f(
400
+ () => !!t.selectionMode
401
+ ), te = f(
402
+ () => t.selectionMode === "multiple"
403
+ ), W = f(
404
+ () => C.value.filter((e) => !e.props.expander)
405
+ ), A = f(
406
+ () => C.value.length + (K.value ? 1 : 0) + (E.value ? 1 : 0)
407
+ ), se = f(() => {
408
+ var r, u;
409
+ if (t.lazy || !t.filters)
410
+ return t.value;
411
+ let e = [...t.value];
412
+ const s = t.filters;
413
+ if ((r = s.global) != null && r.value && ((u = t.globalFilterFields) != null && u.length)) {
414
+ const o = s.global.value;
415
+ e = e.filter(
416
+ (h) => t.globalFilterFields.some(
417
+ (I) => ge.contains(v(h, I), o)
418
+ )
419
+ );
420
+ }
421
+ for (const [o, h] of Object.entries(s)) {
422
+ if (o === "global" || !h.value)
423
+ continue;
424
+ const I = h.matchMode || "contains", ie = ge[I];
425
+ ie && (e = e.filter((qe) => ie(v(qe, o), h.value)));
426
+ }
427
+ return e;
428
+ }), ke = f(() => {
429
+ const e = se.value;
430
+ return t.lazy || !M.value || !b.value ? e : [...e].sort((s, r) => {
431
+ const u = v(s, M.value), o = v(r, M.value);
432
+ if (u == null && o == null)
433
+ return 0;
434
+ if (u == null)
435
+ return 1;
436
+ if (o == null)
437
+ return -1;
438
+ let h;
439
+ return typeof u == "number" && typeof o == "number" ? h = u - o : h = String(u).localeCompare(String(o)), b.value === 1 ? h : -h;
440
+ });
441
+ }), re = f(
442
+ () => t.totalRecords ?? se.value.length
443
+ ), $ = f(() => {
444
+ const e = ke.value;
445
+ if (t.paginator && !t.lazy) {
446
+ const s = j.value, r = s + N.value;
447
+ return e.slice(s, r);
448
+ }
449
+ return e;
450
+ }), Ce = (e) => {
451
+ let s;
452
+ M.value === e ? b.value === 1 ? s = -1 : b.value === -1 ? s = null : s = 1 : s = 1, q.value = e, P.value = s, i("update:sortField", e), i("update:sortOrder", s), i("sort", { field: e, order: s }), !t.lazy && t.paginator && (_.value = 0, i("update:first", 0));
453
+ }, le = (e) => e.props.sortField || e.props.field, xe = (e) => M.value === le(e), H = (e) => t.selection ? t.selectionMode === "single" ? x(t.selection, e) : t.selectionMode === "multiple" ? t.selection.some((s) => x(s, e)) : !1 : !1, oe = (e, s, r) => {
454
+ if (i("row-click", { originalEvent: e, data: s, index: r }), t.selectionMode === "single") {
455
+ const u = x(t.selection, s) ? null : s;
456
+ i("update:selection", u), u ? i("row-select", { originalEvent: e, data: s }) : i("row-unselect", { originalEvent: e, data: s });
457
+ }
458
+ }, Se = (e, s) => {
459
+ if (e.stopPropagation(), t.selectionMode === "multiple") {
460
+ const r = t.selection || [], u = r.some((h) => x(h, s));
461
+ let o;
462
+ u ? (o = r.filter((h) => !x(h, s)), i("row-unselect", { originalEvent: e, data: s })) : (o = [...r, s], i("row-select", { originalEvent: e, data: s })), i("update:selection", o);
463
+ }
464
+ }, ae = f(() => {
465
+ if (t.selectionMode !== "multiple" || !t.selection)
466
+ return !1;
467
+ const e = t.selection;
468
+ return $.value.length > 0 && $.value.every((s) => e.some((r) => x(r, s)));
469
+ }), _e = (e) => {
470
+ e.stopPropagation();
471
+ const s = t.selection || [];
472
+ if (ae.value) {
473
+ const r = s.filter(
474
+ (u) => !$.value.some((o) => x(u, o))
475
+ );
476
+ i("update:selection", r);
477
+ } else {
478
+ const r = [...s];
479
+ $.value.forEach((u) => {
480
+ r.some((o) => x(o, u)) || r.push(u);
481
+ }), i("update:selection", r);
482
+ }
483
+ }, G = (e) => {
484
+ if (!t.expandedRows)
485
+ return !1;
486
+ if (Array.isArray(t.expandedRows))
487
+ return t.expandedRows.some((s) => x(s, e));
488
+ if (t.dataKey) {
489
+ const s = String(L(e));
490
+ return !!t.expandedRows[s];
491
+ }
492
+ return !1;
493
+ }, Re = (e, s) => {
494
+ e.stopPropagation();
495
+ const r = G(s);
496
+ if (Array.isArray(t.expandedRows)) {
497
+ let u;
498
+ r ? (u = t.expandedRows.filter((o) => !x(o, s)), i("row-collapse", { originalEvent: e, data: s })) : (u = [...t.expandedRows, s], i("row-expand", { originalEvent: e, data: s })), i("update:expandedRows", u);
499
+ } else if (t.dataKey) {
500
+ const u = String(L(s)), o = { ...t.expandedRows };
501
+ r ? (delete o[u], i("row-collapse", { originalEvent: e, data: s })) : (o[u] = !0, i("row-expand", { originalEvent: e, data: s })), i("update:expandedRows", o);
502
+ }
503
+ }, Me = (e, s, r) => {
504
+ var o;
505
+ if (!t.filters)
506
+ return;
507
+ const u = {
508
+ ...t.filters,
509
+ [e]: { value: s, matchMode: r || ((o = t.filters[e]) == null ? void 0 : o.matchMode) || "contains" }
510
+ };
511
+ i("update:filters", u), t.lazy && i("filter", { filters: u }), t.paginator && (_.value = 0, i("update:first", 0));
512
+ }, ne = (e) => {
513
+ var s;
514
+ return ((s = t.filters) == null ? void 0 : s[e]) || { value: null };
515
+ }, Fe = (e) => () => {
516
+ t.filters && (i("update:filters", { ...t.filters }), t.lazy && i("filter", { filters: t.filters }), t.paginator && (_.value = 0, i("update:first", 0)));
517
+ }, Pe = (e) => {
518
+ _.value = e, i("update:first", e);
519
+ }, Le = (e) => {
520
+ O.value = e, i("update:rows", e);
521
+ }, $e = f(() => We()), Oe = f(() => {
522
+ const e = He(t.size);
523
+ return t.tableClass && e.push(t.tableClass), t.bordered && e.push("border", "border-gray-100"), e;
524
+ });
525
+ return (e, s) => (l(), n("div", null, [
526
+ ze(c("div", null, [
527
+ F(e.$slots, "default")
528
+ ], 512), [
529
+ [Be, !1]
530
+ ]),
531
+ p(w).header ? (l(), n("div", rt, [
532
+ F(e.$slots, "header")
533
+ ])) : y("", !0),
534
+ c("div", {
535
+ class: g($e.value)
536
+ }, [
537
+ c("table", {
538
+ class: g(Oe.value)
539
+ }, [
540
+ c("thead", null, [
541
+ c("tr", null, [
542
+ K.value ? (l(), n("th", {
543
+ key: 0,
544
+ class: g([
545
+ ...p(Q)(e.size, !1),
546
+ ...p(Z)(e.size)
547
+ ])
548
+ }, [
549
+ te.value ? (l(), n("div", {
550
+ key: 0,
551
+ class: "flex items-center justify-center cursor-pointer",
552
+ onClick: s[0] || (s[0] = (r) => _e(r))
553
+ }, [
554
+ ae.value ? (l(), n("div", lt, [
555
+ (l(), m(k(p(fe)), { class: "w-3.5 h-3.5" }))
556
+ ])) : (l(), n("div", ot))
557
+ ])) : y("", !0)
558
+ ], 2)) : y("", !0),
559
+ E.value ? (l(), n("th", {
560
+ key: 1,
561
+ class: g([
562
+ ...p(Q)(e.size, !1),
563
+ ...p(he)(e.size)
564
+ ])
565
+ }, null, 2)) : y("", !0),
566
+ (l(!0), n(R, null, B(W.value, (r, u) => (l(), n("th", {
567
+ key: u,
568
+ class: g([
569
+ ...p(Q)(e.size, r.props.sortable),
570
+ r.props.headerClass
571
+ ]),
572
+ style: de([
573
+ r.props.headerStyle,
574
+ r.props.width ? { width: r.props.width } : {}
575
+ ]),
576
+ onClick: (o) => r.props.sortable ? Ce(le(r)) : void 0
577
+ }, [
578
+ r.slots.header ? (l(), m(k(r.slots.header), { key: 0 })) : (l(), n("span", nt, [
579
+ J(S(r.props.header) + " ", 1),
580
+ r.props.sortable ? (l(), n(R, { key: 0 }, [
581
+ xe(r) ? b.value === 1 ? (l(), m(k(p(Ae)), {
582
+ key: 1,
583
+ class: g(p(V)(!0, 1))
584
+ }, null, 8, ["class"])) : b.value === -1 ? (l(), m(k(p(pe)), {
585
+ key: 2,
586
+ class: g(p(V)(!0, -1))
587
+ }, null, 8, ["class"])) : (l(), m(k(p(ye)), {
588
+ key: 3,
589
+ class: g(p(V)(!1, null))
590
+ }, null, 8, ["class"])) : (l(), m(k(p(ye)), {
591
+ key: 0,
592
+ class: g(p(V)(!1, null))
593
+ }, null, 8, ["class"]))
594
+ ], 64)) : y("", !0)
595
+ ]))
596
+ ], 14, at))), 128))
597
+ ]),
598
+ e.filterDisplay === "row" ? (l(), n("tr", it, [
599
+ K.value ? (l(), n("th", {
600
+ key: 0,
601
+ class: g(p(Y)(e.size))
602
+ }, null, 2)) : y("", !0),
603
+ E.value ? (l(), n("th", {
604
+ key: 1,
605
+ class: g(p(Y)(e.size))
606
+ }, null, 2)) : y("", !0),
607
+ (l(!0), n(R, null, B(W.value, (r, u) => (l(), n("th", {
608
+ key: `filter-${u}`,
609
+ class: g(p(Y)(e.size))
610
+ }, [
611
+ r.props.filterable && r.slots.filter ? (l(), m(k(r.slots.filter), {
612
+ key: 0,
613
+ filterModel: ne(
614
+ r.props.filterField || r.props.field
615
+ ),
616
+ filterCallback: Fe(
617
+ r.props.filterField || r.props.field
618
+ )
619
+ }, null, 8, ["filterModel", "filterCallback"])) : r.props.filterable && r.props.field ? (l(), n("input", {
620
+ key: 1,
621
+ type: "text",
622
+ value: ne(
623
+ r.props.filterField || r.props.field
624
+ ).value || "",
625
+ class: "w-full border border-gray-300 rounded px-2 py-1 text-sm focus:outline-none focus:ring-1 focus:ring-primary-glow",
626
+ placeholder: `Filter ${r.props.header || r.props.field}`,
627
+ onInput: (o) => Me(
628
+ r.props.filterField || r.props.field,
629
+ o.target.value
630
+ )
631
+ }, null, 40, dt)) : y("", !0)
632
+ ], 2))), 128))
633
+ ])) : y("", !0)
634
+ ]),
635
+ !e.loading && $.value.length > 0 ? (l(), n("tbody", ut, [
636
+ (l(!0), n(R, null, B($.value, (r, u) => (l(), n(R, {
637
+ key: we(r, u)
638
+ }, [
639
+ c("tr", {
640
+ class: g([
641
+ ...p(Ge)(e.striped, e.hoverable, u % 2 === 1, H(r)),
642
+ e.selectionMode ? "cursor-pointer" : ""
643
+ ]),
644
+ onClick: (o) => oe(o, r, u)
645
+ }, [
646
+ K.value ? (l(), n("td", {
647
+ key: 0,
648
+ class: g([
649
+ ...p(X)(e.size, e.bordered),
650
+ ...p(Z)(e.size)
651
+ ])
652
+ }, [
653
+ te.value ? (l(), n("div", {
654
+ key: 0,
655
+ class: "flex items-center justify-center cursor-pointer",
656
+ onClick: ue((o) => Se(o, r), ["stop"])
657
+ }, [
658
+ H(r) ? (l(), n("div", ft, [
659
+ (l(), m(k(p(fe)), { class: "w-3.5 h-3.5" }))
660
+ ])) : (l(), n("div", yt))
661
+ ], 8, ct)) : (l(), n("div", {
662
+ key: 1,
663
+ class: "flex items-center justify-center cursor-pointer",
664
+ onClick: ue((o) => oe(o, r, u), ["stop"])
665
+ }, [
666
+ H(r) ? (l(), n("div", ht, s[3] || (s[3] = [
667
+ c("div", { class: "w-2 h-2 rounded-full bg-white" }, null, -1)
668
+ ]))) : (l(), n("div", bt))
669
+ ], 8, gt))
670
+ ], 2)) : y("", !0),
671
+ E.value ? (l(), n("td", {
672
+ key: 1,
673
+ class: g([
674
+ ...p(X)(e.size, e.bordered),
675
+ ...p(he)(e.size)
676
+ ])
677
+ }, [
678
+ c("button", {
679
+ class: "p-1 rounded hover:bg-gray-100 transition-colors",
680
+ onClick: (o) => Re(o, r)
681
+ }, [
682
+ (l(), m(k(G(r) ? p(pe) : p(ve)), { class: "w-4 h-4 text-gray-500" }))
683
+ ], 8, vt)
684
+ ], 2)) : y("", !0),
685
+ (l(!0), n(R, null, B(W.value, (o, h) => (l(), n("td", {
686
+ key: h,
687
+ class: g([
688
+ ...p(X)(e.size, e.bordered),
689
+ o.props.bodyClass
690
+ ]),
691
+ style: de(o.props.bodyStyle)
692
+ }, [
693
+ o.slots.body ? (l(), m(k(o.slots.body), {
694
+ key: 0,
695
+ data: r,
696
+ field: o.props.field,
697
+ index: u
698
+ }, null, 8, ["data", "field", "index"])) : o.props.field ? (l(), n(R, { key: 1 }, [
699
+ J(S(v(r, o.props.field)), 1)
700
+ ], 64)) : y("", !0)
701
+ ], 6))), 128))
702
+ ], 10, pt),
703
+ E.value && G(r) ? (l(), n("tr", mt, [
704
+ c("td", {
705
+ colspan: A.value,
706
+ class: "p-0"
707
+ }, [
708
+ F(e.$slots, "expansion", {
709
+ data: r,
710
+ index: u
711
+ })
712
+ ], 8, wt)
713
+ ])) : y("", !0)
714
+ ], 64))), 128))
715
+ ])) : e.loading ? (l(), n("tbody", kt, [
716
+ c("tr", null, [
717
+ c("td", {
718
+ colspan: A.value,
719
+ class: "text-center py-12"
720
+ }, [
721
+ F(e.$slots, "loading", {}, () => [
722
+ c("div", xt, [
723
+ je(ce, { class: "w-5 h-5" }),
724
+ s[4] || (s[4] = c("span", null, "Loading...", -1))
725
+ ])
726
+ ])
727
+ ], 8, Ct)
728
+ ])
729
+ ])) : (l(), n("tbody", St, [
730
+ c("tr", null, [
731
+ c("td", {
732
+ colspan: A.value,
733
+ class: "text-center py-12"
734
+ }, [
735
+ F(e.$slots, "empty", {}, () => [
736
+ c("span", Rt, S(e.emptyMessage), 1)
737
+ ])
738
+ ], 8, _t)
739
+ ])
740
+ ])),
741
+ e.hasNextPage && !e.loading ? (l(), n("tfoot", Mt, [
742
+ c("tr", null, [
743
+ c("td", {
744
+ colspan: A.value,
745
+ class: "px-3 pb-3 pt-2"
746
+ }, [
747
+ c("button", {
748
+ class: "w-full p-2 rounded bg-primary-base bg-opacity-10 text-primary-base text-sm font-medium hover:bg-opacity-20 transition-colors disabled:opacity-50 disabled:cursor-default flex items-center justify-center gap-2",
749
+ disabled: e.loadingNext,
750
+ onClick: s[1] || (s[1] = (r) => i("load:next"))
751
+ }, [
752
+ e.loadingNext ? (l(), m(ce, {
753
+ key: 0,
754
+ class: "w-4 h-4"
755
+ })) : y("", !0),
756
+ J(" " + S(e.loadMoreLabel), 1)
757
+ ], 8, Pt)
758
+ ], 8, Ft)
759
+ ])
760
+ ])) : y("", !0)
761
+ ], 2)
762
+ ], 2),
763
+ e.paginator && re.value > 0 ? (l(), m(st, {
764
+ key: 1,
765
+ first: j.value,
766
+ rows: N.value,
767
+ "total-records": re.value,
768
+ "rows-per-page-options": e.rowsPerPageOptions,
769
+ "onUpdate:first": Pe,
770
+ "onUpdate:rows": Le,
771
+ onPage: s[2] || (s[2] = (r) => i("page", r))
772
+ }, null, 8, ["first", "rows", "total-records", "rows-per-page-options"])) : y("", !0),
773
+ p(w).footer ? (l(), n("div", Lt, [
774
+ F(e.$slots, "footer")
775
+ ])) : y("", !0)
776
+ ]));
777
+ }
778
+ }), zt = /* @__PURE__ */ D({
779
+ __name: "OneColumn",
780
+ props: Ve,
781
+ setup(a) {
782
+ const d = a, t = be(), i = Ne(me), w = {
783
+ props: d,
784
+ slots: t
785
+ };
786
+ return i && i.registerColumn(w), Ke(() => {
787
+ i && i.unregisterColumn(w);
788
+ }), (C, U) => F(C.$slots, "default");
789
+ }
790
+ });
791
+ export {
792
+ Et as _,
793
+ zt as a,
794
+ st as b,
795
+ fe as r
796
+ };