@profoundlogic/coderflow-server 0.4.4 → 0.4.5

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 _0x225786=_0x4873;(function(_0x174eaa,_0x3c1562){const _0x5edc66=_0x4873,_0x2ea520=_0x174eaa();while(!![]){try{const _0x20cb80=parseInt(_0x5edc66(0x1be))/0x1+-parseInt(_0x5edc66(0x19b))/0x2*(parseInt(_0x5edc66(0x16a))/0x3)+parseInt(_0x5edc66(0x1df))/0x4+parseInt(_0x5edc66(0x1d4))/0x5+parseInt(_0x5edc66(0x194))/0x6*(-parseInt(_0x5edc66(0x1a5))/0x7)+parseInt(_0x5edc66(0x1f0))/0x8+-parseInt(_0x5edc66(0x1e0))/0x9*(parseInt(_0x5edc66(0x160))/0xa);if(_0x20cb80===_0x3c1562)break;else _0x2ea520['push'](_0x2ea520['shift']());}catch(_0x34b263){_0x2ea520['push'](_0x2ea520['shift']());}}}(_0x1023,0x6af80));import{API,Utils,initializeAdminMenu}from'./app.js';import{initTheme,mountThemeToggle}from'./theme.js';const state={'teams':[],'users':[],'roles':[],'environments':[],'teamBindings':[],'currentUser':null,'editingTeamId':null,'deletingTeamId':null,'activeTab':_0x225786(0x18c)};document[_0x225786(0x18e)](_0x225786(0x1b1),async()=>{const _0x23a3a2=_0x225786;initTheme(),mountThemeToggle();try{state[_0x23a3a2(0x1ba)]=await API[_0x23a3a2(0x177)]();}catch{window[_0x23a3a2(0x1c1)]['href']=_0x23a3a2(0x15b);return;}await initializeAdminMenu(state['currentUser']),state['currentUser'][_0x23a3a2(0x184)]&&(document[_0x23a3a2(0x1f3)](_0x23a3a2(0x1ac))['hidden']=![]),bindEventListeners(),await Promise[_0x23a3a2(0x19f)]([loadTeams(),loadUsers(),loadRoles(),loadEnvironments()]),renderTeams();});async function loadTeams(){const _0x252e9f=_0x225786,_0x543e0d=document['getElementById']('teams-loading'),_0x2e5be7=document[_0x252e9f(0x1f3)](_0x252e9f(0x161)),_0x800723=document['getElementById']('teams-content');try{_0x543e0d[_0x252e9f(0x1a9)]=![],_0x2e5be7['hidden']=!![],_0x800723[_0x252e9f(0x1a9)]=!![];const {teams:_0x56aefb}=await API[_0x252e9f(0x1c0)]();state[_0x252e9f(0x1a0)]=_0x56aefb||[],renderTeams(),_0x543e0d[_0x252e9f(0x1a9)]=!![],_0x800723[_0x252e9f(0x1a9)]=![];}catch(_0x4c7aab){_0x543e0d['hidden']=!![],_0x2e5be7[_0x252e9f(0x1a9)]=![],document['getElementById']('teams-error-message')[_0x252e9f(0x157)]=_0x4c7aab['message'];}}async function loadUsers(){const _0x1e947a=_0x225786;try{const {users:_0x1ba675}=await API['getUsers']();state['users']=_0x1ba675||[];}catch{state[_0x1e947a(0x15e)]=[];}}async function loadRoles(){const _0x300b3e=_0x225786;try{const {roles:_0x55e7e3}=await API['getRoleDefinitions']();state[_0x300b3e(0x1c7)]=_0x55e7e3||[];}catch{state[_0x300b3e(0x1c7)]=[];}}async function loadEnvironments(){const _0x5f5b52=_0x225786;try{const _0x5a1495=await API[_0x5f5b52(0x1db)]();state[_0x5f5b52(0x1e1)]=_0x5a1495['environments']||[];}catch{state[_0x5f5b52(0x1e1)]=[];}}function renderTeams(){const _0x162a82=_0x225786,_0x4654b0=document[_0x162a82(0x1f3)]('teams-table-body'),_0x30e5f2=document[_0x162a82(0x1f3)](_0x162a82(0x1b9));if(!_0x4654b0)return;_0x30e5f2&&(_0x30e5f2[_0x162a82(0x157)]=state[_0x162a82(0x1a0)][_0x162a82(0x186)]+_0x162a82(0x1ed)+(state['teams'][_0x162a82(0x186)]===0x1?'':'s'));if(state[_0x162a82(0x1a0)][_0x162a82(0x186)]===0x0){_0x4654b0[_0x162a82(0x188)]=_0x162a82(0x181)+(state[_0x162a82(0x1ba)]?.[_0x162a82(0x184)]?'Click\x20<strong>Create\x20Team</strong>\x20to\x20get\x20started.':'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20</tr>';return;}const _0x188450=state[_0x162a82(0x1ba)]?.[_0x162a82(0x184)];_0x4654b0['innerHTML']=state[_0x162a82(0x1a0)]['map'](_0x4d5546=>{const _0x4cb437=_0x162a82,_0x26ee82=(_0x4d5546[_0x4cb437(0x192)]||[])['includes'](state[_0x4cb437(0x1ba)]?.['id']),_0x33fbf3=_0x188450||_0x26ee82,_0x2008e9=(_0x4d5546['managers']||[])[_0x4cb437(0x16c)](_0x38edfd=>{const _0x27cbdc=_0x4cb437;if(_0x4d5546[_0x27cbdc(0x1da)]&&_0x4d5546[_0x27cbdc(0x1da)][_0x38edfd])return _0x4d5546[_0x27cbdc(0x1da)][_0x38edfd];const _0x4254fb=state[_0x27cbdc(0x15e)][_0x27cbdc(0x1ff)](_0x1bd708=>_0x1bd708['id']===_0x38edfd);return _0x4254fb?_0x4254fb[_0x27cbdc(0x15f)]||_0x4254fb[_0x27cbdc(0x1e4)]:_0x38edfd;})['join'](',\x20')||'—',_0x196682=(_0x4d5546[_0x4cb437(0x1c3)]||[])[_0x4cb437(0x186)];return'\x0a\x20\x20\x20\x20\x20\x20<tr>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20<button\x20class=\x22btn-ghost\x20btn-small\x22\x20style=\x22font-weight:\x20600;\x20padding:\x200;\x20text-decoration:\x20underline;\x20text-decoration-style:\x20dotted;\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20onclick=\x22window.openTeamModal(\x27'+_0x4d5546['id']+_0x4cb437(0x19e)+Utils[_0x4cb437(0x191)](_0x4d5546[_0x4cb437(0x15f)])+_0x4cb437(0x1fe)+(_0x4d5546[_0x4cb437(0x1a4)]?_0x4cb437(0x1bb)+Utils[_0x4cb437(0x191)](_0x4d5546[_0x4cb437(0x1a4)])+_0x4cb437(0x15c):'')+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20</td>\x0a\x20\x20\x20\x20\x20\x20\x20\x20<td>'+_0x196682+_0x4cb437(0x1a2)+Utils[_0x4cb437(0x191)](_0x2008e9)+_0x4cb437(0x16d)+(_0x33fbf3?_0x4cb437(0x1ef)+_0x4d5546['id']+_0x4cb437(0x1c5):'')+_0x4cb437(0x172)+(_0x188450?_0x4cb437(0x1bc)+_0x4d5546['id']+'\x27)\x22>Delete</button>':'')+_0x4cb437(0x1d1);})['join']('');}function bindEventListeners(){const _0x25e6af=_0x225786;document['getElementById']('create-team-btn')?.['addEventListener'](_0x25e6af(0x1b0),showCreateTeamModal),document['getElementById'](_0x25e6af(0x1cf))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),loadTeams),document[_0x25e6af(0x1f3)](_0x25e6af(0x19c))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),hideTeamModal),document[_0x25e6af(0x1f3)](_0x25e6af(0x1e2))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),hideTeamModal),document[_0x25e6af(0x1f3)](_0x25e6af(0x1a7))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),saveTeam),document[_0x25e6af(0x164)](_0x25e6af(0x169))?.[_0x25e6af(0x18e)]('click',hideTeamModal),document[_0x25e6af(0x1bd)](_0x25e6af(0x1dd))[_0x25e6af(0x163)](_0x5b85b1=>{const _0xb2815a=_0x25e6af;_0x5b85b1[_0xb2815a(0x18e)](_0xb2815a(0x1b0),()=>switchTab(_0x5b85b1[_0xb2815a(0x1d7)][_0xb2815a(0x1a8)]));}),document[_0x25e6af(0x1f3)](_0x25e6af(0x1c9))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),addMember),document[_0x25e6af(0x1f3)](_0x25e6af(0x15d))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),addManager),document['getElementById'](_0x25e6af(0x193))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),()=>{const _0x85d7dd=_0x25e6af;document[_0x85d7dd(0x1f3)]('add-binding-form')['hidden']=![],document['getElementById'](_0x85d7dd(0x193))[_0x85d7dd(0x1a9)]=!![],populateBindingForm();}),document[_0x25e6af(0x1f3)](_0x25e6af(0x1d6))?.['addEventListener'](_0x25e6af(0x1b0),()=>{const _0x46642f=_0x25e6af;document[_0x46642f(0x1f3)]('add-binding-form')['hidden']=!![],document['getElementById']('add-binding-btn')[_0x46642f(0x1a9)]=![];}),document[_0x25e6af(0x1f3)](_0x25e6af(0x1ad))?.['addEventListener'](_0x25e6af(0x1b0),saveBinding),document[_0x25e6af(0x1f3)](_0x25e6af(0x200))?.[_0x25e6af(0x18e)]('click',hideDeleteModal),document[_0x25e6af(0x1f3)](_0x25e6af(0x18b))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),hideDeleteModal),document['getElementById'](_0x25e6af(0x187))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),confirmDeleteTeam),document['querySelector'](_0x25e6af(0x1fb))?.[_0x25e6af(0x18e)](_0x25e6af(0x1b0),hideDeleteModal);}function showCreateTeamModal(){const _0x4d1680=_0x225786;state[_0x4d1680(0x1d3)]=null,state[_0x4d1680(0x1b3)]=_0x4d1680(0x18c),document['getElementById'](_0x4d1680(0x1cd))[_0x4d1680(0x157)]=_0x4d1680(0x1cc),document[_0x4d1680(0x1f3)](_0x4d1680(0x17e))[_0x4d1680(0x1b5)]='',document['getElementById']('team-name')[_0x4d1680(0x1c4)]=![],document['getElementById'](_0x4d1680(0x1ab))[_0x4d1680(0x1b5)]='',document[_0x4d1680(0x1f3)](_0x4d1680(0x1ab))[_0x4d1680(0x1c4)]=![],document[_0x4d1680(0x1f3)](_0x4d1680(0x16f))[_0x4d1680(0x1a9)]=!![],document['getElementById'](_0x4d1680(0x18d))[_0x4d1680(0x1a9)]=!![],document[_0x4d1680(0x1f3)](_0x4d1680(0x1ca))['hidden']=!![],document[_0x4d1680(0x1f3)](_0x4d1680(0x1a7))[_0x4d1680(0x1a9)]=![],document[_0x4d1680(0x1f3)](_0x4d1680(0x1a6))[_0x4d1680(0x1a9)]=![],showTab(_0x4d1680(0x18c)),document['getElementById']('team-modal')[_0x4d1680(0x1a9)]=![],setTimeout(()=>document[_0x4d1680(0x1f3)](_0x4d1680(0x17e))[_0x4d1680(0x1dc)](),0x64);}window[_0x225786(0x168)]=function(_0x3f88b2){const _0x3f32b3=_0x225786,_0x48d586=state[_0x3f32b3(0x1a0)][_0x3f32b3(0x1ff)](_0x35d099=>_0x35d099['id']===_0x3f88b2);if(!_0x48d586)return;state[_0x3f32b3(0x1d3)]=_0x3f88b2,state[_0x3f32b3(0x1b3)]=_0x3f32b3(0x18c);const _0x1f0847=state[_0x3f32b3(0x1ba)]?.[_0x3f32b3(0x184)],_0x449e77=(_0x48d586[_0x3f32b3(0x192)]||[])[_0x3f32b3(0x1fd)](state[_0x3f32b3(0x1ba)]?.['id']),_0x1c4f7d=_0x1f0847||_0x449e77;document[_0x3f32b3(0x1f3)](_0x3f32b3(0x1cd))[_0x3f32b3(0x157)]=_0x48d586[_0x3f32b3(0x15f)],document['getElementById']('team-name')[_0x3f32b3(0x1b5)]=_0x48d586[_0x3f32b3(0x15f)],document[_0x3f32b3(0x1f3)]('team-name')[_0x3f32b3(0x1c4)]=!_0x1c4f7d,document[_0x3f32b3(0x1f3)](_0x3f32b3(0x1ab))['value']=_0x48d586[_0x3f32b3(0x1a4)]||'',document[_0x3f32b3(0x1f3)]('team-description')[_0x3f32b3(0x1c4)]=!_0x1c4f7d,document[_0x3f32b3(0x1f3)](_0x3f32b3(0x16f))[_0x3f32b3(0x1a9)]=!![],document[_0x3f32b3(0x1f3)](_0x3f32b3(0x18d))['hidden']=![],document['getElementById']('members-section')[_0x3f32b3(0x1a9)]=![],document['getElementById']('save-team')[_0x3f32b3(0x1a9)]=!_0x1c4f7d,document['getElementById'](_0x3f32b3(0x17c))[_0x3f32b3(0x1a9)]=!_0x1f0847,setActiveTabButton(_0x3f32b3(0x18c)),renderMembersList(_0x48d586),updateMemberSelect(_0x48d586),_0x1f0847&&(renderManagersList(_0x48d586),updateManagerSelect(_0x48d586)),showTab(_0x3f32b3(0x18c)),document[_0x3f32b3(0x1f3)]('team-modal')[_0x3f32b3(0x1a9)]=![];};function hideTeamModal(){const _0x5f2b1c=_0x225786;document[_0x5f2b1c(0x1f3)](_0x5f2b1c(0x1e7))[_0x5f2b1c(0x1a9)]=!![],document[_0x5f2b1c(0x1f3)]('team-name')[_0x5f2b1c(0x1c4)]=![],document[_0x5f2b1c(0x1f3)](_0x5f2b1c(0x1ab))['disabled']=![],state[_0x5f2b1c(0x1d3)]=null;}function switchTab(_0x114dd1){const _0x50bec3=_0x225786;state['activeTab']=_0x114dd1,setActiveTabButton(_0x114dd1),showTab(_0x114dd1),_0x114dd1===_0x50bec3(0x1a3)&&state['editingTeamId']&&loadTeamBindings(state[_0x50bec3(0x1d3)]);}function _0x1023(){const _0x573cc4=['z2v0rw52AxjVBM1LBNrZ','zM9JDxm','lM1VzgfSlxrHyI1IDg4','yMLUzgLUzY1LBNzPCM9UBwvUDa','mJm3nZu0nerdyKnLBq','mtm1whPzwg5v','zw52AxjVBM1LBNrZ','y2fUy2vSlxrLyw0','BwvZC2fNzq','DxnLCM5HBwu','AM9PBG','zgvSzxrLvgvHBq','DgvHBs1TB2rHBa','DgvHBs10ywiTyMLUzgLUz3m','pgj1DhrVBIbJBgfZCZ0IyNrUlwDOB3n0igj0BI1ZBwfSBciGB25JBgLJAZ0ID2LUzg93lMrLBgv0zujPBMrPBMDdBgLJAYGN','cIaGicaGidXKAxyGC3r5Bgu9iMrPC3bSyxK6igzSzxG7igfSAwDUlwL0zw1ZoIbJzw50zxi7igP1C3rPzNKTy29UDgvUDdOGC3bHy2uTyMv0D2vLBJSGCgfKzgLUzZOGmc4ZnxjLBsaWoYbIB3jKzxiTyM90Dg9ToIaXChGGC29SAwqGDMfYkc0Ty29SB3iTyM9YzgvYktSIpGOGicaGicaGidXZCgfUihn0EwXLpsjMB250lxnPEMu6idaUodC1CMvToYi+cIaGicaGicaGica','zgvSzxrLlxrLyw0TBMfTzq','DgvHBq','ihrLyw0','rgvSzxrLifrLyw0','pgj1DhrVBIbJBgfZCZ0IyNrUlxnLy29UzgfYEsbIDg4TC21HBgWIig9Uy2XPy2S9iNDPBMrVDY5VCgvUvgvHBu1VzgfSkcC','nteZmJiWmezmzvrmCa','pc9VChrPB24+','cIaGica8Dhi+cIaGicaGidX0zd4','z2v0rwXLBwvUDej5swq','ktWVC3bHBJ4','C2HVD1rVyxn0','zgLZCgXHEq','qwrKAw5N4OcM','BwfUywDLCNmTBgLZDa','zM9UDfDLAwDODa','DMfYkc0Ty29SB3iTChjPBwfYEsK','i2rLBgv0zs10zwfTlw1VzgfSic5TB2rHBc1VDMvYBgf5','zgvSzxrPBMDuzwfTswq','Aw5JBhvKzxm','cIaGicaGicaGica8l2j1DhrVBJ4kicaGicaGicaGia','zMLUza','y2XVC2uTzgvSzxrLlxrLyw0TBw9KywW','vgvHBsbJCMvHDgvK','CMvTB3zLtwvTyMvYq2XPy2S','Dgv4DenVBNrLBNq','cIaGicaGidWVzgL2pG','twfUywDLCIbYzw1VDMvK','z2v0qMLUzgLUz3m','Bg9NAw4UAhrTBa','pc9KAxy+','ywrKlw1HBMfNzxiTyNrU','DxnLCNm','BMfTzq','odm2mZbXCNDZBeK','DgvHBxmTzxjYB3i','ywrKlw1LBwjLCI1ZzwXLy3q','zM9YrwfJAa','CxvLCNLtzwXLy3rVCG','CMvTB3zLtwfUywDLCKnSAwnR','C3r5Bgu','phaGC3r5Bgu9iMzVBNqTC2L6ztOGmc44nZvYzw07ignVBg9YoIb2yxiOls1JB2XVCI10zxH0lxnLy29UzgfYEsK7ig1HCMDPBJOGmc4YnxjLBsaWoYi+tM8GBwvTyMvYCYb5zxq8l3a+','B3bLBLrLyw1nB2rHBa','i3rLyw0TBw9KywWGlM1VzgfSlw92zxjSyxK','m2jZAMfXqG','jYKIihn0EwXLpsjJB2XVCJOGDMfYkc0Ty29SB3iTzgfUz2vYktSIpLjLBw92ztWVyNv0Dg9UpG','BwfW','pc90zd4kicaGicaGica8Dgq+cIaGicaGicaGica8zgL2ignSyxnZpsj1C2vYlwfJDgLVBNmIpGOGicaGicaGicaGica','BM9YBwfS','DgvHBs1MB3jTlwvYCM9Y','pg9WDgLVBIb2ywX1zt0IiJ5qCM9TB3rLigeGBwvTyMvYihrVig1HBMfNzxlIGky8l29WDgLVBJ4','ywrKvgvHBu1HBMfNzxi','cIaGicaGicaGicaGia','pc9ZCgfUpGOGicaGicaGidXIDxr0B24GDhLWzt0IyNv0Dg9UiIbJBgfZCZ0IyNrUlwDOB3n0igj0BI1ZBwfSBciGB25JBgLJAZ0ID2LUzg93lNjLBw92zu1HBMfNzxjdBgLJAYGN','CMvTB3zLvgvHBu1LBwjLCG','pc90zd4kicaGicaGphrKpG','CM9Szv9Uyw1L','z2v0q3vYCMvUDfvZzxi','zw52AxjVBM1LBNq','zMLSDgvY','cIaGicaGicaGpc9ZCgfUpGOGicaGicaGia','nJaW','BwfUywDLCNmTC2vJDgLVBG','zxjYB3i','DgvHBs1Uyw1L','qMLUzgLUzYbYzw1VDMvK','BwvTyMvYCY1SAxn0','cIaGicaGidX0CJ4kicaGicaGica8DgqGy29SC3bHBJ0InciGC3r5Bgu9iNrLEhqTywXPz246ignLBNrLCJSGy29SB3i6ihzHCIGTlwnVBg9YlxrLEhqTC2vJB25Kyxj5ktSGCgfKzgLUzZOGmNjLBtSIpGOGicaGicaGicaGtM8GDgvHBxmGEwv0lGOGicaGicaGicaG','idXZCgfUihn0EwXLpsjJB2XVCJOGDMfYkc0Ty29SB3iTDgv4Dc1ZzwnVBMrHCNKPoYbMB250lxnPEMu6idaUodvLBtSIpIG','DMfYkc0Ty29SB3iTDgv4Dc1ZzwnVBMrHCNKP','Axntzxj2zxjbzg1PBG','u2f2Aw5N4OcM','BgvUz3rO','y29UzMLYBs1KzwXLDguTDgvHBq','Aw5Uzxjive1m','vgvHBsb1CgrHDgvK','CM9Szv9Pza','y2fUy2vSlwrLBgv0zs10zwfT','zgv0ywLSCW','DgvHBs1TB2rHBc10ywjZ','ywrKrxzLBNrmAxn0zw5LCG','DhjPBq','yMLUzgLUz3mTzw1WDhK','zxnJyxbLshrTBa','BwfUywDLCNm','ywrKlwjPBMrPBMCTyNrU','mta4wgXsyvPi','cIaGicaGidXKAxyGC3r5Bgu9iMrPC3bSyxK6igzSzxG7igfSAwDUlwL0zw1ZoIbJzw50zxi7igP1C3rPzNKTy29UDgvUDdOGC3bHy2uTyMv0D2vLBJSGCgfKzgLUzZOGmc4ZnxjLBsaWoYbIB3jKzxiTyM90Dg9ToIaXChGGC29SAwqGDMfYkc0Ty29SB3iTyM9YzgvYktSIpGOGicaGicaGidXZCgfUihn0EwXLpsjMB250lxnPEMu6idaUodC1CMvToYi+','ywrKlw1HBMfNzxiTC2vSzwn0','yMLUzgLUz3mTBgLZDc1JB250ywLUzxi','vgvHBsbKzwXLDgvK','yMLUzgLUz3mTBg9HzgLUzW','y29SB3i','mtu3ote2mKzmthLZva','y2XVC2uTDgvHBs1TB2rHBa','pg9WDgLVBIb2ywX1zt0I','jYKIpGOGicaGicaGicaGica','ywXS','DgvHBxm','pg9WDgLVBIb2ywX1zt0IiJ5bBgWGzw52AxjVBM1LBNrZigfSCMvHzhKGyM91BMq8l29WDgLVBJ4','pc90zd4kicaGicaGica8Dgq+','yMLUzgLUz3m','zgvZy3jPChrPB24','odyWotndBwPmyvq','DgvHBs1TB2rHBc1MB290zxi','C2f2zs10zwfT','DgfI','AgLKzgvU','C3vJy2vZCW','DgvHBs1KzxnJCMLWDgLVBG','y3jLyxrLlxrLyw0TyNrU','C2f2zs1IAw5KAw5Nlwj0BG','zgvSzxrLqMLUzgLUzW','ywrKlw1LBwjLCI1YB3C','y2XPy2S','re9nq29UDgvUDeXVywrLza','pg9WDgLVBIb2ywX1zt0IiJ5bzgqGysbTzw1IzxlIGky8l29WDgLVBJ4','ywn0AxzLvgfI','zMLUzeLUzgv4','DMfSDwu','ywrKlwjPBMrPBMCTzM9YBq','cIaGicaGidWVDgq+cIaGica8l3rYpG','qwrKiejPBMrPBMC','DgvHBs1JB3vUDa','y3vYCMvUDfvZzxi','pgrPDIbZDhLSzt0IzM9UDc1ZAxPLoIaWlJHLBtSGy29SB3i6ihzHCIGTlwnVBg9YlxrLEhqTC2vJB25Kyxj5ktSGBwfYz2LUlxrVCdOGmc4XnxjLBtSIpG','pgj1DhrVBIbJBgfZCZ0IyNrUlwDOB3n0igj0BI1ZBwfSBciGB25JBgLJAZ0ID2LUzg93lMrLBgv0zvrLyw0OjW','CxvLCNLtzwXLy3rVCKfSBa','mti4ntuXzLzYruXj','zMXLEa','z2v0vgvHBxm','Bg9JyxrPB24','AgfZ','BwvTyMvYCW','zgLZywjSzwq','jYKIpKvKAxq8l2j1DhrVBJ4','DgvHBs10ywiTzgv0ywLSCW','CM9Szxm','jYKIihn0EwXLpsjJB2XVCJOGDMfYkc0Ty29SB3iTzgfUz2vYktSGCgfKzgLUzZOGmc4XnxjLBsaWlJrYzw07igzVBNqTC2L6ztOGmc44CMvToYi+uMvTB3zLpc9IDxr0B24+','ywrKlw1LBwjLCI1IDg4','BwvTyMvYCY1Zzwn0Aw9U','yMLUzgLUzY1YB2XL','q3jLyxrLifrLyw0','DgvHBs1TB2rHBc10AxrSzq','rMfPBgvKihrVigXVywqGyMLUzgLUz3m6ia','CMv0CNKTDgvHBxmTyNrU','pc90zd4kicaGicaGphrKpGOGicaGicaGia','cIaGicaGicaGica8l2rPDJ4kicaGicaGica8l3rKpGOGicaGica8l3rYpG','zgvSzxrLlxrLyw0TBw9KywW','zwrPDgLUz1rLyw1jza','mta1mdq1mgfszwDfwq','y3jLyxrLvgvHBq','y2fUy2vSlwjPBMrPBMCTyNrU','zgf0yxnLDa','DxbKyxrLvgvHBq','DgvHBujPBMrPBMDZ','BwfUywDLCL9Uyw1LCW'];_0x1023=function(){return _0x573cc4;};return _0x1023();}function setActiveTabButton(_0x40b4fe){const _0x5c948d=_0x225786;document[_0x5c948d(0x1bd)](_0x5c948d(0x1dd))[_0x5c948d(0x163)](_0x4993fc=>{const _0x4afaa9=_0x5c948d,_0x46fcd8=_0x4993fc['dataset'][_0x4afaa9(0x1a8)]===_0x40b4fe;_0x4993fc[_0x4afaa9(0x166)]['borderBottomColor']=_0x46fcd8?_0x4afaa9(0x1fa):'transparent',_0x4993fc[_0x4afaa9(0x166)][_0x4afaa9(0x19a)]=_0x46fcd8?'var(--color-primary)':_0x4afaa9(0x183),_0x4993fc[_0x4afaa9(0x166)][_0x4afaa9(0x1f9)]=_0x46fcd8?_0x4afaa9(0x17b):_0x4afaa9(0x16e);});}function showTab(_0x422037){const _0x47160a=_0x225786;document[_0x47160a(0x1f3)](_0x47160a(0x1c6))[_0x47160a(0x1a9)]=_0x422037!==_0x47160a(0x18c),document[_0x47160a(0x1f3)](_0x47160a(0x1e8))[_0x47160a(0x1a9)]=_0x422037!==_0x47160a(0x1a3),document['getElementById'](_0x47160a(0x1a6))['hidden']=_0x422037===_0x47160a(0x1a3);}function renderMembersList(_0x416391){const _0x4d3302=_0x225786,_0x5ae51f=state[_0x4d3302(0x1ba)]?.['isServerAdmin'],_0x549d59=(_0x416391[_0x4d3302(0x192)]||[])[_0x4d3302(0x1fd)](state[_0x4d3302(0x1ba)]?.['id']),_0x5b3ced=_0x5ae51f||_0x549d59,_0x3a76c3=_0x416391['members']||[],_0x47c1b1=document['getElementById'](_0x4d3302(0x180));if(_0x3a76c3[_0x4d3302(0x186)]===0x0){_0x47c1b1[_0x4d3302(0x188)]=_0x4d3302(0x167);return;}_0x47c1b1[_0x4d3302(0x188)]=_0x3a76c3['map'](_0x1f0e73=>{const _0x1b6346=_0x4d3302,_0x3da4d4=state[_0x1b6346(0x15e)][_0x1b6346(0x1ff)](_0xa1c55f=>_0xa1c55f['id']===_0x1f0e73),_0xd4617d=_0x3da4d4?''+Utils[_0x1b6346(0x191)](_0x3da4d4[_0x1b6346(0x1e4)])+(_0x3da4d4[_0x1b6346(0x15f)]?_0x1b6346(0x182)+Utils[_0x1b6346(0x191)](_0x3da4d4['name'])+_0x1b6346(0x1f4):''):Utils['escapeHtml'](_0x1f0e73),_0x5c10aa=(_0x416391['managers']||[])[_0x1b6346(0x1fd)](_0x1f0e73);return _0x1b6346(0x1ea)+_0xd4617d+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20'+(_0x5c10aa?'<span\x20class=\x22tag\x22\x20style=\x22margin-left:\x200.4rem;\x20font-size:\x200.7em;\x20padding:\x200.1em\x200.4em;\x22>manager</span>':'')+_0x1b6346(0x17a)+(_0x5b3ced?'<button\x20type=\x22button\x22\x20class=\x22btn-ghost\x20btn-small\x22\x20onclick=\x22window.removeMemberClick(\x27'+_0x1f0e73+_0x1b6346(0x1c8):'')+_0x1b6346(0x158);})[_0x4d3302(0x1e5)]('');const _0xed3042=document[_0x4d3302(0x1f3)](_0x4d3302(0x1af));if(_0xed3042)_0xed3042[_0x4d3302(0x166)][_0x4d3302(0x1f6)]=_0x5b3ced?_0x4d3302(0x1bf):'none';}function renderManagersList(_0x3281f1){const _0x3b316e=_0x225786,_0x587da4=_0x3281f1[_0x3b316e(0x192)]||[],_0x328e8e=document['getElementById'](_0x3b316e(0x1f8));if(_0x587da4[_0x3b316e(0x186)]===0x0){_0x328e8e['innerHTML']='<p\x20style=\x22font-size:\x200.875rem;\x20color:\x20var(--color-text-secondary);\x20margin:\x200.25rem\x200;\x22>No\x20managers</p>';return;}_0x328e8e[_0x3b316e(0x188)]=_0x587da4[_0x3b316e(0x16c)](_0x4103df=>{const _0x2bc1a5=_0x3b316e,_0x451d9e=state[_0x2bc1a5(0x15e)][_0x2bc1a5(0x1ff)](_0x456f3c=>_0x456f3c['id']===_0x4103df),_0x4fb9fa=_0x451d9e?Utils[_0x2bc1a5(0x191)](_0x451d9e[_0x2bc1a5(0x1e4)]):Utils[_0x2bc1a5(0x191)](_0x4103df);return _0x2bc1a5(0x195)+_0x4fb9fa+_0x2bc1a5(0x173)+_0x4103df+'\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>';})[_0x3b316e(0x1e5)]('');}function updateMemberSelect(_0x4995cb){const _0x187461=_0x225786,_0x4e5dce=document['getElementById'](_0x187461(0x162));if(!_0x4e5dce)return;const _0x170ddf=new Set(_0x4995cb['members']||[]),_0x482293=state['users'][_0x187461(0x179)](_0x3f2406=>!_0x170ddf[_0x187461(0x1c2)](_0x3f2406['id']));_0x4e5dce[_0x187461(0x188)]=_0x187461(0x1b2)+_0x482293[_0x187461(0x16c)](_0x623ea2=>'<option\x20value=\x22'+_0x623ea2['id']+'\x22>'+Utils[_0x187461(0x191)](_0x623ea2[_0x187461(0x1e4)])+(_0x623ea2[_0x187461(0x15f)]?'\x20('+Utils[_0x187461(0x191)](_0x623ea2[_0x187461(0x15f)])+')':'')+'</option>')['join']('');}function updateManagerSelect(_0x262afb){const _0x40c53a=_0x225786,_0x1d2f40=document[_0x40c53a(0x1f3)]('add-manager-select');if(!_0x1d2f40)return;const _0x4cc36c=new Set(_0x262afb[_0x40c53a(0x192)]||[]),_0x377efe=(_0x262afb[_0x40c53a(0x1c3)]||[])[_0x40c53a(0x179)](_0x48e1bb=>!_0x4cc36c[_0x40c53a(0x1c2)](_0x48e1bb))[_0x40c53a(0x16c)](_0x40d149=>state[_0x40c53a(0x15e)][_0x40c53a(0x1ff)](_0x15c387=>_0x15c387['id']===_0x40d149))['filter'](Boolean);_0x1d2f40[_0x40c53a(0x188)]=_0x40c53a(0x170)+_0x377efe[_0x40c53a(0x16c)](_0x58b6d8=>_0x40c53a(0x19d)+_0x58b6d8['id']+'\x22>'+Utils['escapeHtml'](_0x58b6d8[_0x40c53a(0x1e4)])+'</option>')['join']('');}async function addMember(){const _0x541199=_0x225786,_0x1b5345=document[_0x541199(0x1f3)](_0x541199(0x162)),_0x40f7d5=_0x1b5345[_0x541199(0x1b5)];if(!_0x40f7d5||!state['editingTeamId'])return;try{const {team:_0x16c6a8}=await API['addTeamMember'](state[_0x541199(0x1d3)],_0x40f7d5);syncTeamInState(_0x16c6a8),renderMembersList(_0x16c6a8),updateMemberSelect(_0x16c6a8),state[_0x541199(0x1ba)]?.['isServerAdmin']&&(renderManagersList(_0x16c6a8),updateManagerSelect(_0x16c6a8)),_0x1b5345[_0x541199(0x1b5)]='',Utils[_0x541199(0x1f5)]('Member\x20added',_0x541199(0x1aa));}catch(_0x126c0d){Utils['showToast'](_0x126c0d[_0x541199(0x1e3)],_0x541199(0x17d));}}async function addManager(){const _0x4742f2=_0x225786,_0x36f3ac=document[_0x4742f2(0x1f3)](_0x4742f2(0x196)),_0x384e4f=_0x36f3ac[_0x4742f2(0x1b5)];if(!_0x384e4f||!state[_0x4742f2(0x1d3)])return;try{const {team:_0x2c092a}=await API[_0x4742f2(0x171)](state[_0x4742f2(0x1d3)],_0x384e4f);syncTeamInState(_0x2c092a),renderMembersList(_0x2c092a),renderManagersList(_0x2c092a),updateManagerSelect(_0x2c092a),_0x36f3ac[_0x4742f2(0x1b5)]='',Utils[_0x4742f2(0x1f5)]('Manager\x20added','success');}catch(_0x229eab){Utils[_0x4742f2(0x1f5)](_0x229eab[_0x4742f2(0x1e3)],_0x4742f2(0x17d));}}window[_0x225786(0x156)]=async function(_0x154d74){const _0x23a851=_0x225786;if(!state['editingTeamId'])return;try{const {team:_0x58d15a}=await API[_0x23a851(0x174)](state[_0x23a851(0x1d3)],_0x154d74);syncTeamInState(_0x58d15a),renderMembersList(_0x58d15a),updateMemberSelect(_0x58d15a),state[_0x23a851(0x1ba)]?.[_0x23a851(0x184)]&&(renderManagersList(_0x58d15a),updateManagerSelect(_0x58d15a)),Utils[_0x23a851(0x1f5)]('Member\x20removed',_0x23a851(0x1aa));}catch(_0x14eff6){Utils[_0x23a851(0x1f5)](_0x14eff6[_0x23a851(0x1e3)],_0x23a851(0x17d));}},window[_0x225786(0x165)]=async function(_0x5953a4){const _0x5b313c=_0x225786;if(!state['editingTeamId'])return;try{const {team:_0x29caa1}=await API['removeTeamManager'](state['editingTeamId'],_0x5953a4);syncTeamInState(_0x29caa1),renderManagersList(_0x29caa1),updateManagerSelect(_0x29caa1),Utils[_0x5b313c(0x1f5)](_0x5b313c(0x159),'success');}catch(_0xaee163){Utils[_0x5b313c(0x1f5)](_0xaee163[_0x5b313c(0x1e3)],_0x5b313c(0x17d));}};async function loadTeamBindings(_0x2472db){const _0x6bf9b5=_0x225786,_0x5aeff8=document[_0x6bf9b5(0x1f3)](_0x6bf9b5(0x199)),_0x442b48=document[_0x6bf9b5(0x1f3)](_0x6bf9b5(0x190)),_0x444706=document[_0x6bf9b5(0x1f3)](_0x6bf9b5(0x197)),_0x2fa419=document[_0x6bf9b5(0x1f3)]('add-binding-btn');_0x5aeff8[_0x6bf9b5(0x1a9)]=![],_0x442b48[_0x6bf9b5(0x1a9)]=!![],_0x444706['style'][_0x6bf9b5(0x1f6)]='none',_0x2fa419[_0x6bf9b5(0x1a9)]=!![],document[_0x6bf9b5(0x1f3)]('add-binding-form')[_0x6bf9b5(0x1a9)]=!![];try{const {bindings:_0xcb1a1e}=await API[_0x6bf9b5(0x15a)]({'subject_type':_0x6bf9b5(0x1ec),'subject_id':_0x2472db});state['teamBindings']=_0xcb1a1e||[],_0x5aeff8[_0x6bf9b5(0x1a9)]=!![],state[_0x6bf9b5(0x1d9)]['length']===0x0?_0x442b48['hidden']=![]:(_0x444706[_0x6bf9b5(0x166)][_0x6bf9b5(0x1f6)]='',renderBindingsTable()),state['currentUser']?.[_0x6bf9b5(0x184)]&&(_0x2fa419[_0x6bf9b5(0x1a9)]=![]);}catch(_0x43da15){_0x5aeff8[_0x6bf9b5(0x1a9)]=!![],Utils[_0x6bf9b5(0x1f5)](_0x6bf9b5(0x1ce)+_0x43da15[_0x6bf9b5(0x1e3)],_0x6bf9b5(0x17d));}}function renderBindingsTable(){const _0xdf9fe3=_0x225786,_0x5eab52=document[_0xdf9fe3(0x1f3)]('bindings-table-body');if(!_0x5eab52)return;const _0x49dcec=state[_0xdf9fe3(0x1ba)]?.[_0xdf9fe3(0x184)];_0x5eab52[_0xdf9fe3(0x188)]=state[_0xdf9fe3(0x1d9)][_0xdf9fe3(0x16c)](_0x51ebce=>_0xdf9fe3(0x1f2)+Utils[_0xdf9fe3(0x191)](_0x51ebce[_0xdf9fe3(0x178)])+_0xdf9fe3(0x175)+Utils[_0xdf9fe3(0x191)](_0x51ebce[_0xdf9fe3(0x176)]||_0x51ebce[_0xdf9fe3(0x18a)])+_0xdf9fe3(0x1d0)+(_0x49dcec?_0xdf9fe3(0x1e9)+_0x51ebce['id']+_0xdf9fe3(0x16b):'—')+_0xdf9fe3(0x1b7))[_0xdf9fe3(0x1e5)]('');}function populateBindingForm(){const _0x285cc9=_0x225786,_0x399386=document['getElementById'](_0x285cc9(0x1de)),_0x54ce8c=document[_0x285cc9(0x1f3)](_0x285cc9(0x1cb)),_0xec4e09=new Set(state[_0x285cc9(0x1d9)]['map'](_0x21239a=>_0x21239a['environment'])),_0x51deb9=state[_0x285cc9(0x1e1)][_0x285cc9(0x179)](_0x2d0dc6=>!_0xec4e09[_0x285cc9(0x1c2)](_0x2d0dc6[_0x285cc9(0x15f)]));_0x399386['innerHTML']=_0x51deb9[_0x285cc9(0x186)]?_0x51deb9[_0x285cc9(0x16c)](_0x533a1f=>_0x285cc9(0x19d)+Utils[_0x285cc9(0x191)](_0x533a1f[_0x285cc9(0x15f)])+'\x22>'+Utils['escapeHtml'](_0x533a1f[_0x285cc9(0x15f)])+_0x285cc9(0x1f1))['join'](''):_0x285cc9(0x1a1),_0x54ce8c[_0x285cc9(0x188)]=state[_0x285cc9(0x1c7)]['map'](_0x38540a=>_0x285cc9(0x19d)+_0x38540a['id']+'\x22>'+Utils[_0x285cc9(0x191)](_0x38540a[_0x285cc9(0x15f)])+_0x285cc9(0x1f1))[_0x285cc9(0x1e5)]('');}async function saveBinding(){const _0x3884e8=_0x225786,_0x29a3ca=document[_0x3884e8(0x1f3)]('binding-environment')[_0x3884e8(0x1b5)],_0x2ec34f=document[_0x3884e8(0x1f3)](_0x3884e8(0x1cb))[_0x3884e8(0x1b5)];if(!_0x29a3ca||!_0x2ec34f||!state[_0x3884e8(0x1d3)])return;const _0x2b6982=document[_0x3884e8(0x1f3)]('save-binding-btn');_0x2b6982['disabled']=!![],_0x2b6982[_0x3884e8(0x157)]=_0x3884e8(0x1f7);try{await API['createBinding']({'subject_type':_0x3884e8(0x1ec),'subject_id':state[_0x3884e8(0x1d3)],'role_id':_0x2ec34f,'environment':_0x29a3ca}),Utils['showToast']('Binding\x20added',_0x3884e8(0x1aa)),document[_0x3884e8(0x1f3)](_0x3884e8(0x1b6))['hidden']=!![],document[_0x3884e8(0x1f3)](_0x3884e8(0x193))[_0x3884e8(0x1a9)]=![],await loadTeamBindings(state[_0x3884e8(0x1d3)]);}catch(_0x43202d){Utils[_0x3884e8(0x1f5)](_0x43202d[_0x3884e8(0x1e3)],_0x3884e8(0x17d));}finally{_0x2b6982[_0x3884e8(0x1c4)]=![],_0x2b6982['textContent']=_0x3884e8(0x1b8);}}window['deleteBindingClick']=async function(_0x15cd31){const _0x375248=_0x225786;try{await API[_0x375248(0x1ae)](_0x15cd31),Utils['showToast'](_0x375248(0x17f),_0x375248(0x1aa)),await loadTeamBindings(state[_0x375248(0x1d3)]);}catch(_0x1eb3c9){Utils['showToast'](_0x1eb3c9[_0x375248(0x1e3)],'error');}};async function saveTeam(){const _0x250dc4=_0x225786,_0x4a4ff1=document['getElementById'](_0x250dc4(0x17e))['value'][_0x250dc4(0x18f)](),_0x17437b=document['getElementById'](_0x250dc4(0x1ab))[_0x250dc4(0x1b5)][_0x250dc4(0x18f)](),_0x1b7bf2=document[_0x250dc4(0x1f3)](_0x250dc4(0x16f)),_0x5c5d72=document[_0x250dc4(0x1f3)]('save-team');if(!_0x4a4ff1){_0x1b7bf2[_0x250dc4(0x157)]='Team\x20name\x20is\x20required',_0x1b7bf2[_0x250dc4(0x1a9)]=![];return;}_0x1b7bf2['hidden']=!![];const _0x30bb31=_0x5c5d72[_0x250dc4(0x157)];_0x5c5d72['disabled']=!![],_0x5c5d72[_0x250dc4(0x157)]=state['editingTeamId']?_0x250dc4(0x185):'Creating…';try{if(state[_0x250dc4(0x1d3)]){const {team:_0xc4fc5b}=await API[_0x250dc4(0x1d8)](state['editingTeamId'],{'name':_0x4a4ff1,'description':_0x17437b});syncTeamInState(_0xc4fc5b),document[_0x250dc4(0x1f3)]('team-modal-title')[_0x250dc4(0x157)]=_0xc4fc5b['name'],Utils[_0x250dc4(0x1f5)](_0x250dc4(0x189),_0x250dc4(0x1aa));}else await API[_0x250dc4(0x1d5)]({'name':_0x4a4ff1,'description':_0x17437b}),Utils['showToast'](_0x250dc4(0x155),_0x250dc4(0x1aa)),hideTeamModal(),await loadTeams();state[_0x250dc4(0x1d3)]&&(_0x5c5d72[_0x250dc4(0x1c4)]=![],_0x5c5d72[_0x250dc4(0x157)]=_0x30bb31);}catch(_0x59ea16){_0x1b7bf2['textContent']=_0x59ea16[_0x250dc4(0x1e3)],_0x1b7bf2[_0x250dc4(0x1a9)]=![],_0x5c5d72[_0x250dc4(0x1c4)]=![],_0x5c5d72[_0x250dc4(0x157)]=_0x30bb31;}}function _0x4873(_0x2d3078,_0x13276f){_0x2d3078=_0x2d3078-0x155;const _0x102384=_0x1023();let _0x48738c=_0x102384[_0x2d3078];if(_0x4873['bPcsPG']===undefined){var _0x4f7a6f=function(_0x181ec1){const _0xa84aa0='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x543e0d='',_0x2e5be7='';for(let _0x800723=0x0,_0x56aefb,_0x4c7aab,_0x1ba675=0x0;_0x4c7aab=_0x181ec1['charAt'](_0x1ba675++);~_0x4c7aab&&(_0x56aefb=_0x800723%0x4?_0x56aefb*0x40+_0x4c7aab:_0x4c7aab,_0x800723++%0x4)?_0x543e0d+=String['fromCharCode'](0xff&_0x56aefb>>(-0x2*_0x800723&0x6)):0x0){_0x4c7aab=_0xa84aa0['indexOf'](_0x4c7aab);}for(let _0x55e7e3=0x0,_0x5a1495=_0x543e0d['length'];_0x55e7e3<_0x5a1495;_0x55e7e3++){_0x2e5be7+='%'+('00'+_0x543e0d['charCodeAt'](_0x55e7e3)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2e5be7);};_0x4873['qGmaXI']=_0x4f7a6f,_0x4873['XbeLFa']={},_0x4873['bPcsPG']=!![];}const _0x31dc7f=_0x102384[0x0],_0xdd5035=_0x2d3078+_0x31dc7f,_0x5e9827=_0x4873['XbeLFa'][_0xdd5035];return!_0x5e9827?(_0x48738c=_0x4873['qGmaXI'](_0x48738c),_0x4873['XbeLFa'][_0xdd5035]=_0x48738c):_0x48738c=_0x5e9827,_0x48738c;}window['deleteTeam']=function(_0x357492){const _0x39e321=_0x225786,_0x101682=state[_0x39e321(0x1a0)][_0x39e321(0x1ff)](_0x22dedc=>_0x22dedc['id']===_0x357492);if(!_0x101682)return;state['deletingTeamId']=_0x357492,document['getElementById'](_0x39e321(0x1eb))['textContent']=_0x101682[_0x39e321(0x15f)],document['getElementById'](_0x39e321(0x1d2))[_0x39e321(0x1a9)]=![];};function hideDeleteModal(){const _0x24be68=_0x225786;document[_0x24be68(0x1f3)](_0x24be68(0x1d2))['hidden']=!![],state[_0x24be68(0x1fc)]=null;}async function confirmDeleteTeam(){const _0x3bd597=_0x225786;if(!state[_0x3bd597(0x1fc)])return;const _0x16ba3f=document[_0x3bd597(0x1f3)](_0x3bd597(0x187));_0x16ba3f[_0x3bd597(0x1c4)]=!![],_0x16ba3f[_0x3bd597(0x157)]='Deleting…';try{await API[_0x3bd597(0x1e6)](state[_0x3bd597(0x1fc)]),Utils[_0x3bd597(0x1f5)](_0x3bd597(0x198),_0x3bd597(0x1aa)),hideDeleteModal(),await loadTeams();}catch(_0xae7eef){Utils[_0x3bd597(0x1f5)]('Failed\x20to\x20delete\x20team:\x20'+_0xae7eef['message'],'error'),_0x16ba3f[_0x3bd597(0x1c4)]=![],_0x16ba3f[_0x3bd597(0x157)]=_0x3bd597(0x1ee);}}function syncTeamInState(_0x1e7b62){const _0x210cfe=_0x225786,_0x2a1eba=state[_0x210cfe(0x1a0)][_0x210cfe(0x1b4)](_0x4552de=>_0x4552de['id']===_0x1e7b62['id']);if(_0x2a1eba>=0x0)state['teams'][_0x2a1eba]=_0x1e7b62;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 _0x58d960=_0x12c4;(function(_0x590d86,_0x221a21){const _0x21af3b=_0x12c4,_0x372d20=_0x590d86();while(!![]){try{const _0x1d1314=-parseInt(_0x21af3b(0xa7))/0x1+-parseInt(_0x21af3b(0xd4))/0x2+-parseInt(_0x21af3b(0xb0))/0x3+parseInt(_0x21af3b(0x9e))/0x4*(parseInt(_0x21af3b(0xaf))/0x5)+-parseInt(_0x21af3b(0xc8))/0x6*(parseInt(_0x21af3b(0xbb))/0x7)+parseInt(_0x21af3b(0xd7))/0x8*(parseInt(_0x21af3b(0xda))/0x9)+parseInt(_0x21af3b(0xb7))/0xa*(parseInt(_0x21af3b(0xac))/0xb);if(_0x1d1314===_0x221a21)break;else _0x372d20['push'](_0x372d20['shift']());}catch(_0x8443a8){_0x372d20['push'](_0x372d20['shift']());}}}(_0x224a,0xc109c));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['getQueryParams'](),containerId=params[_0x58d960(0xcd)],command=(params[_0x58d960(0xdb)]||'')[_0x58d960(0xbc)](),useServerExec=params[_0x58d960(0xa3)]===_0x58d960(0x9a),titleEl=document[_0x58d960(0xd3)](_0x58d960(0x9f)),subtitleEl=document[_0x58d960(0xd3)](_0x58d960(0xdc)),statusEl=document[_0x58d960(0xd3)](_0x58d960(0xa8)),terminalEl=document['getElementById'](_0x58d960(0xa9)),closeBtn=document[_0x58d960(0xd3)](_0x58d960(0x95));initTheme(),mountThemeToggle({'targetSelectors':['.terminal-actions']});const getXtermTheme=()=>{const _0x3ab78c=_0x58d960;return{'background':_0x3ab78c(0xad),'foreground':_0x3ab78c(0xa6),'cursor':_0x3ab78c(0xa6),'cursorAccent':_0x3ab78c(0xad)};};function _0x12c4(_0x5502f4,_0x315227){_0x5502f4=_0x5502f4-0x8f;const _0x224a08=_0x224a();let _0x12c454=_0x224a08[_0x5502f4];if(_0x12c4['gZMzKf']===undefined){var _0x5046ef=function(_0x3852b2){const _0x4b235e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x9ad9f3='',_0x420c6e='';for(let _0x3382c9=0x0,_0x3fb6a3,_0xaec0ef,_0x454824=0x0;_0xaec0ef=_0x3852b2['charAt'](_0x454824++);~_0xaec0ef&&(_0x3fb6a3=_0x3382c9%0x4?_0x3fb6a3*0x40+_0xaec0ef:_0xaec0ef,_0x3382c9++%0x4)?_0x9ad9f3+=String['fromCharCode'](0xff&_0x3fb6a3>>(-0x2*_0x3382c9&0x6)):0x0){_0xaec0ef=_0x4b235e['indexOf'](_0xaec0ef);}for(let _0x3c0289=0x0,_0x3d50c7=_0x9ad9f3['length'];_0x3c0289<_0x3d50c7;_0x3c0289++){_0x420c6e+='%'+('00'+_0x9ad9f3['charCodeAt'](_0x3c0289)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x420c6e);};_0x12c4['VSsriI']=_0x5046ef,_0x12c4['rRDgsQ']={},_0x12c4['gZMzKf']=!![];}const _0x7009a=_0x224a08[0x0],_0x42f4c6=_0x5502f4+_0x7009a,_0x405429=_0x12c4['rRDgsQ'][_0x42f4c6];return!_0x405429?(_0x12c454=_0x12c4['VSsriI'](_0x12c454),_0x12c4['rRDgsQ'][_0x42f4c6]=_0x12c454):_0x12c454=_0x405429,_0x12c454;}closeBtn&&closeBtn[_0x58d960(0x98)]('click',()=>{const _0xd3335a=_0x58d960;window[_0xd3335a(0xb1)]();});if(!containerId){updateStatus(_0x58d960(0xba),'error');throw new Error(_0x58d960(0xcc));}document[_0x58d960(0x92)]=_0x58d960(0xe4)+containerId[_0x58d960(0xaa)](0x0,0xc),enrichContainerDetails(containerId)[_0x58d960(0xc5)](()=>{const _0x63d5b4=_0x58d960;subtitleEl[_0x63d5b4(0xbe)]=_0x63d5b4(0xa2)+containerId[_0x63d5b4(0xd2)](0x0,0xc);});const term=new Terminal({'convertEol':!![],'cursorBlink':!![],'fontFamily':'JetBrains\x20Mono,\x20SFMono-Regular,\x20Consolas,\x20monospace','fontSize':0x10,'theme':getXtermTheme()}),fitAddon=new FitAddon();term[_0x58d960(0xd6)](fitAddon),term[_0x58d960(0xdd)](terminalEl),term[_0x58d960(0xa5)]();let isFitting=![];const doFit=()=>{const _0x3fcd88=_0x58d960;if(isFitting)return;isFitting=!![],fitAddon[_0x3fcd88(0xb8)](),sendResize(),term['scrollToBottom'](),setTimeout(()=>{isFitting=![];},0x32);};window[_0x58d960(0x98)](_0x58d960(0xc1),()=>{requestAnimationFrame(()=>{!isFitting&&doFit();});});const resizeObserver=new ResizeObserver(()=>{requestAnimationFrame(()=>{!isFitting&&doFit();});});resizeObserver['observe'](terminalEl);const socketProtocol=window[_0x58d960(0xc0)]['protocol']===_0x58d960(0xca)?_0x58d960(0xa0):'ws',socketUrl=new URL(_0x58d960(0xb2)+encodeURIComponent(containerId),window[_0x58d960(0xc0)][_0x58d960(0xbd)]);function _0x224a(){const _0x3ecae0=['ndC3mZq2nwDUDgvAyq','ndq3otK5m1z0DuXZBq','y2XVC2u','l3DZl2nVBNrHAw5LCNmV','zgf0yq','CMvHC29U','BgvUz3rO','y29UDgfPBMvYswq','mtC1nZKWvLzQELPW','zML0','Aw5MBW','twLZC2LUzYbJB250ywLUzxiGAwrLBNrPzMLLCG','ndGWnte3ogjYEg1REa','DhjPBq','AhjLzG','Dgv4DenVBNrLBNq','q29UBMvJDgLVBIbJBg9Zzwq','Bg9JyxrPB24','CMvZAxPL','zxjYB3i','CM93CW','C3rHDhvZ','y2f0y2G','uNvUBMLUzZOG','y3jLyxrLzef0','nMDuwfPUqW','zgvMyxvSDefNzw50','Ahr0Chm6','imk3ienVBw1HBMqG','y29UDgfPBMvYihbHCMfTzxrLCIbPCYbYzxf1AxjLza','y29UDgfPBMvY','C2vUza','CgfYC2u','y29UBMvJDgvK','y29UDgfPBMvYCW','C3vIC3rYAw5N','z2v0rwXLBwvUDej5swq','mJu0nta5og5OB2X0rq','D2fZq2XLyw4','Bg9HzefKzg9U','ntzXv3PxCKu','ChjVDg9JB2W','z2v0q29UDgfPBMvY','mtmWodGYnuL1tuzmCq','y21K','DgvYBwLUywWTC3vIDgL0Bgu','B3bLBG','zMLUza','imk3ifn0yxj0zwqG','DMfYAwfUDa','zgf0yxnLDa','Dg9tDhjPBMC','BwvZC2fNzq','vgvYBwLUywWGWRCG','t1bftG','q29UBMvJDgLVBIbLCNjVCG','CMvHzhLtDgf0zq','DhLWzq','DgL0Bgu','zw52AxjVBM1LBNq','C3rHCNrZv2L0Aa','y2XVC2uTDgvYBwLUywW','rw52AxjVBM1LBNqGDw5RBM93BG','u2vZC2LVBIa','ywrKrxzLBNrmAxn0zw5LCG','uhjLCgfYAw5NoIa','Dhj1zq','C2vHCMnOugfYyw1Z','C3rYAw5NAwz5','C3vJy2vZCW','ngL1r3b4uG','DgvYBwLUywWTDgL0Bgu','D3nZ','vgvYBwLUywWGD2vIC29JA2v0igvYCM9Y','q29UDgfPBMvYia','C2vYDMvYx2v4zwm','z2v0q29UDgfPBMvYCW','zM9JDxm','i2uYztHMma','mti5ode4n3jbqKfytq','DgvYBwLUywWTC3rHDhvZ','DgvYBwLUywWTy29UDgfPBMvY','C2XPy2u','imk3iefNzw50ia','mJiZm0nNuKvlBq','iZbMmtCYyq','D3jPDgu'];_0x224a=function(){return _0x3ecae0;};return _0x224a();}command&&useServerExec&&socketUrl[_0x58d960(0x9b)]['set'](_0x58d960(0xdb),command);socketUrl[_0x58d960(0xd8)]=socketProtocol+':';const socket=new WebSocket(socketUrl[_0x58d960(0xe2)]());term['onData'](_0x9ad9f3=>{const _0x17b2c9=_0x58d960;socket[_0x17b2c9(0x90)]===WebSocket[_0x17b2c9(0xe5)]&&socket['send'](JSON['stringify']({'type':_0x17b2c9(0xb3),'data':_0x9ad9f3}));});let commandSent=![],hasReceivedOutput=![];socket['addEventListener'](_0x58d960(0xe3),_0x420c6e=>{const _0xf76893=_0x58d960;try{const _0x3382c9=JSON[_0xf76893(0xcf)](_0x420c6e[_0xf76893(0xb3)]);if(_0x3382c9[_0xf76893(0x91)]===_0xf76893(0xb3)&&typeof _0x3382c9[_0xf76893(0xb3)]==='string')term[_0xf76893(0xae)](_0x3382c9[_0xf76893(0xb3)]),!hasReceivedOutput&&_0x3382c9[_0xf76893(0xb3)][_0xf76893(0xb5)]>0x0&&(hasReceivedOutput=!![],command&&!useServerExec&&!commandSent&&(commandSent=!![],setTimeout(()=>{const _0xde5483=_0xf76893;socket[_0xde5483(0x90)]===WebSocket[_0xde5483(0xe5)]&&socket[_0xde5483(0xce)](JSON[_0xde5483(0x9c)]({'type':_0xde5483(0xb3),'data':command+'\x0d'}));},0xc8)));else{if(_0x3382c9[_0xf76893(0x91)]==='status'&&_0x3382c9['status']){if(_0x3382c9[_0xf76893(0xc4)]==='connected'){if(command&&useServerExec)updateStatus(_0xf76893(0xc6)+command,_0xf76893(0xb9));else command?updateStatus(_0xf76893(0x99)+command,_0xf76893(0xb9)):updateStatus('Terminal\x20connected','success');doFit(),term['focus'](),command&&!useServerExec&&!commandSent&&setTimeout(()=>{const _0x1e059b=_0xf76893;!commandSent&&socket['readyState']===WebSocket[_0x1e059b(0xe5)]&&(commandSent=!![],socket[_0x1e059b(0xce)](JSON[_0x1e059b(0x9c)]({'type':_0x1e059b(0xb3),'data':command+'\x0d'})),updateStatus('Running:\x20'+command,_0x1e059b(0xb9)));},0x7d0);}else updateStatus(_0xf76893(0x97)+_0x3382c9[_0xf76893(0xc4)],_0x3382c9[_0xf76893(0xc4)]===_0xf76893(0xd0)?_0xf76893(0x9d):_0xf76893(0xb9));}else _0x3382c9[_0xf76893(0x91)]===_0xf76893(0xc2)&&_0x3382c9[_0xf76893(0xe3)]&&updateStatus(_0x3382c9[_0xf76893(0xe3)],'error');}}catch(_0x3fb6a3){console[_0xf76893(0xc2)]('Failed\x20to\x20parse\x20terminal\x20message',_0x3fb6a3);}}),socket['addEventListener']('close',_0xaec0ef=>{const _0x1677fc=_0x58d960,_0x454824=_0xaec0ef[_0x1677fc(0xb4)]||_0x1677fc(0xbf);updateStatus(_0x454824,_0xaec0ef[_0x1677fc(0xd5)]?_0x1677fc(0xb9):_0x1677fc(0xc2));}),socket[_0x58d960(0x98)](_0x58d960(0xc2),_0x3c0289=>{const _0x1638ff=_0x58d960;console['error'](_0x1638ff(0xa1),_0x3c0289),updateStatus(_0x1638ff(0x8f),_0x1638ff(0xc2));});function sendResize(){const _0x3578eb=_0x58d960;if(socket['readyState']!==WebSocket['OPEN'])return;const _0x3d50c7=term['cols'],_0x1aa043=term[_0x3578eb(0xc3)];socket['send'](JSON['stringify']({'type':_0x3578eb(0xc1),'cols':_0x3d50c7,'rows':_0x1aa043}));}function updateStatus(_0x208c8c,_0xac5616=_0x58d960(0xb9)){const _0x2cda64=_0x58d960;if(!statusEl)return;statusEl[_0x2cda64(0xbe)]=_0x208c8c,statusEl[_0x2cda64(0xe1)][_0x2cda64(0xe0)]=_0xac5616;}async function enrichContainerDetails(_0x2a7672){const _0x8657a4=_0x58d960;try{const _0x4a3525=await API[_0x8657a4(0xd9)](_0x2a7672);updateTerminalDetails(_0x4a3525);}catch{try{const _0x2fd12a=await API[_0x8657a4(0xa4)](),_0x18dca8=(_0x2fd12a[_0x8657a4(0xd1)]||[])[_0x8657a4(0xde)](_0x5621e5=>_0x5621e5[_0x8657a4(0xb6)]===_0x2a7672||_0x5621e5['name']===_0x2a7672||_0x5621e5['fullContainerId']?.[_0x8657a4(0x94)](_0x2a7672));if(_0x18dca8){updateTerminalDetails(_0x18dca8);return;}subtitleEl[_0x8657a4(0xbe)]=_0x8657a4(0xa2)+_0x2a7672['substring'](0x0,0xc);}catch{subtitleEl[_0x8657a4(0xbe)]='Container\x20'+_0x2a7672[_0x8657a4(0xd2)](0x0,0xc);}}}function updateTerminalDetails(_0x43ddd1){const _0x780b4b=_0x58d960,_0x21cfd3=_0x43ddd1['containerId']||_0x43ddd1['name']||_0x43ddd1['fullContainerId']||containerId,_0x313f51=_0x43ddd1['environment']?'Environment\x20'+_0x43ddd1[_0x780b4b(0x93)]:_0x780b4b(0x96),_0x42dadb=_0x43ddd1[_0x780b4b(0xc9)]?_0x780b4b(0xab)+_0x43ddd1[_0x780b4b(0xc9)]:'',_0x250e72=_0x43ddd1[_0x780b4b(0xc7)]?_0x780b4b(0xdf)+Utils['formatRelativeTime'](_0x43ddd1[_0x780b4b(0xc7)]):'';titleEl[_0x780b4b(0xbe)]=_0x780b4b(0xe4)+_0x21cfd3['substring'](0x0,0xc);const _0x592ecc=command?_0x780b4b(0xcb)+command:'';subtitleEl[_0x780b4b(0xbe)]=''+_0x313f51+_0x42dadb+_0x250e72+_0x592ecc;}
@@ -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 _0x112387=_0x42be;(function(_0x45d29d,_0x56ad24){const _0x2c955c=_0x42be,_0x14929c=_0x45d29d();while(!![]){try{const _0x5ab9c5=parseInt(_0x2c955c(0x1ee))/0x1+-parseInt(_0x2c955c(0x22a))/0x2*(-parseInt(_0x2c955c(0x214))/0x3)+-parseInt(_0x2c955c(0x203))/0x4*(-parseInt(_0x2c955c(0x224))/0x5)+-parseInt(_0x2c955c(0x201))/0x6*(-parseInt(_0x2c955c(0x22c))/0x7)+parseInt(_0x2c955c(0x1fc))/0x8+-parseInt(_0x2c955c(0x20b))/0x9*(parseInt(_0x2c955c(0x208))/0xa)+parseInt(_0x2c955c(0x21e))/0xb*(-parseInt(_0x2c955c(0x1fb))/0xc);if(_0x5ab9c5===_0x56ad24)break;else _0x14929c['push'](_0x14929c['shift']());}catch(_0x2fe162){_0x14929c['push'](_0x14929c['shift']());}}}(_0x3082,0xc1bc4));function _0x42be(_0x12b8c0,_0x56bd85){_0x12b8c0=_0x12b8c0-0x1ec;const _0x30828a=_0x3082();let _0x42be61=_0x30828a[_0x12b8c0];if(_0x42be['uYCCFF']===undefined){var _0x576e12=function(_0x5f0c80){const _0x124591='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x223108='',_0x1e1c71='';for(let _0x38ab0f=0x0,_0x16d36a,_0x3860c7,_0x1393e7=0x0;_0x3860c7=_0x5f0c80['charAt'](_0x1393e7++);~_0x3860c7&&(_0x16d36a=_0x38ab0f%0x4?_0x16d36a*0x40+_0x3860c7:_0x3860c7,_0x38ab0f++%0x4)?_0x223108+=String['fromCharCode'](0xff&_0x16d36a>>(-0x2*_0x38ab0f&0x6)):0x0){_0x3860c7=_0x124591['indexOf'](_0x3860c7);}for(let _0x2fd3ff=0x0,_0x2cbce2=_0x223108['length'];_0x2fd3ff<_0x2cbce2;_0x2fd3ff++){_0x1e1c71+='%'+('00'+_0x223108['charCodeAt'](_0x2fd3ff)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1e1c71);};_0x42be['JgCJYs']=_0x576e12,_0x42be['mKmyxh']={},_0x42be['uYCCFF']=!![];}const _0x184b47=_0x30828a[0x0],_0x48e03e=_0x12b8c0+_0x184b47,_0x4ed824=_0x42be['mKmyxh'][_0x48e03e];return!_0x4ed824?(_0x42be61=_0x42be['JgCJYs'](_0x42be61),_0x42be['mKmyxh'][_0x48e03e]=_0x42be61):_0x42be61=_0x4ed824,_0x42be61;}const THEME_STORAGE_KEY=_0x112387(0x210),THEME_CHANGE_EVENT=_0x112387(0x21d),VALID_THEMES=new Set([_0x112387(0x1ff),_0x112387(0x1fa)]),DEFAULT_TARGET_SELECTORS=[_0x112387(0x212),_0x112387(0x1f8),_0x112387(0x1f6),_0x112387(0x229),_0x112387(0x1f2)];function readStoredTheme(){const _0x432932=_0x112387;try{const _0x223108=localStorage[_0x432932(0x20c)](THEME_STORAGE_KEY);if(_0x223108&&VALID_THEMES[_0x432932(0x209)](_0x223108))return _0x223108;}catch(_0x1e1c71){console['warn'](_0x432932(0x202),_0x1e1c71);}return null;}export function getPreferredTheme(){const _0x50a52b=_0x112387,_0x38ab0f=readStoredTheme();if(_0x38ab0f)return _0x38ab0f;const _0x16d36a=window['matchMedia']&&window['matchMedia']('(prefers-color-scheme:\x20dark)')[_0x50a52b(0x1f7)];return _0x16d36a?_0x50a52b(0x1fa):_0x50a52b(0x1ff);}export function getCurrentTheme(){const _0x51ff9a=_0x112387,_0x3860c7=document[_0x51ff9a(0x1ed)][_0x51ff9a(0x211)][_0x51ff9a(0x200)];if(_0x3860c7&&VALID_THEMES[_0x51ff9a(0x209)](_0x3860c7))return _0x3860c7;return getPreferredTheme();}function _0x3082(){const _0x6b63a9=['BgLNAhq','DgHLBwu','mtHwwuzKu08','w1rOzw1LxsbgywLSzwqGDg8GCMvHzcbZDg9YzwqGDgHLBwuGChjLzMvYzw5JztO','mZiZntC5nMT3CNP3vq','zgv0ywLS','BwfW','mZzWEa','DgL0Bgu','mJi5nta2mhbLufvMCG','AgfZ','CxvLCNLtzwXLy3rVCG','mZz1BNPdzfa','z2v0sxrLBq','ywrKrxzLBNrmAxn0zw5LCG','y2XHC3nmAxn0','ohb4','ChjVzM91BMqTy29KzxiTDgHLBwu','zgf0yxnLDa','i3rOzw1LlxrVz2DSzs1JB250ywLUzxi','yNrUlwDOB3n0ihrOzw1LlxrVz2DSzs1IDg4','m1jrDfb0Eq','zMfSC2u','ywrK','y2XHC3noyw1L','yxjPys1WCMvZC2vK','D2fYBG','ywXPz25jDgvTCW','w1rOzw1LxsbgywLSzwqGDg8GCgvYC2LZDcb0AgvTzsbWCMvMzxjLBMnLoG','DhLWzq','ChjVzM91BMqTDgHLBwuTy2HHBMDL','mtmXodu0ntHzD2nkDe0','y29SB3jty2HLBwu','zMLUza','BgLUzuHLAwDODa','y2vUDgvY','yNv0Dg9U','nxDdtKvVEa','zMXLEa','phn2zYb4BwXUCZ0IAhr0CdOVl3D3DY53mY5VCMCVmJaWmc9ZDMCIihDPzhrOpsiYmciGAgvPz2H0psiYmciGDMLLD0jVEd0ImcaWidi0idi0iIbMAwXSpsjUB25LiIbZDhjVA2u9iMn1CNjLBNrdB2XVCIiGC3rYB2TLlxDPzhrOpsiYiIbZDhjVA2uTBgLUzwnHCd0ICM91BMqIihn0CM9Rzs1SAw5LAM9PBJ0ICM91BMqIpJXJAxjJBguGy3G9iJeYiIbJEt0ImtiIihi9iJuIpJWVy2LYy2XLpJXSAw5LihGXpsiXmIiGEte9iJeIihGYpsiXmIiGEti9iJmIpJWVBgLUzt48BgLUzsb4mt0ImtiIihKXpsiYmsiGEdi9iJeYiIb5mJ0ImJmIpJWVBgLUzt48BgLUzsb4mt0Inc4YmIiGEte9iJqUmJiIihGYpsi1lJy0iIb5mJ0Ins42nci+pc9SAw5LpJXSAw5LihGXpsiXoc4ZnIiGEte9iJe4lJm2iIb4mJ0ImtKUnZGIihKYpsiXos43oci+pc9SAw5LpJXSAw5LihGXpsiXiIb5mt0ImtiIihGYpsiZiIb5mJ0ImtiIpJWVBgLUzt48BgLUzsb4mt0ImJeIihKXpsiXmIiGEdi9iJiZiIb5mJ0ImtiIpJWVBgLUzt48BgLUzsb4mt0Inc4YmIiGEte9iJe5lJC4iIb4mJ0Ins42nciGEti9iJe4lJm2iJ48l2XPBMu+pgXPBMuGEde9iJe4lJm2iIb5mt0Ins42nciGEdi9iJe5lJC4iIb5mJ0Inc4YmIi+pc9SAw5LpJWVC3zNpG','C2v0sxrLBq','zgLZCgf0y2HfDMvUDa','lNrLCM1PBMfSlwfJDgLVBNm','mJGYndCXoerAsLLIrG','u3DPDgnOihrVigXPz2H0ig1Vzgu','mJq1ndK0ovrvBLrUDa','u3DPDgnOihrVigrHCMSGBw9Kzq','yxbWzw5Kq2HPBgq','C3bHBG','y3jLyxrLrwXLBwvUDa','zgLZCgXHEq','C2v0qxr0CMLIDxrL','zg9JDw1LBNrfBgvTzw50','mti3mZGZou93wwrctW','DgHLBwuTDg9Nz2XLlwzSB2f0Aw5N','yxbWzw5K','AgvPz2H0','lNrVCc1Iyxi','C3r5Bgu','DgHLBwuTDg9Nz2XLlwj0BG','yM9KEq','lNn0yxr1CY1Hy3rPB25Z','Bwf0y2HLCW','lMHLywrLCI1Hy3rPB25Z','CMvTB3zLrxzLBNrmAxn0zw5LCG','zgfYAW','mZzAreDMvuy','nJa4mJy0meHmsxLyCG','DgHLBwuTAwnVBG','CgfKzgLUzW'];_0x3082=function(){return _0x6b63a9;};return _0x3082();}export function applyTheme(_0x1393e7,{persist:persist=!![],emitEvent:emitEvent=!![]}={}){const _0x271598=_0x112387,_0x2fd3ff=VALID_THEMES[_0x271598(0x209)](_0x1393e7)?_0x1393e7:_0x271598(0x1ff);document[_0x271598(0x1ed)]['dataset']['theme']=_0x2fd3ff,document[_0x271598(0x1ed)][_0x271598(0x1f3)][_0x271598(0x21f)]=_0x2fd3ff===_0x271598(0x1fa)?_0x271598(0x1fa):_0x271598(0x1ff);if(persist)try{localStorage[_0x271598(0x227)](THEME_STORAGE_KEY,_0x2fd3ff);}catch(_0x2cbce2){console[_0x271598(0x219)](_0x271598(0x21b),_0x2cbce2);}return emitEvent&&window[_0x271598(0x228)](new CustomEvent(THEME_CHANGE_EVENT,{'detail':{'theme':_0x2fd3ff}})),_0x2fd3ff;}export function initTheme(_0x402a65={}){const {emitEvent:emitEvent=![]}=_0x402a65;return applyTheme(getPreferredTheme(),{'persist':![],'emitEvent':emitEvent});}export function toggleTheme(){const _0x3ff8c6=_0x112387,_0x2d8a15=getCurrentTheme()===_0x3ff8c6(0x1fa)?_0x3ff8c6(0x1ff):_0x3ff8c6(0x1fa);return applyTheme(_0x2d8a15);}export function onThemeChange(_0x1fd6b2,{runImmediately:runImmediately=![]}={}){const _0x5ccfae=_0x112387,_0x52958e=_0x5519a0=>{const _0x287986=_0x42be;_0x1fd6b2(_0x5519a0[_0x287986(0x204)]['theme']);};return window[_0x5ccfae(0x20d)](THEME_CHANGE_EVENT,_0x52958e),runImmediately&&_0x1fd6b2(getCurrentTheme()),()=>window[_0x5ccfae(0x1f9)](THEME_CHANGE_EVENT,_0x52958e);}export function mountThemeToggle(_0xc13c20={}){const _0x2c2ebc=_0x112387,{targetSelectors:targetSelectors=DEFAULT_TARGET_SELECTORS}=_0xc13c20,_0x21e634=targetSelectors[_0x2c2ebc(0x205)](_0x534ec0=>document[_0x2c2ebc(0x20a)](_0x534ec0))[_0x2c2ebc(0x220)](Boolean),_0x3bb14e=document['createElement'](_0x2c2ebc(0x223));_0x3bb14e[_0x2c2ebc(0x21c)]='button',_0x3bb14e[_0x2c2ebc(0x217)]=_0x2c2ebc(0x213),_0x3bb14e['id']=_0x2c2ebc(0x1f4),_0x3bb14e['setAttribute'](_0x2c2ebc(0x218),_0x2c2ebc(0x215)),_0x3bb14e[_0x2c2ebc(0x1f3)][_0x2c2ebc(0x1fe)]=_0x2c2ebc(0x20f),_0x3bb14e[_0x2c2ebc(0x1f3)][_0x2c2ebc(0x221)]='0',_0x3bb14e['style']['width']=_0x2c2ebc(0x206),_0x3bb14e[_0x2c2ebc(0x1f3)][_0x2c2ebc(0x1f1)]=_0x2c2ebc(0x206),_0x3bb14e['style'][_0x2c2ebc(0x231)]=_0x2c2ebc(0x225),_0x3bb14e['style'][_0x2c2ebc(0x21a)]=_0x2c2ebc(0x222),_0x3bb14e['style']['justifyContent']=_0x2c2ebc(0x222);const _0x403c91=document[_0x2c2ebc(0x230)](_0x2c2ebc(0x22f));_0x403c91[_0x2c2ebc(0x217)]=_0x2c2ebc(0x1fd),_0x403c91[_0x2c2ebc(0x1f3)]['display']=_0x2c2ebc(0x225),_0x3bb14e[_0x2c2ebc(0x1f0)](_0x403c91);const _0x43c1ac='<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>',_0x56e68a=_0x2c2ebc(0x226),_0xdbf3f4=_0x46c6ea=>{const _0x24b9bc=_0x2c2ebc,_0x426905=_0x46c6ea==='dark';_0x403c91['innerHTML']=_0x426905?_0x43c1ac:_0x56e68a,_0x3bb14e[_0x24b9bc(0x207)]=_0x426905?_0x24b9bc(0x22b):_0x24b9bc(0x22d),_0x3bb14e[_0x24b9bc(0x211)][_0x24b9bc(0x200)]=_0x46c6ea,_0x3bb14e[_0x24b9bc(0x1ec)](_0x24b9bc(0x218),String(_0x426905));};return _0x3bb14e[_0x2c2ebc(0x20d)]('click',()=>{const _0x20444f=_0x2c2ebc,_0x509eec=getCurrentTheme()==='dark'?_0x20444f(0x1ff):_0x20444f(0x1fa);applyTheme(_0x509eec);}),_0x21e634?_0x21e634[_0x2c2ebc(0x22e)](_0x3bb14e):(_0x3bb14e[_0x2c2ebc(0x20e)][_0x2c2ebc(0x216)](_0x2c2ebc(0x1ef)),document[_0x2c2ebc(0x1f5)][_0x2c2ebc(0x22e)](_0x3bb14e)),_0xdbf3f4(initTheme()),onThemeChange(_0xdbf3f4),_0x3bb14e;}export{THEME_STORAGE_KEY,THEME_CHANGE_EVENT};