@profoundlogic/coderflow-server 0.4.4 → 0.4.6

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 (176) hide show
  1. package/dist/base-image/entrypoint.sh +2 -1
  2. package/dist/coder-server.js +1 -1
  3. package/dist/config.js +1 -1
  4. package/dist/lib/agent-keepalive.js +1 -1
  5. package/dist/lib/agent-models.js +1 -1
  6. package/dist/lib/api-keys.js +1 -1
  7. package/dist/lib/apiKeys.js +1 -1
  8. package/dist/lib/app-server-ports.js +1 -1
  9. package/dist/lib/auto-judge.js +1 -1
  10. package/dist/lib/automation-service.js +1 -0
  11. package/dist/lib/basic-auth.js +1 -1
  12. package/dist/lib/bindings.js +1 -0
  13. package/dist/lib/build-history.js +1 -1
  14. package/dist/lib/build-output-service.js +1 -1
  15. package/dist/lib/build-scheduler.js +1 -1
  16. package/dist/lib/build-service.js +1 -1
  17. package/dist/lib/ca-certificates.js +1 -1
  18. package/dist/lib/claude-oauth-refresh.js +1 -1
  19. package/dist/lib/cli/build.js +1 -1
  20. package/dist/lib/cli/config-command.js +1 -1
  21. package/dist/lib/cli/config.js +1 -1
  22. package/dist/lib/cli/create-user.js +1 -1
  23. package/dist/lib/cli/init.js +1 -1
  24. package/dist/lib/cli/jira.js +1 -1
  25. package/dist/lib/cli/license.js +1 -1
  26. package/dist/lib/cli/server-manager.js +1 -1
  27. package/dist/lib/config-migration.js +1 -1
  28. package/dist/lib/container-credential-sync.js +1 -1
  29. package/dist/lib/container-tokens.js +1 -1
  30. package/dist/lib/data-dir.js +1 -1
  31. package/dist/lib/deployment-history.js +1 -1
  32. package/dist/lib/deployment-service.js +1 -1
  33. package/dist/lib/docker-utils.js +1 -1
  34. package/dist/lib/email.js +1 -1
  35. package/dist/lib/emailTemplates.js +1 -1
  36. package/dist/lib/entitlement.js +1 -1
  37. package/dist/lib/fetch-utils.js +1 -1
  38. package/dist/lib/git-commit-details-route.js +1 -1
  39. package/dist/lib/git-history-diff-guardrails.js +1 -1
  40. package/dist/lib/git-provider-service.js +1 -1
  41. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  42. package/dist/lib/git-provider-setup/index.js +1 -1
  43. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  44. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  45. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  46. package/dist/lib/git-providers/github-app-provider.js +1 -1
  47. package/dist/lib/git-providers/index.js +1 -1
  48. package/dist/lib/git-providers/provider-factory.js +1 -1
  49. package/dist/lib/git-providers/provider-interface.js +1 -1
  50. package/dist/lib/github-urls.js +1 -1
  51. package/dist/lib/group-objective-linking.js +1 -1
  52. package/dist/lib/jira-client.js +1 -1
  53. package/dist/lib/judge-blinding.js +1 -1
  54. package/dist/lib/logger.js +1 -1
  55. package/dist/lib/migration-to-scoped-rbac.js +1 -0
  56. package/dist/lib/model-fetcher.js +1 -1
  57. package/dist/lib/notifications.js +1 -1
  58. package/dist/lib/objective-context.js +1 -1
  59. package/dist/lib/oidc-auth.js +1 -1
  60. package/dist/lib/oidc-device-flow.js +1 -1
  61. package/dist/lib/passwordTokens.js +1 -1
  62. package/dist/lib/permission-resolver.js +1 -0
  63. package/dist/lib/pin-cascade.js +1 -1
  64. package/dist/lib/provider-accounts.js +1 -1
  65. package/dist/lib/provider-oauth.js +1 -1
  66. package/dist/lib/provider-profile.js +1 -1
  67. package/dist/lib/provider-token-refresh.js +1 -1
  68. package/dist/lib/request-url.js +1 -1
  69. package/dist/lib/rewind.js +1 -1
  70. package/dist/lib/role-definitions.js +1 -0
  71. package/dist/lib/roles.js +1 -1
  72. package/dist/lib/secrets.js +1 -1
  73. package/dist/lib/setup-repo-git-auth.js +1 -1
  74. package/dist/lib/state-capture.js +1 -1
  75. package/dist/lib/static-files.js +1 -1
  76. package/dist/lib/task-name-format.js +1 -1
  77. package/dist/lib/task-name-generator.js +1 -1
  78. package/dist/lib/task-source-metadata.js +1 -0
  79. package/dist/lib/teams.js +1 -0
  80. package/dist/lib/user-git-oauth.js +1 -1
  81. package/dist/lib/user-git-tokens.js +1 -1
  82. package/dist/lib/users.js +1 -1
  83. package/dist/middleware/requireAuth.js +1 -1
  84. package/dist/middleware/requireInit.js +1 -1
  85. package/dist/middleware/requirePermission.js +1 -1
  86. package/dist/package-lock.json +211 -21
  87. package/dist/package.json +2 -1
  88. package/dist/playwright.config.js +1 -0
  89. package/dist/routes/apiKeys.js +1 -1
  90. package/dist/routes/auth-oidc.js +1 -1
  91. package/dist/routes/auth.js +1 -1
  92. package/dist/routes/automations.js +1 -0
  93. package/dist/routes/bindings.js +1 -0
  94. package/dist/routes/build.js +1 -1
  95. package/dist/routes/containers.js +1 -1
  96. package/dist/routes/deploy-task.js +1 -1
  97. package/dist/routes/environment-management.js +1 -1
  98. package/dist/routes/environments.js +1 -1
  99. package/dist/routes/external-skills.js +1 -1
  100. package/dist/routes/git-credentials.js +1 -1
  101. package/dist/routes/git-oauth.js +1 -1
  102. package/dist/routes/git-provider-setup.js +1 -1
  103. package/dist/routes/health.js +1 -1
  104. package/dist/routes/jira.js +1 -1
  105. package/dist/routes/objective-management.js +1 -1
  106. package/dist/routes/password.js +1 -1
  107. package/dist/routes/prompt.js +1 -1
  108. package/dist/routes/provider-auth.js +1 -1
  109. package/dist/routes/qa.js +1 -1
  110. package/dist/routes/roles.js +1 -0
  111. package/dist/routes/settings.js +1 -1
  112. package/dist/routes/skill-management.js +1 -1
  113. package/dist/routes/skills.js +1 -1
  114. package/dist/routes/tasks.js +1 -1
  115. package/dist/routes/teams.js +1 -0
  116. package/dist/routes/templates.js +1 -1
  117. package/dist/routes/test-task.js +1 -1
  118. package/dist/routes/test.js +1 -1
  119. package/dist/routes/users.js +1 -1
  120. package/dist/routes/visualizations.js +1 -1
  121. package/dist/scripts/create-user.js +1 -1
  122. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  123. package/dist/scripts/migrate-to-scoped-rbac.js +2 -0
  124. package/dist/start.js +1 -1
  125. package/dist/start.js.bak +1381 -0
  126. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  127. package/dist/web-ui/public/activity-feed.js +1 -1
  128. package/dist/web-ui/public/activity-formatters.js +1 -1
  129. package/dist/web-ui/public/agent-event-parser.js +1 -1
  130. package/dist/web-ui/public/app.js +1 -1
  131. package/dist/web-ui/public/approve-dialog.js +1 -1
  132. package/dist/web-ui/public/automation-links.js +1 -0
  133. package/dist/web-ui/public/automation-schedule.js +1 -0
  134. package/dist/web-ui/public/comments-widget.js +1 -1
  135. package/dist/web-ui/public/diff-utils.js +1 -1
  136. package/dist/web-ui/public/docs/_sidebar.md +1 -0
  137. package/dist/web-ui/public/docs/admin/automations.md +75 -0
  138. package/dist/web-ui/public/docs/admin/users-and-roles.md +14 -4
  139. package/dist/web-ui/public/environments.css +247 -125
  140. package/dist/web-ui/public/environments.html +346 -2
  141. package/dist/web-ui/public/environments.js +1 -1
  142. package/dist/web-ui/public/feedback-widget.css +42 -0
  143. package/dist/web-ui/public/feedback-widget.js +1 -1
  144. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  145. package/dist/web-ui/public/git-history.html +15 -0
  146. package/dist/web-ui/public/git-history.js +1 -1
  147. package/dist/web-ui/public/git-status.js +1 -1
  148. package/dist/web-ui/public/index.html +27 -0
  149. package/dist/web-ui/public/index.js +1 -1
  150. package/dist/web-ui/public/login.js +1 -1
  151. package/dist/web-ui/public/markdown-editor.js +1 -1
  152. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  153. package/dist/web-ui/public/modal-maximize.js +1 -1
  154. package/dist/web-ui/public/notifications.js +1 -1
  155. package/dist/web-ui/public/pr-dialog.js +1 -1
  156. package/dist/web-ui/public/roles.html +247 -0
  157. package/dist/web-ui/public/roles.js +1 -0
  158. package/dist/web-ui/public/server-health.js +1 -1
  159. package/dist/web-ui/public/settings.html +62 -0
  160. package/dist/web-ui/public/settings.js +1 -1
  161. package/dist/web-ui/public/setup-password.js +1 -1
  162. package/dist/web-ui/public/skills.html +15 -0
  163. package/dist/web-ui/public/skills.js +1 -1
  164. package/dist/web-ui/public/sse-client.js +1 -1
  165. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  166. package/dist/web-ui/public/styles.css +198 -161
  167. package/dist/web-ui/public/task.html +2 -2
  168. package/dist/web-ui/public/task.js +1 -1
  169. package/dist/web-ui/public/teams.html +285 -0
  170. package/dist/web-ui/public/teams.js +1 -0
  171. package/dist/web-ui/public/terminal.js +1 -1
  172. package/dist/web-ui/public/theme.js +1 -1
  173. package/dist/web-ui/public/users.html +87 -29
  174. package/dist/web-ui/public/users.js +1 -1
  175. package/dist/web-ui/public/variant-grouping.js +1 -1
  176. package/package.json +6 -3
@@ -0,0 +1,285 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Teams · CoderFlow</title>
7
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml">
8
+ <link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32">
9
+ <link rel="icon" href="/favicon-16.png" type="image/png" sizes="16x16">
10
+ <link rel="icon" href="/favicon.ico">
11
+ <script>
12
+ (() => {
13
+ const key = 'profound-coder-theme';
14
+ try {
15
+ const stored = localStorage.getItem(key);
16
+ const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
17
+ const theme = stored === 'dark' || stored === 'light' ? stored : (prefersDark ? 'dark' : 'light');
18
+ document.documentElement.dataset.theme = theme;
19
+ document.documentElement.style.colorScheme = theme === 'dark' ? 'dark' : 'light';
20
+ } catch (error) {
21
+ document.documentElement.dataset.theme = 'light';
22
+ }
23
+ })();
24
+ </script>
25
+ <link rel="stylesheet" href="styles.css?v=83">
26
+ <script type="module" src="teams.js"></script>
27
+ <!-- Dev QA shortcut: Ctrl+Shift+Q to launch current page in QA mode -->
28
+ </head>
29
+ <body>
30
+ <main class="task-detail">
31
+ <div class="task-hero">
32
+ <div class="hero-top">
33
+ <nav class="breadcrumb" aria-label="Breadcrumb">
34
+ <a class="breadcrumb-link" href="index.html">
35
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
36
+ <path d="M3 11.5L12 4l9 7.5"></path>
37
+ <path d="M5 10.5V20h5v-5h4v5h5v-9.5"></path>
38
+ </svg>
39
+ <span>Home</span>
40
+ </a>
41
+ <span class="breadcrumb-separator" aria-hidden="true">/</span>
42
+ <span class="breadcrumb-current">Teams</span>
43
+ </nav>
44
+ <span class="task-context">Administration</span>
45
+ <!-- Admin Menu (gear icon) -->
46
+ <div class="admin-menu-container" id="admin-menu-container" hidden>
47
+ <button class="btn-icon-admin" id="admin-menu-btn" title="Admin">
48
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
49
+ <circle cx="12" cy="12" r="3"></circle>
50
+ <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"></path>
51
+ </svg>
52
+ </button>
53
+ <div class="dropdown-menu admin-dropdown" id="admin-menu" hidden>
54
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='users.html'">
55
+ <svg class="option-icon icon-users" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
56
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path>
57
+ <circle cx="9" cy="7" r="4"></circle>
58
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"></path>
59
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"></path>
60
+ </svg>
61
+ <span class="option-text">Users</span>
62
+ </button>
63
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='environments.html'">
64
+ <svg class="option-icon icon-environments" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
65
+ <circle cx="12" cy="12" r="10"></circle>
66
+ <line x1="2" y1="12" x2="22" y2="12"></line>
67
+ <path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path>
68
+ </svg>
69
+ <span class="option-text">Environments</span>
70
+ </button>
71
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='roles.html'">
72
+ <svg class="option-icon icon-roles" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
73
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>
74
+ </svg>
75
+ <span class="option-text">Roles</span>
76
+ </button>
77
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='skills.html'">
78
+ <svg class="option-icon icon-skills" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
79
+ <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path>
80
+ </svg>
81
+ <span class="option-text">Skills</span>
82
+ </button>
83
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='settings.html'">
84
+ <svg class="option-icon icon-server-settings" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
85
+ <line x1="4" y1="21" x2="4" y2="14"></line>
86
+ <line x1="4" y1="10" x2="4" y2="3"></line>
87
+ <line x1="12" y1="21" x2="12" y2="12"></line>
88
+ <line x1="12" y1="8" x2="12" y2="3"></line>
89
+ <line x1="20" y1="21" x2="20" y2="16"></line>
90
+ <line x1="20" y1="12" x2="20" y2="3"></line>
91
+ <line x1="1" y1="14" x2="7" y2="14"></line>
92
+ <line x1="9" y1="8" x2="15" y2="8"></line>
93
+ <line x1="17" y1="16" x2="23" y2="16"></line>
94
+ </svg>
95
+ <span class="option-text">Server Settings</span>
96
+ </button>
97
+ <button type="button" class="dropdown-item admin-menu-item" id="server-health-btn">
98
+ <svg class="option-icon icon-health" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
99
+ <path d="M22 12h-4l-3 9L9 3l-3 9H2"></path>
100
+ </svg>
101
+ <span class="option-text">Server Health</span>
102
+ </button>
103
+ <button type="button" class="dropdown-item admin-menu-item" onclick="window.location.href='git-history.html'">
104
+ <svg class="option-icon icon-git-history" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
105
+ <circle cx="6" cy="6" r="2"></circle>
106
+ <circle cx="6" cy="18" r="2"></circle>
107
+ <circle cx="18" cy="12" r="2"></circle>
108
+ <path d="M6 8v8"></path>
109
+ <path d="M6 12h10"></path>
110
+ </svg>
111
+ <span class="option-text">Git History</span>
112
+ </button>
113
+ </div>
114
+ </div>
115
+ <div id="theme-toggle-container"></div>
116
+ </div>
117
+ <div class="status-hero">
118
+ <div class="status-copy">
119
+ <h1>Team Management</h1>
120
+ <p class="task-subtitle">Manage teams and their environment access bindings</p>
121
+ </div>
122
+ <div class="status-actions">
123
+ <button class="btn-primary btn-small" id="create-team-btn" hidden>Create Team</button>
124
+ </div>
125
+ </div>
126
+ </div>
127
+
128
+ <div id="teams-loading" class="loading">Loading teams…</div>
129
+ <div id="teams-error" class="empty-state" hidden>
130
+ <h3>Failed to load teams</h3>
131
+ <p id="teams-error-message" class="text-muted"></p>
132
+ <button class="btn-primary" id="retry-teams-btn">Try Again</button>
133
+ </div>
134
+
135
+ <section id="teams-content" class="detail-stack" hidden>
136
+ <article class="detail-card">
137
+ <header class="detail-card-header">
138
+ <h2>Teams</h2>
139
+ <span id="team-count" class="tag">0 teams</span>
140
+ </header>
141
+ <div class="detail-card-content">
142
+ <div class="users-table-container">
143
+ <table class="users-table">
144
+ <thead>
145
+ <tr>
146
+ <th>Name</th>
147
+ <th>Members</th>
148
+ <th>Managers</th>
149
+ <th>Actions</th>
150
+ </tr>
151
+ </thead>
152
+ <tbody id="teams-table-body">
153
+ <!-- Teams populated by JS -->
154
+ </tbody>
155
+ </table>
156
+ </div>
157
+ </div>
158
+ </article>
159
+ </section>
160
+ </main>
161
+
162
+ <!-- Create/Edit Team Modal -->
163
+ <div id="team-modal" class="modal" hidden>
164
+ <div class="modal-overlay"></div>
165
+ <div class="modal-content" style="max-width: 640px;">
166
+ <div class="modal-header">
167
+ <h2 id="team-modal-title">Create Team</h2>
168
+ <button class="modal-close" id="close-team-modal">&times;</button>
169
+ </div>
170
+ <!-- Tab bar (hidden when creating) -->
171
+ <div id="team-modal-tabs" hidden style="display: flex; gap: 0; border-bottom: 2px solid var(--color-border); margin: 0 1.5rem;">
172
+ <button type="button" class="modal-tab-btn active" data-tab="details" style="padding: 0.625rem 1.25rem; background: none; border: none; border-bottom: 2px solid transparent; cursor: pointer; font-size: 0.9rem; margin-bottom: -2px; color: var(--color-text-secondary);">Details</button>
173
+ <button type="button" class="modal-tab-btn" data-tab="bindings" style="padding: 0.625rem 1.25rem; background: none; border: none; border-bottom: 2px solid transparent; cursor: pointer; font-size: 0.9rem; margin-bottom: -2px; color: var(--color-text-secondary);">Access Bindings</button>
174
+ </div>
175
+ <div class="modal-body">
176
+
177
+ <!-- Details Tab -->
178
+ <div id="team-tab-details">
179
+ <div class="modal-section">
180
+ <label for="team-name">Name *</label>
181
+ <input type="text" id="team-name" class="form-input" required placeholder="e.g. Frontend Team">
182
+ </div>
183
+ <div class="modal-section">
184
+ <label for="team-description">Description</label>
185
+ <input type="text" id="team-description" class="form-input" placeholder="Optional description">
186
+ </div>
187
+
188
+ <!-- Members section (shown when editing) -->
189
+ <div id="members-section" hidden>
190
+ <div class="modal-section">
191
+ <label>Members</label>
192
+ <div id="members-list" style="margin-bottom: 0.5rem;"></div>
193
+ <div id="add-member-row" style="display: flex; gap: 0.5rem; margin-top: 0.5rem;">
194
+ <select id="add-member-select" class="form-input" style="flex: 1; font-size: 0.875rem;">
195
+ <option value="">Add a member…</option>
196
+ </select>
197
+ <button type="button" class="btn-secondary btn-small" id="add-member-btn">Add</button>
198
+ </div>
199
+ </div>
200
+
201
+ <!-- Managers section (admin only) -->
202
+ <div id="managers-section" class="modal-section" hidden>
203
+ <label>Managers <span style="font-weight: normal; font-size: 0.8em; color: var(--color-text-secondary);">(admin only)</span></label>
204
+ <div id="managers-list" style="margin-bottom: 0.5rem;"></div>
205
+ <div id="add-manager-row" style="display: flex; gap: 0.5rem; margin-top: 0.5rem;">
206
+ <select id="add-manager-select" class="form-input" style="flex: 1; font-size: 0.875rem;">
207
+ <option value="">Promote a member to manager…</option>
208
+ </select>
209
+ <button type="button" class="btn-secondary btn-small" id="add-manager-btn">Add</button>
210
+ </div>
211
+ </div>
212
+ </div>
213
+
214
+ <div id="team-form-error" class="login-error" hidden></div>
215
+ </div>
216
+
217
+ <!-- Bindings Tab -->
218
+ <div id="team-tab-bindings" hidden>
219
+ <div id="bindings-loading" class="loading" hidden>Loading bindings…</div>
220
+ <div id="bindings-empty" hidden style="padding: 1.5rem 0; text-align: center; color: var(--color-text-secondary);">
221
+ No environment access bindings for this team yet.
222
+ </div>
223
+ <div id="bindings-list-container">
224
+ <table class="users-table" id="bindings-table">
225
+ <thead>
226
+ <tr>
227
+ <th>Environment</th>
228
+ <th>Role</th>
229
+ <th>Actions</th>
230
+ </tr>
231
+ </thead>
232
+ <tbody id="bindings-table-body"></tbody>
233
+ </table>
234
+ </div>
235
+ <div id="bindings-actions" style="margin-top: 1rem;">
236
+ <button type="button" class="btn-secondary btn-small" id="add-binding-btn" hidden>+ Add Binding</button>
237
+ </div>
238
+ <!-- Inline add-binding form -->
239
+ <div id="add-binding-form" hidden style="margin-top: 0.75rem; padding: 1rem; border: 1px solid var(--color-border); border-radius: 8px; background: var(--color-surface-elevated);">
240
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-bottom: 0.75rem;">
241
+ <div>
242
+ <label style="font-size: 0.8rem; margin-bottom: 0.25rem; display: block;">Environment</label>
243
+ <select id="binding-environment" class="form-input" style="font-size: 0.875rem;"></select>
244
+ </div>
245
+ <div>
246
+ <label style="font-size: 0.8rem; margin-bottom: 0.25rem; display: block;">Role</label>
247
+ <select id="binding-role" class="form-input" style="font-size: 0.875rem;"></select>
248
+ </div>
249
+ </div>
250
+ <div style="display: flex; gap: 0.5rem;">
251
+ <button type="button" class="btn-primary btn-small" id="save-binding-btn">Add Binding</button>
252
+ <button type="button" class="btn-ghost btn-small" id="cancel-binding-btn">Cancel</button>
253
+ </div>
254
+ </div>
255
+ </div>
256
+
257
+ </div>
258
+ <div class="modal-footer" id="team-modal-footer">
259
+ <button class="btn-ghost" id="cancel-team">Cancel</button>
260
+ <button class="btn-primary" id="save-team">Save Team</button>
261
+ </div>
262
+ </div>
263
+ </div>
264
+
265
+ <!-- Delete Team Confirmation Modal -->
266
+ <div id="delete-team-modal" class="modal" hidden>
267
+ <div class="modal-overlay"></div>
268
+ <div class="modal-content">
269
+ <div class="modal-header">
270
+ <h2>Delete Team</h2>
271
+ <button class="modal-close" id="close-delete-team-modal">&times;</button>
272
+ </div>
273
+ <div class="modal-body">
274
+ <p>Are you sure you want to delete team <strong id="delete-team-name"></strong>?</p>
275
+ <p class="field-hint">All environment access bindings for this team will also be removed. This action cannot be undone.</p>
276
+ </div>
277
+ <div class="modal-footer">
278
+ <button class="btn-ghost" id="cancel-delete-team">Cancel</button>
279
+ <button class="btn-primary" id="confirm-delete-team" style="background: var(--color-danger);">Delete Team</button>
280
+ </div>
281
+ </div>
282
+ </div>
283
+
284
+ </body>
285
+ </html>
@@ -0,0 +1 @@
1
+ const _0x3de7a2=_0x5562;(function(_0x140dee,_0xd68aec){const _0x1e1fdd=_0x5562,_0x26cda3=_0x140dee();while(!![]){try{const _0x4ab9fe=parseInt(_0x1e1fdd(0x138))/0x1*(parseInt(_0x1e1fdd(0x157))/0x2)+parseInt(_0x1e1fdd(0x102))/0x3+parseInt(_0x1e1fdd(0x13f))/0x4*(parseInt(_0x1e1fdd(0x189))/0x5)+parseInt(_0x1e1fdd(0xfd))/0x6+parseInt(_0x1e1fdd(0x12e))/0x7*(-parseInt(_0x1e1fdd(0x140))/0x8)+parseInt(_0x1e1fdd(0x17b))/0x9+parseInt(_0x1e1fdd(0x14e))/0xa*(-parseInt(_0x1e1fdd(0x14a))/0xb);if(_0x4ab9fe===_0xd68aec)break;else _0x26cda3['push'](_0x26cda3['shift']());}catch(_0x1cee43){_0x26cda3['push'](_0x26cda3['shift']());}}}(_0x59f6,0x255ea));import{API,Utils,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';function _0x5562(_0x5beb6e,_0x1449a4){_0x5beb6e=_0x5beb6e-0xfb;const _0x59f638=_0x59f6();let _0x55621a=_0x59f638[_0x5beb6e];if(_0x5562['FhqbpB']===undefined){var _0x46d23d=function(_0x11913a){const _0x3833a8='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xc05f09='',_0x177bcd='';for(let _0x86d85a=0x0,_0x5097b1,_0x4c38f9,_0x328c44=0x0;_0x4c38f9=_0x11913a['charAt'](_0x328c44++);~_0x4c38f9&&(_0x5097b1=_0x86d85a%0x4?_0x5097b1*0x40+_0x4c38f9:_0x4c38f9,_0x86d85a++%0x4)?_0xc05f09+=String['fromCharCode'](0xff&_0x5097b1>>(-0x2*_0x86d85a&0x6)):0x0){_0x4c38f9=_0x3833a8['indexOf'](_0x4c38f9);}for(let _0x329f6d=0x0,_0x11e7de=_0xc05f09['length'];_0x329f6d<_0x11e7de;_0x329f6d++){_0x177bcd+='%'+('00'+_0xc05f09['charCodeAt'](_0x329f6d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x177bcd);};_0x5562['vJzAEc']=_0x46d23d,_0x5562['VqKOwk']={},_0x5562['FhqbpB']=!![];}const _0x250aeb=_0x59f638[0x0],_0x46137c=_0x5beb6e+_0x250aeb,_0x3ce3c9=_0x5562['VqKOwk'][_0x46137c];return!_0x3ce3c9?(_0x55621a=_0x5562['vJzAEc'](_0x55621a),_0x5562['VqKOwk'][_0x46137c]=_0x55621a):_0x55621a=_0x3ce3c9,_0x55621a;}const state={'teams':[],'users':[],'roles':[],'environments':[],'teamBindings':[],'currentUser':null,'editingTeamId':null,'deletingTeamId':null,'activeTab':_0x3de7a2(0x196)};document[_0x3de7a2(0x17f)](_0x3de7a2(0x116),async()=>{const _0x1f9123=_0x3de7a2;initTheme(),mountThemeToggle();try{state[_0x1f9123(0x1a4)]=await API[_0x1f9123(0x131)]();}catch{window[_0x1f9123(0x11b)][_0x1f9123(0x100)]=_0x1f9123(0x129);return;}await initializeAdminMenu(state[_0x1f9123(0x1a4)]),state['currentUser'][_0x1f9123(0x17c)]&&(document[_0x1f9123(0x132)](_0x1f9123(0x123))[_0x1f9123(0x187)]=![]),bindEventListeners(),await Promise[_0x1f9123(0x197)]([loadTeams(),loadUsers(),loadRoles(),loadEnvironments()]),renderTeams();});async function loadTeams(){const _0x4a555f=_0x3de7a2,_0xc05f09=document[_0x4a555f(0x132)]('teams-loading'),_0x177bcd=document[_0x4a555f(0x132)](_0x4a555f(0x186)),_0x86d85a=document[_0x4a555f(0x132)]('teams-content');try{_0xc05f09['hidden']=![],_0x177bcd[_0x4a555f(0x187)]=!![],_0x86d85a['hidden']=!![];const {teams:_0x5097b1}=await API[_0x4a555f(0x144)]();state['teams']=_0x5097b1||[],renderTeams(),_0xc05f09['hidden']=!![],_0x86d85a['hidden']=![];}catch(_0x4c38f9){_0xc05f09[_0x4a555f(0x187)]=!![],_0x177bcd[_0x4a555f(0x187)]=![],document[_0x4a555f(0x132)](_0x4a555f(0x18f))[_0x4a555f(0x12f)]=_0x4c38f9[_0x4a555f(0x166)];}}async function loadUsers(){const _0x147147=_0x3de7a2;try{const {users:_0x328c44}=await API[_0x147147(0x162)]();state['users']=_0x328c44||[];}catch{state[_0x147147(0x173)]=[];}}async function loadRoles(){const _0x33fa36=_0x3de7a2;try{const {roles:_0x329f6d}=await API[_0x33fa36(0x19a)]();state[_0x33fa36(0x190)]=_0x329f6d||[];}catch{state['roles']=[];}}async function loadEnvironments(){const _0x5b7094=_0x3de7a2;try{const _0x11e7de=await API[_0x5b7094(0x105)]();state[_0x5b7094(0x13b)]=_0x11e7de[_0x5b7094(0x13b)]||[];}catch{state[_0x5b7094(0x13b)]=[];}}function renderTeams(){const _0x24a0d3=_0x3de7a2,_0x580457=document[_0x24a0d3(0x132)]('teams-table-body'),_0x597f6e=document[_0x24a0d3(0x132)](_0x24a0d3(0x13c));if(!_0x580457)return;_0x597f6e&&(_0x597f6e[_0x24a0d3(0x12f)]=state[_0x24a0d3(0x108)]['length']+_0x24a0d3(0x198)+(state['teams'][_0x24a0d3(0xfc)]===0x1?'':'s'));if(state['teams'][_0x24a0d3(0xfc)]===0x0){_0x580457[_0x24a0d3(0x16c)]=_0x24a0d3(0x14b)+(state[_0x24a0d3(0x1a4)]?.[_0x24a0d3(0x17c)]?_0x24a0d3(0x142):'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20</tr>';return;}const _0x2e7e0b=state[_0x24a0d3(0x1a4)]?.[_0x24a0d3(0x17c)];_0x580457['innerHTML']=state[_0x24a0d3(0x108)][_0x24a0d3(0x151)](_0x231334=>{const _0x482ada=_0x24a0d3,_0x21be05=(_0x231334[_0x482ada(0x167)]||[])[_0x482ada(0x10b)](state['currentUser']?.['id']),_0x524de4=_0x2e7e0b||_0x21be05,_0x15dc0c=(_0x231334[_0x482ada(0x167)]||[])[_0x482ada(0x151)](_0x445bf4=>{const _0x11c711=_0x482ada;if(_0x231334[_0x11c711(0x111)]&&_0x231334[_0x11c711(0x111)][_0x445bf4])return _0x231334[_0x11c711(0x111)][_0x445bf4];const _0x33af98=state['users']['find'](_0x15d1eb=>_0x15d1eb['id']===_0x445bf4);return _0x33af98?_0x33af98['name']||_0x33af98[_0x11c711(0x11c)]:_0x445bf4;})['join'](',\x20')||'—',_0x268289=(_0x231334[_0x482ada(0x17d)]||[])[_0x482ada(0xfc)];return _0x482ada(0x183)+_0x231334['id']+'\x27)\x22>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+Utils['escapeHtml'](_0x231334[_0x482ada(0x13d)])+_0x482ada(0x191)+(_0x231334[_0x482ada(0x11e)]?_0x482ada(0x104)+Utils['escapeHtml'](_0x231334[_0x482ada(0x11e)])+'</div>':'')+_0x482ada(0x174)+_0x268289+_0x482ada(0x18a)+Utils[_0x482ada(0x141)](_0x15dc0c)+_0x482ada(0x136)+(_0x524de4?_0x482ada(0x106)+_0x231334['id']+'\x27)\x22>Edit</button>':'')+_0x482ada(0x199)+(_0x2e7e0b?_0x482ada(0x180)+_0x231334['id']+_0x482ada(0x193):'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20</div>\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20</tr>';})['join']('');}function bindEventListeners(){const _0x39bbac=_0x3de7a2;document[_0x39bbac(0x132)](_0x39bbac(0x123))?.[_0x39bbac(0x17f)](_0x39bbac(0x165),showCreateTeamModal),document[_0x39bbac(0x132)](_0x39bbac(0x13a))?.['addEventListener'](_0x39bbac(0x165),loadTeams),document[_0x39bbac(0x132)](_0x39bbac(0x15a))?.['addEventListener'](_0x39bbac(0x165),hideTeamModal),document[_0x39bbac(0x132)](_0x39bbac(0x110))?.[_0x39bbac(0x17f)](_0x39bbac(0x165),hideTeamModal),document[_0x39bbac(0x132)](_0x39bbac(0x19c))?.[_0x39bbac(0x17f)](_0x39bbac(0x165),saveTeam),document[_0x39bbac(0x14d)](_0x39bbac(0x11a))?.[_0x39bbac(0x17f)](_0x39bbac(0x165),hideTeamModal),document['querySelectorAll']('.modal-tab-btn')['forEach'](_0x22c699=>{const _0x5b6be8=_0x39bbac;_0x22c699['addEventListener']('click',()=>switchTab(_0x22c699[_0x5b6be8(0x19f)]['tab']));}),document[_0x39bbac(0x132)](_0x39bbac(0x114))?.['addEventListener']('click',addMember),document[_0x39bbac(0x132)](_0x39bbac(0x19e))?.[_0x39bbac(0x17f)](_0x39bbac(0x165),addManager),document[_0x39bbac(0x132)](_0x39bbac(0x17a))?.['addEventListener'](_0x39bbac(0x165),()=>{const _0x11fc82=_0x39bbac;document[_0x11fc82(0x132)]('add-binding-form')[_0x11fc82(0x187)]=![],document['getElementById'](_0x11fc82(0x17a))[_0x11fc82(0x187)]=!![],populateBindingForm();}),document[_0x39bbac(0x132)](_0x39bbac(0x118))?.['addEventListener'](_0x39bbac(0x165),()=>{const _0x30f10e=_0x39bbac;document[_0x30f10e(0x132)](_0x30f10e(0xfb))[_0x30f10e(0x187)]=!![],document[_0x30f10e(0x132)]('add-binding-btn')[_0x30f10e(0x187)]=![];}),document[_0x39bbac(0x132)](_0x39bbac(0x185))?.['addEventListener'](_0x39bbac(0x165),saveBinding),document[_0x39bbac(0x132)](_0x39bbac(0x163))?.['addEventListener'](_0x39bbac(0x165),hideDeleteModal),document[_0x39bbac(0x132)](_0x39bbac(0x14f))?.[_0x39bbac(0x17f)](_0x39bbac(0x165),hideDeleteModal),document['getElementById']('confirm-delete-team')?.[_0x39bbac(0x17f)](_0x39bbac(0x165),confirmDeleteTeam),document[_0x39bbac(0x14d)](_0x39bbac(0x161))?.[_0x39bbac(0x17f)]('click',hideDeleteModal);}function showCreateTeamModal(){const _0x52a022=_0x3de7a2;state[_0x52a022(0x139)]=null,state[_0x52a022(0x154)]=_0x52a022(0x196),document[_0x52a022(0x132)]('team-modal-title')[_0x52a022(0x12f)]='Create\x20Team',document[_0x52a022(0x132)](_0x52a022(0x177))['value']='',document[_0x52a022(0x132)]('team-name')[_0x52a022(0x159)]=![],document['getElementById'](_0x52a022(0x15e))[_0x52a022(0x18e)]='',document[_0x52a022(0x132)](_0x52a022(0x15e))[_0x52a022(0x159)]=![],document[_0x52a022(0x132)](_0x52a022(0x168))[_0x52a022(0x187)]=!![],document[_0x52a022(0x132)](_0x52a022(0x145))[_0x52a022(0x187)]=!![],document['getElementById'](_0x52a022(0x130))['hidden']=!![],document[_0x52a022(0x132)](_0x52a022(0x19c))[_0x52a022(0x187)]=![],document['getElementById']('team-modal-footer')[_0x52a022(0x187)]=![],showTab('details'),document['getElementById']('team-modal')[_0x52a022(0x187)]=![],setTimeout(()=>document[_0x52a022(0x132)](_0x52a022(0x177))['focus'](),0x64);}window[_0x3de7a2(0x12a)]=function(_0x39bf72){const _0x1d532e=_0x3de7a2,_0x4433a1=state[_0x1d532e(0x108)][_0x1d532e(0x115)](_0xaf9a8b=>_0xaf9a8b['id']===_0x39bf72);if(!_0x4433a1)return;state[_0x1d532e(0x139)]=_0x39bf72,state[_0x1d532e(0x154)]=_0x1d532e(0x196);const _0x1bfa21=state['currentUser']?.[_0x1d532e(0x17c)],_0x45a1a8=(_0x4433a1['managers']||[])[_0x1d532e(0x10b)](state['currentUser']?.['id']),_0xd8c86c=_0x1bfa21||_0x45a1a8;document[_0x1d532e(0x132)]('team-modal-title')[_0x1d532e(0x12f)]=_0x4433a1['name'],document[_0x1d532e(0x132)](_0x1d532e(0x177))[_0x1d532e(0x18e)]=_0x4433a1[_0x1d532e(0x13d)],document[_0x1d532e(0x132)]('team-name')[_0x1d532e(0x159)]=!_0xd8c86c,document[_0x1d532e(0x132)](_0x1d532e(0x15e))[_0x1d532e(0x18e)]=_0x4433a1[_0x1d532e(0x11e)]||'',document[_0x1d532e(0x132)](_0x1d532e(0x15e))[_0x1d532e(0x159)]=!_0xd8c86c,document[_0x1d532e(0x132)](_0x1d532e(0x168))['hidden']=!![],document['getElementById']('team-modal-tabs')[_0x1d532e(0x187)]=![],document[_0x1d532e(0x132)](_0x1d532e(0x130))[_0x1d532e(0x187)]=![],document[_0x1d532e(0x132)](_0x1d532e(0x19c))[_0x1d532e(0x187)]=!_0xd8c86c,document['getElementById']('managers-section')[_0x1d532e(0x187)]=!_0x1bfa21,setActiveTabButton('details'),renderMembersList(_0x4433a1),updateMemberSelect(_0x4433a1),_0x1bfa21&&(renderManagersList(_0x4433a1),updateManagerSelect(_0x4433a1)),showTab(_0x1d532e(0x196)),document[_0x1d532e(0x132)](_0x1d532e(0x126))[_0x1d532e(0x187)]=![];};function hideTeamModal(){const _0x231b95=_0x3de7a2;document['getElementById'](_0x231b95(0x126))['hidden']=!![],document[_0x231b95(0x132)](_0x231b95(0x177))[_0x231b95(0x159)]=![],document[_0x231b95(0x132)](_0x231b95(0x15e))['disabled']=![],state['editingTeamId']=null;}function switchTab(_0x21fe7b){const _0x59cc3b=_0x3de7a2;state[_0x59cc3b(0x154)]=_0x21fe7b,setActiveTabButton(_0x21fe7b),showTab(_0x21fe7b),_0x21fe7b===_0x59cc3b(0x192)&&state[_0x59cc3b(0x139)]&&loadTeamBindings(state[_0x59cc3b(0x139)]);}function setActiveTabButton(_0xa3c8c7){const _0x3e2060=_0x3de7a2;document[_0x3e2060(0x121)](_0x3e2060(0x152))[_0x3e2060(0x160)](_0x47d362=>{const _0x2e8814=_0x3e2060,_0x3d00d2=_0x47d362[_0x2e8814(0x19f)][_0x2e8814(0x194)]===_0xa3c8c7;_0x47d362['style'][_0x2e8814(0x15f)]=_0x3d00d2?_0x2e8814(0x170):'transparent',_0x47d362['style'][_0x2e8814(0x18b)]=_0x3d00d2?_0x2e8814(0x170):_0x2e8814(0x153),_0x47d362[_0x2e8814(0x11f)][_0x2e8814(0x16e)]=_0x3d00d2?_0x2e8814(0x19b):_0x2e8814(0x125);});}function showTab(_0x4b18b5){const _0x3a46f2=_0x3de7a2;document[_0x3a46f2(0x132)]('team-tab-details')['hidden']=_0x4b18b5!==_0x3a46f2(0x196),document[_0x3a46f2(0x132)](_0x3a46f2(0x143))[_0x3a46f2(0x187)]=_0x4b18b5!==_0x3a46f2(0x192),document[_0x3a46f2(0x132)](_0x3a46f2(0x15c))[_0x3a46f2(0x187)]=_0x4b18b5===_0x3a46f2(0x192);}function renderMembersList(_0x4ea057){const _0x505c87=_0x3de7a2,_0xbeaf67=state[_0x505c87(0x1a4)]?.[_0x505c87(0x17c)],_0x2a6dcd=(_0x4ea057[_0x505c87(0x167)]||[])[_0x505c87(0x10b)](state[_0x505c87(0x1a4)]?.['id']),_0x230485=_0xbeaf67||_0x2a6dcd,_0x260c31=_0x4ea057[_0x505c87(0x17d)]||[],_0x56ba3a=document[_0x505c87(0x132)](_0x505c87(0x10c));if(_0x260c31[_0x505c87(0xfc)]===0x0){_0x56ba3a[_0x505c87(0x16c)]=_0x505c87(0x109);return;}_0x56ba3a[_0x505c87(0x16c)]=_0x260c31[_0x505c87(0x151)](_0xc8ad14=>{const _0xeaa038=_0x505c87,_0x244648=state[_0xeaa038(0x173)][_0xeaa038(0x115)](_0x1cb9ff=>_0x1cb9ff['id']===_0xc8ad14),_0x3364ed=_0x244648?''+Utils[_0xeaa038(0x141)](_0x244648[_0xeaa038(0x11c)])+(_0x244648[_0xeaa038(0x13d)]?'\x20<span\x20style=\x22color:\x20var(--color-text-secondary);\x20font-size:\x200.85em;\x22>('+Utils[_0xeaa038(0x141)](_0x244648[_0xeaa038(0x13d)])+_0xeaa038(0x195):''):Utils[_0xeaa038(0x141)](_0xc8ad14),_0x348ff5=(_0x4ea057[_0xeaa038(0x167)]||[])[_0xeaa038(0x10b)](_0xc8ad14);return _0xeaa038(0x122)+_0x3364ed+_0xeaa038(0x13e)+(_0x348ff5?'<span\x20class=\x22tag\x22\x20style=\x22margin-left:\x200.4rem;\x20font-size:\x200.7em;\x20padding:\x200.1em\x200.4em;\x22>manager</span>':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</span>\x0a\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x230485?_0xeaa038(0x148)+_0xc8ad14+_0xeaa038(0x149):'')+'\x0a\x20\x20\x20\x20\x20\x20</div>';})[_0x505c87(0x11d)]('');const _0x2a8f73=document[_0x505c87(0x132)]('add-member-row');if(_0x2a8f73)_0x2a8f73[_0x505c87(0x11f)][_0x505c87(0x128)]=_0x230485?_0x505c87(0x169):_0x505c87(0x10a);}function renderManagersList(_0x587ccf){const _0x2165dd=_0x3de7a2,_0x23ee3e=_0x587ccf[_0x2165dd(0x167)]||[],_0x152ab1=document[_0x2165dd(0x132)](_0x2165dd(0x135));if(_0x23ee3e[_0x2165dd(0xfc)]===0x0){_0x152ab1[_0x2165dd(0x16c)]=_0x2165dd(0x1a1);return;}_0x152ab1[_0x2165dd(0x16c)]=_0x23ee3e[_0x2165dd(0x151)](_0x3ca3d1=>{const _0x4fad66=_0x2165dd,_0x7b9840=state[_0x4fad66(0x173)][_0x4fad66(0x115)](_0x3806e8=>_0x3806e8['id']===_0x3ca3d1),_0x1e98dc=_0x7b9840?Utils[_0x4fad66(0x141)](_0x7b9840[_0x4fad66(0x11c)]):Utils[_0x4fad66(0x141)](_0x3ca3d1);return _0x4fad66(0x178)+_0x1e98dc+_0x4fad66(0x16d)+_0x3ca3d1+'\x27)\x22\x20style=\x22color:\x20var(--color-danger);\x20padding:\x200.15rem\x200.4rem;\x20font-size:\x200.8rem;\x22>Remove</button>\x0a\x20\x20\x20\x20\x20\x20</div>';})[_0x2165dd(0x11d)]('');}function updateMemberSelect(_0x4f9e95){const _0x5acac0=_0x3de7a2,_0x3d8cb3=document[_0x5acac0(0x132)](_0x5acac0(0x10e));if(!_0x3d8cb3)return;const _0x2a505a=new Set(_0x4f9e95[_0x5acac0(0x17d)]||[]),_0x3bcaf1=state[_0x5acac0(0x173)]['filter'](_0x29ad2a=>!_0x2a505a[_0x5acac0(0x181)](_0x29ad2a['id']));_0x3d8cb3[_0x5acac0(0x16c)]='<option\x20value=\x22\x22>Add\x20a\x20member…</option>'+_0x3bcaf1[_0x5acac0(0x151)](_0x895cd7=>'<option\x20value=\x22'+_0x895cd7['id']+'\x22>'+Utils[_0x5acac0(0x141)](_0x895cd7[_0x5acac0(0x11c)])+(_0x895cd7[_0x5acac0(0x13d)]?'\x20('+Utils[_0x5acac0(0x141)](_0x895cd7[_0x5acac0(0x13d)])+')':'')+'</option>')[_0x5acac0(0x11d)]('');}function updateManagerSelect(_0x2331df){const _0x17fe78=_0x3de7a2,_0x1c01de=document[_0x17fe78(0x132)](_0x17fe78(0x1a7));if(!_0x1c01de)return;const _0x2c2e72=new Set(_0x2331df[_0x17fe78(0x167)]||[]),_0x10d951=(_0x2331df['members']||[])['filter'](_0x3cc1e1=>!_0x2c2e72[_0x17fe78(0x181)](_0x3cc1e1))[_0x17fe78(0x151)](_0x454fb8=>state['users'][_0x17fe78(0x115)](_0xa4fa3c=>_0xa4fa3c['id']===_0x454fb8))['filter'](Boolean);_0x1c01de[_0x17fe78(0x16c)]='<option\x20value=\x22\x22>Promote\x20a\x20member\x20to\x20manager…</option>'+_0x10d951[_0x17fe78(0x151)](_0x4d6eb7=>_0x17fe78(0x14c)+_0x4d6eb7['id']+'\x22>'+Utils['escapeHtml'](_0x4d6eb7[_0x17fe78(0x11c)])+_0x17fe78(0x175))[_0x17fe78(0x11d)]('');}async function addMember(){const _0x3084ea=_0x3de7a2,_0x2dd864=document['getElementById'](_0x3084ea(0x10e)),_0x29f640=_0x2dd864[_0x3084ea(0x18e)];if(!_0x29f640||!state[_0x3084ea(0x139)])return;try{const {team:_0x4aace2}=await API[_0x3084ea(0x164)](state[_0x3084ea(0x139)],_0x29f640);syncTeamInState(_0x4aace2),renderMembersList(_0x4aace2),updateMemberSelect(_0x4aace2),state[_0x3084ea(0x1a4)]?.[_0x3084ea(0x17c)]&&(renderManagersList(_0x4aace2),updateManagerSelect(_0x4aace2)),_0x2dd864[_0x3084ea(0x18e)]='',Utils[_0x3084ea(0x10d)]('Member\x20added',_0x3084ea(0x176));}catch(_0x3826e9){Utils['showToast'](_0x3826e9[_0x3084ea(0x166)],_0x3084ea(0x113));}}async function addManager(){const _0x408833=_0x3de7a2,_0x3f2bee=document['getElementById'](_0x408833(0x1a7)),_0x452d42=_0x3f2bee[_0x408833(0x18e)];if(!_0x452d42||!state[_0x408833(0x139)])return;try{const {team:_0x4bd1c2}=await API[_0x408833(0x10f)](state[_0x408833(0x139)],_0x452d42);syncTeamInState(_0x4bd1c2),renderMembersList(_0x4bd1c2),renderManagersList(_0x4bd1c2),updateManagerSelect(_0x4bd1c2),_0x3f2bee[_0x408833(0x18e)]='',Utils[_0x408833(0x10d)]('Manager\x20added','success');}catch(_0x207ad7){Utils[_0x408833(0x10d)](_0x207ad7[_0x408833(0x166)],_0x408833(0x113));}}window['removeMemberClick']=async function(_0x132052){const _0x514bb1=_0x3de7a2;if(!state[_0x514bb1(0x139)])return;try{const {team:_0x55ca8c}=await API[_0x514bb1(0x1a6)](state['editingTeamId'],_0x132052);syncTeamInState(_0x55ca8c),renderMembersList(_0x55ca8c),updateMemberSelect(_0x55ca8c),state[_0x514bb1(0x1a4)]?.[_0x514bb1(0x17c)]&&(renderManagersList(_0x55ca8c),updateManagerSelect(_0x55ca8c)),Utils['showToast']('Member\x20removed',_0x514bb1(0x176));}catch(_0x5e073e){Utils[_0x514bb1(0x10d)](_0x5e073e[_0x514bb1(0x166)],_0x514bb1(0x113));}},window['removeManagerClick']=async function(_0x249b5a){const _0x35a1b6=_0x3de7a2;if(!state['editingTeamId'])return;try{const {team:_0x290f0b}=await API[_0x35a1b6(0x17e)](state[_0x35a1b6(0x139)],_0x249b5a);syncTeamInState(_0x290f0b),renderManagersList(_0x290f0b),updateManagerSelect(_0x290f0b),Utils[_0x35a1b6(0x10d)]('Manager\x20removed',_0x35a1b6(0x176));}catch(_0x29f7e5){Utils['showToast'](_0x29f7e5['message'],_0x35a1b6(0x113));}};async function loadTeamBindings(_0x13c73a){const _0x22f768=_0x3de7a2,_0x1adb2c=document[_0x22f768(0x132)](_0x22f768(0x16f)),_0x5e2b9b=document[_0x22f768(0x132)](_0x22f768(0x103)),_0x2b1864=document['getElementById'](_0x22f768(0x147)),_0xdee0d=document[_0x22f768(0x132)](_0x22f768(0x17a));_0x1adb2c[_0x22f768(0x187)]=![],_0x5e2b9b[_0x22f768(0x187)]=!![],_0x2b1864[_0x22f768(0x11f)][_0x22f768(0x128)]=_0x22f768(0x10a),_0xdee0d[_0x22f768(0x187)]=!![],document[_0x22f768(0x132)](_0x22f768(0xfb))[_0x22f768(0x187)]=!![];try{const {bindings:_0x2e8f26}=await API[_0x22f768(0x137)]({'subject_type':_0x22f768(0x127),'subject_id':_0x13c73a});state[_0x22f768(0x171)]=_0x2e8f26||[],_0x1adb2c[_0x22f768(0x187)]=!![],state[_0x22f768(0x171)]['length']===0x0?_0x5e2b9b['hidden']=![]:(_0x2b1864[_0x22f768(0x11f)][_0x22f768(0x128)]='',renderBindingsTable()),state[_0x22f768(0x1a4)]?.[_0x22f768(0x17c)]&&(_0xdee0d['hidden']=![]);}catch(_0x203438){_0x1adb2c['hidden']=!![],Utils['showToast'](_0x22f768(0x120)+_0x203438['message'],_0x22f768(0x113));}}function _0x59f6(){const _0x2c128d=['pc9VChrPB24+','C3vJy2vZCW','DgvHBs1Uyw1L','cIaGicaGidXKAxyGC3r5Bgu9iMrPC3bSyxK6igzSzxG7igfSAwDUlwL0zw1ZoIbJzw50zxi7igP1C3rPzNKTy29UDgvUDdOGC3bHy2uTyMv0D2vLBJSGCgfKzgLUzZOGmc4ZnxjLBsaWoYbIB3jKzxiTyM90Dg9ToIaXChGGC29SAwqGDMfYkc0Ty29SB3iTyM9YzgvYktSIpGOGicaGicaGidXZCgfUihn0EwXLpsjMB250lxnPEMu6idaUodC1CMvToYi+','zgvSzxrPBMDuzwfTswq','ywrKlwjPBMrPBMCTyNrU','ntm1mJy2wwrxwfDg','Axntzxj2zxjbzg1PBG','BwvTyMvYCW','CMvTB3zLvgvHBu1HBMfNzxi','ywrKrxzLBNrmAxn0zw5LCG','pgj1DhrVBIbJBgfZCZ0IyNrUlwDOB3n0igj0BI1ZBwfSBciGB25JBgLJAZ0ID2LUzg93lMrLBgv0zvrLyw0OjW','AgfZ','yMLUzgLUzY1LBNzPCM9UBwvUDa','cIaGicaGidX0CJ4kicaGicaGica8Dgq+cIaGicaGicaGica8yNv0Dg9UignSyxnZpsjIDg4Tz2HVC3qGyNrUlxnTywXSiIbZDhLSzt0IzM9UDc13zwLNAhq6idyWmdSGCgfKzgLUzZOGmdSGDgv4Dc1KzwnVCMf0Aw9UoIb1BMrLCMXPBMu7ihrLEhqTzgvJB3jHDgLVBI1ZDhLSztOGzg90DgvKoYikicaGicaGicaGicaGB25JBgLJAZ0ID2LUzg93lM9Wzw5uzwfTtw9KywWOjW','zMLUzeLUzgv4','C2f2zs1IAw5KAw5Nlwj0BG','DgvHBxmTzxjYB3i','AgLKzgvU','vgvHBsbUyw1LigLZihjLCxvPCMvK','mtCYmdy1s2DxC3PT','pc90zd4kicaGicaGica8Dgq+','y29SB3i','qMLUzgLUzYbYzw1VDMvK','yMLUzgLUz3mTDgfIBguTyM9KEq','DMfSDwu','DgvHBxmTzxjYB3iTBwvZC2fNzq','CM9Szxm','cIaGicaGicaGica8l2j1DhrVBJ4kicaGicaGicaGia','yMLUzgLUz3m','jYKIpKrLBgv0ztWVyNv0Dg9UpG','DgfI','ktWVC3bHBJ4','zgv0ywLSCW','ywXS','ihrLyw0','cIaGicaGicaGicaGia','z2v0uM9SzurLzMLUAxrPB25Z','nJaW','C2f2zs10zwfT','zgvSzxrLlxrLyw0TBMfTzq','ywrKlw1HBMfNzxiTyNrU','zgf0yxnLDa','DhjPBq','phaGC3r5Bgu9iMzVBNqTC2L6ztOGmc44nZvYzw07ignVBg9YoIb2yxiOls1JB2XVCI10zxH0lxnLy29UzgfYEsK7ig1HCMDPBJOGmc4YnxjLBsaWoYi+tM8GBwfUywDLCNm8l3a+','zgvSzxrLqMLUzgLUz0nSAwnR','pc90zd4kicaGicaGphrKpG','y3vYCMvUDfvZzxi','DgvHBs1TB2rHBc10AxrSzq','CMvTB3zLvgvHBu1LBwjLCG','ywrKlw1HBMfNzxiTC2vSzwn0','ywrKlwjPBMrPBMCTzM9YBq','BgvUz3rO','mtm0mJmZog9wC2fdBq','rgvSzxrPBMFIGky','u2f2Aw5N4OcM','AhjLzG','zgvSzxrLlxrLyw0TBw9KywW','nti0ntuZsuP2t0v5','yMLUzgLUz3mTzw1WDhK','pgrPDIbZDhLSzt0IzM9UDc1ZAxPLoIaWlJHLBtSGy29SB3i6ihzHCIGTlwnVBg9YlxrLEhqTC2vJB25Kyxj5ktSGBwfYz2LUlxrVCdOGmc4XnxjLBtSIpG','z2v0rw52AxjVBM1LBNrZ','pgj1DhrVBIbJBgfZCZ0IyNrUlxnLy29UzgfYEsbIDg4TC21HBgWIig9Uy2XPy2S9iNDPBMrVDY5VCgvUvgvHBu1VzgfSkcC','zgvSzxrLvgvHBq','DgvHBxm','phaGC3r5Bgu9iMzVBNqTC2L6ztOGmc44nZvYzw07ignVBg9YoIb2yxiOls1JB2XVCI10zxH0lxnLy29UzgfYEsK7ig1HCMDPBJOGmc4YnxjLBsaWoYi+tM8GBwvTyMvYCYb5zxq8l3a+','BM9Uzq','Aw5JBhvKzxm','BwvTyMvYCY1SAxn0','C2HVD1rVyxn0','ywrKlw1LBwjLCI1ZzwXLy3q','ywrKvgvHBu1HBMfNzxi','y2fUy2vSlxrLyw0','BwfUywDLCL9Uyw1LCW','pg9WDgLVBIb2ywX1zt0IiJ5bBgWGzw52AxjVBM1LBNrZigfSCMvHzhKGyM91BMq8l29WDgLVBJ4','zxjYB3i','ywrKlw1LBwjLCI1IDg4','zMLUza','re9nq29UDgvUDeXVywrLza','cIaGicaGidWVDgq+cIaGica8l3rYpG','y2fUy2vSlwjPBMrPBMCTyNrU','zMLSDgvY','i3rLyw0TBw9KywWGlM1VzgfSlw92zxjSyxK','Bg9JyxrPB24','DxnLCM5HBwu','AM9PBG','zgvZy3jPChrPB24','C3r5Bgu','rMfPBgvKihrVigXVywqGyMLUzgLUz3m6ia','CxvLCNLtzwXLy3rVCKfSBa','cIaGicaGidXKAxyGC3r5Bgu9iMrPC3bSyxK6igzSzxG7igfSAwDUlwL0zw1ZoIbJzw50zxi7igP1C3rPzNKTy29UDgvUDdOGC3bHy2uTyMv0D2vLBJSGCgfKzgLUzZOGmc4ZnxjLBsaWoYbIB3jKzxiTyM90Dg9ToIaXChGGC29SAwqGDMfYkc0Ty29SB3iTyM9YzgvYktSIpGOGicaGicaGidXZCgfUihn0EwXLpsjMB250lxnPEMu6idaUodC1CMvToYi+cIaGicaGicaGica','y3jLyxrLlxrLyw0TyNrU','yMLUzgLUzY1YB2XL','BM9YBwfS','DgvHBs1TB2rHBa','DgvHBq','zgLZCgXHEq','Bg9NAw4UAhrTBa','B3bLBLrLyw1nB2rHBa','vgvHBsbKzwXLDgvK','y3jLyxrLqMLUzgLUzW','zw52AxjVBM1LBNq','mZy0nJnjt2ntBwK','Dgv4DenVBNrLBNq','BwvTyMvYCY1Zzwn0Aw9U','z2v0q3vYCMvUDfvZzxi','z2v0rwXLBwvUDej5swq','qwrKAw5N4OcM','DxbKyxrLvgvHBq','BwfUywDLCNmTBgLZDa','pc90zd4kicaGicaGica8Dgq+cIaGicaGicaGica8zgL2ignSyxnZpsj1C2vYlwfJDgLVBNmIpGOGicaGicaGicaGica','z2v0qMLUzgLUz3m','mxH1tgvttG','zwrPDgLUz1rLyw1jza','CMv0CNKTDgvHBxmTyNrU','zw52AxjVBM1LBNrZ','DgvHBs1JB3vUDa','BMfTzq','cIaGicaGicaGica','mJbJuevVzw8','ntzHu29osKi','zxnJyxbLshrTBa','q2XPy2SGphn0CM9UzZ5dCMvHDguGvgvHBtWVC3rYB25NpIb0BYbNzxqGC3rHCNrLzc4','DgvHBs10ywiTyMLUzgLUz3m','z2v0vgvHBxm','DgvHBs1TB2rHBc10ywjZ','pgj1DhrVBIbJBgfZCZ0IyNrUlwDOB3n0igj0BI1ZBwfSBciGB25JBgLJAZ0ID2LUzg93lMrLBgv0zujPBMrPBMDdBgLJAYGN','yMLUzgLUz3mTBgLZDc1JB250ywLUzxi','pgj1DhrVBIb0ExbLpsjIDxr0B24IignSyxnZpsjIDg4Tz2HVC3qGyNrUlxnTywXSiIbVBMnSAwnRpsj3Aw5KB3CUCMvTB3zLtwvTyMvYq2XPy2SOjW','jYKIihn0EwXLpsjJB2XVCJOGDMfYkc0Ty29SB3iTzgfUz2vYktSGCgfKzgLUzZOGmc4XnxjLBsaWlJrYzw07igzVBNqTC2L6ztOGmc44CMvToYi+uMvTB3zLpc9IDxr0B24+','ndK0odeZrvj5zfLL','cIaGicaGidX0CJ4kicaGicaGica8DgqGy29SC3bHBJ0InciGC3r5Bgu9iNrLEhqTywXPz246ignLBNrLCJSGy29SB3i6ihzHCIGTlwnVBg9YlxrLEhqTC2vJB25Kyxj5ktSGCgfKzgLUzZOGmNjLBtSIpGOGicaGicaGicaGtM8GDgvHBxmGEwv0lGOGicaGicaGicaG','pg9WDgLVBIb2ywX1zt0I','CxvLCNLtzwXLy3rVCG','mtuWBK5fs0Px','y2fUy2vSlwrLBgv0zs10zwfT','rMfPBgvKihrVigrLBgv0zsb0zwfToIa','BwfW','lM1VzgfSlxrHyI1IDg4','DMfYkc0Ty29SB3iTDgv4Dc1ZzwnVBMrHCNKP','ywn0AxzLvgfI','q3jLyxrPBMFIGky','qMLUzgLUzYbHzgrLza','ndy4mZiYqKftAvLu','vgvHBsbJCMvHDgvK','zgLZywjSzwq','y2XVC2uTDgvHBs1TB2rHBa','y29UzMLYBs1KzwXLDguTDgvHBq','DgvHBs1TB2rHBc1MB290zxi','CM9Szv9Uyw1L','DgvHBs1KzxnJCMLWDgLVBG','yM9YzgvYqM90Dg9Tq29SB3i','zM9YrwfJAa','i2rLBgv0zs10zwfTlw1VzgfSic5TB2rHBc1VDMvYBgf5','z2v0vxnLCNm','y2XVC2uTzgvSzxrLlxrLyw0TBw9KywW','ywrKvgvHBu1LBwjLCG','y2XPy2S','BwvZC2fNzq','BwfUywDLCNm','DgvHBs1MB3jTlwvYCM9Y','zMXLEa','zgvSzxrLqMLUzgLUzW','rgvSzxrLifrLyw0','Aw5Uzxjive1m','pc9ZCgfUpGOGicaGicaGidXIDxr0B24GDhLWzt0IyNv0Dg9UiIbJBgfZCZ0IyNrUlwDOB3n0igj0BI1ZBwfSBciGB25JBgLJAZ0ID2LUzg93lNjLBw92zu1HBMfNzxjdBgLJAYGN','zM9UDfDLAwDODa','yMLUzgLUz3mTBg9HzgLUzW','DMfYkc0Ty29SB3iTChjPBwfYEsK','DgvHBujPBMrPBMDZ','pc90zd4kicaGicaGphrKpGOGicaGicaGia','DxnLCNm','cIaGicaGicaGpc90zd4kicaGicaGica8Dgq+'];_0x59f6=function(){return _0x2c128d;};return _0x59f6();}function renderBindingsTable(){const _0x1200a9=_0x3de7a2,_0x16886d=document[_0x1200a9(0x132)](_0x1200a9(0x18d));if(!_0x16886d)return;const _0x539d8e=state['currentUser']?.['isServerAdmin'];_0x16886d[_0x1200a9(0x16c)]=state['teamBindings'][_0x1200a9(0x151)](_0x390bab=>'\x0a\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20<td>'+Utils['escapeHtml'](_0x390bab[_0x1200a9(0x12d)])+_0x1200a9(0x1a3)+Utils[_0x1200a9(0x141)](_0x390bab[_0x1200a9(0x15d)]||_0x390bab['role_id'])+_0x1200a9(0x172)+(_0x539d8e?_0x1200a9(0x146)+_0x390bab['id']+'\x27)\x22\x20style=\x22color:\x20var(--color-danger);\x22>Remove</button>':'—')+_0x1200a9(0x117))['join']('');}function populateBindingForm(){const _0x128ef3=_0x3de7a2,_0x301473=document['getElementById'](_0x128ef3(0x182)),_0x2a79e0=document[_0x128ef3(0x132)](_0x128ef3(0x124)),_0x237612=new Set(state[_0x128ef3(0x171)][_0x128ef3(0x151)](_0x50253e=>_0x50253e[_0x128ef3(0x12d)])),_0x19c859=state[_0x128ef3(0x13b)][_0x128ef3(0x119)](_0xa66872=>!_0x237612[_0x128ef3(0x181)](_0xa66872[_0x128ef3(0x13d)]));_0x301473[_0x128ef3(0x16c)]=_0x19c859[_0x128ef3(0xfc)]?_0x19c859[_0x128ef3(0x151)](_0x398ff7=>_0x128ef3(0x14c)+Utils[_0x128ef3(0x141)](_0x398ff7[_0x128ef3(0x13d)])+'\x22>'+Utils['escapeHtml'](_0x398ff7[_0x128ef3(0x13d)])+_0x128ef3(0x175))[_0x128ef3(0x11d)](''):_0x128ef3(0x112),_0x2a79e0[_0x128ef3(0x16c)]=state['roles'][_0x128ef3(0x151)](_0x42c972=>_0x128ef3(0x14c)+_0x42c972['id']+'\x22>'+Utils['escapeHtml'](_0x42c972['name'])+'</option>')[_0x128ef3(0x11d)]('');}async function saveBinding(){const _0x484808=_0x3de7a2,_0x1d8cdf=document[_0x484808(0x132)](_0x484808(0x182))[_0x484808(0x18e)],_0x134d98=document[_0x484808(0x132)](_0x484808(0x124))['value'];if(!_0x1d8cdf||!_0x134d98||!state[_0x484808(0x139)])return;const _0x196c47=document['getElementById'](_0x484808(0x185));_0x196c47[_0x484808(0x159)]=!![],_0x196c47[_0x484808(0x12f)]=_0x484808(0x133);try{await API[_0x484808(0x12c)]({'subject_type':'team','subject_id':state['editingTeamId'],'role_id':_0x134d98,'environment':_0x1d8cdf}),Utils[_0x484808(0x10d)](_0x484808(0x156),_0x484808(0x176)),document[_0x484808(0x132)]('add-binding-form')[_0x484808(0x187)]=!![],document[_0x484808(0x132)](_0x484808(0x17a))[_0x484808(0x187)]=![],await loadTeamBindings(state[_0x484808(0x139)]);}catch(_0x44a331){Utils['showToast'](_0x44a331[_0x484808(0x166)],_0x484808(0x113));}finally{_0x196c47[_0x484808(0x159)]=![],_0x196c47[_0x484808(0x12f)]='Add\x20Binding';}}window[_0x3de7a2(0x1a2)]=async function(_0x860b92){const _0x5b0017=_0x3de7a2;try{await API[_0x5b0017(0x16a)](_0x860b92),Utils[_0x5b0017(0x10d)](_0x5b0017(0x18c),'success'),await loadTeamBindings(state[_0x5b0017(0x139)]);}catch(_0xf24c03){Utils[_0x5b0017(0x10d)](_0xf24c03['message'],_0x5b0017(0x113));}};async function saveTeam(){const _0x3e5152=_0x3de7a2,_0x1d6da2=document[_0x3e5152(0x132)](_0x3e5152(0x177))['value'][_0x3e5152(0x1a0)](),_0x4edc66=document[_0x3e5152(0x132)](_0x3e5152(0x15e))['value']['trim'](),_0x9b7ef3=document[_0x3e5152(0x132)](_0x3e5152(0x168)),_0x12ef3a=document['getElementById'](_0x3e5152(0x19c));if(!_0x1d6da2){_0x9b7ef3[_0x3e5152(0x12f)]=_0x3e5152(0x188),_0x9b7ef3['hidden']=![];return;}_0x9b7ef3['hidden']=!![];const _0x20c196=_0x12ef3a['textContent'];_0x12ef3a[_0x3e5152(0x159)]=!![],_0x12ef3a[_0x3e5152(0x12f)]=state[_0x3e5152(0x139)]?_0x3e5152(0xff):_0x3e5152(0x155);try{if(state[_0x3e5152(0x139)]){const {team:_0x9061b1}=await API[_0x3e5152(0x134)](state[_0x3e5152(0x139)],{'name':_0x1d6da2,'description':_0x4edc66});syncTeamInState(_0x9061b1),document[_0x3e5152(0x132)](_0x3e5152(0x1a5))[_0x3e5152(0x12f)]=_0x9061b1[_0x3e5152(0x13d)],Utils[_0x3e5152(0x10d)]('Team\x20updated',_0x3e5152(0x176));}else await API['createTeam']({'name':_0x1d6da2,'description':_0x4edc66}),Utils[_0x3e5152(0x10d)](_0x3e5152(0x158),_0x3e5152(0x176)),hideTeamModal(),await loadTeams();state[_0x3e5152(0x139)]&&(_0x12ef3a[_0x3e5152(0x159)]=![],_0x12ef3a['textContent']=_0x20c196);}catch(_0xdd7cce){_0x9b7ef3[_0x3e5152(0x12f)]=_0xdd7cce[_0x3e5152(0x166)],_0x9b7ef3[_0x3e5152(0x187)]=![],_0x12ef3a[_0x3e5152(0x159)]=![],_0x12ef3a[_0x3e5152(0x12f)]=_0x20c196;}}window[_0x3de7a2(0x107)]=function(_0x35ae22){const _0xc93db7=_0x3de7a2,_0x94d7c7=state['teams'][_0xc93db7(0x115)](_0x32c464=>_0x32c464['id']===_0x35ae22);if(!_0x94d7c7)return;state[_0xc93db7(0x179)]=_0x35ae22,document[_0xc93db7(0x132)](_0xc93db7(0x19d))[_0xc93db7(0x12f)]=_0x94d7c7['name'],document['getElementById'](_0xc93db7(0x101))[_0xc93db7(0x187)]=![];};function hideDeleteModal(){const _0x2a837e=_0x3de7a2;document[_0x2a837e(0x132)](_0x2a837e(0x101))[_0x2a837e(0x187)]=!![],state[_0x2a837e(0x179)]=null;}async function confirmDeleteTeam(){const _0x57212c=_0x3de7a2;if(!state[_0x57212c(0x179)])return;const _0x433db7=document[_0x57212c(0x132)](_0x57212c(0x15b));_0x433db7['disabled']=!![],_0x433db7[_0x57212c(0x12f)]=_0x57212c(0xfe);try{await API[_0x57212c(0x107)](state[_0x57212c(0x179)]),Utils['showToast'](_0x57212c(0x12b),_0x57212c(0x176)),hideDeleteModal(),await loadTeams();}catch(_0x5da6ce){Utils[_0x57212c(0x10d)](_0x57212c(0x150)+_0x5da6ce[_0x57212c(0x166)],_0x57212c(0x113)),_0x433db7[_0x57212c(0x159)]=![],_0x433db7[_0x57212c(0x12f)]=_0x57212c(0x16b);}}function syncTeamInState(_0x7e7189){const _0x2b55d8=_0x3de7a2,_0x33564e=state['teams'][_0x2b55d8(0x184)](_0x58479a=>_0x58479a['id']===_0x7e7189['id']);if(_0x33564e>=0x0)state[_0x2b55d8(0x108)][_0x33564e]=_0x7e7189;renderTeams();}
@@ -1 +1 @@
1
- const _0x1b7198=_0x47a5;(function(_0x59687a,_0x1008b6){const _0x352fb4=_0x47a5,_0x4491ab=_0x59687a();while(!![]){try{const _0x44390b=parseInt(_0x352fb4(0x1a4))/0x1*(parseInt(_0x352fb4(0x16f))/0x2)+-parseInt(_0x352fb4(0x17a))/0x3+-parseInt(_0x352fb4(0x176))/0x4+parseInt(_0x352fb4(0x175))/0x5*(parseInt(_0x352fb4(0x1bc))/0x6)+-parseInt(_0x352fb4(0x1ae))/0x7+-parseInt(_0x352fb4(0x177))/0x8*(parseInt(_0x352fb4(0x195))/0x9)+-parseInt(_0x352fb4(0x1a5))/0xa*(-parseInt(_0x352fb4(0x1b3))/0xb);if(_0x44390b===_0x1008b6)break;else _0x4491ab['push'](_0x4491ab['shift']());}catch(_0x227ed5){_0x4491ab['push'](_0x4491ab['shift']());}}}(_0x58f2,0x36637));import{API,Utils}from'./app.js';import{Terminal}from'https://cdn.jsdelivr.net/npm/xterm@5.3.0/+esm';import{FitAddon}from'https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.7.0/+esm';import{getCurrentTheme,initTheme,mountThemeToggle,onThemeChange}from'./theme.js';const params=Utils[_0x1b7198(0x1c4)](),containerId=params['container'],command=(params[_0x1b7198(0x1b2)]||'')['trim'](),useServerExec=params[_0x1b7198(0x180)]==='true',titleEl=document['getElementById']('terminal-title'),subtitleEl=document[_0x1b7198(0x1be)](_0x1b7198(0x19e)),statusEl=document['getElementById']('terminal-status'),terminalEl=document['getElementById'](_0x1b7198(0x172)),closeBtn=document[_0x1b7198(0x1be)](_0x1b7198(0x185));initTheme(),mountThemeToggle({'targetSelectors':[_0x1b7198(0x19a)]});const getXtermTheme=()=>{const _0x292fd=_0x1b7198;return{'background':_0x292fd(0x18f),'foreground':_0x292fd(0x179),'cursor':'#e2e8f0','cursorAccent':_0x292fd(0x18f)};};closeBtn&&closeBtn[_0x1b7198(0x1a9)](_0x1b7198(0x1a6),()=>{const _0x6b0900=_0x1b7198;window[_0x6b0900(0x1c2)]();});if(!containerId){updateStatus('Missing\x20container\x20identifier',_0x1b7198(0x1c3));throw new Error(_0x1b7198(0x19b));}document[_0x1b7198(0x1c5)]='Terminal\x20·\x20'+containerId[_0x1b7198(0x19d)](0x0,0xc),enrichContainerDetails(containerId)[_0x1b7198(0x17c)](()=>{const _0x468c74=_0x1b7198;subtitleEl['textContent']=_0x468c74(0x18b)+containerId['substring'](0x0,0xc);});const term=new Terminal({'convertEol':!![],'cursorBlink':!![],'fontFamily':_0x1b7198(0x1a0),'fontSize':0x10,'theme':getXtermTheme()}),fitAddon=new FitAddon();term['loadAddon'](fitAddon),term['open'](terminalEl),term[_0x1b7198(0x1b1)]();let isFitting=![];const doFit=()=>{const _0x578d49=_0x1b7198;if(isFitting)return;isFitting=!![],fitAddon[_0x578d49(0x1c0)](),sendResize(),term[_0x578d49(0x1b4)](),setTimeout(()=>{isFitting=![];},0x32);};window['addEventListener'](_0x1b7198(0x186),()=>{requestAnimationFrame(()=>{!isFitting&&doFit();});});const resizeObserver=new ResizeObserver(()=>{requestAnimationFrame(()=>{!isFitting&&doFit();});});resizeObserver[_0x1b7198(0x1b6)](terminalEl);const socketProtocol=window[_0x1b7198(0x182)][_0x1b7198(0x173)]===_0x1b7198(0x1ab)?'wss':'ws',socketUrl=new URL('/ws/containers/'+encodeURIComponent(containerId),window['location'][_0x1b7198(0x18a)]);command&&useServerExec&&socketUrl[_0x1b7198(0x1af)][_0x1b7198(0x1aa)](_0x1b7198(0x1b2),command);socketUrl[_0x1b7198(0x173)]=socketProtocol+':';const socket=new WebSocket(socketUrl[_0x1b7198(0x184)]());function _0x58f2(){const _0x4ca973=['CMvHzhLtDgf0zq','Bg9JyxrPB24','zNvSBenVBNrHAw5LCKLK','Dg9tDhjPBMC','y2XVC2uTDgvYBwLUywW','CMvZAxPL','uhjLCgfYAw5NoIa','rMfPBgvKihrVihbHCNnLihrLCM1PBMfSig1LC3nHz2u','C3rHCNrZv2L0Aa','AhjLzG','q29UDgfPBMvYia','D3jPDgu','BMfTzq','imk3ienVBw1HBMqG','iZbMmtCYyq','y3jLyxrLzef0','imk3iefNzw50ia','C2vUza','uNvUBMLUzZOG','rw52AxjVBM1LBNqGDw5RBM93BG','mJDpBenjC2y','z2v0q29UDgfPBMvYCW','Aw5MBW','C3rYAw5N','u2vZC2LVBIa','lNrLCM1PBMfSlwfJDgLVBNm','y29UDgfPBMvYihbHCMfTzxrLCIbPCYbYzxf1AxjLza','vgvYBwLUywWGD2vIC29JA2v0igvYCM9Y','C2XPy2u','DgvYBwLUywWTC3vIDgL0Bgu','zw52AxjVBM1LBNq','sMv0qNjHAw5Zie1VBM8Sifngtw9UBY1szwD1BgfYlcbdB25ZB2XHCYWGBw9UB3nWywnL','imk3ifn0yxj0zwqG','q29UBMvJDgLVBIbLCNjVCG','vgvYBwLUywWGy29UBMvJDgvK','og5QANDLwG','mJe5mJeXmeLcwMTUyq','y2XPy2S','zgf0yxnLDa','y29SCW','ywrKrxzLBNrmAxn0zw5LCG','C2v0','Ahr0Chm6','q29UBMvJDgLVBIbJBg9Zzwq','y29UDgfPBMvYCW','nZe0mZi5AKfqB3Ly','C2vHCMnOugfYyw1Z','zMLUza','zM9JDxm','y21K','mJjrEfLeB1q','C2nYB2XSvg9cB3r0B20','rw52AxjVBM1LBNqG','B2jZzxj2zq','zM9YBwf0uMvSyxrPDMvuAw1L','C3rHDhvZ','y29UDgfPBMvYswq','B25eyxrH','vgvYBwLUywWGWRCG','nZC0nK9SBvb4zq','C3vIC3rYAw5N','z2v0rwXLBwvUDej5swq','C3vJy2vZCW','zML0','zgvMyxvSDefNzw50','y2XVC2u','zxjYB3i','z2v0uxvLCNLqyxjHBxm','DgL0Bgu','zgf0yq','mZG0nJbfuvbnyxi','Dgv4DenVBNrLBNq','t1bftG','DgvYBwLUywWTy29UDgfPBMvY','ChjVDg9JB2W','C3rYAw5NAwz5','mte4meztCu1gDq','otiYode2De9grgLN','ntK3mtyWBu1Wvu1Q','BwvZC2fNzq','i2uYztHMma','mZuYndmXzhvZDMXg','CM93CW','y2f0y2G','y29UBMvJDgvK','CgfYC2u','DhLWzq','C2vYDMvYx2v4zwm'];_0x58f2=function(){return _0x4ca973;};return _0x58f2();}term[_0x1b7198(0x1ba)](_0x260035=>{const _0x5473e4=_0x1b7198;socket[_0x5473e4(0x181)]===WebSocket[_0x5473e4(0x171)]&&socket[_0x5473e4(0x192)](JSON[_0x5473e4(0x174)]({'type':_0x5473e4(0x16e),'data':_0x260035}));});function _0x47a5(_0x21a038,_0x53e68b){_0x21a038=_0x21a038-0x16e;const _0x58f2f0=_0x58f2();let _0x47a585=_0x58f2f0[_0x21a038];if(_0x47a5['idNOSH']===undefined){var _0x34ebab=function(_0x55961b){const _0x59e0f0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x260035='',_0x35d081='';for(let _0x3fff0a=0x0,_0x457893,_0x371056,_0x3d95d8=0x0;_0x371056=_0x55961b['charAt'](_0x3d95d8++);~_0x371056&&(_0x457893=_0x3fff0a%0x4?_0x457893*0x40+_0x371056:_0x371056,_0x3fff0a++%0x4)?_0x260035+=String['fromCharCode'](0xff&_0x457893>>(-0x2*_0x3fff0a&0x6)):0x0){_0x371056=_0x59e0f0['indexOf'](_0x371056);}for(let _0x159b85=0x0,_0x3e869a=_0x260035['length'];_0x159b85<_0x3e869a;_0x159b85++){_0x35d081+='%'+('00'+_0x260035['charCodeAt'](_0x159b85)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x35d081);};_0x47a5['PDGvLb']=_0x34ebab,_0x47a5['RoDRuz']={},_0x47a5['idNOSH']=!![];}const _0x1a0479=_0x58f2f0[0x0],_0x831651=_0x21a038+_0x1a0479,_0x2b1a21=_0x47a5['RoDRuz'][_0x831651];return!_0x2b1a21?(_0x47a585=_0x47a5['PDGvLb'](_0x47a585),_0x47a5['RoDRuz'][_0x831651]=_0x47a585):_0x47a585=_0x2b1a21,_0x47a585;}let commandSent=![],hasReceivedOutput=![];socket['addEventListener'](_0x1b7198(0x178),_0x35d081=>{const _0x2d013a=_0x1b7198;try{const _0x3fff0a=JSON[_0x2d013a(0x17e)](_0x35d081[_0x2d013a(0x16e)]);if(_0x3fff0a['type']===_0x2d013a(0x16e)&&typeof _0x3fff0a[_0x2d013a(0x16e)]===_0x2d013a(0x198))term[_0x2d013a(0x18c)](_0x3fff0a[_0x2d013a(0x16e)]),!hasReceivedOutput&&_0x3fff0a['data']['length']>0x0&&(hasReceivedOutput=!![],command&&!useServerExec&&!commandSent&&(commandSent=!![],setTimeout(()=>{const _0x2cdcd2=_0x2d013a;socket['readyState']===WebSocket[_0x2cdcd2(0x171)]&&socket[_0x2cdcd2(0x192)](JSON[_0x2cdcd2(0x174)]({'type':'data','data':command+'\x0d'}));},0xc8)));else{if(_0x3fff0a['type']===_0x2d013a(0x1b8)&&_0x3fff0a[_0x2d013a(0x1b8)]){if(_0x3fff0a[_0x2d013a(0x1b8)]==='connected'){if(command&&useServerExec)updateStatus(_0x2d013a(0x193)+command,_0x2d013a(0x197));else command?updateStatus(_0x2d013a(0x187)+command,'info'):updateStatus(_0x2d013a(0x1a3),_0x2d013a(0x1bf));doFit(),term[_0x2d013a(0x1b1)](),command&&!useServerExec&&!commandSent&&setTimeout(()=>{const _0xc33b3e=_0x2d013a;!commandSent&&socket[_0xc33b3e(0x181)]===WebSocket[_0xc33b3e(0x171)]&&(commandSent=!![],socket[_0xc33b3e(0x192)](JSON[_0xc33b3e(0x174)]({'type':'data','data':command+'\x0d'})),updateStatus('Running:\x20'+command,_0xc33b3e(0x197)));},0x7d0);}else updateStatus(_0x2d013a(0x199)+_0x3fff0a[_0x2d013a(0x1b8)],_0x3fff0a[_0x2d013a(0x1b8)]===_0x2d013a(0x17d)?_0x2d013a(0x1bf):_0x2d013a(0x197));}else _0x3fff0a[_0x2d013a(0x17f)]==='error'&&_0x3fff0a[_0x2d013a(0x178)]&&updateStatus(_0x3fff0a[_0x2d013a(0x178)],'error');}}catch(_0x457893){console[_0x2d013a(0x1c3)](_0x2d013a(0x188),_0x457893);}}),socket[_0x1b7198(0x1a9)]('close',_0x371056=>{const _0x37016b=_0x1b7198,_0x3d95d8=_0x371056['reason']||_0x37016b(0x1ac);updateStatus(_0x3d95d8,_0x371056['wasClean']?_0x37016b(0x197):'error');}),socket[_0x1b7198(0x1a9)](_0x1b7198(0x1c3),_0x159b85=>{const _0x145eeb=_0x1b7198;console['error'](_0x145eeb(0x19c),_0x159b85),updateStatus(_0x145eeb(0x1a2),'error');});function sendResize(){const _0x41001c=_0x1b7198;if(socket[_0x41001c(0x181)]!==WebSocket['OPEN'])return;const _0x3e869a=term[_0x41001c(0x1a8)],_0x226871=term[_0x41001c(0x17b)];socket['send'](JSON[_0x41001c(0x174)]({'type':_0x41001c(0x186),'cols':_0x3e869a,'rows':_0x226871}));}function updateStatus(_0x322515,_0x53050b='info'){const _0x2483c9=_0x1b7198;if(!statusEl)return;statusEl[_0x2483c9(0x170)]=_0x322515,statusEl[_0x2483c9(0x1a7)]['variant']=_0x53050b;}async function enrichContainerDetails(_0x25cda2){const _0x491b6e=_0x1b7198;try{const _0xcf1c9f=await API['getContainer'](_0x25cda2);updateTerminalDetails(_0xcf1c9f);}catch{try{const _0x3b3072=await API[_0x491b6e(0x196)](),_0x1be786=(_0x3b3072[_0x491b6e(0x1ad)]||[])[_0x491b6e(0x1b0)](_0x43c056=>_0x43c056['containerId']===_0x25cda2||_0x43c056[_0x491b6e(0x18d)]===_0x25cda2||_0x43c056[_0x491b6e(0x183)]?.[_0x491b6e(0x189)](_0x25cda2));if(_0x1be786){updateTerminalDetails(_0x1be786);return;}subtitleEl[_0x491b6e(0x170)]=_0x491b6e(0x18b)+_0x25cda2[_0x491b6e(0x1bd)](0x0,0xc);}catch{subtitleEl[_0x491b6e(0x170)]=_0x491b6e(0x18b)+_0x25cda2[_0x491b6e(0x1bd)](0x0,0xc);}}}function updateTerminalDetails(_0x440b21){const _0x272f57=_0x1b7198,_0x2833d2=_0x440b21[_0x272f57(0x1b9)]||_0x440b21['name']||_0x440b21[_0x272f57(0x183)]||containerId,_0x19f8de=_0x440b21[_0x272f57(0x19f)]?_0x272f57(0x1b5)+_0x440b21[_0x272f57(0x19f)]:_0x272f57(0x194),_0x1e6309=_0x440b21['defaultAgent']?_0x272f57(0x191)+_0x440b21[_0x272f57(0x1c1)]:'',_0x234079=_0x440b21[_0x272f57(0x190)]?_0x272f57(0x1a1)+Utils[_0x272f57(0x1b7)](_0x440b21[_0x272f57(0x190)]):'';titleEl[_0x272f57(0x170)]=_0x272f57(0x1bb)+_0x2833d2[_0x272f57(0x1bd)](0x0,0xc);const _0x52fa33=command?_0x272f57(0x18e)+command:'';subtitleEl[_0x272f57(0x170)]=''+_0x19f8de+_0x1e6309+_0x234079+_0x52fa33;}
1
+ const _0x3703c1=_0x36ad;(function(_0x2bbc1a,_0x3cc71d){const _0x5afab6=_0x36ad,_0x2ab3f9=_0x2bbc1a();while(!![]){try{const _0x1d845a=-parseInt(_0x5afab6(0x222))/0x1*(parseInt(_0x5afab6(0x233))/0x2)+parseInt(_0x5afab6(0x237))/0x3*(-parseInt(_0x5afab6(0x23a))/0x4)+-parseInt(_0x5afab6(0x236))/0x5+parseInt(_0x5afab6(0x212))/0x6+parseInt(_0x5afab6(0x23b))/0x7+-parseInt(_0x5afab6(0x1f2))/0x8+-parseInt(_0x5afab6(0x21b))/0x9*(-parseInt(_0x5afab6(0x1e6))/0xa);if(_0x1d845a===_0x3cc71d)break;else _0x2ab3f9['push'](_0x2ab3f9['shift']());}catch(_0x585737){_0x2ab3f9['push'](_0x2ab3f9['shift']());}}}(_0xa62e,0x8a070));import{API,Utils}from'./app.js';import{Terminal}from'https://cdn.jsdelivr.net/npm/xterm@5.3.0/+esm';function _0xa62e(){const _0xe05b40=['DgvYBwLUywWTC3rHDhvZ','zgf0yq','B25eyxrH','zw52AxjVBM1LBNq','DgvYBwLUywWTDgL0Bgu','C3rHCNrZv2L0Aa','Aw5MBW','D3jPDgu','imk3ienVBw1HBMqG','rw52AxjVBM1LBNqG','C2nYB2XSvg9cB3r0B20','y29UDgfPBMvY','zMLUza','C2vUza','C2v0','C3rYAw5NAwz5','ChjVDg9JB2W','D3nZ','DgvYBwLUywWTC3vIDgL0Bgu','ndqYmZG0oe5lt0ruDa','y29UDgfPBMvYswq','BMfTzq','DgvYBwLUywWTy29UDgfPBMvY','q29UBMvJDgLVBIbJBg9Zzwq','CMvZAxPL','D2fZq2XLyw4','B3bLBG','zxjYB3i','mtHUCMPPzMK','C3vJy2vZCW','BwvZC2fNzq','B2jZzxj2zq','C3rHDhvZ','z2v0rwXLBwvUDej5swq','C3rYAw5N','ndiWndCZEefmBwHU','zML0','uNvUBMLUzZOG','z2v0uxvLCNLqyxjHBxm','z2v0q29UDgfPBMvY','t1bftG','C2XPy2u','u2vZC2LVBIa','q29UDgfPBMvYia','rMfPBgvKihrVihbHCNnLihrLCM1PBMfSig1LC3nHz2u','imk3iefNzw50ia','CM93CW','DMfYAwfUDa','y29UDgfPBMvYihbHCMfTzxrLCIbPCYbYzxf1AxjLza','C3vIC3rYAw5N','uhjLCgfYAw5NoIa','rw52AxjVBM1LBNqGDw5RBM93BG','mLLwqwXzwG','imk3ifn0yxj0zwqG','i2uYztHMma','nde3mdG2nxPZEvH6rG','nMPlD2vzzq','zgvMyxvSDefNzw50','y29UBMvJDgvK','mtu0mJm3nM1kAhz2sa','nZmWmtq4m2rWA05zva','zM9YBwf0uMvSyxrPDMvuAw1L','z2v0q29UDgfPBMvYCW','CMvHzhLtDgf0zq','Dg9tDhjPBMC','odeXndaZmhb1BNDprq','y2XVC2uTDgvYBwLUywW','Ahr0Chm6','Dhj1zq','iZbMmtCYyq','DgL0Bgu','C2vHCMnOugfYyw1Z','lNrLCM1PBMfSlwfJDgLVBNm','DhjPBq','ywrKrxzLBNrmAxn0zw5LCG','DhLWzq','y2XVC2u','nJq5ntKXmML3zuHYsq','Bg9JyxrPB24','y3jLyxrLzef0','q29UBMvJDgLVBIbLCNjVCG','Dgv4DenVBNrLBNq','zNvSBenVBNrHAw5LCKLK','twLZC2LUzYbJB250ywLUzxiGAwrLBNrPzMLLCG','zgf0yxnLDa','zM9JDxm','y29SCW','y21K','vgvYBwLUywWGWRCG','vgvYBwLUywWGD2vIC29JA2v0igvYCM9Y'];_0xa62e=function(){return _0xe05b40;};return _0xa62e();}import{FitAddon}from'https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.7.0/+esm';import{getCurrentTheme,initTheme,mountThemeToggle,onThemeChange}from'./theme.js';const params=Utils[_0x3703c1(0x225)](),containerId=params[_0x3703c1(0x20a)],command=(params['cmd']||'')[_0x3703c1(0x1ee)](),useServerExec=params['server_exec']===_0x3703c1(0x1e9),titleEl=document[_0x3703c1(0x220)](_0x3703c1(0x203)),subtitleEl=document[_0x3703c1(0x220)](_0x3703c1(0x211)),statusEl=document[_0x3703c1(0x220)](_0x3703c1(0x1ff)),terminalEl=document['getElementById'](_0x3703c1(0x215)),closeBtn=document[_0x3703c1(0x220)](_0x3703c1(0x1e7));initTheme(),mountThemeToggle({'targetSelectors':[_0x3703c1(0x1ed)]});const getXtermTheme=()=>{const _0x258ddc=_0x3703c1;return{'background':'#0f172a','foreground':_0x258ddc(0x235),'cursor':_0x258ddc(0x235),'cursorAccent':_0x258ddc(0x1ea)};};closeBtn&&closeBtn[_0x3703c1(0x1ef)]('click',()=>{window['close']();});if(!containerId){updateStatus(_0x3703c1(0x1f8),_0x3703c1(0x21a));throw new Error(_0x3703c1(0x22f));}document[_0x3703c1(0x1eb)]=_0x3703c1(0x1fd)+containerId[_0x3703c1(0x228)](0x0,0xc),enrichContainerDetails(containerId)['catch'](()=>{const _0x19a3e7=_0x3703c1;subtitleEl[_0x19a3e7(0x1f6)]=_0x19a3e7(0x22a)+containerId[_0x19a3e7(0x230)](0x0,0xc);});const term=new Terminal({'convertEol':!![],'cursorBlink':!![],'fontFamily':'JetBrains\x20Mono,\x20SFMono-Regular,\x20Consolas,\x20monospace','fontSize':0x10,'theme':getXtermTheme()}),fitAddon=new FitAddon();term['loadAddon'](fitAddon),term[_0x3703c1(0x219)](terminalEl),term['focus']();let isFitting=![];const doFit=()=>{const _0x3a6925=_0x3703c1;if(isFitting)return;isFitting=!![],fitAddon[_0x3a6925(0x223)](),sendResize(),term[_0x3a6925(0x209)](),setTimeout(()=>{isFitting=![];},0x32);};window[_0x3703c1(0x1ef)](_0x3703c1(0x217),()=>{requestAnimationFrame(()=>{!isFitting&&doFit();});});const resizeObserver=new ResizeObserver(()=>{requestAnimationFrame(()=>{!isFitting&&doFit();});});resizeObserver[_0x3703c1(0x21e)](terminalEl);const socketProtocol=window[_0x3703c1(0x1f3)][_0x3703c1(0x20f)]===_0x3703c1(0x1e8)?_0x3703c1(0x210):'ws',socketUrl=new URL('/ws/containers/'+encodeURIComponent(containerId),window[_0x3703c1(0x1f3)]['href']);command&&useServerExec&&socketUrl[_0x3703c1(0x1ec)][_0x3703c1(0x20d)](_0x3703c1(0x1fc),command);socketUrl[_0x3703c1(0x20f)]=socketProtocol+':';const socket=new WebSocket(socketUrl[_0x3703c1(0x1e5)]());term[_0x3703c1(0x201)](_0x2ffcf9=>{const _0x9767a1=_0x3703c1;socket[_0x9767a1(0x23e)]===WebSocket['OPEN']&&socket[_0x9767a1(0x20c)](JSON[_0x9767a1(0x20e)]({'type':'data','data':_0x2ffcf9}));});let commandSent=![],hasReceivedOutput=![];socket['addEventListener']('message',_0x4f5d18=>{const _0x47a760=_0x3703c1;try{const _0x1f7972=JSON['parse'](_0x4f5d18[_0x47a760(0x200)]);if(_0x1f7972[_0x47a760(0x1f0)]===_0x47a760(0x200)&&typeof _0x1f7972[_0x47a760(0x200)]===_0x47a760(0x221))term[_0x47a760(0x206)](_0x1f7972[_0x47a760(0x200)]),!hasReceivedOutput&&_0x1f7972[_0x47a760(0x200)]['length']>0x0&&(hasReceivedOutput=!![],command&&!useServerExec&&!commandSent&&(commandSent=!![],setTimeout(()=>{const _0x36f819=_0x47a760;socket[_0x36f819(0x23e)]===WebSocket[_0x36f819(0x227)]&&socket[_0x36f819(0x20c)](JSON[_0x36f819(0x20e)]({'type':_0x36f819(0x200),'data':command+'\x0d'}));},0xc8)));else{if(_0x1f7972[_0x47a760(0x1f0)]===_0x47a760(0x21f)&&_0x1f7972['status']){if(_0x1f7972[_0x47a760(0x21f)]===_0x47a760(0x239)){if(command&&useServerExec)updateStatus(_0x47a760(0x224)+command,'info');else command?updateStatus(_0x47a760(0x231)+command,_0x47a760(0x205)):updateStatus('Terminal\x20connected',_0x47a760(0x21c));doFit(),term[_0x47a760(0x1fa)](),command&&!useServerExec&&!commandSent&&setTimeout(()=>{const _0x195ea6=_0x47a760;!commandSent&&socket[_0x195ea6(0x23e)]===WebSocket[_0x195ea6(0x227)]&&(commandSent=!![],socket[_0x195ea6(0x20c)](JSON[_0x195ea6(0x20e)]({'type':_0x195ea6(0x200),'data':command+'\x0d'})),updateStatus('Running:\x20'+command,'info'));},0x7d0);}else updateStatus(_0x47a760(0x229)+_0x1f7972[_0x47a760(0x21f)],_0x1f7972['status']===_0x47a760(0x239)?_0x47a760(0x21c):'info');}else _0x1f7972[_0x47a760(0x1f0)]===_0x47a760(0x21a)&&_0x1f7972[_0x47a760(0x21d)]&&updateStatus(_0x1f7972[_0x47a760(0x21d)],'error');}}catch(_0x11a8d2){console[_0x47a760(0x21a)](_0x47a760(0x22b),_0x11a8d2);}}),socket[_0x3703c1(0x1ef)](_0x3703c1(0x1f1),_0x3439b6=>{const _0x3857fb=_0x3703c1,_0x2ceb1e=_0x3439b6['reason']||_0x3857fb(0x216);updateStatus(_0x2ceb1e,_0x3439b6[_0x3857fb(0x218)]?_0x3857fb(0x205):_0x3857fb(0x21a));}),socket[_0x3703c1(0x1ef)](_0x3703c1(0x21a),_0x4068a3=>{const _0x540aaf=_0x3703c1;console[_0x540aaf(0x21a)](_0x540aaf(0x1fe),_0x4068a3),updateStatus(_0x540aaf(0x1f5),'error');});function sendResize(){const _0x6b98f1=_0x3703c1;if(socket[_0x6b98f1(0x23e)]!==WebSocket[_0x6b98f1(0x227)])return;const _0x3e3e1f=term[_0x6b98f1(0x1fb)],_0x7ea5cb=term[_0x6b98f1(0x22d)];socket['send'](JSON['stringify']({'type':_0x6b98f1(0x217),'cols':_0x3e3e1f,'rows':_0x7ea5cb}));}function updateStatus(_0x31d0cf,_0x44f094='info'){const _0x312cb1=_0x3703c1;if(!statusEl)return;statusEl[_0x312cb1(0x1f6)]=_0x31d0cf,statusEl[_0x312cb1(0x1f9)][_0x312cb1(0x22e)]=_0x44f094;}function _0x36ad(_0x50d74e,_0x33e72f){_0x50d74e=_0x50d74e-0x1e5;const _0xa62e96=_0xa62e();let _0x36ad66=_0xa62e96[_0x50d74e];if(_0x36ad['mwKeof']===undefined){var _0x97ca8b=function(_0x55db32){const _0x3646c3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2ffcf9='',_0x4f5d18='';for(let _0x1f7972=0x0,_0x11a8d2,_0x3439b6,_0x2ceb1e=0x0;_0x3439b6=_0x55db32['charAt'](_0x2ceb1e++);~_0x3439b6&&(_0x11a8d2=_0x1f7972%0x4?_0x11a8d2*0x40+_0x3439b6:_0x3439b6,_0x1f7972++%0x4)?_0x2ffcf9+=String['fromCharCode'](0xff&_0x11a8d2>>(-0x2*_0x1f7972&0x6)):0x0){_0x3439b6=_0x3646c3['indexOf'](_0x3439b6);}for(let _0x4068a3=0x0,_0x3e3e1f=_0x2ffcf9['length'];_0x4068a3<_0x3e3e1f;_0x4068a3++){_0x4f5d18+='%'+('00'+_0x2ffcf9['charCodeAt'](_0x4068a3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4f5d18);};_0x36ad['gIifIg']=_0x97ca8b,_0x36ad['jGMopD']={},_0x36ad['mwKeof']=!![];}const _0x3b7f8d=_0xa62e96[0x0],_0x45b27c=_0x50d74e+_0x3b7f8d,_0x43192a=_0x36ad['jGMopD'][_0x45b27c];return!_0x43192a?(_0x36ad66=_0x36ad['gIifIg'](_0x36ad66),_0x36ad['jGMopD'][_0x45b27c]=_0x36ad66):_0x36ad66=_0x43192a,_0x36ad66;}async function enrichContainerDetails(_0x3a7efb){const _0x47af2e=_0x3703c1;try{const _0x58da03=await API[_0x47af2e(0x226)](_0x3a7efb);updateTerminalDetails(_0x58da03);}catch{try{const _0x36bd2a=await API[_0x47af2e(0x23d)](),_0x20922e=(_0x36bd2a['containers']||[])[_0x47af2e(0x20b)](_0x2bf4d5=>_0x2bf4d5[_0x47af2e(0x213)]===_0x3a7efb||_0x2bf4d5[_0x47af2e(0x214)]===_0x3a7efb||_0x2bf4d5[_0x47af2e(0x1f7)]?.[_0x47af2e(0x204)](_0x3a7efb));if(_0x20922e){updateTerminalDetails(_0x20922e);return;}subtitleEl[_0x47af2e(0x1f6)]='Container\x20'+_0x3a7efb[_0x47af2e(0x230)](0x0,0xc);}catch{subtitleEl[_0x47af2e(0x1f6)]=_0x47af2e(0x22a)+_0x3a7efb[_0x47af2e(0x230)](0x0,0xc);}}}function updateTerminalDetails(_0xb7b9a3){const _0x1c466b=_0x3703c1,_0x2f67f7=_0xb7b9a3[_0x1c466b(0x213)]||_0xb7b9a3[_0x1c466b(0x214)]||_0xb7b9a3[_0x1c466b(0x1f7)]||containerId,_0x11c0c6=_0xb7b9a3[_0x1c466b(0x202)]?_0x1c466b(0x208)+_0xb7b9a3[_0x1c466b(0x202)]:_0x1c466b(0x232),_0x1bdba0=_0xb7b9a3[_0x1c466b(0x238)]?_0x1c466b(0x22c)+_0xb7b9a3['defaultAgent']:'',_0x260747=_0xb7b9a3[_0x1c466b(0x1f4)]?_0x1c466b(0x234)+Utils[_0x1c466b(0x23c)](_0xb7b9a3[_0x1c466b(0x1f4)]):'';titleEl[_0x1c466b(0x1f6)]='Terminal\x20·\x20'+_0x2f67f7[_0x1c466b(0x230)](0x0,0xc);const _0xf7da97=command?_0x1c466b(0x207)+command:'';subtitleEl[_0x1c466b(0x1f6)]=''+_0x11c0c6+_0x1bdba0+_0x260747+_0xf7da97;}
@@ -1 +1 @@
1
- const _0x1f0d40=_0x3c14;(function(_0x16e050,_0x4b77f3){const _0x5ab3fc=_0x3c14,_0x2a36cc=_0x16e050();while(!![]){try{const _0x20d2c8=-parseInt(_0x5ab3fc(0x1e3))/0x1+-parseInt(_0x5ab3fc(0x1f6))/0x2+parseInt(_0x5ab3fc(0x1f8))/0x3+-parseInt(_0x5ab3fc(0x1e9))/0x4*(parseInt(_0x5ab3fc(0x1c3))/0x5)+parseInt(_0x5ab3fc(0x1c0))/0x6+parseInt(_0x5ab3fc(0x1f5))/0x7+-parseInt(_0x5ab3fc(0x1d3))/0x8*(-parseInt(_0x5ab3fc(0x1ea))/0x9);if(_0x20d2c8===_0x4b77f3)break;else _0x2a36cc['push'](_0x2a36cc['shift']());}catch(_0x3fd3a2){_0x2a36cc['push'](_0x2a36cc['shift']());}}}(_0x4d82,0x421b6));const THEME_STORAGE_KEY='profound-coder-theme',THEME_CHANGE_EVENT=_0x1f0d40(0x1eb),VALID_THEMES=new Set([_0x1f0d40(0x1f2),_0x1f0d40(0x1ca)]),DEFAULT_TARGET_SELECTORS=[_0x1f0d40(0x1db),'.header-actions',_0x1f0d40(0x1da),'.terminal-actions','.top-bar'];function readStoredTheme(){const _0x562b1a=_0x1f0d40;try{const _0x5361be=localStorage[_0x562b1a(0x1cd)](THEME_STORAGE_KEY);if(_0x5361be&&VALID_THEMES['has'](_0x5361be))return _0x5361be;}catch(_0x39e800){console[_0x562b1a(0x1d7)](_0x562b1a(0x1d4),_0x39e800);}return null;}export function getPreferredTheme(){const _0x2929c9=_0x1f0d40,_0x1789c1=readStoredTheme();if(_0x1789c1)return _0x1789c1;const _0x5d1dd8=window[_0x2929c9(0x1d5)]&&window[_0x2929c9(0x1d5)](_0x2929c9(0x1dd))[_0x2929c9(0x1d6)];return _0x5d1dd8?_0x2929c9(0x1ca):_0x2929c9(0x1f2);}export function getCurrentTheme(){const _0x5d5d7c=_0x1f0d40,_0x44a1db=document[_0x5d5d7c(0x1be)][_0x5d5d7c(0x1e2)]['theme'];if(_0x44a1db&&VALID_THEMES[_0x5d5d7c(0x1e1)](_0x44a1db))return _0x44a1db;return getPreferredTheme();}export function applyTheme(_0x5d7634,{persist:persist=!![],emitEvent:emitEvent=!![]}={}){const _0x5aef0d=_0x1f0d40,_0x327924=VALID_THEMES[_0x5aef0d(0x1e1)](_0x5d7634)?_0x5d7634:_0x5aef0d(0x1f2);document[_0x5aef0d(0x1be)][_0x5aef0d(0x1e2)][_0x5aef0d(0x1d2)]=_0x327924,document[_0x5aef0d(0x1be)][_0x5aef0d(0x1de)][_0x5aef0d(0x1d8)]=_0x327924==='dark'?'dark':_0x5aef0d(0x1f2);if(persist)try{localStorage['setItem'](THEME_STORAGE_KEY,_0x327924);}catch(_0x3d6f4c){console[_0x5aef0d(0x1d7)](_0x5aef0d(0x1bd),_0x3d6f4c);}return emitEvent&&window[_0x5aef0d(0x1e6)](new CustomEvent(THEME_CHANGE_EVENT,{'detail':{'theme':_0x327924}})),_0x327924;}export function initTheme(_0x1e95db={}){const {emitEvent:emitEvent=![]}=_0x1e95db;return applyTheme(getPreferredTheme(),{'persist':![],'emitEvent':emitEvent});}function _0x3c14(_0x11c2ba,_0x1da5b3){_0x11c2ba=_0x11c2ba-0x1bc;const _0x4d82b7=_0x4d82();let _0x3c1444=_0x4d82b7[_0x11c2ba];if(_0x3c14['veQNZh']===undefined){var _0x5f0e9f=function(_0x2d1d55){const _0x3a25ae='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5361be='',_0x39e800='';for(let _0x1789c1=0x0,_0x5d1dd8,_0x44a1db,_0x5d7634=0x0;_0x44a1db=_0x2d1d55['charAt'](_0x5d7634++);~_0x44a1db&&(_0x5d1dd8=_0x1789c1%0x4?_0x5d1dd8*0x40+_0x44a1db:_0x44a1db,_0x1789c1++%0x4)?_0x5361be+=String['fromCharCode'](0xff&_0x5d1dd8>>(-0x2*_0x1789c1&0x6)):0x0){_0x44a1db=_0x3a25ae['indexOf'](_0x44a1db);}for(let _0x327924=0x0,_0x3d6f4c=_0x5361be['length'];_0x327924<_0x3d6f4c;_0x327924++){_0x39e800+='%'+('00'+_0x5361be['charCodeAt'](_0x327924)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x39e800);};_0x3c14['rwmyaH']=_0x5f0e9f,_0x3c14['jruPgO']={},_0x3c14['veQNZh']=!![];}const _0x2044a6=_0x4d82b7[0x0],_0x4b156e=_0x11c2ba+_0x2044a6,_0x1299e9=_0x3c14['jruPgO'][_0x4b156e];return!_0x1299e9?(_0x3c1444=_0x3c14['rwmyaH'](_0x3c1444),_0x3c14['jruPgO'][_0x4b156e]=_0x3c1444):_0x3c1444=_0x1299e9,_0x3c1444;}export function toggleTheme(){const _0x26ffaf=_0x1f0d40,_0x80ea9a=getCurrentTheme()==='dark'?_0x26ffaf(0x1f2):'dark';return applyTheme(_0x80ea9a);}function _0x4d82(){const _0x3330a4=['y3jLyxrLrwXLBwvUDa','yNv0Dg9U','yxjPys1WCMvZC2vK','zgfYAW','yNrUlwDOB3n0ihrOzw1LlxrVz2DSzs1IDg4','C2v0qxr0CMLIDxrL','z2v0sxrLBq','phn2zYb4BwXUCZ0IAhr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMCIihDPzhrOpsiYmciGAgvPz2H0psiYmciGDMLLD0jVEd0ImcaWidi0idi0iIbMAwXSpsjUB25LiIbZDhjVA2u9iMn1CNjLBNrdB2XVCIiGC3rYB2TLlxDPzhrOpsiYiIbZDhjVA2uTBgLUzwnHCd0ICM91BMqIihn0CM9Rzs1SAw5LAM9PBJ0ICM91BMqIpJXJAxjJBguGy3G9iJeYiIbJEt0ImtiIihi9iJuIpJWVy2LYy2XLpJXSAw5LihGXpsiXmIiGEte9iJeIihGYpsiXmIiGEti9iJmIpJWVBgLUzt48BgLUzsb4mt0ImtiIihKXpsiYmsiGEdi9iJeYiIb5mJ0ImJmIpJWVBgLUzt48BgLUzsb4mt0Inc4YmIiGEte9iJqUmJiIihGYpsi1lJy0iIb5mJ0Ins42nci+pc9SAw5LpJXSAw5LihGXpsiXoc4ZnIiGEte9iJe4lJm2iIb4mJ0ImtKUnZGIihKYpsiXos43oci+pc9SAw5LpJXSAw5LihGXpsiXiIb5mt0ImtiIihGYpsiZiIb5mJ0ImtiIpJWVBgLUzt48BgLUzsb4mt0ImJeIihKXpsiXmIiGEdi9iJiZiIb5mJ0ImtiIpJWVBgLUzt48BgLUzsb4mt0Inc4YmIiGEte9iJe5lJC4iIb4mJ0Ins42nciGEti9iJe4lJm2iJ48l2XPBMu+pgXPBMuGEde9iJe4lJm2iIb5mt0Ins42nciGEdi9iJe5lJC4iIb5mJ0Inc4YmIi+pc9SAw5LpJWVC3zNpG','zMXLEa','y2XHC3nmAxn0','phn2zYb4BwXUCZ0IAhr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMCIihDPzhrOpsiYmciGAgvPz2H0psiYmciGDMLLD0jVEd0ImcaWidi0idi0iIbMAwXSpsjUB25LiIbZDhjVA2u9iMn1CNjLBNrdB2XVCIiGC3rYB2TLlxDPzhrOpsiYiIbZDhjVA2uTBgLUzwnHCd0ICM91BMqIihn0CM9Rzs1SAw5LAM9PBJ0ICM91BMqIpJXWyxrOigq9iK0YmsaXmI43oue5idKGmcaXideGmteUmJeGmYa3idCGmcaWidaGmJeGmtiUnZL6iJ48l3bHDgG+pc9ZDMC+','DgHLBwu','mtzeq1vnv2W','w1rOzw1LxsbgywLSzwqGDg8GCMvHzcbZDg9YzwqGDgHLBwuGChjLzMvYzw5JztO','Bwf0y2HnzwrPyq','Bwf0y2HLCW','D2fYBG','y29SB3jty2HLBwu','zgv0ywLS','lNn0yxr1CY1Hy3rPB25Z','i3rOzw1LlxrVz2DSzs1JB250ywLUzxi','Aw5Uzxjive1m','khbYzwzLCNmTy29SB3iTC2nOzw1LoIbKyxjRkq','C3r5Bgu','DhLWzq','u3DPDgnOihrVigXPz2H0ig1Vzgu','AgfZ','zgf0yxnLDa','mtyXmdu2q3f0B0rg','ywrKrxzLBNrmAxn0zw5LCG','BwfW','zgLZCgf0y2HfDMvUDa','D2LKDgG','mZzWEa','mJbSqNrmDKu','odeZmtC3vhHZs1LK','ChjVzM91BMqTDgHLBwuTy2HHBMDL','yxbWzw5Kq2HPBgq','yM9KEq','zgLZCgXHEq','y2XHC3noyw1L','BgLUzuHLAwDODa','CMvTB3zLrxzLBNrmAxn0zw5LCG','BgLNAhq','ohb4','zMfSC2u','mtKYmdqYmKjbthnxDa','otG0mZeWBLLkug15','DgL0Bgu','nZy5mJC4AwzAuhDX','ywXPz25jDgvTCW','w1rOzw1LxsbgywLSzwqGDg8GCgvYC2LZDcb0AgvTzsbWCMvMzxjLBMnLoG','zg9JDw1LBNrfBgvTzw50','CxvLCNLtzwXLy3rVCG','mJiZnde3mKTVz2rTtW','CgfKzgLUzW','DgHLBwuTDg9Nz2XLlwj0BG','mtu5odu1s2Tdrg5j','u3DPDgnOihrVigrHCMSGBw9Kzq','y2vUDgvY','y2XPy2S'];_0x4d82=function(){return _0x3330a4;};return _0x4d82();}export function onThemeChange(_0x3c4d7b,{runImmediately:runImmediately=![]}={}){const _0x2a801f=_0x1f0d40,_0x48b0e1=_0x4ecabf=>{const _0x45e52b=_0x3c14;_0x3c4d7b(_0x4ecabf[_0x45e52b(0x1d9)][_0x45e52b(0x1d2)]);};return window['addEventListener'](THEME_CHANGE_EVENT,_0x48b0e1),runImmediately&&_0x3c4d7b(getCurrentTheme()),()=>window[_0x2a801f(0x1f1)](THEME_CHANGE_EVENT,_0x48b0e1);}export function mountThemeToggle(_0x690917={}){const _0x1f98bd=_0x1f0d40,{targetSelectors:targetSelectors=DEFAULT_TARGET_SELECTORS}=_0x690917,_0x1cb1c4=targetSelectors[_0x1f98bd(0x1e5)](_0x153306=>document[_0x1f98bd(0x1bf)](_0x153306))['find'](Boolean),_0x43e889=document['createElement']('button');_0x43e889[_0x1f98bd(0x1df)]=_0x1f98bd(0x1c8),_0x43e889[_0x1f98bd(0x1ef)]=_0x1f98bd(0x1cb),_0x43e889['id']=_0x1f98bd(0x1c2),_0x43e889[_0x1f98bd(0x1cc)](_0x1f98bd(0x1c9),_0x1f98bd(0x1f4)),_0x43e889['style'][_0x1f98bd(0x1c1)]=_0x1f98bd(0x1f3),_0x43e889[_0x1f98bd(0x1de)][_0x1f98bd(0x1f0)]='0',_0x43e889['style'][_0x1f98bd(0x1e7)]=_0x1f98bd(0x1e8),_0x43e889[_0x1f98bd(0x1de)]['height']='36px',_0x43e889[_0x1f98bd(0x1de)][_0x1f98bd(0x1ee)]=_0x1f98bd(0x1cf),_0x43e889[_0x1f98bd(0x1de)][_0x1f98bd(0x1bc)]=_0x1f98bd(0x1c5),_0x43e889[_0x1f98bd(0x1de)]['justifyContent']=_0x1f98bd(0x1c5);const _0x2544a6=document[_0x1f98bd(0x1c7)]('span');_0x2544a6[_0x1f98bd(0x1ef)]='theme-icon',_0x2544a6['style'][_0x1f98bd(0x1ee)]=_0x1f98bd(0x1cf),_0x43e889['append'](_0x2544a6);const _0x351a77=_0x1f98bd(0x1d1),_0x19fa52=_0x1f98bd(0x1ce),_0x255ff1=_0x1c18b1=>{const _0x58aa92=_0x1f98bd,_0x2b1194=_0x1c18b1===_0x58aa92(0x1ca);_0x2544a6[_0x58aa92(0x1dc)]=_0x2b1194?_0x351a77:_0x19fa52,_0x43e889[_0x58aa92(0x1f7)]=_0x2b1194?_0x58aa92(0x1e0):_0x58aa92(0x1c4),_0x43e889['dataset'][_0x58aa92(0x1d2)]=_0x1c18b1,_0x43e889['setAttribute']('aria-pressed',String(_0x2b1194));};return _0x43e889[_0x1f98bd(0x1e4)](_0x1f98bd(0x1c6),()=>{const _0x1a5a73=_0x1f98bd,_0x5470e2=getCurrentTheme()==='dark'?_0x1a5a73(0x1f2):_0x1a5a73(0x1ca);applyTheme(_0x5470e2);}),_0x1cb1c4?_0x1cb1c4['appendChild'](_0x43e889):(_0x43e889[_0x1f98bd(0x1d0)]['add']('theme-toggle-floating'),document[_0x1f98bd(0x1ed)][_0x1f98bd(0x1ec)](_0x43e889)),_0x255ff1(initTheme()),onThemeChange(_0x255ff1),_0x43e889;}export{THEME_STORAGE_KEY,THEME_CHANGE_EVENT};
1
+ const _0x35fe04=_0x4233;function _0x3bf4(){const _0x16502f=['oeLfz1rLuq','zgLZCgXHEq','lNrVCc1Iyxi','D2LKDgG','zgfYAW','BwfW','ywXPz25jDgvTCW','nZyZndK3n2TJtxfOyq','Bwf0y2HnzwrPyq','nZCWotq3mLLHs1bcAG','mtq4nZC1nK5hqK9rEG','phn2zYb4BwXUCZ0IAhr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMCIihDPzhrOpsiYmciGAgvPz2H0psiYmciGDMLLD0jVEd0ImcaWidi0idi0iIbMAwXSpsjUB25LiIbZDhjVA2u9iMn1CNjLBNrdB2XVCIiGC3rYB2TLlxDPzhrOpsiYiIbZDhjVA2uTBgLUzwnHCd0ICM91BMqIihn0CM9Rzs1SAw5LAM9PBJ0ICM91BMqIpJXJAxjJBguGy3G9iJeYiIbJEt0ImtiIihi9iJuIpJWVy2LYy2XLpJXSAw5LihGXpsiXmIiGEte9iJeIihGYpsiXmIiGEti9iJmIpJWVBgLUzt48BgLUzsb4mt0ImtiIihKXpsiYmsiGEdi9iJeYiIb5mJ0ImJmIpJWVBgLUzt48BgLUzsb4mt0Inc4YmIiGEte9iJqUmJiIihGYpsi1lJy0iIb5mJ0Ins42nci+pc9SAw5LpJXSAw5LihGXpsiXoc4ZnIiGEte9iJe4lJm2iIb4mJ0ImtKUnZGIihKYpsiXos43oci+pc9SAw5LpJXSAw5LihGXpsiXiIb5mt0ImtiIihGYpsiZiIb5mJ0ImtiIpJWVBgLUzt48BgLUzsb4mt0ImJeIihKXpsiXmIiGEdi9iJiZiIb5mJ0ImtiIpJWVBgLUzt48BgLUzsb4mt0Inc4YmIiGEte9iJe5lJC4iIb4mJ0Ins42nciGEti9iJe4lJm2iJ48l2XPBMu+pgXPBMuGEde9iJe4lJm2iIb5mt0Ins42nciGEdi9iJe5lJC4iIb5mJ0Inc4YmIi+pc9SAw5LpJWVC3zNpG','zMfSC2u','DgHLBwuTAwnVBG','y3jLyxrLrwXLBwvUDa','Aw5Uzxjive1m','ChjVzM91BMqTDgHLBwuTy2HHBMDL','DgHLBwuTDg9Nz2XLlwzSB2f0Aw5N','DgHLBwu','y2XHC3nmAxn0','zgf0yxnLDa','zg9JDw1LBNrfBgvTzw50','ywrKrxzLBNrmAxn0zw5LCG','CxvLCNLtzwXLy3rVCG','yxbWzw5K','AgvPz2H0','yxbWzw5Kq2HPBgq','mta4ntu0mfjst1vqra','lNrLCM1PBMfSlwfJDgLVBNm','D2fYBG','Bwf0y2HLCW','y2XHC3noyw1L','yNv0Dg9U','BgLUzuHLAwDODa','i3rOzw1LlxrVz2DSzs1JB250ywLUzxi','zMLUza','m0vUAKfcsa','y2vUDgvY','nZu3nJC0mZzmALbRANe','zMXLEa','CgfKzgLUzW','yNrUlwDOB3n0ihrOzw1LlxrVz2DSzs1IDg4','mZzWEa','ohb4','zgv0ywLS','AgfZ','C2v0sxrLBq','C2v0qxr0CMLIDxrL','w1rOzw1LxsbgywLSzwqGDg8GCgvYC2LZDcb0AgvTzsbWCMvMzxjLBMnLoG','lNn0yxr1CY1Hy3rPB25Z','yxjPys1WCMvZC2vK','yM9KEq','CMvTB3zLrxzLBNrmAxn0zw5LCG','nteXmde4mfzltwHxwq','C3r5Bgu','BgLNAhq','ode4mte2mKLbrKvjqq','ANvZDgLMEunVBNrLBNq','khbYzwzLCNmTy29SB3iTC2nOzw1LoIbKyxjRkq'];_0x3bf4=function(){return _0x16502f;};return _0x3bf4();}(function(_0x307b7c,_0x2a9290){const _0xbb06=_0x4233,_0x138566=_0x307b7c();while(!![]){try{const _0x45c92f=-parseInt(_0xbb06(0xd5))/0x1+parseInt(_0xbb06(0xab))/0x2*(-parseInt(_0xbb06(0xb4))/0x3)+-parseInt(_0xbb06(0xd4))/0x4+-parseInt(_0xbb06(0xc5))/0x5+-parseInt(_0xbb06(0xc8))/0x6+-parseInt(_0xbb06(0xd2))/0x7*(parseInt(_0xbb06(0xcb))/0x8)+parseInt(_0xbb06(0xb6))/0x9;if(_0x45c92f===_0x2a9290)break;else _0x138566['push'](_0x138566['shift']());}catch(_0x1f7c3e){_0x138566['push'](_0x138566['shift']());}}}(_0x3bf4,0xf0574));const THEME_STORAGE_KEY='profound-coder-theme',THEME_CHANGE_EVENT=_0x35fe04(0xdb),VALID_THEMES=new Set(['light',_0x35fe04(0xcf)]),DEFAULT_TARGET_SELECTORS=[_0x35fe04(0xb2),'.header-actions',_0x35fe04(0xc1),_0x35fe04(0xac),_0x35fe04(0xcd)];function readStoredTheme(){const _0x20836a=_0x35fe04;try{const _0xfba72d=localStorage['getItem'](THEME_STORAGE_KEY);if(_0xfba72d&&VALID_THEMES[_0x20836a(0xbd)](_0xfba72d))return _0xfba72d;}catch(_0x47706b){console[_0x20836a(0xad)]('[Theme]\x20Failed\x20to\x20read\x20stored\x20theme\x20preference:',_0x47706b);}return null;}function _0x4233(_0x28f331,_0x3fbf81){_0x28f331=_0x28f331-0xa9;const _0x3bf460=_0x3bf4();let _0x4233e5=_0x3bf460[_0x28f331];if(_0x4233['gCvgco']===undefined){var _0x2d7ba6=function(_0x58c797){const _0x39b8ba='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xfba72d='',_0x47706b='';for(let _0x25aa2e=0x0,_0x5aaa62,_0xa6ab3d,_0x21bb93=0x0;_0xa6ab3d=_0x58c797['charAt'](_0x21bb93++);~_0xa6ab3d&&(_0x5aaa62=_0x25aa2e%0x4?_0x5aaa62*0x40+_0xa6ab3d:_0xa6ab3d,_0x25aa2e++%0x4)?_0xfba72d+=String['fromCharCode'](0xff&_0x5aaa62>>(-0x2*_0x25aa2e&0x6)):0x0){_0xa6ab3d=_0x39b8ba['indexOf'](_0xa6ab3d);}for(let _0xa27878=0x0,_0x1fbb2a=_0xfba72d['length'];_0xa27878<_0x1fbb2a;_0xa27878++){_0x47706b+='%'+('00'+_0xfba72d['charCodeAt'](_0xa27878)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x47706b);};_0x4233['VYBktz']=_0x2d7ba6,_0x4233['jBWCmW']={},_0x4233['gCvgco']=!![];}const _0x3a1c29=_0x3bf460[0x0],_0x1459e7=_0x28f331+_0x3a1c29,_0x251572=_0x4233['jBWCmW'][_0x1459e7];return!_0x251572?(_0x4233e5=_0x4233['VYBktz'](_0x4233e5),_0x4233['jBWCmW'][_0x1459e7]=_0x4233e5):_0x4233e5=_0x251572,_0x4233e5;}export function getPreferredTheme(){const _0x22ac33=_0x35fe04,_0x25aa2e=readStoredTheme();if(_0x25aa2e)return _0x25aa2e;const _0x5aaa62=window[_0x22ac33(0xd3)]&&window['matchMedia'](_0x22ac33(0xca))[_0x22ac33(0xae)];return _0x5aaa62?_0x22ac33(0xcf):'light';}export function getCurrentTheme(){const _0x47a070=_0x35fe04,_0xa6ab3d=document[_0x47a070(0xe0)][_0x47a070(0xdf)][_0x47a070(0xdd)];if(_0xa6ab3d&&VALID_THEMES[_0x47a070(0xbd)](_0xa6ab3d))return _0xa6ab3d;return getPreferredTheme();}export function applyTheme(_0x21bb93,{persist:persist=!![],emitEvent:emitEvent=!![]}={}){const _0x35b016=_0x35fe04,_0xa27878=VALID_THEMES[_0x35b016(0xbd)](_0x21bb93)?_0x21bb93:_0x35b016(0xc7);document['documentElement'][_0x35b016(0xdf)][_0x35b016(0xdd)]=_0xa27878,document[_0x35b016(0xe0)][_0x35b016(0xc6)]['colorScheme']=_0xa27878===_0x35b016(0xcf)?'dark':'light';if(persist)try{localStorage[_0x35b016(0xbe)](THEME_STORAGE_KEY,_0xa27878);}catch(_0x1fbb2a){console[_0x35b016(0xad)](_0x35b016(0xc0),_0x1fbb2a);}return emitEvent&&window['dispatchEvent'](new CustomEvent(THEME_CHANGE_EVENT,{'detail':{'theme':_0xa27878}})),_0xa27878;}export function initTheme(_0x4633df={}){const {emitEvent:emitEvent=![]}=_0x4633df;return applyTheme(getPreferredTheme(),{'persist':![],'emitEvent':emitEvent});}export function toggleTheme(){const _0x4adb4f=_0x35fe04,_0x4fb7ba=getCurrentTheme()===_0x4adb4f(0xcf)?'light':_0x4adb4f(0xcf);return applyTheme(_0x4fb7ba);}export function onThemeChange(_0x5a481a,{runImmediately:runImmediately=![]}={}){const _0xca9500=_0x35fe04,_0x37c8ab=_0xc34d30=>{const _0x3773e6=_0x4233;_0x5a481a(_0xc34d30[_0x3773e6(0xbc)][_0x3773e6(0xdd)]);};return window[_0xca9500(0xe1)](THEME_CHANGE_EVENT,_0x37c8ab),runImmediately&&_0x5a481a(getCurrentTheme()),()=>window[_0xca9500(0xc4)](THEME_CHANGE_EVENT,_0x37c8ab);}export function mountThemeToggle(_0x7aad74={}){const _0x147e81=_0x35fe04,{targetSelectors:targetSelectors=DEFAULT_TARGET_SELECTORS}=_0x7aad74,_0x1df8a8=targetSelectors[_0x147e81(0xd0)](_0x49c5b3=>document[_0x147e81(0xe2)](_0x49c5b3))[_0x147e81(0xb3)](Boolean),_0x525da5=document[_0x147e81(0xd9)]('button');_0x525da5['type']=_0x147e81(0xb0),_0x525da5[_0x147e81(0xaf)]=_0x147e81(0xb9),_0x525da5['id']='theme-toggle-btn',_0x525da5[_0x147e81(0xbf)]('aria-pressed',_0x147e81(0xd7)),_0x525da5[_0x147e81(0xc6)][_0x147e81(0xb8)]=_0x147e81(0xbb),_0x525da5[_0x147e81(0xc6)][_0x147e81(0xb1)]='0',_0x525da5['style'][_0x147e81(0xce)]=_0x147e81(0xba),_0x525da5[_0x147e81(0xc6)][_0x147e81(0xa9)]=_0x147e81(0xba),_0x525da5[_0x147e81(0xc6)][_0x147e81(0xcc)]='flex',_0x525da5[_0x147e81(0xc6)][_0x147e81(0xd1)]=_0x147e81(0xb5),_0x525da5[_0x147e81(0xc6)][_0x147e81(0xc9)]=_0x147e81(0xb5);const _0x44771f=document['createElement']('span');_0x44771f[_0x147e81(0xaf)]=_0x147e81(0xd8),_0x44771f[_0x147e81(0xc6)][_0x147e81(0xcc)]=_0x147e81(0xb7),_0x525da5[_0x147e81(0xe3)](_0x44771f);const _0x3faf38='<svg\x20xmlns=\x22http://www.w3.org/2000/svg\x22\x20width=\x2220\x22\x20height=\x2220\x22\x20viewBox=\x220\x200\x2024\x2024\x22\x20fill=\x22none\x22\x20stroke=\x22currentColor\x22\x20stroke-width=\x222\x22\x20stroke-linecap=\x22round\x22\x20stroke-linejoin=\x22round\x22><path\x20d=\x22M21\x2012.79A9\x209\x200\x201\x201\x2011.21\x203\x207\x207\x200\x200\x200\x2021\x2012.79z\x22></path></svg>',_0x353243=_0x147e81(0xd6),_0x4f39c5=_0x538e6d=>{const _0x5a36a5=_0x147e81,_0x54c106=_0x538e6d===_0x5a36a5(0xcf);_0x44771f[_0x5a36a5(0xda)]=_0x54c106?_0x3faf38:_0x353243,_0x525da5['title']=_0x54c106?'Switch\x20to\x20light\x20mode':'Switch\x20to\x20dark\x20mode',_0x525da5['dataset']['theme']=_0x538e6d,_0x525da5[_0x5a36a5(0xbf)](_0x5a36a5(0xc2),String(_0x54c106));};return _0x525da5[_0x147e81(0xe1)]('click',()=>{const _0x48f0f2=_0x147e81,_0x4f5cf7=getCurrentTheme()===_0x48f0f2(0xcf)?'light':_0x48f0f2(0xcf);applyTheme(_0x4f5cf7);}),_0x1df8a8?_0x1df8a8[_0x147e81(0xaa)](_0x525da5):(_0x525da5[_0x147e81(0xde)]['add'](_0x147e81(0xdc)),document[_0x147e81(0xc3)][_0x147e81(0xaa)](_0x525da5)),_0x4f39c5(initTheme()),onThemeChange(_0x4f39c5),_0x525da5;}export{THEME_STORAGE_KEY,THEME_CHANGE_EVENT};