@burdenoff/microfe-channel 2026.527.1 → 2026.530.1
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.
- package/dist/channel/ChannelRoutes.js +5 -5
- package/dist/channel/ChannelRoutes.js.map +1 -1
- package/dist/channel/constants/permissions.js +3 -0
- package/dist/channel/constants/permissions.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelDashboardPage.js +227 -221
- package/dist/channel/modules/channels/pages/ChannelDashboardPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelDetailsPage.js +392 -391
- package/dist/channel/modules/channels/pages/ChannelDetailsPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelUsersPage.js +1 -1
- package/dist/channel/modules/channels/pages/ChannelUsersPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ChannelsListPage.js +216 -212
- package/dist/channel/modules/channels/pages/ChannelsListPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js +99 -98
- package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/ConnectionsListPage.js +129 -126
- package/dist/channel/modules/channels/pages/ConnectionsListPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/CreateChannelPage.js +40 -50
- package/dist/channel/modules/channels/pages/CreateChannelPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js +1 -1
- package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js.map +1 -1
- package/dist/channel/modules/channels/pages/WebhookEventsPage.js +1 -1
- package/dist/channel/modules/channels/pages/WebhookEventsPage.js.map +1 -1
- package/dist/channel/pages/ChannelLandingPage.js +50 -34
- package/dist/channel/pages/ChannelLandingPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -8,12 +8,13 @@ import { HEALTH_I18N as ee, PLATFORM_I18N as te, STATUS_I18N as ne, translateLab
|
|
|
8
8
|
import { useExportChannels as re } from "../hooks/useExport.js";
|
|
9
9
|
import { useEffect as u, useMemo as d, useRef as ie, useState as f } from "react";
|
|
10
10
|
import { useI18n as ae } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
11
|
-
import { AlertCircle as p, AlertTriangle as m, CheckCircle2 as h, Download as oe, Eye as se, HelpCircle as g, Loader2 as _, Pencil as ce, Plus as v, Power as le, PowerOff as y, Radio as
|
|
12
|
-
import { useNavigate as
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
11
|
+
import { AlertCircle as p, AlertTriangle as m, CheckCircle2 as h, Download as oe, Eye as se, HelpCircle as g, Loader2 as _, Pencil as ce, Plus as v, Power as le, PowerOff as y, Radio as ue, RefreshCw as de, Search as fe, Trash2 as pe, XCircle as b } from "lucide-react";
|
|
12
|
+
import { useNavigate as me } from "react-router-dom";
|
|
13
|
+
import { usePermissions as he } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
14
|
+
import { jsx as x, jsxs as S } from "react/jsx-runtime";
|
|
15
|
+
import { TagBadge as ge } from "@burdenoff/fe-libs/tag";
|
|
15
16
|
//#region src/channel/modules/channels/pages/ChannelsListPage.tsx
|
|
16
|
-
var
|
|
17
|
+
var C = {
|
|
17
18
|
EMAIL: {
|
|
18
19
|
label: "Email",
|
|
19
20
|
color: "bg-accent-blue-subtle text-accent-blue"
|
|
@@ -54,7 +55,7 @@ var w = {
|
|
|
54
55
|
label: "Webchat",
|
|
55
56
|
color: "bg-accent-teal-subtle text-accent-teal"
|
|
56
57
|
}
|
|
57
|
-
},
|
|
58
|
+
}, w = {
|
|
58
59
|
ACTIVE: {
|
|
59
60
|
label: "Active",
|
|
60
61
|
color: "text-status-success-text bg-status-success-bg-subtle",
|
|
@@ -68,7 +69,7 @@ var w = {
|
|
|
68
69
|
ERROR: {
|
|
69
70
|
label: "Error",
|
|
70
71
|
color: "text-status-error-text bg-status-error-bg-subtle",
|
|
71
|
-
icon:
|
|
72
|
+
icon: b
|
|
72
73
|
},
|
|
73
74
|
SUSPENDED: {
|
|
74
75
|
label: "Suspended",
|
|
@@ -80,7 +81,7 @@ var w = {
|
|
|
80
81
|
color: "text-muted-foreground bg-muted",
|
|
81
82
|
icon: y
|
|
82
83
|
}
|
|
83
|
-
},
|
|
84
|
+
}, T = {
|
|
84
85
|
HEALTHY: {
|
|
85
86
|
label: "Healthy",
|
|
86
87
|
color: "text-status-success-text",
|
|
@@ -94,7 +95,7 @@ var w = {
|
|
|
94
95
|
UNHEALTHY: {
|
|
95
96
|
label: "Unhealthy",
|
|
96
97
|
color: "text-status-error-text",
|
|
97
|
-
icon:
|
|
98
|
+
icon: b
|
|
98
99
|
},
|
|
99
100
|
UNKNOWN: {
|
|
100
101
|
label: "Unknown",
|
|
@@ -102,24 +103,24 @@ var w = {
|
|
|
102
103
|
icon: g
|
|
103
104
|
}
|
|
104
105
|
};
|
|
105
|
-
function
|
|
106
|
-
let m =
|
|
107
|
-
let n =
|
|
106
|
+
function _e() {
|
|
107
|
+
let m = me(), { hasPermission: h } = he(), g = h(c.CHANNEL_CREATE), b = h(c.CHANNEL_UPDATE), { t: _e } = ae(), E = (e, t) => {
|
|
108
|
+
let n = _e(e);
|
|
108
109
|
return n === e ? t : n;
|
|
109
|
-
}, [
|
|
110
|
+
}, [ve, D] = f(null), [ye, O] = f(null), [k, A] = f(/* @__PURE__ */ new Set()), [j, M] = f(null), { organizationId: be } = e(), { triggerExport: xe, isExporting: N, exportError: P } = re(be ?? void 0), [F] = f(12), [I, L] = f(0), { channels: R, isLoading: Se, error: z, total: B, filter: V, updateFilter: H, deleteChannel: U, activateChannel: W, deactivateChannel: G, runHealthCheck: K, refetch: q } = o(), J = Math.max(1, Math.ceil(B / F)), Y = ie(q);
|
|
110
111
|
u(() => {
|
|
111
|
-
|
|
112
|
+
Y.current = q;
|
|
112
113
|
}), u(() => {
|
|
113
|
-
|
|
114
|
+
Y.current({
|
|
114
115
|
offset: I * F,
|
|
115
116
|
limit: F
|
|
116
117
|
});
|
|
117
118
|
}, [I, F]), u(() => {
|
|
118
119
|
Promise.resolve().then(() => L(0));
|
|
119
120
|
}, [
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
V.search,
|
|
122
|
+
V.platform,
|
|
123
|
+
V.status
|
|
123
124
|
]), u(() => {
|
|
124
125
|
let e = [
|
|
125
126
|
"channel.created",
|
|
@@ -128,13 +129,13 @@ function D() {
|
|
|
128
129
|
"connection.created",
|
|
129
130
|
"connection.updated",
|
|
130
131
|
"connection.deleted"
|
|
131
|
-
].map((e) => a(e, () => void
|
|
132
|
+
].map((e) => a(e, () => void q()));
|
|
132
133
|
return () => e.forEach((e) => e());
|
|
133
|
-
}, [
|
|
134
|
-
let
|
|
134
|
+
}, [q]);
|
|
135
|
+
let Ce = async (e) => {
|
|
135
136
|
n("medium"), O(e);
|
|
136
137
|
try {
|
|
137
|
-
await
|
|
138
|
+
await U(e), r("success"), D(null);
|
|
138
139
|
} catch (e) {
|
|
139
140
|
r("error"), i(e, {
|
|
140
141
|
module: "channel",
|
|
@@ -143,10 +144,10 @@ function D() {
|
|
|
143
144
|
} finally {
|
|
144
145
|
O(null);
|
|
145
146
|
}
|
|
146
|
-
},
|
|
147
|
+
}, we = async (e) => {
|
|
147
148
|
O(e.id);
|
|
148
149
|
try {
|
|
149
|
-
e.status === "ACTIVE" ? await
|
|
150
|
+
e.status === "ACTIVE" ? await G(e.id) : await W(e.id);
|
|
150
151
|
} catch (e) {
|
|
151
152
|
i(e, {
|
|
152
153
|
module: "channel",
|
|
@@ -155,10 +156,10 @@ function D() {
|
|
|
155
156
|
} finally {
|
|
156
157
|
O(null);
|
|
157
158
|
}
|
|
158
|
-
},
|
|
159
|
+
}, Te = async (e) => {
|
|
159
160
|
O(e);
|
|
160
161
|
try {
|
|
161
|
-
await
|
|
162
|
+
await K(e);
|
|
162
163
|
} catch (e) {
|
|
163
164
|
i(e, {
|
|
164
165
|
module: "channel",
|
|
@@ -167,22 +168,22 @@ function D() {
|
|
|
167
168
|
} finally {
|
|
168
169
|
O(null);
|
|
169
170
|
}
|
|
170
|
-
}, X = d(() => R.filter((e) => k.has(e.id)), [R, k]), Z = d(() => X.filter((e) => e.status === "ACTIVE"), [X]), Q = d(() => X.filter((e) => e.status !== "ACTIVE"), [X]), $ = R.length > 0 && R.every((e) => k.has(e.id)),
|
|
171
|
+
}, X = d(() => R.filter((e) => k.has(e.id)), [R, k]), Z = d(() => X.filter((e) => e.status === "ACTIVE"), [X]), Q = d(() => X.filter((e) => e.status !== "ACTIVE"), [X]), $ = R.length > 0 && R.every((e) => k.has(e.id)), Ee = R.some((e) => k.has(e.id)) && !$, De = (e, t) => {
|
|
171
172
|
A((n) => {
|
|
172
173
|
let r = new Set(n);
|
|
173
174
|
return t ? r.add(e) : r.delete(e), r;
|
|
174
175
|
});
|
|
175
|
-
},
|
|
176
|
+
}, Oe = (e) => {
|
|
176
177
|
A((t) => {
|
|
177
178
|
let n = new Set(t);
|
|
178
179
|
return R.forEach((t) => {
|
|
179
180
|
e ? n.add(t.id) : n.delete(t.id);
|
|
180
181
|
}), n;
|
|
181
182
|
});
|
|
182
|
-
},
|
|
183
|
+
}, ke = async () => {
|
|
183
184
|
if (X.length === 0) return;
|
|
184
185
|
n("medium");
|
|
185
|
-
let e =
|
|
186
|
+
let e = E(X.length === 1 ? "channel.bulkDeleteConfirmSingle" : "channel.bulkDeleteConfirmMultiple", X.length === 1 ? "Delete 1 selected channel?" : `Delete ${X.length} selected channels?`), r = await t({
|
|
186
187
|
title: "Delete channels",
|
|
187
188
|
message: e,
|
|
188
189
|
okButtonTitle: "Delete",
|
|
@@ -191,311 +192,314 @@ function D() {
|
|
|
191
192
|
if (r === null ? window.confirm(e) : r) {
|
|
192
193
|
M("delete");
|
|
193
194
|
try {
|
|
194
|
-
await Promise.allSettled(X.map((e) =>
|
|
195
|
+
await Promise.allSettled(X.map((e) => U(e.id))), A(/* @__PURE__ */ new Set());
|
|
195
196
|
} finally {
|
|
196
197
|
M(null);
|
|
197
198
|
}
|
|
198
199
|
}
|
|
199
|
-
},
|
|
200
|
+
}, Ae = async () => {
|
|
200
201
|
if (Q.length !== 0) {
|
|
201
202
|
M("activate");
|
|
202
203
|
try {
|
|
203
|
-
await Promise.allSettled(Q.map((e) =>
|
|
204
|
+
await Promise.allSettled(Q.map((e) => W(e.id))), A(/* @__PURE__ */ new Set());
|
|
204
205
|
} finally {
|
|
205
206
|
M(null);
|
|
206
207
|
}
|
|
207
208
|
}
|
|
208
|
-
},
|
|
209
|
+
}, je = async () => {
|
|
209
210
|
if (Z.length !== 0) {
|
|
210
211
|
M("deactivate");
|
|
211
212
|
try {
|
|
212
|
-
await Promise.allSettled(Z.map((e) =>
|
|
213
|
+
await Promise.allSettled(Z.map((e) => G(e.id))), A(/* @__PURE__ */ new Set());
|
|
213
214
|
} finally {
|
|
214
215
|
M(null);
|
|
215
216
|
}
|
|
216
217
|
}
|
|
217
|
-
},
|
|
218
|
+
}, Me = async () => {
|
|
218
219
|
if (X.length !== 0) {
|
|
219
220
|
M("health");
|
|
220
221
|
try {
|
|
221
|
-
await Promise.allSettled(X.map((e) =>
|
|
222
|
+
await Promise.allSettled(X.map((e) => K(e.id)));
|
|
222
223
|
} finally {
|
|
223
224
|
M(null);
|
|
224
225
|
}
|
|
225
226
|
}
|
|
226
|
-
},
|
|
227
|
-
...
|
|
227
|
+
}, Ne = (e) => ({
|
|
228
|
+
...C[e] || {
|
|
228
229
|
label: e,
|
|
229
230
|
color: "bg-bg-sunken text-text-secondary"
|
|
230
231
|
},
|
|
231
|
-
label: l(e, te,
|
|
232
|
-
}),
|
|
233
|
-
...
|
|
234
|
-
label: l(e, ne,
|
|
235
|
-
}),
|
|
236
|
-
...
|
|
237
|
-
label: l(e, ee,
|
|
232
|
+
label: l(e, te, E)
|
|
233
|
+
}), Pe = (e) => ({
|
|
234
|
+
...w[e] || w.INACTIVE,
|
|
235
|
+
label: l(e, ne, E)
|
|
236
|
+
}), Fe = (e) => ({
|
|
237
|
+
...T[e] || T.UNKNOWN,
|
|
238
|
+
label: l(e, ee, E)
|
|
238
239
|
});
|
|
239
|
-
return /* @__PURE__ */
|
|
240
|
+
return /* @__PURE__ */ x(s, {
|
|
240
241
|
permission: c.CHANNEL_READ,
|
|
241
|
-
children: /* @__PURE__ */
|
|
242
|
+
children: /* @__PURE__ */ S("div", {
|
|
242
243
|
className: "space-y-4 sm:space-y-6 p-3 sm:p-6",
|
|
243
244
|
children: [
|
|
244
|
-
/* @__PURE__ */
|
|
245
|
+
/* @__PURE__ */ S("div", {
|
|
245
246
|
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
246
|
-
children: [/* @__PURE__ */
|
|
247
|
+
children: [/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("h1", {
|
|
247
248
|
className: "text-xl sm:text-2xl font-bold text-foreground",
|
|
248
|
-
children:
|
|
249
|
-
}), /* @__PURE__ */
|
|
249
|
+
children: E("channel.channels", "Channels")
|
|
250
|
+
}), /* @__PURE__ */ S("p", {
|
|
250
251
|
className: "text-sm text-muted-foreground mt-1",
|
|
251
252
|
children: [
|
|
252
|
-
|
|
253
|
+
E("channel.manageChannels", "Manage your communication channels"),
|
|
253
254
|
" (",
|
|
254
|
-
|
|
255
|
+
B,
|
|
255
256
|
" total)"
|
|
256
257
|
]
|
|
257
|
-
})] }), /* @__PURE__ */
|
|
258
|
+
})] }), /* @__PURE__ */ S("div", {
|
|
258
259
|
className: "flex items-center gap-2",
|
|
259
|
-
children: [/* @__PURE__ */
|
|
260
|
-
permission: c.
|
|
261
|
-
children: /* @__PURE__ */
|
|
260
|
+
children: [/* @__PURE__ */ x(s, {
|
|
261
|
+
permission: c.CHANNEL_EXPORT,
|
|
262
|
+
children: /* @__PURE__ */ S("button", {
|
|
262
263
|
type: "button",
|
|
263
|
-
onClick: () => void
|
|
264
|
+
onClick: () => void xe(),
|
|
264
265
|
disabled: N,
|
|
265
266
|
className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-fg border border-border hover:bg-bg-elevated rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
266
|
-
title:
|
|
267
|
-
|
|
267
|
+
title: E("channel.exportCSV", "Export to CSV"),
|
|
268
|
+
"data-tour": "channels-list-export-button",
|
|
269
|
+
children: [N ? /* @__PURE__ */ x(_, {
|
|
268
270
|
size: 16,
|
|
269
271
|
className: "animate-spin"
|
|
270
|
-
}) : /* @__PURE__ */
|
|
272
|
+
}) : /* @__PURE__ */ x(oe, { size: 16 }), E("channel.export", "Export")]
|
|
271
273
|
})
|
|
272
|
-
}), /* @__PURE__ */
|
|
274
|
+
}), g && /* @__PURE__ */ S("button", {
|
|
273
275
|
type: "button",
|
|
274
276
|
onClick: () => m("/channels/create"),
|
|
275
277
|
className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg hover:bg-action-primary-bg-hover rounded-lg transition-colors",
|
|
276
|
-
children: [/* @__PURE__ */
|
|
278
|
+
children: [/* @__PURE__ */ x(v, { size: 16 }), E("channel.createChannel", "Create Channel")]
|
|
277
279
|
})]
|
|
278
280
|
})]
|
|
279
281
|
}),
|
|
280
|
-
/* @__PURE__ */
|
|
282
|
+
/* @__PURE__ */ S("div", {
|
|
281
283
|
className: "flex flex-col gap-3 sm:flex-row sm:items-center",
|
|
282
284
|
children: [
|
|
283
|
-
/* @__PURE__ */
|
|
285
|
+
/* @__PURE__ */ S("div", {
|
|
284
286
|
className: "relative flex-1",
|
|
285
|
-
children: [/* @__PURE__ */
|
|
287
|
+
children: [/* @__PURE__ */ x(fe, {
|
|
286
288
|
size: 16,
|
|
287
289
|
className: "absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"
|
|
288
|
-
}), /* @__PURE__ */
|
|
289
|
-
"aria-label":
|
|
290
|
+
}), /* @__PURE__ */ x("input", {
|
|
291
|
+
"aria-label": E("channel.searchChannels", "Search channels..."),
|
|
290
292
|
type: "text",
|
|
291
|
-
placeholder:
|
|
292
|
-
value:
|
|
293
|
-
onChange: (e) =>
|
|
293
|
+
placeholder: E("channel.searchChannels", "Search channels..."),
|
|
294
|
+
value: V.search || "",
|
|
295
|
+
onChange: (e) => H({ search: e.target.value }),
|
|
294
296
|
className: "w-full pl-9 pr-4 py-2 text-sm bg-surface border border-border rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-bg"
|
|
295
297
|
})]
|
|
296
298
|
}),
|
|
297
|
-
/* @__PURE__ */
|
|
298
|
-
value:
|
|
299
|
-
onChange: (e) =>
|
|
299
|
+
/* @__PURE__ */ S("select", {
|
|
300
|
+
value: V.platform || "",
|
|
301
|
+
onChange: (e) => H({ platform: e.target.value || void 0 }),
|
|
300
302
|
className: "px-3 py-2 text-sm bg-bg-surface text-text-primary border border-border rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
|
|
301
|
-
children: [/* @__PURE__ */
|
|
303
|
+
children: [/* @__PURE__ */ x("option", {
|
|
302
304
|
value: "",
|
|
303
|
-
children:
|
|
304
|
-
}), Object.entries(
|
|
305
|
+
children: E("channel.allPlatforms", "All Platforms")
|
|
306
|
+
}), Object.entries(C).map(([e, t]) => /* @__PURE__ */ x("option", {
|
|
305
307
|
value: e,
|
|
306
308
|
children: t.label
|
|
307
309
|
}, e))]
|
|
308
310
|
}),
|
|
309
|
-
/* @__PURE__ */
|
|
310
|
-
value:
|
|
311
|
-
onChange: (e) =>
|
|
311
|
+
/* @__PURE__ */ S("select", {
|
|
312
|
+
value: V.status || "",
|
|
313
|
+
onChange: (e) => H({ status: e.target.value || void 0 }),
|
|
312
314
|
className: "px-3 py-2 text-sm bg-bg-surface text-text-primary border border-border rounded-lg focus:outline-none focus:ring-2 focus:ring-action-primary-bg",
|
|
313
|
-
children: [/* @__PURE__ */
|
|
315
|
+
children: [/* @__PURE__ */ x("option", {
|
|
314
316
|
value: "",
|
|
315
|
-
children:
|
|
316
|
-
}), Object.entries(
|
|
317
|
+
children: E("channel.allStatus", "All Status")
|
|
318
|
+
}), Object.entries(w).map(([e, t]) => /* @__PURE__ */ x("option", {
|
|
317
319
|
value: e,
|
|
318
320
|
children: t.label
|
|
319
321
|
}, e))]
|
|
320
322
|
})
|
|
321
323
|
]
|
|
322
324
|
}),
|
|
323
|
-
P && /* @__PURE__ */
|
|
325
|
+
P && /* @__PURE__ */ S("div", {
|
|
324
326
|
className: "flex items-center gap-3 p-4 bg-status-error-bg-subtle border border-status-error-border rounded-lg",
|
|
325
|
-
children: [/* @__PURE__ */
|
|
327
|
+
children: [/* @__PURE__ */ x(p, {
|
|
326
328
|
size: 20,
|
|
327
329
|
className: "text-status-error-text"
|
|
328
|
-
}), /* @__PURE__ */
|
|
330
|
+
}), /* @__PURE__ */ x("p", {
|
|
329
331
|
className: "text-sm text-status-error-text flex-1",
|
|
330
332
|
children: P
|
|
331
333
|
})]
|
|
332
334
|
}),
|
|
333
|
-
R.length > 0 && /* @__PURE__ */
|
|
335
|
+
R.length > 0 && /* @__PURE__ */ S("div", {
|
|
334
336
|
className: "flex flex-col gap-3 rounded-lg border border-border bg-surface p-4 sm:flex-row sm:items-center sm:justify-between",
|
|
335
|
-
|
|
337
|
+
"data-tour": "channels-list-bulk-actions",
|
|
338
|
+
children: [/* @__PURE__ */ S("label", {
|
|
336
339
|
className: "flex items-center gap-2 text-sm text-foreground",
|
|
337
|
-
children: [/* @__PURE__ */
|
|
340
|
+
children: [/* @__PURE__ */ x("input", {
|
|
338
341
|
type: "checkbox",
|
|
339
342
|
checked: $,
|
|
340
343
|
ref: (e) => {
|
|
341
|
-
e && (e.indeterminate =
|
|
344
|
+
e && (e.indeterminate = Ee && !$);
|
|
342
345
|
},
|
|
343
|
-
onChange: (e) =>
|
|
346
|
+
onChange: (e) => Oe(e.target.checked),
|
|
344
347
|
"aria-label": "Select all channels",
|
|
345
348
|
className: "size-4 rounded border-border text-primary"
|
|
346
|
-
}), /* @__PURE__ */
|
|
347
|
-
}), /* @__PURE__ */
|
|
349
|
+
}), /* @__PURE__ */ x("span", { children: E("channel.selectAllVisible", "Select all visible") })]
|
|
350
|
+
}), /* @__PURE__ */ S("div", {
|
|
348
351
|
className: "flex flex-wrap items-center gap-2",
|
|
349
352
|
children: [
|
|
350
|
-
/* @__PURE__ */
|
|
353
|
+
/* @__PURE__ */ S("span", {
|
|
351
354
|
className: "text-sm text-muted-foreground",
|
|
352
355
|
children: [
|
|
353
356
|
k.size,
|
|
354
357
|
" ",
|
|
355
|
-
|
|
358
|
+
E("channel.selectedCountLabel", "selected")
|
|
356
359
|
]
|
|
357
360
|
}),
|
|
358
|
-
k.size > 0 && /* @__PURE__ */
|
|
361
|
+
k.size > 0 && /* @__PURE__ */ x("button", {
|
|
359
362
|
type: "button",
|
|
360
363
|
onClick: () => A(/* @__PURE__ */ new Set()),
|
|
361
364
|
className: "text-sm text-muted-foreground hover:text-foreground",
|
|
362
|
-
children:
|
|
365
|
+
children: E("channel.clearSelection", "Clear selection")
|
|
363
366
|
}),
|
|
364
|
-
/* @__PURE__ */
|
|
367
|
+
/* @__PURE__ */ x(s, {
|
|
365
368
|
permission: c.CHANNEL_EXECUTE,
|
|
366
|
-
children: /* @__PURE__ */
|
|
369
|
+
children: /* @__PURE__ */ S("button", {
|
|
367
370
|
type: "button",
|
|
368
|
-
onClick:
|
|
371
|
+
onClick: Me,
|
|
369
372
|
disabled: X.length === 0 || j !== null,
|
|
370
373
|
className: "px-3 py-2 text-sm font-medium border border-border rounded-md hover:bg-muted transition-colors disabled:opacity-50",
|
|
371
|
-
children: [
|
|
374
|
+
children: [E("channel.healthCheck", "Health Check"), X.length > 0 ? ` (${X.length})` : ""]
|
|
372
375
|
})
|
|
373
376
|
}),
|
|
374
|
-
/* @__PURE__ */
|
|
377
|
+
/* @__PURE__ */ x(s, {
|
|
375
378
|
permission: c.CHANNEL_UPDATE,
|
|
376
|
-
children: /* @__PURE__ */
|
|
379
|
+
children: /* @__PURE__ */ S("button", {
|
|
377
380
|
type: "button",
|
|
378
|
-
onClick:
|
|
381
|
+
onClick: Ae,
|
|
379
382
|
disabled: Q.length === 0 || j !== null,
|
|
380
383
|
className: "px-3 py-2 text-sm font-medium border border-status-success-border/30 text-status-success-text rounded-md hover:bg-status-success-bg-subtle transition-colors disabled:opacity-50",
|
|
381
|
-
children: [
|
|
384
|
+
children: [E("channel.activateSelected", "Activate Selected"), Q.length > 0 ? ` (${Q.length})` : ""]
|
|
382
385
|
})
|
|
383
386
|
}),
|
|
384
|
-
/* @__PURE__ */
|
|
387
|
+
/* @__PURE__ */ x(s, {
|
|
385
388
|
permission: c.CHANNEL_UPDATE,
|
|
386
|
-
children: /* @__PURE__ */
|
|
389
|
+
children: /* @__PURE__ */ S("button", {
|
|
387
390
|
type: "button",
|
|
388
|
-
onClick:
|
|
391
|
+
onClick: je,
|
|
389
392
|
disabled: Z.length === 0 || j !== null,
|
|
390
393
|
className: "px-3 py-2 text-sm font-medium border border-status-warning-border text-status-warning-text rounded-md hover:bg-status-warning-bg-subtle transition-colors disabled:opacity-50",
|
|
391
|
-
children: [
|
|
394
|
+
children: [E("channel.deactivateSelected", "Deactivate Selected"), Z.length > 0 ? ` (${Z.length})` : ""]
|
|
392
395
|
})
|
|
393
396
|
}),
|
|
394
|
-
/* @__PURE__ */
|
|
397
|
+
/* @__PURE__ */ x(s, {
|
|
395
398
|
permission: c.CHANNEL_DELETE,
|
|
396
|
-
children: /* @__PURE__ */
|
|
399
|
+
children: /* @__PURE__ */ S("button", {
|
|
397
400
|
type: "button",
|
|
398
|
-
onClick:
|
|
401
|
+
onClick: ke,
|
|
399
402
|
disabled: X.length === 0 || j !== null,
|
|
400
403
|
className: "px-3 py-2 text-sm font-medium border border-status-error-border/30 text-status-error-text rounded-md hover:bg-status-error-bg-subtle transition-colors disabled:opacity-50",
|
|
401
|
-
children: [
|
|
404
|
+
children: [E("channel.deleteSelected", "Delete Selected"), X.length > 0 ? ` (${X.length})` : ""]
|
|
402
405
|
})
|
|
403
406
|
})
|
|
404
407
|
]
|
|
405
408
|
})]
|
|
406
409
|
}),
|
|
407
|
-
|
|
410
|
+
z && /* @__PURE__ */ S("div", {
|
|
408
411
|
className: "flex items-center gap-3 p-4 bg-status-error-bg-subtle border border-status-error-border rounded-lg",
|
|
409
412
|
children: [
|
|
410
|
-
/* @__PURE__ */
|
|
413
|
+
/* @__PURE__ */ x(p, {
|
|
411
414
|
size: 20,
|
|
412
415
|
className: "text-status-error-text"
|
|
413
416
|
}),
|
|
414
|
-
/* @__PURE__ */
|
|
417
|
+
/* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
|
|
415
418
|
className: "text-sm font-medium text-status-error-text",
|
|
416
|
-
children:
|
|
417
|
-
}), /* @__PURE__ */
|
|
419
|
+
children: E("channel.loadFailed", "Failed to load channels")
|
|
420
|
+
}), /* @__PURE__ */ x("p", {
|
|
418
421
|
className: "text-xs text-status-error-text",
|
|
419
|
-
children:
|
|
422
|
+
children: z
|
|
420
423
|
})] }),
|
|
421
|
-
/* @__PURE__ */
|
|
424
|
+
/* @__PURE__ */ x("button", {
|
|
422
425
|
type: "button",
|
|
423
|
-
onClick: () =>
|
|
426
|
+
onClick: () => q(),
|
|
424
427
|
className: "ml-auto px-3 py-1 text-sm text-status-error-text hover:bg-status-error-bg-subtle rounded transition-colors",
|
|
425
|
-
children:
|
|
428
|
+
children: E("channel.retry", "Retry")
|
|
426
429
|
})
|
|
427
430
|
]
|
|
428
431
|
}),
|
|
429
|
-
|
|
432
|
+
Se && R.length === 0 && /* @__PURE__ */ x("div", {
|
|
430
433
|
className: "flex items-center justify-center py-12",
|
|
431
|
-
children: /* @__PURE__ */
|
|
434
|
+
children: /* @__PURE__ */ x(_, {
|
|
432
435
|
size: 32,
|
|
433
436
|
className: "animate-spin text-accent-primary"
|
|
434
437
|
})
|
|
435
438
|
}),
|
|
436
|
-
!
|
|
439
|
+
!Se && !z && R.length === 0 && /* @__PURE__ */ S("div", {
|
|
437
440
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
438
441
|
children: [
|
|
439
|
-
/* @__PURE__ */
|
|
442
|
+
/* @__PURE__ */ x(ue, {
|
|
440
443
|
size: 48,
|
|
441
444
|
className: "text-muted-foreground mb-4"
|
|
442
445
|
}),
|
|
443
|
-
/* @__PURE__ */
|
|
446
|
+
/* @__PURE__ */ x("h3", {
|
|
444
447
|
className: "text-lg font-semibold text-foreground mb-2",
|
|
445
|
-
children:
|
|
448
|
+
children: E("channel.noChannelsFound", "No channels found")
|
|
446
449
|
}),
|
|
447
|
-
/* @__PURE__ */
|
|
450
|
+
/* @__PURE__ */ x("p", {
|
|
448
451
|
className: "text-sm text-muted-foreground max-w-md mb-4",
|
|
449
|
-
children:
|
|
452
|
+
children: V.search || V.platform || V.status ? E("channel.adjustFilters", "Try adjusting your filters to see more channels.") : E("channel.createFirstChannelPrompt", "Create your first communication channel to get started.")
|
|
450
453
|
}),
|
|
451
|
-
!
|
|
454
|
+
g && !V.search && !V.platform && !V.status && /* @__PURE__ */ S("button", {
|
|
452
455
|
type: "button",
|
|
453
456
|
onClick: () => m("/channels/create"),
|
|
454
457
|
className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg hover:bg-action-primary-bg-hover rounded-lg transition-colors",
|
|
455
|
-
children: [/* @__PURE__ */
|
|
458
|
+
children: [/* @__PURE__ */ x(v, { size: 16 }), E("channel.createChannel", "Create Channel")]
|
|
456
459
|
})
|
|
457
460
|
]
|
|
458
461
|
}),
|
|
459
|
-
R.length > 0 && /* @__PURE__ */
|
|
462
|
+
R.length > 0 && /* @__PURE__ */ x("div", {
|
|
460
463
|
className: "grid gap-4 sm:grid-cols-2 lg:grid-cols-3",
|
|
464
|
+
"data-tour": "channels-list-grid",
|
|
461
465
|
children: R.map((e) => {
|
|
462
|
-
let t =
|
|
463
|
-
return /* @__PURE__ */
|
|
466
|
+
let t = Ne(e.platform), n = Pe(e.status), r = Fe(e.connectionHealth), i = n.icon, a = r.icon, o = ye === e.id;
|
|
467
|
+
return /* @__PURE__ */ S("div", {
|
|
464
468
|
className: `p-4 bg-surface border rounded-lg transition-colors group ${k.has(e.id) ? "ring-2 ring-action-primary-bg border-action-primary-bg/40" : "border-border hover:border-action-primary-bg/40"}`,
|
|
465
469
|
children: [
|
|
466
|
-
/* @__PURE__ */
|
|
470
|
+
/* @__PURE__ */ S("div", {
|
|
467
471
|
className: "flex items-start justify-between mb-3",
|
|
468
|
-
children: [/* @__PURE__ */
|
|
472
|
+
children: [/* @__PURE__ */ S("div", {
|
|
469
473
|
className: "flex items-center gap-2",
|
|
470
474
|
children: [
|
|
471
|
-
/* @__PURE__ */
|
|
475
|
+
/* @__PURE__ */ x("input", {
|
|
472
476
|
type: "checkbox",
|
|
473
477
|
checked: k.has(e.id),
|
|
474
|
-
onChange: (t) =>
|
|
478
|
+
onChange: (t) => De(e.id, t.target.checked),
|
|
475
479
|
"aria-label": `Select channel ${e.name}`,
|
|
476
480
|
className: "size-4 rounded border-border text-primary"
|
|
477
481
|
}),
|
|
478
|
-
/* @__PURE__ */
|
|
482
|
+
/* @__PURE__ */ x(ue, {
|
|
479
483
|
size: 20,
|
|
480
484
|
className: "text-accent-primary"
|
|
481
485
|
}),
|
|
482
|
-
/* @__PURE__ */
|
|
486
|
+
/* @__PURE__ */ x("span", {
|
|
483
487
|
className: `px-2 py-0.5 text-xs font-semibold rounded-full ${t.color}`,
|
|
484
488
|
children: t.label
|
|
485
489
|
})
|
|
486
490
|
]
|
|
487
|
-
}), /* @__PURE__ */
|
|
491
|
+
}), /* @__PURE__ */ S("div", {
|
|
488
492
|
className: "flex items-center gap-1",
|
|
489
|
-
children: [/* @__PURE__ */
|
|
493
|
+
children: [/* @__PURE__ */ x(i, {
|
|
490
494
|
size: 14,
|
|
491
495
|
className: n.color.split(" ")[0]
|
|
492
|
-
}), /* @__PURE__ */
|
|
496
|
+
}), /* @__PURE__ */ x("span", {
|
|
493
497
|
className: `px-2 py-0.5 text-xs font-medium rounded-full ${n.color}`,
|
|
494
498
|
children: n.label
|
|
495
499
|
})]
|
|
496
500
|
})]
|
|
497
501
|
}),
|
|
498
|
-
/* @__PURE__ */
|
|
502
|
+
/* @__PURE__ */ S("div", {
|
|
499
503
|
role: "button",
|
|
500
504
|
tabIndex: 0,
|
|
501
505
|
onClick: () => m(`/channels/${e.id}`),
|
|
@@ -504,134 +508,134 @@ function D() {
|
|
|
504
508
|
},
|
|
505
509
|
className: "cursor-pointer",
|
|
506
510
|
children: [
|
|
507
|
-
/* @__PURE__ */
|
|
511
|
+
/* @__PURE__ */ x("h3", {
|
|
508
512
|
className: "text-sm font-semibold text-foreground mb-1 truncate",
|
|
509
513
|
children: e.name
|
|
510
514
|
}),
|
|
511
|
-
e.description && /* @__PURE__ */
|
|
515
|
+
e.description && /* @__PURE__ */ x("p", {
|
|
512
516
|
className: "text-xs text-muted-foreground mb-2 line-clamp-2",
|
|
513
517
|
children: e.description
|
|
514
518
|
}),
|
|
515
|
-
e.adapterType && /* @__PURE__ */
|
|
519
|
+
e.adapterType && /* @__PURE__ */ x("p", {
|
|
516
520
|
className: "text-xs text-muted-foreground mb-2 font-mono",
|
|
517
521
|
children: e.adapterType.replace(/_/g, " ")
|
|
518
522
|
}),
|
|
519
|
-
/* @__PURE__ */
|
|
523
|
+
/* @__PURE__ */ x("div", {
|
|
520
524
|
className: "flex items-center gap-3 text-xs text-muted-foreground mb-2",
|
|
521
|
-
children: /* @__PURE__ */
|
|
522
|
-
|
|
525
|
+
children: /* @__PURE__ */ S("span", { children: [
|
|
526
|
+
E("channel.priority", "Priority"),
|
|
523
527
|
": ",
|
|
524
528
|
e.priority
|
|
525
529
|
] })
|
|
526
530
|
}),
|
|
527
|
-
/* @__PURE__ */
|
|
531
|
+
/* @__PURE__ */ S("div", {
|
|
528
532
|
className: "flex items-center gap-3 text-xs",
|
|
529
533
|
children: [
|
|
530
|
-
/* @__PURE__ */
|
|
534
|
+
/* @__PURE__ */ S("div", {
|
|
531
535
|
className: "flex items-center gap-1",
|
|
532
|
-
children: [/* @__PURE__ */
|
|
536
|
+
children: [/* @__PURE__ */ x(a, {
|
|
533
537
|
size: 12,
|
|
534
538
|
className: r.color
|
|
535
|
-
}), /* @__PURE__ */
|
|
539
|
+
}), /* @__PURE__ */ x("span", {
|
|
536
540
|
className: r.color,
|
|
537
541
|
children: r.label
|
|
538
542
|
})]
|
|
539
543
|
}),
|
|
540
|
-
/* @__PURE__ */
|
|
541
|
-
/* @__PURE__ */
|
|
544
|
+
/* @__PURE__ */ x("span", { children: "•" }),
|
|
545
|
+
/* @__PURE__ */ x("span", {
|
|
542
546
|
className: e.isConnected ? "text-status-success-text" : "text-muted-foreground",
|
|
543
|
-
children: e.isConnected ?
|
|
547
|
+
children: e.isConnected ? E("channel.connected", "Connected") : E("channel.notConnected", "Not Connected")
|
|
544
548
|
})
|
|
545
549
|
]
|
|
546
550
|
})
|
|
547
551
|
]
|
|
548
552
|
}),
|
|
549
|
-
e.tagAssignments && e.tagAssignments.length > 0 && /* @__PURE__ */
|
|
553
|
+
e.tagAssignments && e.tagAssignments.length > 0 && /* @__PURE__ */ S("div", {
|
|
550
554
|
className: "flex flex-wrap gap-1 mt-2",
|
|
551
555
|
"aria-label": "Channel tags",
|
|
552
|
-
children: [e.tagAssignments.slice(0, 4).map((e) => /* @__PURE__ */
|
|
556
|
+
children: [e.tagAssignments.slice(0, 4).map((e) => /* @__PURE__ */ x(ge, {
|
|
553
557
|
id: e.tagId,
|
|
554
558
|
label: e.tagId,
|
|
555
559
|
size: "sm"
|
|
556
|
-
}, e.id)), e.tagAssignments.length > 4 && /* @__PURE__ */
|
|
560
|
+
}, e.id)), e.tagAssignments.length > 4 && /* @__PURE__ */ S("span", {
|
|
557
561
|
className: "text-xs text-muted-foreground",
|
|
558
562
|
children: ["+", e.tagAssignments.length - 4]
|
|
559
563
|
})]
|
|
560
564
|
}),
|
|
561
|
-
/* @__PURE__ */
|
|
565
|
+
/* @__PURE__ */ S("div", {
|
|
562
566
|
className: "mt-3 pt-3 border-t border-border flex items-center justify-between opacity-0 group-hover:opacity-100 transition-opacity",
|
|
563
|
-
children: [/* @__PURE__ */
|
|
567
|
+
children: [/* @__PURE__ */ S("div", {
|
|
564
568
|
className: "flex items-center gap-1",
|
|
565
569
|
children: [
|
|
566
|
-
/* @__PURE__ */
|
|
570
|
+
/* @__PURE__ */ x("button", {
|
|
567
571
|
type: "button",
|
|
568
572
|
onClick: () => m(`/channels/${e.id}`),
|
|
569
573
|
className: "p-1.5 text-muted-foreground hover:text-accent-primary hover:bg-accent-primary/10 rounded transition-colors cursor-pointer",
|
|
570
|
-
title:
|
|
571
|
-
children: /* @__PURE__ */
|
|
574
|
+
title: E("channel.viewDetails", "View Details"),
|
|
575
|
+
children: /* @__PURE__ */ x(se, { size: 14 })
|
|
572
576
|
}),
|
|
573
|
-
/* @__PURE__ */
|
|
577
|
+
b && /* @__PURE__ */ x("button", {
|
|
574
578
|
type: "button",
|
|
575
579
|
onClick: () => m(`/channels/${e.id}/edit`),
|
|
576
580
|
className: "p-1.5 text-muted-foreground hover:text-accent-primary hover:bg-accent-primary/10 rounded transition-colors cursor-pointer",
|
|
577
|
-
title:
|
|
578
|
-
children: /* @__PURE__ */
|
|
581
|
+
title: E("channel.editChannel", "Edit Channel"),
|
|
582
|
+
children: /* @__PURE__ */ x(ce, { size: 14 })
|
|
579
583
|
}),
|
|
580
|
-
/* @__PURE__ */
|
|
584
|
+
/* @__PURE__ */ x(s, {
|
|
581
585
|
permission: c.CHANNEL_EXECUTE,
|
|
582
|
-
children: /* @__PURE__ */
|
|
586
|
+
children: /* @__PURE__ */ x("button", {
|
|
583
587
|
type: "button",
|
|
584
|
-
onClick: () =>
|
|
588
|
+
onClick: () => Te(e.id),
|
|
585
589
|
disabled: o,
|
|
586
590
|
className: "p-1.5 text-muted-foreground hover:text-status-info-text hover:bg-status-info-bg-subtle rounded transition-colors disabled:opacity-50 cursor-pointer disabled:cursor-not-allowed",
|
|
587
|
-
title:
|
|
588
|
-
children: o ? /* @__PURE__ */
|
|
591
|
+
title: E("channel.runHealthCheck", "Run Health Check"),
|
|
592
|
+
children: o ? /* @__PURE__ */ x(_, {
|
|
589
593
|
size: 14,
|
|
590
594
|
className: "animate-spin"
|
|
591
|
-
}) : /* @__PURE__ */
|
|
595
|
+
}) : /* @__PURE__ */ x(de, { size: 14 })
|
|
592
596
|
})
|
|
593
597
|
}),
|
|
594
|
-
/* @__PURE__ */
|
|
598
|
+
/* @__PURE__ */ x(s, {
|
|
595
599
|
permission: c.CHANNEL_UPDATE,
|
|
596
|
-
children: /* @__PURE__ */
|
|
600
|
+
children: /* @__PURE__ */ x("button", {
|
|
597
601
|
type: "button",
|
|
598
|
-
onClick: () =>
|
|
602
|
+
onClick: () => we(e),
|
|
599
603
|
disabled: o,
|
|
600
604
|
className: `p-1.5 rounded transition-colors disabled:opacity-50 cursor-pointer disabled:cursor-not-allowed ${e.status === "ACTIVE" ? "text-muted-foreground hover:text-status-warning-text hover:bg-status-warning-bg-subtle" : "text-muted-foreground hover:text-status-success-text hover:bg-status-success-bg-subtle"}`,
|
|
601
|
-
title: e.status === "ACTIVE" ?
|
|
602
|
-
children: e.status === "ACTIVE" ? /* @__PURE__ */
|
|
605
|
+
title: e.status === "ACTIVE" ? E("channel.deactivate", "Deactivate") : E("channel.activate", "Activate"),
|
|
606
|
+
children: e.status === "ACTIVE" ? /* @__PURE__ */ x(y, { size: 14 }) : /* @__PURE__ */ x(le, { size: 14 })
|
|
603
607
|
})
|
|
604
608
|
})
|
|
605
609
|
]
|
|
606
|
-
}),
|
|
610
|
+
}), ve === e.id ? /* @__PURE__ */ S("div", {
|
|
607
611
|
className: "flex items-center gap-2",
|
|
608
612
|
children: [
|
|
609
|
-
/* @__PURE__ */
|
|
613
|
+
/* @__PURE__ */ x("span", {
|
|
610
614
|
className: "text-xs text-muted-foreground",
|
|
611
|
-
children:
|
|
615
|
+
children: E("channel.deleteQuestion", "Delete?")
|
|
612
616
|
}),
|
|
613
|
-
/* @__PURE__ */
|
|
617
|
+
/* @__PURE__ */ x("button", {
|
|
614
618
|
type: "button",
|
|
615
|
-
onClick: () =>
|
|
619
|
+
onClick: () => Ce(e.id),
|
|
616
620
|
disabled: o,
|
|
617
621
|
className: "px-2 py-1 text-xs text-status-error-text hover:bg-status-error-bg-subtle rounded transition-colors cursor-pointer disabled:cursor-not-allowed",
|
|
618
|
-
children: o ? "..." :
|
|
622
|
+
children: o ? "..." : E("channel.yes", "Yes")
|
|
619
623
|
}),
|
|
620
|
-
/* @__PURE__ */
|
|
624
|
+
/* @__PURE__ */ x("button", {
|
|
621
625
|
type: "button",
|
|
622
626
|
onClick: () => D(null),
|
|
623
627
|
className: "px-2 py-1 text-xs text-muted-foreground hover:bg-muted rounded transition-colors cursor-pointer",
|
|
624
|
-
children:
|
|
628
|
+
children: E("channel.no", "No")
|
|
625
629
|
})
|
|
626
630
|
]
|
|
627
|
-
}) : /* @__PURE__ */
|
|
631
|
+
}) : /* @__PURE__ */ x(s, {
|
|
628
632
|
permission: c.CHANNEL_DELETE,
|
|
629
|
-
children: /* @__PURE__ */
|
|
633
|
+
children: /* @__PURE__ */ x("button", {
|
|
630
634
|
type: "button",
|
|
631
635
|
onClick: () => D(e.id),
|
|
632
636
|
className: "p-1.5 text-muted-foreground hover:text-status-error-text hover:bg-status-error-bg-subtle rounded transition-colors cursor-pointer",
|
|
633
|
-
title:
|
|
634
|
-
children: /* @__PURE__ */
|
|
637
|
+
title: E("channel.deleteChannel", "Delete Channel"),
|
|
638
|
+
children: /* @__PURE__ */ x(pe, { size: 14 })
|
|
635
639
|
})
|
|
636
640
|
})]
|
|
637
641
|
})
|
|
@@ -639,55 +643,55 @@ function D() {
|
|
|
639
643
|
}, e.id);
|
|
640
644
|
})
|
|
641
645
|
}),
|
|
642
|
-
|
|
646
|
+
B > F && /* @__PURE__ */ S("div", {
|
|
643
647
|
className: "flex items-center justify-between px-1 py-2",
|
|
644
|
-
children: [/* @__PURE__ */
|
|
648
|
+
children: [/* @__PURE__ */ S("p", {
|
|
645
649
|
className: "text-sm text-muted-foreground",
|
|
646
650
|
children: [
|
|
647
|
-
|
|
651
|
+
E("channel.showing", "Showing"),
|
|
648
652
|
" ",
|
|
649
|
-
/* @__PURE__ */
|
|
653
|
+
/* @__PURE__ */ S("span", {
|
|
650
654
|
className: "font-medium text-foreground",
|
|
651
655
|
children: [
|
|
652
656
|
I * F + 1,
|
|
653
657
|
"–",
|
|
654
|
-
Math.min((I + 1) * F,
|
|
658
|
+
Math.min((I + 1) * F, B)
|
|
655
659
|
]
|
|
656
660
|
}),
|
|
657
661
|
" ",
|
|
658
|
-
|
|
662
|
+
E("channel.of", "of"),
|
|
659
663
|
" ",
|
|
660
|
-
/* @__PURE__ */
|
|
664
|
+
/* @__PURE__ */ x("span", {
|
|
661
665
|
className: "font-medium text-foreground",
|
|
662
|
-
children:
|
|
666
|
+
children: B
|
|
663
667
|
}),
|
|
664
668
|
" ",
|
|
665
|
-
|
|
669
|
+
E("channel.channelsLower", "channels")
|
|
666
670
|
]
|
|
667
|
-
}), /* @__PURE__ */
|
|
671
|
+
}), /* @__PURE__ */ S("div", {
|
|
668
672
|
className: "flex items-center gap-2",
|
|
669
673
|
children: [
|
|
670
|
-
/* @__PURE__ */
|
|
674
|
+
/* @__PURE__ */ x("button", {
|
|
671
675
|
type: "button",
|
|
672
676
|
onClick: () => L((e) => Math.max(0, e - 1)),
|
|
673
677
|
disabled: I === 0,
|
|
674
678
|
className: "px-3 py-1.5 text-sm border border-border rounded-lg hover:bg-muted transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
|
|
675
|
-
children:
|
|
679
|
+
children: E("channel.previous", "Previous")
|
|
676
680
|
}),
|
|
677
|
-
/* @__PURE__ */
|
|
681
|
+
/* @__PURE__ */ S("span", {
|
|
678
682
|
className: "text-sm text-muted-foreground",
|
|
679
683
|
children: [
|
|
680
684
|
I + 1,
|
|
681
685
|
" / ",
|
|
682
|
-
|
|
686
|
+
J
|
|
683
687
|
]
|
|
684
688
|
}),
|
|
685
|
-
/* @__PURE__ */
|
|
689
|
+
/* @__PURE__ */ x("button", {
|
|
686
690
|
type: "button",
|
|
687
|
-
onClick: () => L((e) => Math.min(
|
|
688
|
-
disabled: I >=
|
|
691
|
+
onClick: () => L((e) => Math.min(J - 1, e + 1)),
|
|
692
|
+
disabled: I >= J - 1,
|
|
689
693
|
className: "px-3 py-1.5 text-sm border border-border rounded-lg hover:bg-muted transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
|
|
690
|
-
children:
|
|
694
|
+
children: E("channel.next", "Next")
|
|
691
695
|
})
|
|
692
696
|
]
|
|
693
697
|
})]
|
|
@@ -697,6 +701,6 @@ function D() {
|
|
|
697
701
|
});
|
|
698
702
|
}
|
|
699
703
|
//#endregion
|
|
700
|
-
export {
|
|
704
|
+
export { _e as ChannelsListPage };
|
|
701
705
|
|
|
702
706
|
//# sourceMappingURL=ChannelsListPage.js.map
|