+ ${moduleSettingsHTML}
+
Members ${this._members.length}
${membersHTML}
@@ -322,6 +458,23 @@ export class RStackSpaceSettings extends HTMLElement {
this._revokeInvite(id);
});
});
+
+ // Module config fields
+ sr.querySelectorAll(".mod-cfg-field").forEach(el => {
+ const handler = () => {
+ const input = el as HTMLInputElement | HTMLSelectElement;
+ const key = input.dataset.key!;
+ if (input.type === "checkbox") {
+ this._moduleSettingsValues[key] = (input as HTMLInputElement).checked;
+ } else {
+ this._moduleSettingsValues[key] = input.value;
+ }
+ };
+ el.addEventListener("change", handler);
+ el.addEventListener("input", handler);
+ });
+
+ sr.getElementById("mod-cfg-save")?.addEventListener("click", () => this._saveModuleSettings());
}
private async _lookupUser(username: string) {
@@ -771,4 +924,40 @@ const PANEL_CSS = `
padding: 12px 0;
text-align: center;
}
+
+/* Module config */
+.mod-cfg-section {
+ border-bottom: 1px solid var(--rs-btn-secondary-bg);
+ padding-bottom: 16px;
+}
+
+.mod-cfg-fields {
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ margin-bottom: 12px;
+}
+
+.mod-cfg-field-group {
+ display: flex;
+ flex-direction: column;
+ gap: 3px;
+}
+
+.mod-cfg-label {
+ font-size: 0.75rem;
+ font-weight: 600;
+ color: var(--rs-text-secondary);
+}
+
+.mod-cfg-desc {
+ font-size: 0.68rem;
+ color: var(--rs-text-muted);
+ line-height: 1.4;
+}
+
+.mod-cfg-save {
+ width: 100%;
+ margin-top: 4px;
+}
`;
diff --git a/website/shell.ts b/website/shell.ts
index be451a0..c7f58c4 100644
--- a/website/shell.ts
+++ b/website/shell.ts
@@ -14,6 +14,7 @@ import { RStackSpaceSwitcher } from "../shared/components/rstack-space-switcher"
import { RStackTabBar } from "../shared/components/rstack-tab-bar";
import { RStackMi } from "../shared/components/rstack-mi";
import { RStackSpaceSettings } from "../shared/components/rstack-space-settings";
+import { RStackModuleSetup } from "../shared/components/rstack-module-setup";
import { RStackHistoryPanel } from "../shared/components/rstack-history-panel";
import { RStackOfflineIndicator } from "../shared/components/rstack-offline-indicator";
import { RStackUserDashboard } from "../shared/components/rstack-user-dashboard";
@@ -35,6 +36,7 @@ RStackSpaceSwitcher.define();
RStackTabBar.define();
RStackMi.define();
RStackSpaceSettings.define();
+RStackModuleSetup.define();
RStackHistoryPanel.define();
RStackOfflineIndicator.define();
RStackUserDashboard.define();