@burdenoff/microfe-channel 2026.624.2 → 2026.625.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.
Files changed (29) hide show
  1. package/dist/channel/modules/channels/pages/ChannelDashboardPage.js +108 -98
  2. package/dist/channel/modules/channels/pages/ChannelDashboardPage.js.map +1 -1
  3. package/dist/channel/modules/channels/pages/ChannelDetailsPage.js +289 -279
  4. package/dist/channel/modules/channels/pages/ChannelDetailsPage.js.map +1 -1
  5. package/dist/channel/modules/channels/pages/ChannelSettingsPage.js +140 -131
  6. package/dist/channel/modules/channels/pages/ChannelSettingsPage.js.map +1 -1
  7. package/dist/channel/modules/channels/pages/ChannelUsersPage.js +170 -173
  8. package/dist/channel/modules/channels/pages/ChannelUsersPage.js.map +1 -1
  9. package/dist/channel/modules/channels/pages/ChannelsListPage.js +127 -120
  10. package/dist/channel/modules/channels/pages/ChannelsListPage.js.map +1 -1
  11. package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js +161 -155
  12. package/dist/channel/modules/channels/pages/ConnectionDetailsPage.js.map +1 -1
  13. package/dist/channel/modules/channels/pages/ConnectionsListPage.js +70 -68
  14. package/dist/channel/modules/channels/pages/ConnectionsListPage.js.map +1 -1
  15. package/dist/channel/modules/channels/pages/CreateChannelPage.js +27 -24
  16. package/dist/channel/modules/channels/pages/CreateChannelPage.js.map +1 -1
  17. package/dist/channel/modules/channels/pages/CreateConnectionPage.js +161 -156
  18. package/dist/channel/modules/channels/pages/CreateConnectionPage.js.map +1 -1
  19. package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js +179 -182
  20. package/dist/channel/modules/channels/pages/DeliveryHistoryPage.js.map +1 -1
  21. package/dist/channel/modules/channels/pages/EditChannelPage.js +130 -122
  22. package/dist/channel/modules/channels/pages/EditChannelPage.js.map +1 -1
  23. package/dist/channel/modules/channels/pages/EditConnectionPage.js +137 -132
  24. package/dist/channel/modules/channels/pages/EditConnectionPage.js.map +1 -1
  25. package/dist/channel/modules/channels/pages/SendMessagePage.js +87 -84
  26. package/dist/channel/modules/channels/pages/SendMessagePage.js.map +1 -1
  27. package/dist/channel/modules/channels/pages/WebhookEventsPage.js +193 -194
  28. package/dist/channel/modules/channels/pages/WebhookEventsPage.js.map +1 -1
  29. package/package.json +2 -2
@@ -2,15 +2,16 @@ import { useChannel as e } from "../../../providers/ChannelProvider.js";
2
2
  import { useChannel as t } from "../../../hooks/useChannels.js";
3
3
  import { PermissionGuard as n } from "../../../components/PermissionGuard.js";
4
4
  import { CHANNEL_PERMISSIONS as r } from "../../../constants/permissions.js";
5
- import { useExportChannelUsers as i } from "../hooks/useExport.js";
6
- import { useCallback as a, useEffect as o, useRef as s, useState as c } from "react";
7
- import { useI18n as l } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
- import { AlertCircle as u, ArrowLeft as d, Bell as f, BellOff as p, CheckCircle2 as m, ChevronLeft as h, ChevronRight as g, Clock as _, Download as v, Loader2 as y, RefreshCw as ee, User as te, UserCheck as ne, XCircle as b } from "lucide-react";
9
- import { useNavigate as x, useParams as S } from "react-router-dom";
10
- import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
11
- import { ResponsiveTable as E } from "@burdenoff/fe-libs/ui";
5
+ import { useExportChannelUsers as ee } from "../hooks/useExport.js";
6
+ import { useCallback as i, useEffect as a, useRef as o, useState as s } from "react";
7
+ import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
+ import { AlertCircle as l, ArrowLeft as u, Bell as d, BellOff as f, CheckCircle2 as p, ChevronLeft as m, ChevronRight as h, Clock as g, Download as _, Loader2 as v, RefreshCw as te, User as ne, UserCheck as re, XCircle as y } from "lucide-react";
9
+ import { useNavigate as b, useParams as ie } from "react-router-dom";
10
+ import { usePermissions as ae } from "@burdenoff/fe-libs/shared/providers/shell";
11
+ import { Fragment as oe, jsx as x, jsxs as S } from "react/jsx-runtime";
12
+ import { CTAOverflowMenu as C, GlassCard as w, ResponsiveTable as T } from "@burdenoff/fe-libs/ui";
12
13
  //#region src/channel/modules/channels/pages/ChannelUsersPage.tsx
13
- var D = {
14
+ var E = {
14
15
  ONLINE: {
15
16
  label: "Online",
16
17
  color: "text-status-success-text"
@@ -27,76 +28,76 @@ var D = {
27
28
  label: "Do Not Disturb",
28
29
  color: "text-status-error-text"
29
30
  }
30
- }, O = {
31
+ }, D = {
31
32
  PENDING: {
32
33
  label: "Pending",
33
34
  color: "text-status-warning-text bg-status-warning-bg-subtle",
34
- icon: _
35
+ icon: g
35
36
  },
36
37
  APPROVED: {
37
38
  label: "Approved",
38
39
  color: "text-status-success-text bg-status-success-bg-subtle",
39
- icon: m
40
+ icon: p
40
41
  },
41
42
  EXPIRED: {
42
43
  label: "Expired",
43
44
  color: "text-text-secondary bg-bg-sunken",
44
- icon: b
45
+ icon: y
45
46
  }
46
47
  };
47
- function k() {
48
- let { channelId: m } = S(), _ = x(), { t: k } = l(), A = (e, t) => {
49
- let n = k(e);
48
+ function O() {
49
+ let { channelId: p } = ie(), g = b(), { hasPermission: O } = ae(), k = O(r.CHANNEL_USER_EXPORT), { t: A } = c(), j = (e, t) => {
50
+ let n = A(e);
50
51
  return n === e ? t : n;
51
- }, { organizationId: j } = e(), { triggerExport: re, isExporting: M, exportError: N } = i(j ?? void 0, m), [P, F] = c(!0), [I, L] = c([]), [R, z] = c(25), [B, V] = c(0), [H, U] = c(0), { channel: W, isLoading: G, error: K, fetchUserPlatformConnections: q } = t(m), J = a(async (e = 0) => {
52
- if (m) {
53
- F(!0);
52
+ }, { organizationId: M } = e(), { triggerExport: N, isExporting: P, exportError: F } = ee(M ?? void 0, p), [I, L] = s(!0), [R, z] = s([]), [B, V] = s(25), [H, U] = s(0), [W, G] = s(0), { channel: K, isLoading: se, error: q, fetchUserPlatformConnections: J } = t(p), Y = i(async (e = 0) => {
53
+ if (p) {
54
+ L(!0);
54
55
  try {
55
- let t = await q(R, e * R);
56
- L(t.items), V(t.total);
56
+ let t = await J(B, e * B);
57
+ z(t.items), U(t.total);
57
58
  } finally {
58
- F(!1);
59
+ L(!1);
59
60
  }
60
61
  }
61
62
  }, [
62
- m,
63
- q,
64
- R
65
- ]), Y = s(J);
66
- o(() => {
67
- Y.current = J;
63
+ p,
64
+ J,
65
+ B
66
+ ]), X = o(Y);
67
+ a(() => {
68
+ X.current = Y;
68
69
  });
69
- let X = s(!0), Z = s(!1);
70
- o(() => {
70
+ let Z = o(!0), Q = o(!1);
71
+ a(() => {
71
72
  Promise.resolve().then(() => {
72
- Z.current = !0, U(0), Y.current(0).finally(() => {
73
- Z.current = !1;
73
+ Q.current = !0, G(0), X.current(0).finally(() => {
74
+ Q.current = !1;
74
75
  });
75
76
  });
76
- }, [R]), o(() => {
77
- if (X.current) {
78
- X.current = !1;
77
+ }, [B]), a(() => {
78
+ if (Z.current) {
79
+ Z.current = !1;
79
80
  return;
80
81
  }
81
- Z.current || Promise.resolve().then(() => Y.current(H));
82
- }, [H]);
83
- let Q = Math.max(1, Math.ceil(B / R)), $ = H > 0, ie = H < Q - 1, ae = (e) => D[e] || D.OFFLINE, oe = (e) => O[e] || O.EXPIRED, se = [
82
+ Q.current || Promise.resolve().then(() => X.current(W));
83
+ }, [W]);
84
+ let $ = Math.max(1, Math.ceil(H / B)), ce = W > 0, le = W < $ - 1, ue = (e) => E[e] || E.OFFLINE, de = (e) => D[e] || D.EXPIRED, fe = [
84
85
  {
85
86
  key: "user",
86
- header: A("channel.user", "User"),
87
+ header: j("channel.user", "User"),
87
88
  priority: "primary",
88
- cell: (e) => /* @__PURE__ */ T("div", {
89
+ cell: (e) => /* @__PURE__ */ S("div", {
89
90
  className: "flex items-center gap-3",
90
- children: [/* @__PURE__ */ w("div", {
91
+ children: [/* @__PURE__ */ x("div", {
91
92
  className: "size-8 bg-accent-primary/10 rounded-full flex items-center justify-center",
92
- children: /* @__PURE__ */ w(te, {
93
+ children: /* @__PURE__ */ x(ne, {
93
94
  size: 16,
94
95
  className: "text-accent-primary"
95
96
  })
96
- }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("p", {
97
+ }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("p", {
97
98
  className: "text-sm font-medium text-text-primary",
98
99
  children: e.externalDisplayName || "Unknown"
99
- }), e.externalUsername && /* @__PURE__ */ w("p", {
100
+ }), e.externalUsername && /* @__PURE__ */ x("p", {
100
101
  className: "text-xs text-text-secondary",
101
102
  children: e.externalUsername
102
103
  })] })]
@@ -104,29 +105,29 @@ function k() {
104
105
  },
105
106
  {
106
107
  key: "platformId",
107
- header: A("channel.platformId", "Platform ID"),
108
+ header: j("channel.platformId", "Platform ID"),
108
109
  priority: "secondary",
109
110
  cellClassName: "text-sm font-mono text-text-secondary",
110
111
  cell: (e) => e.externalUserId
111
112
  },
112
113
  {
113
114
  key: "source",
114
- header: A("channel.source", "Source"),
115
+ header: j("channel.source", "Source"),
115
116
  priority: "secondary",
116
- cell: (e) => /* @__PURE__ */ w("span", {
117
+ cell: (e) => /* @__PURE__ */ x("span", {
117
118
  className: "text-xs text-text-secondary bg-bg-sunken px-2 py-1 rounded",
118
119
  children: e.source
119
120
  })
120
121
  },
121
122
  {
122
123
  key: "status",
123
- header: A("channel.status", "Status"),
124
+ header: j("channel.status", "Status"),
124
125
  priority: "primary",
125
126
  cell: (e) => {
126
- let t = ae(e.presenceStatus);
127
- return /* @__PURE__ */ T("div", {
127
+ let t = ue(e.presenceStatus);
128
+ return /* @__PURE__ */ S("div", {
128
129
  className: "flex items-center gap-2",
129
- children: [/* @__PURE__ */ w("span", { className: `w-2 h-2 rounded-full ${t.color.replace("text-", "bg-")}` }), /* @__PURE__ */ w("span", {
130
+ children: [/* @__PURE__ */ x("span", { className: `w-2 h-2 rounded-full ${t.color.replace("text-", "bg-")}` }), /* @__PURE__ */ x("span", {
130
131
  className: `text-sm ${t.color}`,
131
132
  children: t.label
132
133
  })]
@@ -135,14 +136,14 @@ function k() {
135
136
  },
136
137
  {
137
138
  key: "pairing",
138
- header: A("channel.pairing", "Pairing"),
139
+ header: j("channel.pairing", "Pairing"),
139
140
  priority: "secondary",
140
141
  cell: (e) => {
141
- let t = e.pairingStatus ? oe(e.pairingStatus) : null, n = t?.icon ?? b;
142
- return e.pairingStatus && t ? /* @__PURE__ */ T("span", {
142
+ let t = e.pairingStatus ? de(e.pairingStatus) : null, n = t?.icon ?? y;
143
+ return e.pairingStatus && t ? /* @__PURE__ */ S("span", {
143
144
  className: `inline-flex items-center gap-1 text-xs px-2 py-1 rounded ${t.color}`,
144
- children: [/* @__PURE__ */ w(n, { size: 12 }), t.label]
145
- }) : /* @__PURE__ */ w("span", {
145
+ children: [/* @__PURE__ */ x(n, { size: 12 }), t.label]
146
+ }) : /* @__PURE__ */ x("span", {
146
147
  className: "text-xs text-text-secondary",
147
148
  children: "-"
148
149
  });
@@ -150,219 +151,215 @@ function k() {
150
151
  },
151
152
  {
152
153
  key: "notifications",
153
- header: A("channel.notifications", "Notifications"),
154
+ header: j("channel.notifications", "Notifications"),
154
155
  priority: "secondary",
155
- cell: (e) => e.notificationsEnabled ? /* @__PURE__ */ T("span", {
156
+ cell: (e) => e.notificationsEnabled ? /* @__PURE__ */ S("span", {
156
157
  className: "inline-flex items-center gap-1",
157
- children: [/* @__PURE__ */ w(f, {
158
+ children: [/* @__PURE__ */ x(d, {
158
159
  size: 16,
159
160
  className: "text-status-success-text",
160
161
  "aria-hidden": "true"
161
- }), /* @__PURE__ */ w("span", {
162
+ }), /* @__PURE__ */ x("span", {
162
163
  className: "sr-only",
163
- children: A("channel.enabled", "Enabled")
164
+ children: j("channel.enabled", "Enabled")
164
165
  })]
165
- }) : /* @__PURE__ */ T("span", {
166
+ }) : /* @__PURE__ */ S("span", {
166
167
  className: "inline-flex items-center gap-1",
167
- children: [/* @__PURE__ */ w(p, {
168
+ children: [/* @__PURE__ */ x(f, {
168
169
  size: 16,
169
170
  className: "text-text-secondary",
170
171
  "aria-hidden": "true"
171
- }), /* @__PURE__ */ w("span", {
172
+ }), /* @__PURE__ */ x("span", {
172
173
  className: "sr-only",
173
- children: A("channel.disabled", "Disabled")
174
+ children: j("channel.disabled", "Disabled")
174
175
  })]
175
176
  })
176
177
  },
177
178
  {
178
179
  key: "dmAllowed",
179
- header: A("channel.dmAllowed", "DM Allowed"),
180
+ header: j("channel.dmAllowed", "DM Allowed"),
180
181
  priority: "secondary",
181
- cell: (e) => e.dmAllowed ? /* @__PURE__ */ T("span", {
182
+ cell: (e) => e.dmAllowed ? /* @__PURE__ */ S("span", {
182
183
  className: "inline-flex items-center gap-1 text-sm text-status-success-text",
183
- children: [/* @__PURE__ */ w(ne, { size: 16 }), A("channel.allowed", "Allowed")]
184
- }) : /* @__PURE__ */ T("span", {
184
+ children: [/* @__PURE__ */ x(re, { size: 16 }), j("channel.allowed", "Allowed")]
185
+ }) : /* @__PURE__ */ S("span", {
185
186
  className: "inline-flex items-center gap-1 text-sm text-text-secondary",
186
- children: [/* @__PURE__ */ w(b, { size: 16 }), A("channel.blocked", "Blocked")]
187
+ children: [/* @__PURE__ */ x(y, { size: 16 }), j("channel.blocked", "Blocked")]
187
188
  })
188
189
  }
189
190
  ];
190
- return G ? /* @__PURE__ */ w("div", {
191
+ return se ? /* @__PURE__ */ x("div", {
191
192
  className: "flex items-center justify-center min-h-screen",
192
- children: /* @__PURE__ */ w(y, {
193
+ children: /* @__PURE__ */ x(v, {
193
194
  size: 32,
194
195
  className: "animate-spin text-accent-primary"
195
196
  })
196
- }) : K || !W ? /* @__PURE__ */ w("div", {
197
+ }) : q || !K ? /* @__PURE__ */ x("div", {
197
198
  className: "p-6",
198
- children: /* @__PURE__ */ T("div", {
199
+ children: /* @__PURE__ */ S("div", {
199
200
  className: "flex items-center gap-3 p-4 bg-status-error-bg-subtle border border-status-error-border rounded-lg",
200
201
  children: [
201
- /* @__PURE__ */ w(u, {
202
+ /* @__PURE__ */ x(l, {
202
203
  size: 20,
203
204
  className: "text-status-error-text"
204
205
  }),
205
- /* @__PURE__ */ w("div", { children: /* @__PURE__ */ w("p", {
206
+ /* @__PURE__ */ x("div", { children: /* @__PURE__ */ x("p", {
206
207
  className: "text-sm font-medium text-status-error-text",
207
- children: K || "Channel not found"
208
+ children: q || "Channel not found"
208
209
  }) }),
209
- /* @__PURE__ */ w("button", {
210
+ /* @__PURE__ */ x("button", {
210
211
  type: "button",
211
- onClick: () => _(`/channels/${m}`),
212
+ onClick: () => g(`/channels/${p}`),
212
213
  className: "ml-auto px-3 py-1 text-sm text-status-error-text hover:bg-status-error-bg-subtle rounded transition-colors",
213
214
  children: "Go Back"
214
215
  })
215
216
  ]
216
217
  })
217
- }) : /* @__PURE__ */ w(n, {
218
+ }) : /* @__PURE__ */ x(n, {
218
219
  permission: r.USER_PLATFORM_CONNECTION_READ,
219
- children: /* @__PURE__ */ T("div", {
220
+ children: /* @__PURE__ */ S("div", {
220
221
  className: "space-y-6 p-3 sm:p-6",
221
222
  children: [
222
- /* @__PURE__ */ T("div", {
223
+ /* @__PURE__ */ S("div", {
223
224
  className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
224
- children: [/* @__PURE__ */ T("div", {
225
+ children: [/* @__PURE__ */ S("div", {
225
226
  className: "flex items-center gap-3",
226
- children: [/* @__PURE__ */ w("button", {
227
+ children: [/* @__PURE__ */ x("button", {
227
228
  type: "button",
228
- onClick: () => _(`/channels/${m}`),
229
- "aria-label": A("channel.backToChannel", "Back to channel"),
229
+ onClick: () => g(`/channels/${p}`),
230
+ "aria-label": j("channel.backToChannel", "Back to channel"),
230
231
  className: "p-2 text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-lg transition-colors",
231
- children: /* @__PURE__ */ w(d, {
232
+ children: /* @__PURE__ */ x(u, {
232
233
  size: 20,
233
234
  "aria-hidden": "true"
234
235
  })
235
- }), /* @__PURE__ */ T("div", { children: [/* @__PURE__ */ w("h1", {
236
+ }), /* @__PURE__ */ S("div", { children: [/* @__PURE__ */ x("h1", {
236
237
  className: "text-xl sm:text-2xl font-bold text-text-primary",
237
- children: A("channel.channelUsers", "Channel Users")
238
- }), /* @__PURE__ */ T("p", {
238
+ children: j("channel.channelUsers", "Channel Users")
239
+ }), /* @__PURE__ */ S("p", {
239
240
  className: "text-sm text-text-secondary mt-1",
240
- children: [W.name, " - User connections"]
241
+ children: [K.name, " - User connections"]
241
242
  })] })]
242
- }), /* @__PURE__ */ T("div", {
243
+ }), /* @__PURE__ */ S("div", {
243
244
  className: "flex items-center gap-3",
244
- children: [
245
- /* @__PURE__ */ T("select", {
246
- value: R,
247
- onChange: (e) => z(Number(e.target.value)),
248
- className: "px-3 py-2 text-sm bg-surface border border-border-subtle rounded-lg focus:outline-none focus:ring-2 focus:ring-accent-primary/50 text-text-primary",
249
- children: [
250
- /* @__PURE__ */ w("option", {
251
- value: 10,
252
- children: "10 results"
253
- }),
254
- /* @__PURE__ */ w("option", {
255
- value: 25,
256
- children: "25 results"
257
- }),
258
- /* @__PURE__ */ w("option", {
259
- value: 50,
260
- children: "50 results"
261
- }),
262
- /* @__PURE__ */ w("option", {
263
- value: 100,
264
- children: "100 results"
265
- })
266
- ]
245
+ children: [/* @__PURE__ */ S("select", {
246
+ value: B,
247
+ onChange: (e) => V(Number(e.target.value)),
248
+ className: "px-3 py-2 text-sm bg-surface border border-border-subtle rounded-lg focus:outline-none focus:ring-2 focus:ring-accent-primary/50 text-text-primary",
249
+ children: [
250
+ /* @__PURE__ */ x("option", {
251
+ value: 10,
252
+ children: "10 results"
253
+ }),
254
+ /* @__PURE__ */ x("option", {
255
+ value: 25,
256
+ children: "25 results"
257
+ }),
258
+ /* @__PURE__ */ x("option", {
259
+ value: 50,
260
+ children: "50 results"
261
+ }),
262
+ /* @__PURE__ */ x("option", {
263
+ value: 100,
264
+ children: "100 results"
265
+ })
266
+ ]
267
+ }), /* @__PURE__ */ x(C, { actions: [{
268
+ label: j("channel.refresh", "Refresh"),
269
+ icon: /* @__PURE__ */ x(te, {
270
+ size: 16,
271
+ className: I ? "animate-spin" : "",
272
+ "aria-hidden": "true"
267
273
  }),
268
- /* @__PURE__ */ T("button", {
269
- type: "button",
270
- onClick: () => void J(H),
271
- disabled: P,
272
- className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-text-secondary hover:text-text-primary hover:bg-bg-sunken rounded-lg transition-colors disabled:opacity-50",
273
- children: [/* @__PURE__ */ w(ee, {
274
- size: 16,
275
- className: P ? "animate-spin" : ""
276
- }), A("channel.refresh", "Refresh")]
274
+ disabled: I,
275
+ onSelect: () => void Y(W)
276
+ }, ...k ? [{
277
+ label: j("channel.export", "Export"),
278
+ icon: P ? /* @__PURE__ */ x(v, {
279
+ size: 16,
280
+ className: "animate-spin",
281
+ "aria-hidden": "true"
282
+ }) : /* @__PURE__ */ x(_, {
283
+ size: 16,
284
+ "aria-hidden": "true"
277
285
  }),
278
- /* @__PURE__ */ w(n, {
279
- permission: r.CHANNEL_USER_EXPORT,
280
- children: /* @__PURE__ */ T("button", {
281
- type: "button",
282
- onClick: () => void re(),
283
- disabled: M,
284
- className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-fg border border-border-subtle hover:bg-bg-elevated rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
285
- title: A("channel.exportCSV", "Export to CSV"),
286
- children: [M ? /* @__PURE__ */ w(y, {
287
- size: 16,
288
- className: "animate-spin"
289
- }) : /* @__PURE__ */ w(v, { size: 16 }), A("channel.export", "Export")]
290
- })
291
- })
292
- ]
286
+ disabled: P,
287
+ onSelect: () => void N()
288
+ }] : []] })]
293
289
  })]
294
290
  }),
295
- N && /* @__PURE__ */ T("div", {
291
+ F && /* @__PURE__ */ S("div", {
296
292
  className: "p-4 bg-status-error-bg-subtle border border-status-error-border rounded-lg flex items-center gap-3",
297
- children: [/* @__PURE__ */ w(u, {
293
+ children: [/* @__PURE__ */ x(l, {
298
294
  size: 20,
299
295
  className: "text-status-error-text"
300
- }), /* @__PURE__ */ w("p", {
296
+ }), /* @__PURE__ */ x("p", {
301
297
  className: "text-sm text-status-error-text flex-1",
302
- children: N
298
+ children: F
303
299
  })]
304
300
  }),
305
- /* @__PURE__ */ w("div", {
306
- className: "p-4 bg-surface border border-border-subtle rounded-lg",
307
- children: /* @__PURE__ */ w("p", {
301
+ /* @__PURE__ */ x(w, {
302
+ treatment: "insight",
303
+ className: "p-4 border-border-seam",
304
+ children: /* @__PURE__ */ x("p", {
308
305
  className: "text-sm text-text-secondary",
309
306
  children: "Users connected to this channel through OAuth or pairing. Manage notification preferences and DM authorization here."
310
307
  })
311
308
  }),
312
- /* @__PURE__ */ w(E, {
313
- columns: se,
314
- data: I,
309
+ /* @__PURE__ */ x(T, {
310
+ columns: fe,
311
+ data: R,
315
312
  rowKey: (e) => e.id,
316
- emptyState: A("channel.noUsersConnected", "No users connected to this channel"),
317
- className: "bg-surface border border-border-subtle rounded-lg"
313
+ emptyState: j("channel.noUsersConnected", "No users connected to this channel"),
314
+ className: "bg-surface border border-border-seam rounded-lg"
318
315
  }),
319
- /* @__PURE__ */ T("div", {
316
+ /* @__PURE__ */ S("div", {
320
317
  className: "flex items-center justify-between",
321
- children: [/* @__PURE__ */ w("p", {
318
+ children: [/* @__PURE__ */ x("p", {
322
319
  className: "text-sm text-text-secondary",
323
- children: B > 0 && /* @__PURE__ */ T(C, { children: [
324
- A("channel.showing", "Showing"),
320
+ children: H > 0 && /* @__PURE__ */ S(oe, { children: [
321
+ j("channel.showing", "Showing"),
325
322
  " ",
326
- /* @__PURE__ */ T("span", {
323
+ /* @__PURE__ */ S("span", {
327
324
  className: "font-medium",
328
325
  children: [
329
- H * R + 1,
326
+ W * B + 1,
330
327
  "–",
331
- Math.min((H + 1) * R, B)
328
+ Math.min((W + 1) * B, H)
332
329
  ]
333
330
  }),
334
331
  " ",
335
- A("channel.of", "of"),
332
+ j("channel.of", "of"),
336
333
  " ",
337
- /* @__PURE__ */ w("span", {
334
+ /* @__PURE__ */ x("span", {
338
335
  className: "font-medium",
339
- children: B
336
+ children: H
340
337
  })
341
338
  ] })
342
- }), /* @__PURE__ */ T("div", {
339
+ }), /* @__PURE__ */ S("div", {
343
340
  className: "flex items-center gap-2",
344
341
  children: [
345
- /* @__PURE__ */ T("button", {
342
+ /* @__PURE__ */ S("button", {
346
343
  type: "button",
347
- onClick: () => U((e) => Math.max(0, e - 1)),
348
- disabled: !$ || P,
344
+ onClick: () => G((e) => Math.max(0, e - 1)),
345
+ disabled: !ce || I,
349
346
  className: "flex items-center gap-1 px-3 py-1.5 text-sm border border-border-subtle rounded-lg hover:bg-bg-sunken transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
350
- children: [/* @__PURE__ */ w(h, { size: 16 }), A("channel.previous", "Previous")]
347
+ children: [/* @__PURE__ */ x(m, { size: 16 }), j("channel.previous", "Previous")]
351
348
  }),
352
- /* @__PURE__ */ T("span", {
349
+ /* @__PURE__ */ S("span", {
353
350
  className: "text-sm text-text-secondary",
354
351
  children: [
355
- H + 1,
352
+ W + 1,
356
353
  " / ",
357
- Q
354
+ $
358
355
  ]
359
356
  }),
360
- /* @__PURE__ */ T("button", {
357
+ /* @__PURE__ */ S("button", {
361
358
  type: "button",
362
- onClick: () => U((e) => Math.min(Q - 1, e + 1)),
363
- disabled: !ie || P,
359
+ onClick: () => G((e) => Math.min($ - 1, e + 1)),
360
+ disabled: !le || I,
364
361
  className: "flex items-center gap-1 px-3 py-1.5 text-sm border border-border-subtle rounded-lg hover:bg-bg-sunken transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
365
- children: [A("channel.next", "Next"), /* @__PURE__ */ w(g, { size: 16 })]
362
+ children: [j("channel.next", "Next"), /* @__PURE__ */ x(h, { size: 16 })]
366
363
  })
367
364
  ]
368
365
  })]
@@ -372,6 +369,6 @@ function k() {
372
369
  });
373
370
  }
374
371
  //#endregion
375
- export { k as ChannelUsersPage };
372
+ export { O as ChannelUsersPage };
376
373
 
377
374
  //# sourceMappingURL=ChannelUsersPage.js.map