@sparkelf/dsh-group-chat 0.4.2 → 0.5.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/README.md +27 -0
- package/lib/client.js +237 -131
- package/lib/client.js.map +1 -1
- package/lib/index.js +527 -47
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -80,6 +80,33 @@ the session id because `SessionHeader` carries no free-form metadata field. An
|
|
|
80
80
|
ordinary session never matches that prefix, which is the second half of how this
|
|
81
81
|
plugin stays out of the way.
|
|
82
82
|
|
|
83
|
+
Opening a room is a **resolve-or-create**: the plugin resolves the persisted session
|
|
84
|
+
first and only calls the controller's create path when the session does not exist. A
|
|
85
|
+
create call is not a create-or-reuse call — once the named session has run a turn the
|
|
86
|
+
controller mints a fresh `session-<uuid>` instead — so calling it on every host restart
|
|
87
|
+
would leave a throwaway session directory behind. Older builds did exactly that; a
|
|
88
|
+
room could grow to thousands of directories and slow the shell's `session/list`.
|
|
89
|
+
|
|
90
|
+
A workspace upgraded from such a build can report or remove the leftovers for one room:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Report (default; no writes)
|
|
94
|
+
curl -sS -X POST http://127.0.0.1:3080/dsh-group-chat/api/rooms/<roomId>/sessions/cleanup \
|
|
95
|
+
-H 'content-type: application/json' -d '{}'
|
|
96
|
+
|
|
97
|
+
# Archive: mark them hidden from grouping surfaces, keep the files
|
|
98
|
+
curl -sS -X POST .../rooms/<roomId>/sessions/cleanup \
|
|
99
|
+
-H 'content-type: application/json' -d '{"dryRun":false}'
|
|
100
|
+
|
|
101
|
+
# Purge: delete the throwaway directories (canonical room session and subagent children are kept)
|
|
102
|
+
curl -sS -X POST .../rooms/<roomId>/sessions/cleanup \
|
|
103
|
+
-H 'content-type: application/json' -d '{"dryRun":false,"purge":true,"confirm":"<roomId>"}'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The canonical `group-room-<roomId>` session is never a cleanup candidate, so the
|
|
107
|
+
room's history stays openable. If a room has already been dissolved and is no longer
|
|
108
|
+
listed by the backend, pass its project directory explicitly with `"directory": "..."`.
|
|
109
|
+
|
|
83
110
|
## Known limits
|
|
84
111
|
|
|
85
112
|
- **Display names are not authentication.** The backend verifies *who* a caller is
|
package/lib/client.js
CHANGED
|
@@ -513,11 +513,11 @@ window.__ModuleLoader__.load({
|
|
|
513
513
|
document.head.appendChild(tag);
|
|
514
514
|
}
|
|
515
515
|
var Avatar_module_css_default = {
|
|
516
|
+
"stack": "Ohch6W_stack",
|
|
516
517
|
"md": "Ohch6W_md",
|
|
518
|
+
"over": "Ohch6W_over",
|
|
517
519
|
"avatar": "Ohch6W_avatar",
|
|
518
|
-
"
|
|
519
|
-
"sm": "Ohch6W_sm",
|
|
520
|
-
"over": "Ohch6W_over"
|
|
520
|
+
"sm": "Ohch6W_sm"
|
|
521
521
|
};
|
|
522
522
|
//#endregion
|
|
523
523
|
//#region src/client/Avatar.tsx
|
|
@@ -557,12 +557,12 @@ window.__ModuleLoader__.load({
|
|
|
557
557
|
document.head.appendChild(tag);
|
|
558
558
|
}
|
|
559
559
|
var Picker_module_css_default = {
|
|
560
|
+
"label": "sKjJ-a_label",
|
|
561
|
+
"secondary": "sKjJ-a_secondary",
|
|
560
562
|
"box": "sKjJ-a_box",
|
|
563
|
+
"rowActive": "sKjJ-a_rowActive",
|
|
561
564
|
"list": "sKjJ-a_list",
|
|
562
565
|
"note": "sKjJ-a_note",
|
|
563
|
-
"label": "sKjJ-a_label",
|
|
564
|
-
"rowActive": "sKjJ-a_rowActive",
|
|
565
|
-
"secondary": "sKjJ-a_secondary",
|
|
566
566
|
"row": "sKjJ-a_row"
|
|
567
567
|
};
|
|
568
568
|
//#endregion
|
|
@@ -736,11 +736,11 @@ window.__ModuleLoader__.load({
|
|
|
736
736
|
document.head.appendChild(tag);
|
|
737
737
|
}
|
|
738
738
|
var PresetSelect_module_css_default = {
|
|
739
|
+
"description": "xjnmxG_description",
|
|
739
740
|
"trigger": "xjnmxG_trigger",
|
|
740
741
|
"name": "xjnmxG_name",
|
|
741
|
-
"
|
|
742
|
-
"row": "xjnmxG_row"
|
|
743
|
-
"triggerLabel": "xjnmxG_triggerLabel"
|
|
742
|
+
"triggerLabel": "xjnmxG_triggerLabel",
|
|
743
|
+
"row": "xjnmxG_row"
|
|
744
744
|
};
|
|
745
745
|
//#endregion
|
|
746
746
|
//#region src/client/PresetSelect.tsx
|
|
@@ -998,23 +998,23 @@ window.__ModuleLoader__.load({
|
|
|
998
998
|
document.head.appendChild(tag);
|
|
999
999
|
}
|
|
1000
1000
|
var CreateRoomDialog_module_css_default = {
|
|
1001
|
-
"field": "Z3w8WW_field",
|
|
1002
1001
|
"pill": "Z3w8WW_pill",
|
|
1002
|
+
"hint": "Z3w8WW_hint",
|
|
1003
|
+
"field": "Z3w8WW_field",
|
|
1003
1004
|
"label": "Z3w8WW_label",
|
|
1004
|
-
"
|
|
1005
|
+
"triggerExtra": "Z3w8WW_triggerExtra",
|
|
1006
|
+
"pillActive": "Z3w8WW_pillActive",
|
|
1007
|
+
"body": "Z3w8WW_body",
|
|
1008
|
+
"notice": "Z3w8WW_notice",
|
|
1005
1009
|
"footer": "Z3w8WW_footer",
|
|
1010
|
+
"error": "Z3w8WW_error",
|
|
1006
1011
|
"policyRow": "Z3w8WW_policyRow",
|
|
1007
|
-
"memberRow": "Z3w8WW_memberRow",
|
|
1008
1012
|
"switches": "Z3w8WW_switches",
|
|
1009
|
-
"
|
|
1010
|
-
"hint": "Z3w8WW_hint",
|
|
1011
|
-
"pillActive": "Z3w8WW_pillActive",
|
|
1012
|
-
"body": "Z3w8WW_body",
|
|
1013
|
+
"memberName": "Z3w8WW_memberName",
|
|
1013
1014
|
"memberBadge": "Z3w8WW_memberBadge",
|
|
1014
|
-
"
|
|
1015
|
-
"
|
|
1016
|
-
"
|
|
1017
|
-
"memberList": "Z3w8WW_memberList"
|
|
1015
|
+
"memberRow": "Z3w8WW_memberRow",
|
|
1016
|
+
"memberList": "Z3w8WW_memberList",
|
|
1017
|
+
"warn": "Z3w8WW_warn"
|
|
1018
1018
|
};
|
|
1019
1019
|
//#endregion
|
|
1020
1020
|
//#region src/client/CreateRoomDialog.tsx
|
|
@@ -1281,28 +1281,28 @@ window.__ModuleLoader__.load({
|
|
|
1281
1281
|
document.head.appendChild(tag);
|
|
1282
1282
|
}
|
|
1283
1283
|
var InviteDialog_module_css_default = {
|
|
1284
|
-
"
|
|
1285
|
-
"inviteSpin": "r4uCba_inviteSpin",
|
|
1286
|
-
"chip": "r4uCba_chip",
|
|
1287
|
-
"checkHidden": "r4uCba_checkHidden",
|
|
1288
|
-
"chips": "r4uCba_chips",
|
|
1289
|
-
"error": "r4uCba_error",
|
|
1290
|
-
"field": "r4uCba_field",
|
|
1291
|
-
"row": "r4uCba_row",
|
|
1292
|
-
"visuallyHidden": "r4uCba_visuallyHidden",
|
|
1284
|
+
"content": "r4uCba_content",
|
|
1293
1285
|
"rowSelected": "r4uCba_rowSelected",
|
|
1294
|
-
"
|
|
1295
|
-
"rowName": "r4uCba_rowName",
|
|
1296
|
-
"errorRow": "r4uCba_errorRow",
|
|
1286
|
+
"search": "r4uCba_search",
|
|
1297
1287
|
"chipRemove": "r4uCba_chipRemove",
|
|
1288
|
+
"rowName": "r4uCba_rowName",
|
|
1289
|
+
"searchRow": "r4uCba_searchRow",
|
|
1298
1290
|
"chipName": "r4uCba_chipName",
|
|
1291
|
+
"row": "r4uCba_row",
|
|
1292
|
+
"chips": "r4uCba_chips",
|
|
1293
|
+
"visuallyHidden": "r4uCba_visuallyHidden",
|
|
1299
1294
|
"rowHandle": "r4uCba_rowHandle",
|
|
1300
|
-
"
|
|
1301
|
-
"content": "r4uCba_content",
|
|
1302
|
-
"spinner": "r4uCba_spinner",
|
|
1303
|
-
"list": "r4uCba_list",
|
|
1295
|
+
"errorRow": "r4uCba_errorRow",
|
|
1304
1296
|
"dialog": "r4uCba_dialog",
|
|
1305
|
-
"
|
|
1297
|
+
"list": "r4uCba_list",
|
|
1298
|
+
"inviteSpin": "r4uCba_inviteSpin",
|
|
1299
|
+
"check": "r4uCba_check",
|
|
1300
|
+
"chip": "r4uCba_chip",
|
|
1301
|
+
"note": "r4uCba_note",
|
|
1302
|
+
"checkHidden": "r4uCba_checkHidden",
|
|
1303
|
+
"error": "r4uCba_error",
|
|
1304
|
+
"field": "r4uCba_field",
|
|
1305
|
+
"spinner": "r4uCba_spinner"
|
|
1306
1306
|
};
|
|
1307
1307
|
//#endregion
|
|
1308
1308
|
//#region src/client/RoomDialogs.tsx
|
|
@@ -1909,7 +1909,7 @@ window.__ModuleLoader__.load({
|
|
|
1909
1909
|
}
|
|
1910
1910
|
//#endregion
|
|
1911
1911
|
//#region \0dsh-css:/root/projects/dsh-plugins-plus/packages/group-chat/src/client/SidebarRooms.module.css.mjs
|
|
1912
|
-
const css$4 = ".s0QgKq_root{--dsh-session-list-edge-inset:var(--dsh-sidebar-inline-padding,12px);--dsh-session-list-scrollbar-width:5px;--dsh-session-list-scrollbar-offset:2px;box-sizing:border-box;flex-direction:column;flex:auto;width:100%;min-width:0;min-height:0;max-height:20vh;display:flex;position:relative}.s0QgKq_resizer{z-index:1;cursor:row-resize;touch-action:none;background:0 0;height:6px;position:absolute;top:-3px;left:0;right:0}.s0QgKq_resizer:after{content:\"\";background:var(--dsw-alias-border-l1,var(--dsw-alias-separator-primary));opacity:0;border-radius:1px;height:1px;transition:opacity .12s;position:absolute;top:3px;left:8px;right:8px}.s0QgKq_root:hover .s0QgKq_resizer:after,.s0QgKq_resizer:focus-visible:after{opacity:1}.s0QgKq_resizer:focus-visible{outline:none}.s0QgKq_resizer:focus-visible:after{background:var(--dsw-alias-brand-primary,var(--dsw-alias-label-primary));height:2px}.s0QgKq_sectionHeader{box-sizing:border-box;border-radius:var(--dsw-radius-md);height:36px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:flex-end;align-items:center;gap:4px;margin-bottom:4px;margin-right:-4px;padding-left:4px;display:flex;overflow:hidden}.s0QgKq_sectionLabel{white-space:nowrap;flex:none;min-width:0;max-width:45%;line-height:20px;overflow:hidden}.s0QgKq_searchSlot{box-sizing:border-box;flex:1;align-items:center;min-width:0;max-width:28px;margin-left:auto;padding-left:0;display:flex}.s0QgKq_searchSlotExpanded{box-sizing:border-box;flex:1;align-items:center;min-width:0;max-width:100%;margin-left:auto;padding-right:4px;display:flex}.s0QgKq_search,.s0QgKq_searchExpanded{box-sizing:border-box;border-radius:var(--dsw-radius-sm);width:100%;height:28px;color:var(--dsw-alias-label-secondary);cursor:text;background:0 0;border:none;flex:none;align-items:center;margin:0;padding:0;display:flex;overflow:hidden}.s0QgKq_searchExpanded{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;height:30px;color:var(--dsw-alias-label-caption);margin-inline:0;padding:0 4px 0 0}.s0QgKq_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s0QgKq_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_iconButton:focus-visible,.s0QgKq_searchButton:focus-visible,.s0QgKq_clearButton:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.s0QgKq_searchButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:inherit;cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s0QgKq_searchExpanded .s0QgKq_searchButton{width:28px;height:30px}.s0QgKq_searchButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_searchExpanded .s0QgKq_searchButton:hover{background:0 0}.s0QgKq_searchInput{width:0;min-width:0;color:var(--dsw-alias-label-primary);opacity:0;pointer-events:none;transition:opacity .12s var(--ds-ease-in-out);background:0 0;border:none;outline:none;flex:1;padding:0;font-size:13px;line-height:18px}.s0QgKq_searchExpanded .s0QgKq_searchInput{opacity:1;pointer-events:auto;margin-left:-2px}.s0QgKq_searchInput::placeholder{color:var(--dsw-alias-label-tertiary)}.s0QgKq_clearButton{border-radius:var(--dsw-radius-sm);width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s0QgKq_clearButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_headerActions{flex:none;align-items:center;gap:4px;display:flex}.s0QgKq_viewWrap{display:flex;position:relative}.s0QgKq_listArea{min-height:0;margin-left:-4px;margin-right:calc(-1 * var(--dsh-session-list-edge-inset));flex-direction:column;flex:1;padding-left:4px;display:flex;position:relative}.s0QgKq_list{min-height:0;max-height:100%;margin-left:-4px;margin-right:var(--dsh-session-list-scrollbar-offset);padding-left:4px;padding-right:calc(var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset));scrollbar-gutter:stable;padding-bottom:8px;overflow-y:auto}.s0QgKq_flatList{margin:0;padding:0;list-style:none}.s0QgKq_flatList>*+*{margin-top:2px}.s0QgKq_sessionRow,.s0QgKq_sessionRowSelected{box-sizing:border-box;border-radius:var(--dsw-radius-sm);width:100%;height:32px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:0 8px;font-size:14px;display:flex}.s0QgKq_sessionRow:hover,.s0QgKq_sessionRowSelected{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_rowIcon{width:16px;color:var(--dsw-alias-label-secondary);flex:none;justify-content:center;align-items:center;display:flex}.s0QgKq_title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.s0QgKq_time{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:12px;line-height:17px}.s0QgKq_unread{background:var(--dsw-alias-bg-layer-3,var(--dsw-alias-interactive-bg-hover));min-width:18px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:center;border-radius:9px;flex:none;padding:0 5px;font-size:11px;font-weight:600;line-height:17px}.s0QgKq_unreadMentioned{background:var(--dsw-alias-state-business-primary);min-width:18px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:center;border-radius:9px;flex:none;padding:0 5px;font-size:11px;font-weight:600;line-height:17px}.s0QgKq_empty{color:var(--dsw-alias-label-tertiary);margin:0;padding:16px 12px;font-size:13px}.s0QgKq_emptyState{color:var(--dsw-alias-label-tertiary);text-align:center;flex-direction:column;align-items:center;gap:8px;margin-top:80px;padding:0 12px;font-size:13px;line-height:20px;display:flex}.s0QgKq_emptyState>svg{color:var(--dsw-alias-label-caption);margin-bottom:4px}.s0QgKq_fade{left:0;right:var(--dsh-session-list-edge-inset);background:linear-gradient(to bottom, transparent, var(--dsw-specific-sidebar-fill));pointer-events:none;height:24px;position:absolute;bottom:0}.s0QgKq_menuLayer{z-index:60;max-height:calc(100vh - 16px);position:fixed;overflow-y:auto}.s0QgKq_menuInline{z-index:30;position:absolute;top:32px;right:0}.s0QgKq_menu{border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1,var(--dsw-specific-sidebar-fill));min-width:200px;padding:4px;position:relative;box-shadow:0 6px 20px #0000002e}.s0QgKq_menuHeading{color:var(--dsw-alias-label-tertiary);padding:4px 8px 2px;font-size:11px;line-height:16px;display:block}.s0QgKq_menuItem{border-radius:var(--dsw-radius-sm);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.s0QgKq_menuItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_check{color:var(--dsw-alias-state-business-primary);margin-left:auto}.s0QgKq_visuallyHidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.s0QgKq_rowWrap{position:relative}.s0QgKq_menuRename{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1,var(--dsw-specific-sidebar-fill));min-width:240px;padding:8px;box-shadow:0 6px 20px #0000002e}.s0QgKq_menuRename .s0QgKq_menuHeading{padding:0 0 6px}.s0QgKq_menuInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-sm);appearance:none;background:var(--dsw-alias-bg-base);width:100%;color:var(--dsw-alias-label-primary);font:inherit;outline:none;margin:2px 0 6px;padding:6px 8px;font-size:13px;line-height:20px}.s0QgKq_menuInput:focus-visible{border-color:var(--dsw-alias-state-business-primary)}.s0QgKq_menuInput::placeholder{color:var(--dsw-alias-label-tertiary)}.s0QgKq_menuActions{justify-content:flex-end;gap:6px;padding-top:2px;display:flex}.s0QgKq_menuConfirm{box-sizing:border-box;border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font:inherit;cursor:pointer;border:1px solid #0000;padding:5px 12px;font-size:12px;line-height:18px}.s0QgKq_menuConfirm:hover:not(:disabled){filter:brightness(1.06)}.s0QgKq_menuConfirm:disabled{opacity:.5;cursor:default}.s0QgKq_menuCancel{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;padding:5px 12px;font-size:12px;line-height:18px}.s0QgKq_menuCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_menuItem:disabled{opacity:.5;cursor:default}.s0QgKq_discoverSection{border-top:1px solid var(--dsw-alias-border-l3);margin-top:8px;padding-top:8px}.s0QgKq_discoverHeading{color:var(--dsw-alias-label-tertiary);margin:0 0 4px;padding:0 12px;font-size:11px;line-height:16px}.s0QgKq_discoverRow{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;padding:4px 12px;font-size:13px;line-height:18px;display:flex}.s0QgKq_discoverRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_discoverName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.s0QgKq_discoverMeta{color:var(--dsw-alias-label-tertiary);flex:none;font-size:11px}.s0QgKq_joinButton{border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-state-business-primary);font:inherit;cursor:pointer;background:0 0;flex:none;padding:2px 10px;font-size:12px}.s0QgKq_joinButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_joinButton:disabled{opacity:.5;cursor:default}.s0QgKq_leaveBody{flex-direction:column;gap:8px;min-width:0;display:flex}.s0QgKq_leaveCopy{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;line-height:22px}.s0QgKq_leaveRoomName{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;font-size:14px;line-height:22px}.s0QgKq_leaveRoomName strong{font-weight:600}.s0QgKq_leaveError{color:var(--dsw-alias-state-error-primary,#f85149);margin:0;font-size:12px;line-height:17px}.s0QgKq_footer{justify-content:flex-end;gap:8px;display:flex}.s0QgKq_leaveConfirmDanger{background:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary)}.s0QgKq_leaveConfirmDanger.s0QgKq_leaveConfirmDanger{color:var(--dsw-alias-label-primary)}.s0QgKq_leaveConfirmDanger:hover:not(:disabled){background:var(--dsw-alias-state-error-primary);filter:brightness(1.08)}.s0QgKq_leaveConfirmDanger:disabled{opacity:.5}.s0QgKq_hitList{flex-direction:column;flex:none;gap:2px;max-height:45%;margin-bottom:4px;display:flex;overflow-y:auto}.s0QgKq_hitHint{color:var(--dsw-alias-label-tertiary);margin:2px 8px;font-size:12px;line-height:16px}.s0QgKq_hit{border-radius:var(--dsw-radius-sm);width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;gap:1px;padding:5px 8px;display:flex}.s0QgKq_hit:hover,.s0QgKq_hit:focus-visible{background:var(--dsw-alias-interactive-bg-hover);outline:none}.s0QgKq_hitHead{min-width:0;color:var(--dsw-alias-label-tertiary);align-items:baseline;gap:6px;font-size:11px;line-height:14px;display:flex}.s0QgKq_hitRoom{flex:none;font-weight:500}.s0QgKq_hitAuthor{text-overflow:ellipsis;white-space:nowrap;opacity:.8;min-width:0;overflow:hidden}.s0QgKq_hitText{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;line-height:16px;display:block;overflow:hidden}.s0QgKq_mark{background:var(--dsw-alias-bg-brand-weak,#ffd66659);color:inherit;border-radius:2px;padding:0;font-weight:600}";
|
|
1912
|
+
const css$4 = ".s0QgKq_root{--dsh-session-list-edge-inset:var(--dsh-sidebar-inline-padding,12px);--dsh-session-list-scrollbar-width:5px;--dsh-session-list-scrollbar-offset:2px;box-sizing:border-box;flex-direction:column;flex:auto;width:100%;min-width:0;min-height:0;max-height:20vh;display:flex;position:relative}.s0QgKq_resizer{z-index:1;cursor:row-resize;touch-action:none;background:0 0;height:6px;position:absolute;top:-3px;left:0;right:0}.s0QgKq_resizer:after{content:\"\";background:var(--dsw-alias-border-l1,var(--dsw-alias-separator-primary));opacity:0;border-radius:1px;height:1px;transition:opacity .12s;position:absolute;top:3px;left:8px;right:8px}.s0QgKq_root:hover .s0QgKq_resizer:after,.s0QgKq_resizer:focus-visible:after{opacity:1}.s0QgKq_resizer:focus-visible{outline:none}.s0QgKq_resizer:focus-visible:after{background:var(--dsw-alias-brand-primary,var(--dsw-alias-label-primary));height:2px}.s0QgKq_sectionHeader{box-sizing:border-box;border-radius:var(--dsw-radius-md);height:36px;color:var(--dsw-alias-label-tertiary);flex:none;justify-content:flex-end;align-items:center;gap:4px;margin-bottom:4px;margin-right:-4px;padding-left:4px;display:flex;overflow:hidden}.s0QgKq_sectionLabel{white-space:nowrap;flex:none;min-width:0;max-width:45%;line-height:20px;overflow:hidden}.s0QgKq_searchSlot{box-sizing:border-box;flex:1;align-items:center;min-width:0;max-width:28px;margin-left:auto;padding-left:0;display:flex}.s0QgKq_searchSlotExpanded{box-sizing:border-box;flex:1;align-items:center;min-width:0;max-width:100%;margin-left:auto;padding-right:4px;display:flex}.s0QgKq_search,.s0QgKq_searchExpanded{box-sizing:border-box;border-radius:var(--dsw-radius-sm);width:100%;height:28px;color:var(--dsw-alias-label-secondary);cursor:text;background:0 0;border:none;flex:none;align-items:center;margin:0;padding:0;display:flex;overflow:hidden}.s0QgKq_searchExpanded{border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;height:30px;color:var(--dsw-alias-label-caption);margin-inline:0;padding:0 4px 0 0}.s0QgKq_iconButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s0QgKq_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_iconButton:focus-visible,.s0QgKq_searchButton:focus-visible,.s0QgKq_clearButton:focus-visible{outline:var(--dsw-focus-ring-width,2px) solid var(--dsw-focus-ring-color,var(--dsw-alias-state-business-primary));outline-offset:-2px}.s0QgKq_searchButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:inherit;cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s0QgKq_searchExpanded .s0QgKq_searchButton{width:28px;height:30px}.s0QgKq_searchButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_searchExpanded .s0QgKq_searchButton:hover{background:0 0}.s0QgKq_searchInput{width:0;min-width:0;color:var(--dsw-alias-label-primary);opacity:0;pointer-events:none;transition:opacity .12s var(--ds-ease-in-out);background:0 0;border:none;outline:none;flex:1;padding:0;font-size:13px;line-height:18px}.s0QgKq_searchExpanded .s0QgKq_searchInput{opacity:1;pointer-events:auto;margin-left:-2px}.s0QgKq_searchInput::placeholder{color:var(--dsw-alias-label-tertiary)}.s0QgKq_clearButton{border-radius:var(--dsw-radius-sm);width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}.s0QgKq_clearButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_headerActions{flex:none;align-items:center;gap:4px;display:flex}.s0QgKq_viewWrap{display:flex;position:relative}.s0QgKq_listArea{min-height:0;margin-left:-4px;margin-right:calc(-1 * var(--dsh-session-list-edge-inset));flex-direction:column;flex:1;padding-left:4px;display:flex;position:relative}.s0QgKq_list{min-height:0;max-height:100%;margin-left:-4px;margin-right:var(--dsh-session-list-scrollbar-offset);padding-left:4px;padding-right:calc(var(--dsh-session-list-edge-inset) - var(--dsh-session-list-scrollbar-width) - var(--dsh-session-list-scrollbar-offset));scrollbar-gutter:stable;padding-bottom:8px;overflow-y:auto}.s0QgKq_flatList{margin:0;padding:0;list-style:none}.s0QgKq_flatList>*+*{margin-top:2px}.s0QgKq_sessionRow,.s0QgKq_sessionRowSelected{box-sizing:border-box;border-radius:var(--dsw-radius-sm);width:100%;height:32px;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:0 8px;font-size:14px;display:flex}.s0QgKq_sessionRow:hover,.s0QgKq_sessionRowSelected{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_rowIcon{width:16px;color:var(--dsw-alias-label-secondary);flex:none;justify-content:center;align-items:center;display:flex}.s0QgKq_title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.s0QgKq_time{color:var(--dsw-alias-label-tertiary);font-variant-numeric:tabular-nums;flex:none;font-size:12px;line-height:17px}.s0QgKq_unread{background:var(--dsw-alias-bg-layer-3,var(--dsw-alias-interactive-bg-hover));min-width:18px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:center;border-radius:9px;flex:none;padding:0 5px;font-size:11px;font-weight:600;line-height:17px}.s0QgKq_unreadMentioned{background:var(--dsw-alias-state-business-primary);min-width:18px;color:var(--dsw-alias-label-primary);font-variant-numeric:tabular-nums;text-align:center;border-radius:9px;flex:none;padding:0 5px;font-size:11px;font-weight:600;line-height:17px}.s0QgKq_empty{color:var(--dsw-alias-label-tertiary);margin:0;padding:16px 12px;font-size:13px}.s0QgKq_emptyState{color:var(--dsw-alias-label-tertiary);text-align:center;flex-direction:column;align-items:center;gap:8px;margin-top:80px;padding:0 12px;font-size:13px;line-height:20px;display:flex}.s0QgKq_emptyState>svg{color:var(--dsw-alias-label-caption);margin-bottom:4px}.s0QgKq_fade{left:0;right:var(--dsh-session-list-edge-inset);background:linear-gradient(to bottom, transparent, var(--dsw-specific-sidebar-fill));pointer-events:none;height:24px;position:absolute;bottom:0}.s0QgKq_menuLayer{z-index:60;max-height:calc(100vh - 16px);position:fixed;overflow-y:auto}.s0QgKq_menuInline{z-index:30;position:absolute;top:32px;right:0}.s0QgKq_menu{border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1,var(--dsw-specific-sidebar-fill));min-width:200px;padding:4px;position:relative;box-shadow:0 6px 20px #0000002e}.s0QgKq_menuHeading{color:var(--dsw-alias-label-tertiary);padding:4px 8px 2px;font-size:11px;line-height:16px;display:block}.s0QgKq_menuItem{border-radius:var(--dsw-radius-sm);width:100%;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:13px;display:flex}.s0QgKq_menuItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_check{color:var(--dsw-alias-state-business-primary);margin-left:auto}.s0QgKq_visuallyHidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.s0QgKq_rowWrap{position:relative}.s0QgKq_menuRename{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-md);background:var(--dsw-alias-bg-layer-1,var(--dsw-specific-sidebar-fill));min-width:240px;padding:8px;box-shadow:0 6px 20px #0000002e}.s0QgKq_menuRename .s0QgKq_menuHeading{padding:0 0 6px}.s0QgKq_menuInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-sm);appearance:none;background:var(--dsw-alias-bg-base);width:100%;color:var(--dsw-alias-label-primary);font:inherit;outline:none;margin:2px 0 6px;padding:6px 8px;font-size:13px;line-height:20px}.s0QgKq_menuInput:focus-visible{border-color:var(--dsw-alias-state-business-primary)}.s0QgKq_menuInput::placeholder{color:var(--dsw-alias-label-tertiary)}.s0QgKq_menuActions{justify-content:flex-end;gap:6px;padding-top:2px;display:flex}.s0QgKq_menuConfirm{box-sizing:border-box;border-radius:var(--dsw-radius-sm);background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-foreground);font:inherit;cursor:pointer;border:1px solid #0000;padding:5px 12px;font-size:12px;line-height:18px}.s0QgKq_menuConfirm:hover:not(:disabled){filter:brightness(1.06)}.s0QgKq_menuConfirm:disabled{opacity:.5;cursor:default}.s0QgKq_menuCancel{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer;background:0 0;padding:5px 12px;font-size:12px;line-height:18px}.s0QgKq_menuCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_menuItem:disabled{opacity:.5;cursor:default}.s0QgKq_discoverSection{border-top:1px solid var(--dsw-alias-border-l3);margin-top:8px;padding-top:8px}.s0QgKq_discoverHeading{color:var(--dsw-alias-label-tertiary);margin:0 0 4px;padding:0 12px;font-size:11px;line-height:16px}.s0QgKq_discoverRow{border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;padding:4px 12px;font-size:13px;line-height:18px;display:flex}.s0QgKq_discoverRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_discoverName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.s0QgKq_discoverMeta{color:var(--dsw-alias-label-tertiary);flex:none;font-size:11px}.s0QgKq_joinButton{border:1px solid var(--dsw-alias-border-l3);border-radius:var(--dsw-radius-sm);color:var(--dsw-alias-state-business-primary);font:inherit;cursor:pointer;background:0 0;flex:none;padding:2px 10px;font-size:12px}.s0QgKq_joinButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.s0QgKq_joinButton:disabled{opacity:.5;cursor:default}.s0QgKq_leaveBody{flex-direction:column;gap:8px;min-width:0;display:flex}.s0QgKq_leaveCopy{color:var(--dsw-alias-label-primary);margin:0;font-size:14px;line-height:22px}.s0QgKq_leaveRoomName{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;margin:0;font-size:14px;line-height:22px}.s0QgKq_leaveRoomName strong{font-weight:600}.s0QgKq_leaveError{color:var(--dsw-alias-state-error-primary,#f85149);margin:0;font-size:12px;line-height:17px}.s0QgKq_footer{justify-content:flex-end;gap:8px;display:flex}.s0QgKq_leaveConfirmDanger{background:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-label-primary)}.s0QgKq_leaveConfirmDanger.s0QgKq_leaveConfirmDanger{color:var(--dsw-alias-label-primary)}.s0QgKq_leaveConfirmDanger:hover:not(:disabled){background:var(--dsw-alias-state-error-primary);filter:brightness(1.08)}.s0QgKq_leaveConfirmDanger:disabled{opacity:.5}.s0QgKq_hitList{flex-direction:column;flex:none;gap:2px;max-height:45%;margin-bottom:4px;display:flex;overflow-y:auto}.s0QgKq_hitHint{color:var(--dsw-alias-label-tertiary);margin:2px 8px;font-size:12px;line-height:16px}.s0QgKq_hit{border-radius:var(--dsw-radius-sm);width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;gap:1px;padding:5px 8px;display:flex}.s0QgKq_hit:hover,.s0QgKq_hit:focus-visible{background:var(--dsw-alias-interactive-bg-hover);outline:none}.s0QgKq_hitHead{min-width:0;color:var(--dsw-alias-label-tertiary);align-items:baseline;gap:6px;font-size:11px;line-height:14px;display:flex}.s0QgKq_hitRoom{flex:none;font-weight:500}.s0QgKq_hitAuthor{text-overflow:ellipsis;white-space:nowrap;opacity:.8;min-width:0;overflow:hidden}.s0QgKq_hitText{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;line-height:16px;display:block;overflow:hidden}.s0QgKq_mark{background:var(--dsw-alias-bg-brand-weak,#ffd66659);color:inherit;border-radius:2px;padding:0;font-weight:600}.s0QgKq_railButton{border-radius:var(--dsw-radius-sm);width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;margin:4px auto;padding:0;display:flex}.s0QgKq_railButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.s0QgKq_railButton:focus-visible{outline:1px solid var(--dsw-alias-brand-primary);outline-offset:-2px}";
|
|
1913
1913
|
const tagId$4 = "@sparkelf/dsh-group-chat/SidebarRooms.module.css";
|
|
1914
1914
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
|
|
1915
1915
|
const tag = document.createElement("style");
|
|
@@ -1919,66 +1919,67 @@ window.__ModuleLoader__.load({
|
|
|
1919
1919
|
document.head.appendChild(tag);
|
|
1920
1920
|
}
|
|
1921
1921
|
var SidebarRooms_module_css_default = {
|
|
1922
|
+
"leaveCopy": "s0QgKq_leaveCopy",
|
|
1923
|
+
"leaveRoomName": "s0QgKq_leaveRoomName",
|
|
1924
|
+
"hit": "s0QgKq_hit",
|
|
1925
|
+
"searchButton": "s0QgKq_searchButton",
|
|
1926
|
+
"unread": "s0QgKq_unread",
|
|
1922
1927
|
"listArea": "s0QgKq_listArea",
|
|
1923
|
-
"
|
|
1924
|
-
"hitHint": "s0QgKq_hitHint",
|
|
1925
|
-
"searchSlotExpanded": "s0QgKq_searchSlotExpanded",
|
|
1926
|
-
"leaveError": "s0QgKq_leaveError",
|
|
1927
|
-
"menuInline": "s0QgKq_menuInline",
|
|
1928
|
-
"flatList": "s0QgKq_flatList",
|
|
1929
|
-
"discoverMeta": "s0QgKq_discoverMeta",
|
|
1930
|
-
"discoverSection": "s0QgKq_discoverSection",
|
|
1931
|
-
"unreadMentioned": "s0QgKq_unreadMentioned",
|
|
1928
|
+
"time": "s0QgKq_time",
|
|
1932
1929
|
"menuInput": "s0QgKq_menuInput",
|
|
1933
|
-
"menuConfirm": "s0QgKq_menuConfirm",
|
|
1934
1930
|
"clearButton": "s0QgKq_clearButton",
|
|
1935
|
-
"
|
|
1936
|
-
"
|
|
1937
|
-
"menuCancel": "s0QgKq_menuCancel",
|
|
1938
|
-
"visuallyHidden": "s0QgKq_visuallyHidden",
|
|
1939
|
-
"sessionRow": "s0QgKq_sessionRow",
|
|
1940
|
-
"hitList": "s0QgKq_hitList",
|
|
1931
|
+
"empty": "s0QgKq_empty",
|
|
1932
|
+
"sectionHeader": "s0QgKq_sectionHeader",
|
|
1941
1933
|
"iconButton": "s0QgKq_iconButton",
|
|
1942
|
-
"
|
|
1943
|
-
"sessionRowSelected": "s0QgKq_sessionRowSelected",
|
|
1944
|
-
"search": "s0QgKq_search",
|
|
1934
|
+
"discoverRow": "s0QgKq_discoverRow",
|
|
1945
1935
|
"menuHeading": "s0QgKq_menuHeading",
|
|
1936
|
+
"menuActions": "s0QgKq_menuActions",
|
|
1937
|
+
"flatList": "s0QgKq_flatList",
|
|
1938
|
+
"hitHead": "s0QgKq_hitHead",
|
|
1939
|
+
"searchExpanded": "s0QgKq_searchExpanded",
|
|
1940
|
+
"footer": "s0QgKq_footer",
|
|
1941
|
+
"searchInput": "s0QgKq_searchInput",
|
|
1946
1942
|
"rowWrap": "s0QgKq_rowWrap",
|
|
1947
|
-
"
|
|
1948
|
-
"
|
|
1949
|
-
"
|
|
1950
|
-
"leaveConfirmDanger": "s0QgKq_leaveConfirmDanger",
|
|
1943
|
+
"rowIcon": "s0QgKq_rowIcon",
|
|
1944
|
+
"unreadMentioned": "s0QgKq_unreadMentioned",
|
|
1945
|
+
"menu": "s0QgKq_menu",
|
|
1951
1946
|
"hitAuthor": "s0QgKq_hitAuthor",
|
|
1947
|
+
"hitList": "s0QgKq_hitList",
|
|
1948
|
+
"resizer": "s0QgKq_resizer",
|
|
1949
|
+
"headerActions": "s0QgKq_headerActions",
|
|
1950
|
+
"menuItem": "s0QgKq_menuItem",
|
|
1951
|
+
"hitText": "s0QgKq_hitText",
|
|
1952
|
+
"leaveConfirmDanger": "s0QgKq_leaveConfirmDanger",
|
|
1953
|
+
"joinButton": "s0QgKq_joinButton",
|
|
1954
|
+
"discoverMeta": "s0QgKq_discoverMeta",
|
|
1952
1955
|
"mark": "s0QgKq_mark",
|
|
1953
|
-
"
|
|
1954
|
-
"
|
|
1956
|
+
"searchSlotExpanded": "s0QgKq_searchSlotExpanded",
|
|
1957
|
+
"list": "s0QgKq_list",
|
|
1955
1958
|
"title": "s0QgKq_title",
|
|
1956
|
-
"
|
|
1957
|
-
"check": "s0QgKq_check",
|
|
1958
|
-
"menuActions": "s0QgKq_menuActions",
|
|
1959
|
-
"searchSlot": "s0QgKq_searchSlot",
|
|
1960
|
-
"footer": "s0QgKq_footer",
|
|
1959
|
+
"leaveError": "s0QgKq_leaveError",
|
|
1961
1960
|
"hitRoom": "s0QgKq_hitRoom",
|
|
1962
|
-
"
|
|
1963
|
-
"
|
|
1964
|
-
"menuRename": "s0QgKq_menuRename",
|
|
1965
|
-
"rowIcon": "s0QgKq_rowIcon",
|
|
1966
|
-
"sectionHeader": "s0QgKq_sectionHeader",
|
|
1967
|
-
"searchButton": "s0QgKq_searchButton",
|
|
1968
|
-
"menuItem": "s0QgKq_menuItem",
|
|
1969
|
-
"headerActions": "s0QgKq_headerActions",
|
|
1970
|
-
"menuLayer": "s0QgKq_menuLayer",
|
|
1961
|
+
"searchSlot": "s0QgKq_searchSlot",
|
|
1962
|
+
"search": "s0QgKq_search",
|
|
1971
1963
|
"root": "s0QgKq_root",
|
|
1972
|
-
"
|
|
1973
|
-
"
|
|
1974
|
-
"
|
|
1975
|
-
"
|
|
1976
|
-
"
|
|
1964
|
+
"discoverHeading": "s0QgKq_discoverHeading",
|
|
1965
|
+
"menuCancel": "s0QgKq_menuCancel",
|
|
1966
|
+
"menuLayer": "s0QgKq_menuLayer",
|
|
1967
|
+
"menuRename": "s0QgKq_menuRename",
|
|
1968
|
+
"visuallyHidden": "s0QgKq_visuallyHidden",
|
|
1969
|
+
"emptyState": "s0QgKq_emptyState",
|
|
1970
|
+
"menuConfirm": "s0QgKq_menuConfirm",
|
|
1971
|
+
"railButton": "s0QgKq_railButton",
|
|
1972
|
+
"discoverName": "s0QgKq_discoverName",
|
|
1977
1973
|
"leaveBody": "s0QgKq_leaveBody",
|
|
1978
|
-
"
|
|
1979
|
-
"
|
|
1980
|
-
"
|
|
1981
|
-
"
|
|
1974
|
+
"viewWrap": "s0QgKq_viewWrap",
|
|
1975
|
+
"fade": "s0QgKq_fade",
|
|
1976
|
+
"sessionRowSelected": "s0QgKq_sessionRowSelected",
|
|
1977
|
+
"menuInline": "s0QgKq_menuInline",
|
|
1978
|
+
"check": "s0QgKq_check",
|
|
1979
|
+
"sectionLabel": "s0QgKq_sectionLabel",
|
|
1980
|
+
"hitHint": "s0QgKq_hitHint",
|
|
1981
|
+
"sessionRow": "s0QgKq_sessionRow",
|
|
1982
|
+
"discoverSection": "s0QgKq_discoverSection"
|
|
1982
1983
|
};
|
|
1983
1984
|
//#endregion
|
|
1984
1985
|
//#region src/client/SidebarRooms.tsx
|
|
@@ -2001,12 +2002,12 @@ window.__ModuleLoader__.load({
|
|
|
2001
2002
|
/**
|
|
2002
2003
|
* Height bounds for the region, in pixels.
|
|
2003
2004
|
*
|
|
2004
|
-
* The floor
|
|
2005
|
-
*
|
|
2006
|
-
*
|
|
2005
|
+
* The floor is one room row plus the header; the ceiling keeps the region from crowding
|
|
2006
|
+
* out the workspace list above it, which is the same reason the stylesheet capped it at
|
|
2007
|
+
* `46vh` before this was adjustable. The host clamps to the same pair, so a stored value
|
|
2007
2008
|
* cannot arrive outside the range the region can draw.
|
|
2008
2009
|
*/
|
|
2009
|
-
const HEIGHT_MIN =
|
|
2010
|
+
const HEIGHT_MIN = 80;
|
|
2010
2011
|
const HEIGHT_MAX = 1200;
|
|
2011
2012
|
/** Clamps a requested height into the range the region can draw. */
|
|
2012
2013
|
const clampHeight = (value) => Math.min(HEIGHT_MAX, Math.max(HEIGHT_MIN, Math.round(value)));
|
|
@@ -2045,8 +2046,39 @@ window.__ModuleLoader__.load({
|
|
|
2045
2046
|
if (from < text.length) parts.push(text.slice(from));
|
|
2046
2047
|
return parts;
|
|
2047
2048
|
};
|
|
2049
|
+
/**
|
|
2050
|
+
* The collapsed rail's stand-in for this region: one icon, no rows.
|
|
2051
|
+
*
|
|
2052
|
+
* `onSelect` is the same "open the group chat" action the room list header offers, so the
|
|
2053
|
+
* collapsed rail is not a dead end — clicking it gets the reader to the rooms.
|
|
2054
|
+
* @param props - the realm's injected copy resolver and the open action.
|
|
2055
|
+
* @returns The compact control.
|
|
2056
|
+
*/
|
|
2057
|
+
function SidebarRoomsCollapsed(props) {
|
|
2058
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
|
|
2059
|
+
label: props.t("title"),
|
|
2060
|
+
side: "right",
|
|
2061
|
+
delayMs: 400,
|
|
2062
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
2063
|
+
type: "button",
|
|
2064
|
+
className: SidebarRooms_module_css_default["railButton"],
|
|
2065
|
+
"aria-label": props.t("title"),
|
|
2066
|
+
onClick: props.onOpen,
|
|
2067
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconQueueOutlineRegular, { size: 18 })
|
|
2068
|
+
})
|
|
2069
|
+
});
|
|
2070
|
+
}
|
|
2048
2071
|
function SidebarRooms(props) {
|
|
2049
2072
|
const { t, tPreset, store } = props;
|
|
2073
|
+
if (props.wide === false) {
|
|
2074
|
+
const firstRoom = store.getState().rooms?.[0];
|
|
2075
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarRoomsCollapsed, {
|
|
2076
|
+
t,
|
|
2077
|
+
onOpen: () => {
|
|
2078
|
+
if (firstRoom !== void 0) store.open(firstRoom.id);
|
|
2079
|
+
}
|
|
2080
|
+
});
|
|
2081
|
+
}
|
|
2050
2082
|
const { rooms, activeRoomId, failure, searchQuery, discoverable } = (0, react.useSyncExternalStore)(store.subscribe, store.getState, store.getState);
|
|
2051
2083
|
const [searchExpanded, setSearchExpanded] = (0, react.useState)(false);
|
|
2052
2084
|
const [viewOpen, setViewOpen] = (0, react.useState)(false);
|
|
@@ -3042,18 +3074,18 @@ window.__ModuleLoader__.load({
|
|
|
3042
3074
|
var MessageSide_module_css_default = {
|
|
3043
3075
|
"replyButton": "KXabfq_replyButton",
|
|
3044
3076
|
"quoteAuthor": "KXabfq_quoteAuthor",
|
|
3077
|
+
"quoteText": "KXabfq_quoteText",
|
|
3045
3078
|
"quoteMark": "KXabfq_quoteMark",
|
|
3046
|
-
"
|
|
3047
|
-
"rowActionsSelf": "KXabfq_rowActionsSelf",
|
|
3048
|
-
"quoteBar": "KXabfq_quoteBar",
|
|
3079
|
+
"rowActions": "KXabfq_rowActions",
|
|
3049
3080
|
"quoteBody": "KXabfq_quoteBody",
|
|
3050
|
-
"
|
|
3051
|
-
"quoteText": "KXabfq_quoteText",
|
|
3081
|
+
"quoteBar": "KXabfq_quoteBar",
|
|
3052
3082
|
"authorName": "KXabfq_authorName",
|
|
3083
|
+
"selfBody": "KXabfq_selfBody",
|
|
3084
|
+
"author": "KXabfq_author",
|
|
3085
|
+
"rowActionsSelf": "KXabfq_rowActionsSelf",
|
|
3053
3086
|
"selfRow": "KXabfq_selfRow",
|
|
3054
3087
|
"rowBody": "KXabfq_rowBody",
|
|
3055
|
-
"
|
|
3056
|
-
"rowActions": "KXabfq_rowActions"
|
|
3088
|
+
"otherRow": "KXabfq_otherRow"
|
|
3057
3089
|
};
|
|
3058
3090
|
//#endregion
|
|
3059
3091
|
//#region src/client/MessageSide.tsx
|
|
@@ -3196,6 +3228,8 @@ window.__ModuleLoader__.load({
|
|
|
3196
3228
|
* @param props - the message it replies to, and the store the pick lands in.
|
|
3197
3229
|
* @returns the button, or `null` when the message cannot be replied to.
|
|
3198
3230
|
*/
|
|
3231
|
+
/** Source kind of the model-only quoted-message context; it must never be drawn as a message. */
|
|
3232
|
+
const QUOTE_CONTEXT_KIND = "group-chat-quote";
|
|
3199
3233
|
const ReplyControl = (props) => {
|
|
3200
3234
|
const { roomId, messageId, authorName, preview, quotes, t } = props;
|
|
3201
3235
|
if (preview.length === 0) return null;
|
|
@@ -3233,6 +3267,7 @@ window.__ModuleLoader__.load({
|
|
|
3233
3267
|
if (typeof Official !== "function" && typeof Official !== "object") return null;
|
|
3234
3268
|
const view = (0, react.createElement)(Official, props);
|
|
3235
3269
|
const message = node?.data;
|
|
3270
|
+
if (message?.source?.kind === QUOTE_CONTEXT_KIND) return null;
|
|
3236
3271
|
const side = sided ? messageSide(message, selfId) : void 0;
|
|
3237
3272
|
const quote = quoteOf(message);
|
|
3238
3273
|
const roomId = message?.source?.roomId;
|
|
@@ -3341,46 +3376,46 @@ window.__ModuleLoader__.load({
|
|
|
3341
3376
|
document.head.appendChild(tag);
|
|
3342
3377
|
}
|
|
3343
3378
|
var MembersPanel_module_css_default = {
|
|
3344
|
-
"
|
|
3379
|
+
"fileButton": "VeQVAa_fileButton",
|
|
3380
|
+
"previewTitle": "VeQVAa_previewTitle",
|
|
3381
|
+
"search": "VeQVAa_search",
|
|
3382
|
+
"linkButton": "VeQVAa_linkButton",
|
|
3383
|
+
"name": "VeQVAa_name",
|
|
3345
3384
|
"editorFooter": "VeQVAa_editorFooter",
|
|
3385
|
+
"row": "VeQVAa_row",
|
|
3386
|
+
"editor": "VeQVAa_editor",
|
|
3346
3387
|
"refresh": "VeQVAa_refresh",
|
|
3347
|
-
"search": "VeQVAa_search",
|
|
3348
|
-
"caret": "VeQVAa_caret",
|
|
3349
|
-
"previewImage": "VeQVAa_previewImage",
|
|
3350
|
-
"previewBody": "VeQVAa_previewBody",
|
|
3351
|
-
"sectionBody": "VeQVAa_sectionBody",
|
|
3352
|
-
"fileSize": "VeQVAa_fileSize",
|
|
3353
|
-
"count": "VeQVAa_count",
|
|
3354
3388
|
"searchToggle": "VeQVAa_searchToggle",
|
|
3355
|
-
"
|
|
3389
|
+
"root": "VeQVAa_root",
|
|
3390
|
+
"crumbs": "VeQVAa_crumbs",
|
|
3391
|
+
"caret": "VeQVAa_caret",
|
|
3356
3392
|
"fileIcon": "VeQVAa_fileIcon",
|
|
3357
|
-
"
|
|
3358
|
-
"
|
|
3393
|
+
"fileSize": "VeQVAa_fileSize",
|
|
3394
|
+
"sectionBody": "VeQVAa_sectionBody",
|
|
3359
3395
|
"sectionHeader": "VeQVAa_sectionHeader",
|
|
3360
|
-
"
|
|
3396
|
+
"selfTag": "VeQVAa_selfTag",
|
|
3361
3397
|
"previewClose": "VeQVAa_previewClose",
|
|
3398
|
+
"sectionLabel": "VeQVAa_sectionLabel",
|
|
3399
|
+
"hint": "VeQVAa_hint",
|
|
3400
|
+
"error": "VeQVAa_error",
|
|
3401
|
+
"crumb": "VeQVAa_crumb",
|
|
3402
|
+
"announcementText": "VeQVAa_announcementText",
|
|
3362
3403
|
"previewHeader": "VeQVAa_previewHeader",
|
|
3363
|
-
"
|
|
3404
|
+
"textarea": "VeQVAa_textarea",
|
|
3364
3405
|
"notice": "VeQVAa_notice",
|
|
3406
|
+
"previewBody": "VeQVAa_previewBody",
|
|
3407
|
+
"section": "VeQVAa_section",
|
|
3365
3408
|
"remove": "VeQVAa_remove",
|
|
3366
|
-
"root": "VeQVAa_root",
|
|
3367
|
-
"announcementText": "VeQVAa_announcementText",
|
|
3368
|
-
"error": "VeQVAa_error",
|
|
3369
|
-
"row": "VeQVAa_row",
|
|
3370
|
-
"crumbs": "VeQVAa_crumbs",
|
|
3371
|
-
"sectionLabel": "VeQVAa_sectionLabel",
|
|
3372
|
-
"name": "VeQVAa_name",
|
|
3373
|
-
"hint": "VeQVAa_hint",
|
|
3374
3409
|
"sectionToggle": "VeQVAa_sectionToggle",
|
|
3375
|
-
"
|
|
3376
|
-
"textarea": "VeQVAa_textarea",
|
|
3410
|
+
"ownerTag": "VeQVAa_ownerTag",
|
|
3377
3411
|
"unavailable": "VeQVAa_unavailable",
|
|
3378
|
-
"
|
|
3412
|
+
"crumbGroup": "VeQVAa_crumbGroup",
|
|
3379
3413
|
"crumbSep": "VeQVAa_crumbSep",
|
|
3380
|
-
"
|
|
3381
|
-
"
|
|
3382
|
-
"
|
|
3383
|
-
"
|
|
3414
|
+
"previewImage": "VeQVAa_previewImage",
|
|
3415
|
+
"preview": "VeQVAa_preview",
|
|
3416
|
+
"count": "VeQVAa_count",
|
|
3417
|
+
"filePicker": "VeQVAa_filePicker",
|
|
3418
|
+
"list": "VeQVAa_list"
|
|
3384
3419
|
};
|
|
3385
3420
|
//#endregion
|
|
3386
3421
|
//#region src/client/MembersPanel.tsx
|
|
@@ -4003,10 +4038,10 @@ window.__ModuleLoader__.load({
|
|
|
4003
4038
|
document.head.appendChild(tag);
|
|
4004
4039
|
}
|
|
4005
4040
|
var GuideEntry_module_css_default = {
|
|
4006
|
-
"text": "_0Vnsuq_text",
|
|
4007
4041
|
"icon": "_0Vnsuq_icon",
|
|
4008
|
-
"description": "_0Vnsuq_description",
|
|
4009
4042
|
"title": "_0Vnsuq_title",
|
|
4043
|
+
"description": "_0Vnsuq_description",
|
|
4044
|
+
"text": "_0Vnsuq_text",
|
|
4010
4045
|
"entry": "_0Vnsuq_entry"
|
|
4011
4046
|
};
|
|
4012
4047
|
//#endregion
|
|
@@ -4074,13 +4109,13 @@ window.__ModuleLoader__.load({
|
|
|
4074
4109
|
document.head.appendChild(tag);
|
|
4075
4110
|
}
|
|
4076
4111
|
var QuoteComposer_module_css_default = {
|
|
4077
|
-
"author": "AK6KxW_author",
|
|
4078
4112
|
"text": "AK6KxW_text",
|
|
4079
|
-
"
|
|
4080
|
-
"button": "AK6KxW_button",
|
|
4113
|
+
"body": "AK6KxW_body",
|
|
4081
4114
|
"bar": "AK6KxW_bar",
|
|
4082
4115
|
"mark": "AK6KxW_mark",
|
|
4083
|
-
"
|
|
4116
|
+
"author": "AK6KxW_author",
|
|
4117
|
+
"dismiss": "AK6KxW_dismiss",
|
|
4118
|
+
"button": "AK6KxW_button"
|
|
4084
4119
|
};
|
|
4085
4120
|
//#endregion
|
|
4086
4121
|
//#region src/client/QuoteComposer.tsx
|
|
@@ -4655,6 +4690,27 @@ window.__ModuleLoader__.load({
|
|
|
4655
4690
|
* @param ctx - DSH client context with locale and slot registries.
|
|
4656
4691
|
*/
|
|
4657
4692
|
function apply(ctx) {
|
|
4693
|
+
const context = ctx;
|
|
4694
|
+
const sidebarRight = context.sidebarRight ?? context.get?.("sidebarRight");
|
|
4695
|
+
const openRoomFile = (attachment, roomId) => {
|
|
4696
|
+
const query = "attachmentId=" + encodeURIComponent(attachment.attachmentId) + "&name=" + encodeURIComponent(attachment.name) + "&bytes=" + encodeURIComponent(String(attachment.bytes));
|
|
4697
|
+
(async () => {
|
|
4698
|
+
const materialized = await fetch("/dsh-group-chat/api/attachment-materialize?" + query);
|
|
4699
|
+
if (!materialized.ok) throw new Error("附件预览准备失败");
|
|
4700
|
+
const target = await materialized.json();
|
|
4701
|
+
if (typeof target.path !== "string") throw new Error("附件预览路径缺失");
|
|
4702
|
+
const sessionId = "group-room-" + roomId;
|
|
4703
|
+
const address = "dsh-resource://file/session/" + encodeURIComponent(sessionId) + "/" + target.path.split("/").map((part) => encodeURIComponent(part)).join("/");
|
|
4704
|
+
if (sidebarRight !== void 0 && sidebarRight.openResource !== void 0) {
|
|
4705
|
+
sidebarRight.openResource(address);
|
|
4706
|
+
return;
|
|
4707
|
+
}
|
|
4708
|
+
const fallback = new URL("/dsh-group-chat/api/attachment-preview?" + query, window.location.origin).toString();
|
|
4709
|
+
window.open(fallback, "_blank", "noopener,noreferrer");
|
|
4710
|
+
})().catch((error) => {
|
|
4711
|
+
console.error("[group-chat] file preview failed", error);
|
|
4712
|
+
});
|
|
4713
|
+
};
|
|
4658
4714
|
ctx.effect(() => ctx.locale.register(NS, {
|
|
4659
4715
|
zh,
|
|
4660
4716
|
en
|
|
@@ -4835,6 +4891,56 @@ window.__ModuleLoader__.load({
|
|
|
4835
4891
|
}
|
|
4836
4892
|
}))
|
|
4837
4893
|
}, MembersGuideEntry)), "group-chat: members guide box");
|
|
4894
|
+
ctx.effect(() => {
|
|
4895
|
+
const onFileClick = (event) => {
|
|
4896
|
+
const target = event.target;
|
|
4897
|
+
if (!(target instanceof Element)) return;
|
|
4898
|
+
const card = target.closest("[data-message-attachments] > *");
|
|
4899
|
+
const roomId = store.getState().activeRoomId;
|
|
4900
|
+
if (!(card instanceof HTMLElement) || roomId === void 0) return;
|
|
4901
|
+
const name = (card.getAttribute("title") ?? card.innerText.split("\n")[0] ?? "").trim();
|
|
4902
|
+
if (name === "") return;
|
|
4903
|
+
(async () => {
|
|
4904
|
+
try {
|
|
4905
|
+
let cursor = null;
|
|
4906
|
+
let found;
|
|
4907
|
+
for (let page = 0; page < 20 && found === void 0; page += 1) {
|
|
4908
|
+
const suffix = cursor === null ? "" : "?cursor=" + encodeURIComponent(cursor);
|
|
4909
|
+
const response = await fetch("/dsh-group-chat/api/rooms/" + encodeURIComponent(roomId) + "/events" + suffix);
|
|
4910
|
+
if (!response.ok) return;
|
|
4911
|
+
const payload = await response.json();
|
|
4912
|
+
for (const record of payload.events ?? []) {
|
|
4913
|
+
const content = (record.event?.data)?.content;
|
|
4914
|
+
if (!Array.isArray(content)) continue;
|
|
4915
|
+
for (const block of content) {
|
|
4916
|
+
if (block === null || typeof block !== "object") continue;
|
|
4917
|
+
const item = block;
|
|
4918
|
+
const attachment = item.attachment;
|
|
4919
|
+
if (item.type === "file" && attachment?.name === name && typeof attachment.attachmentId === "string" && typeof attachment.bytes === "number") {
|
|
4920
|
+
found = {
|
|
4921
|
+
attachmentId: attachment.attachmentId,
|
|
4922
|
+
name,
|
|
4923
|
+
bytes: attachment.bytes
|
|
4924
|
+
};
|
|
4925
|
+
break;
|
|
4926
|
+
}
|
|
4927
|
+
}
|
|
4928
|
+
if (found !== void 0) break;
|
|
4929
|
+
}
|
|
4930
|
+
if (payload.hasMore !== true || payload.nextCursor === null || payload.nextCursor === void 0) break;
|
|
4931
|
+
cursor = payload.nextCursor;
|
|
4932
|
+
}
|
|
4933
|
+
if (found !== void 0) openRoomFile(found, roomId);
|
|
4934
|
+
} catch (error) {
|
|
4935
|
+
console.error("[group-chat] file preview lookup failed", error);
|
|
4936
|
+
}
|
|
4937
|
+
})();
|
|
4938
|
+
};
|
|
4939
|
+
document.addEventListener("click", onFileClick, true);
|
|
4940
|
+
return () => {
|
|
4941
|
+
document.removeEventListener("click", onFileClick, true);
|
|
4942
|
+
};
|
|
4943
|
+
}, "group-chat: file preview delegation");
|
|
4838
4944
|
ctx.slots.inject("conversation.chat.node", () => {
|
|
4839
4945
|
let claims = [];
|
|
4840
4946
|
const release = () => {
|