@serve.zone/catalog 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
  2. package/dist_ts_web/00_commitinfo_data.js +9 -0
  3. package/dist_ts_web/elements/index.d.ts +33 -0
  4. package/dist_ts_web/elements/index.js +45 -0
  5. package/dist_ts_web/elements/sz-certificates-card.d.ts +14 -0
  6. package/dist_ts_web/elements/sz-certificates-card.js +210 -0
  7. package/dist_ts_web/elements/sz-dashboard-view.d.ts +33 -0
  8. package/dist_ts_web/elements/sz-dashboard-view.js +242 -0
  9. package/dist_ts_web/elements/sz-demo-view-dashboard.d.ts +18 -0
  10. package/dist_ts_web/elements/sz-demo-view-dashboard.js +184 -0
  11. package/dist_ts_web/elements/sz-demo-view-network.d.ts +32 -0
  12. package/dist_ts_web/elements/sz-demo-view-network.js +384 -0
  13. package/dist_ts_web/elements/sz-demo-view-registries.d.ts +22 -0
  14. package/dist_ts_web/elements/sz-demo-view-registries.js +240 -0
  15. package/dist_ts_web/elements/sz-demo-view-services.d.ts +32 -0
  16. package/dist_ts_web/elements/sz-demo-view-services.js +468 -0
  17. package/dist_ts_web/elements/sz-demo-view-settings.d.ts +19 -0
  18. package/dist_ts_web/elements/sz-demo-view-settings.js +151 -0
  19. package/dist_ts_web/elements/sz-demo-view-tokens.d.ts +20 -0
  20. package/dist_ts_web/elements/sz-demo-view-tokens.js +141 -0
  21. package/dist_ts_web/elements/sz-dns-ssl-card.d.ts +13 -0
  22. package/dist_ts_web/elements/sz-dns-ssl-card.js +180 -0
  23. package/dist_ts_web/elements/sz-domain-detail-view.d.ts +48 -0
  24. package/dist_ts_web/elements/sz-domain-detail-view.js +789 -0
  25. package/dist_ts_web/elements/sz-login-view.d.ts +18 -0
  26. package/dist_ts_web/elements/sz-login-view.js +384 -0
  27. package/dist_ts_web/elements/sz-network-dns-view.d.ts +20 -0
  28. package/dist_ts_web/elements/sz-network-dns-view.js +244 -0
  29. package/dist_ts_web/elements/sz-network-domains-view.d.ts +28 -0
  30. package/dist_ts_web/elements/sz-network-domains-view.js +312 -0
  31. package/dist_ts_web/elements/sz-network-proxy-view.d.ts +39 -0
  32. package/dist_ts_web/elements/sz-network-proxy-view.js +510 -0
  33. package/dist_ts_web/elements/sz-platform-service-detail-view.d.ts +49 -0
  34. package/dist_ts_web/elements/sz-platform-service-detail-view.js +733 -0
  35. package/dist_ts_web/elements/sz-platform-services-card.d.ts +19 -0
  36. package/dist_ts_web/elements/sz-platform-services-card.js +196 -0
  37. package/dist_ts_web/elements/sz-quick-actions-card.d.ts +19 -0
  38. package/dist_ts_web/elements/sz-quick-actions-card.js +194 -0
  39. package/dist_ts_web/elements/sz-registry-external-view.d.ts +22 -0
  40. package/dist_ts_web/elements/sz-registry-external-view.js +313 -0
  41. package/dist_ts_web/elements/sz-registry-onebox-view.d.ts +14 -0
  42. package/dist_ts_web/elements/sz-registry-onebox-view.js +307 -0
  43. package/dist_ts_web/elements/sz-resource-usage-card.d.ts +25 -0
  44. package/dist_ts_web/elements/sz-resource-usage-card.js +323 -0
  45. package/dist_ts_web/elements/sz-reverse-proxy-card.d.ts +16 -0
  46. package/dist_ts_web/elements/sz-reverse-proxy-card.js +216 -0
  47. package/dist_ts_web/elements/sz-service-create-view.d.ts +67 -0
  48. package/dist_ts_web/elements/sz-service-create-view.js +828 -0
  49. package/dist_ts_web/elements/sz-service-detail-view.d.ts +57 -0
  50. package/dist_ts_web/elements/sz-service-detail-view.js +728 -0
  51. package/dist_ts_web/elements/sz-services-backups-view.d.ts +37 -0
  52. package/dist_ts_web/elements/sz-services-backups-view.js +413 -0
  53. package/dist_ts_web/elements/sz-services-list-view.d.ts +20 -0
  54. package/dist_ts_web/elements/sz-services-list-view.js +272 -0
  55. package/dist_ts_web/elements/sz-settings-view.d.ts +30 -0
  56. package/dist_ts_web/elements/sz-settings-view.js +448 -0
  57. package/dist_ts_web/elements/sz-stat-card.d.ts +17 -0
  58. package/dist_ts_web/elements/sz-stat-card.js +249 -0
  59. package/dist_ts_web/elements/sz-status-grid-cluster.d.ts +19 -0
  60. package/dist_ts_web/elements/sz-status-grid-cluster.js +142 -0
  61. package/dist_ts_web/elements/sz-status-grid-infra.d.ts +17 -0
  62. package/dist_ts_web/elements/sz-status-grid-infra.js +140 -0
  63. package/dist_ts_web/elements/sz-status-grid-network.d.ts +30 -0
  64. package/dist_ts_web/elements/sz-status-grid-network.js +190 -0
  65. package/dist_ts_web/elements/sz-status-grid-services.d.ts +17 -0
  66. package/dist_ts_web/elements/sz-status-grid-services.js +145 -0
  67. package/dist_ts_web/elements/sz-tokens-view.d.ts +26 -0
  68. package/dist_ts_web/elements/sz-tokens-view.js +344 -0
  69. package/dist_ts_web/elements/sz-traffic-card.d.ts +24 -0
  70. package/dist_ts_web/elements/sz-traffic-card.js +255 -0
  71. package/dist_ts_web/index.d.ts +2 -0
  72. package/dist_ts_web/index.js +3 -0
  73. package/dist_ts_web/pages/index.d.ts +3 -0
  74. package/dist_ts_web/pages/index.js +4 -0
  75. package/dist_ts_web/pages/mainpage.d.ts +1 -0
  76. package/dist_ts_web/pages/mainpage.js +46 -0
  77. package/dist_ts_web/pages/sz-demo-app-shell.d.ts +13 -0
  78. package/dist_ts_web/pages/sz-demo-app-shell.js +212 -0
  79. package/dist_ts_web/pages/sz-demo-app.d.ts +2 -0
  80. package/dist_ts_web/pages/sz-demo-app.js +20 -0
  81. package/npmextra.json +24 -0
  82. package/package.json +45 -0
  83. package/ts_web/00_commitinfo_data.ts +8 -0
  84. package/ts_web/elements/index.ts +54 -0
  85. package/ts_web/elements/sz-certificates-card.ts +155 -0
  86. package/ts_web/elements/sz-dashboard-view.ts +217 -0
  87. package/ts_web/elements/sz-demo-view-dashboard.ts +150 -0
  88. package/ts_web/elements/sz-demo-view-network.ts +354 -0
  89. package/ts_web/elements/sz-demo-view-registries.ts +206 -0
  90. package/ts_web/elements/sz-demo-view-services.ts +434 -0
  91. package/ts_web/elements/sz-demo-view-settings.ts +118 -0
  92. package/ts_web/elements/sz-demo-view-tokens.ts +109 -0
  93. package/ts_web/elements/sz-dns-ssl-card.ts +130 -0
  94. package/ts_web/elements/sz-domain-detail-view.ts +766 -0
  95. package/ts_web/elements/sz-login-view.ts +329 -0
  96. package/ts_web/elements/sz-network-dns-view.ts +208 -0
  97. package/ts_web/elements/sz-network-domains-view.ts +273 -0
  98. package/ts_web/elements/sz-network-proxy-view.ts +456 -0
  99. package/ts_web/elements/sz-platform-service-detail-view.ts +714 -0
  100. package/ts_web/elements/sz-platform-services-card.ts +163 -0
  101. package/ts_web/elements/sz-quick-actions-card.ts +161 -0
  102. package/ts_web/elements/sz-registry-external-view.ts +279 -0
  103. package/ts_web/elements/sz-registry-onebox-view.ts +258 -0
  104. package/ts_web/elements/sz-resource-usage-card.ts +284 -0
  105. package/ts_web/elements/sz-reverse-proxy-card.ts +151 -0
  106. package/ts_web/elements/sz-service-create-view.ts +773 -0
  107. package/ts_web/elements/sz-service-detail-view.ts +710 -0
  108. package/ts_web/elements/sz-services-backups-view.ts +390 -0
  109. package/ts_web/elements/sz-services-list-view.ts +237 -0
  110. package/ts_web/elements/sz-settings-view.ts +417 -0
  111. package/ts_web/elements/sz-stat-card.ts +187 -0
  112. package/ts_web/elements/sz-status-grid-cluster.ts +105 -0
  113. package/ts_web/elements/sz-status-grid-infra.ts +88 -0
  114. package/ts_web/elements/sz-status-grid-network.ts +152 -0
  115. package/ts_web/elements/sz-status-grid-services.ts +99 -0
  116. package/ts_web/elements/sz-tokens-view.ts +308 -0
  117. package/ts_web/elements/sz-traffic-card.ts +222 -0
  118. package/ts_web/index.ts +2 -0
  119. package/ts_web/pages/index.ts +3 -0
  120. package/ts_web/pages/mainpage.ts +46 -0
  121. package/ts_web/pages/sz-demo-app-shell.ts +179 -0
  122. package/ts_web/pages/sz-demo-app.ts +20 -0
@@ -0,0 +1,468 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { DeesElement, customElement, html, css, cssManager, property, state, } from '@design.estate/dees-element';
36
+ import './index.js';
37
+ let SzDemoViewServices = (() => {
38
+ let _classDecorators = [customElement('sz-demo-view-services')];
39
+ let _classDescriptor;
40
+ let _classExtraInitializers = [];
41
+ let _classThis;
42
+ let _classSuper = DeesElement;
43
+ let _currentView_decorators;
44
+ let _currentView_initializers = [];
45
+ let _currentView_extraInitializers = [];
46
+ let _selectedService_decorators;
47
+ let _selectedService_initializers = [];
48
+ let _selectedService_extraInitializers = [];
49
+ let _selectedPlatformService_decorators;
50
+ let _selectedPlatformService_initializers = [];
51
+ let _selectedPlatformService_extraInitializers = [];
52
+ var SzDemoViewServices = class extends _classSuper {
53
+ static { _classThis = this; }
54
+ static {
55
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
56
+ _currentView_decorators = [state()];
57
+ _selectedService_decorators = [state()];
58
+ _selectedPlatformService_decorators = [state()];
59
+ __esDecorate(this, null, _currentView_decorators, { kind: "accessor", name: "currentView", static: false, private: false, access: { has: obj => "currentView" in obj, get: obj => obj.currentView, set: (obj, value) => { obj.currentView = value; } }, metadata: _metadata }, _currentView_initializers, _currentView_extraInitializers);
60
+ __esDecorate(this, null, _selectedService_decorators, { kind: "accessor", name: "selectedService", static: false, private: false, access: { has: obj => "selectedService" in obj, get: obj => obj.selectedService, set: (obj, value) => { obj.selectedService = value; } }, metadata: _metadata }, _selectedService_initializers, _selectedService_extraInitializers);
61
+ __esDecorate(this, null, _selectedPlatformService_decorators, { kind: "accessor", name: "selectedPlatformService", static: false, private: false, access: { has: obj => "selectedPlatformService" in obj, get: obj => obj.selectedPlatformService, set: (obj, value) => { obj.selectedPlatformService = value; } }, metadata: _metadata }, _selectedPlatformService_initializers, _selectedPlatformService_extraInitializers);
62
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
63
+ SzDemoViewServices = _classThis = _classDescriptor.value;
64
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
65
+ }
66
+ appui = null;
67
+ #currentView_accessor_storage = __runInitializers(this, _currentView_initializers, 'list');
68
+ get currentView() { return this.#currentView_accessor_storage; }
69
+ set currentView(value) { this.#currentView_accessor_storage = value; }
70
+ #selectedService_accessor_storage = (__runInitializers(this, _currentView_extraInitializers), __runInitializers(this, _selectedService_initializers, null));
71
+ get selectedService() { return this.#selectedService_accessor_storage; }
72
+ set selectedService(value) { this.#selectedService_accessor_storage = value; }
73
+ #selectedPlatformService_accessor_storage = (__runInitializers(this, _selectedService_extraInitializers), __runInitializers(this, _selectedPlatformService_initializers, null));
74
+ get selectedPlatformService() { return this.#selectedPlatformService_accessor_storage; }
75
+ set selectedPlatformService(value) { this.#selectedPlatformService_accessor_storage = value; }
76
+ demoServices = (__runInitializers(this, _selectedPlatformService_extraInitializers), [
77
+ {
78
+ id: '1',
79
+ name: 'nginx-proxy',
80
+ image: 'nginx:latest',
81
+ status: 'running',
82
+ cpu: '2.5%',
83
+ memory: '256 MB',
84
+ ports: '80, 443',
85
+ uptime: '5d 12h',
86
+ },
87
+ {
88
+ id: '2',
89
+ name: 'api-gateway',
90
+ image: 'api-gateway:v2.1.0',
91
+ status: 'running',
92
+ cpu: '8.2%',
93
+ memory: '512 MB',
94
+ ports: '3000',
95
+ uptime: '3d 8h',
96
+ },
97
+ {
98
+ id: '3',
99
+ name: 'worker-service',
100
+ image: 'worker:latest',
101
+ status: 'stopped',
102
+ cpu: '0%',
103
+ memory: '0 MB',
104
+ ports: '-',
105
+ uptime: '-',
106
+ },
107
+ {
108
+ id: '4',
109
+ name: 'redis-cache',
110
+ image: 'redis:7-alpine',
111
+ status: 'running',
112
+ cpu: '1.2%',
113
+ memory: '128 MB',
114
+ ports: '6379',
115
+ uptime: '10d 4h',
116
+ },
117
+ ]);
118
+ demoPlatformService = {
119
+ id: '1',
120
+ name: 'MongoDB',
121
+ type: 'mongodb',
122
+ status: 'running',
123
+ version: '7.0.4',
124
+ host: 'localhost',
125
+ port: 27017,
126
+ credentials: { username: 'admin', password: '••••••••' },
127
+ config: { replicaSet: 'rs0', authEnabled: true, journaling: true },
128
+ metrics: { cpu: 12, memory: 45, storage: 23, connections: 8 },
129
+ };
130
+ demoPlatformLogs = [
131
+ { timestamp: '2024-01-20 14:30:22', level: 'info', message: 'Connection accepted from 127.0.0.1:54321' },
132
+ { timestamp: '2024-01-20 14:30:20', level: 'info', message: 'Index build completed on collection users' },
133
+ { timestamp: '2024-01-20 14:30:15', level: 'warn', message: 'Slow query detected: 1.2s on collection orders' },
134
+ { timestamp: '2024-01-20 14:30:10', level: 'info', message: 'Checkpoint complete' },
135
+ ];
136
+ demoBackupSchedules = [
137
+ { id: '1', scope: 'All Services', retention: 'D:7, W:4, M:12', schedule: '0 2 * * *', lastRun: '1/2/2026, 2:00:03 AM', nextRun: '1/3/2026, 2:00:00 AM', status: 'active' },
138
+ ];
139
+ demoBackups = [
140
+ { id: '1', service: 'nginx-proxy', createdAt: '1/2/2026, 2:00:03 AM', size: '22.0 MB', includes: ['Image'] },
141
+ { id: '2', service: 'api-gateway', createdAt: '1/2/2026, 2:00:02 AM', size: '156.5 MB', includes: ['Image', 'Volumes'] },
142
+ { id: '3', service: 'redis-cache', createdAt: '1/2/2026, 2:00:00 AM', size: '48.0 MB', includes: ['Image', 'Data'] },
143
+ ];
144
+ static styles = [
145
+ cssManager.defaultStyles,
146
+ css `
147
+ :host {
148
+ display: block;
149
+ padding: 24px;
150
+ height: 100%;
151
+ overflow-y: auto;
152
+ box-sizing: border-box;
153
+ }
154
+
155
+ .page-header {
156
+ display: flex;
157
+ justify-content: space-between;
158
+ align-items: flex-start;
159
+ margin-bottom: 24px;
160
+ }
161
+
162
+ .header-info {
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: 8px;
166
+ }
167
+
168
+ .page-title {
169
+ font-size: 24px;
170
+ font-weight: 700;
171
+ color: ${cssManager.bdTheme('#18181b', '#fafafa')};
172
+ margin: 0;
173
+ }
174
+
175
+ .page-subtitle {
176
+ font-size: 14px;
177
+ color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
178
+ margin: 0;
179
+ }
180
+
181
+ .header-actions {
182
+ display: flex;
183
+ gap: 8px;
184
+ }
185
+
186
+ .action-button {
187
+ display: inline-flex;
188
+ align-items: center;
189
+ gap: 6px;
190
+ padding: 8px 14px;
191
+ background: ${cssManager.bdTheme('#18181b', '#fafafa')};
192
+ border: none;
193
+ border-radius: 6px;
194
+ font-size: 13px;
195
+ font-weight: 500;
196
+ color: ${cssManager.bdTheme('#fafafa', '#18181b')};
197
+ cursor: pointer;
198
+ transition: all 200ms ease;
199
+ }
200
+
201
+ .action-button:hover {
202
+ opacity: 0.9;
203
+ }
204
+
205
+ .action-button.secondary {
206
+ background: ${cssManager.bdTheme('#ffffff', '#09090b')};
207
+ border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
208
+ color: ${cssManager.bdTheme('#18181b', '#fafafa')};
209
+ }
210
+
211
+ .action-button.secondary:hover {
212
+ background: ${cssManager.bdTheme('#f4f4f5', '#18181b')};
213
+ }
214
+
215
+ .tabs {
216
+ display: flex;
217
+ gap: 4px;
218
+ margin-bottom: 24px;
219
+ border-bottom: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
220
+ padding-bottom: 0;
221
+ }
222
+
223
+ .tab {
224
+ padding: 10px 16px;
225
+ font-size: 14px;
226
+ font-weight: 500;
227
+ color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
228
+ background: transparent;
229
+ border: none;
230
+ cursor: pointer;
231
+ position: relative;
232
+ transition: color 200ms ease;
233
+ }
234
+
235
+ .tab:hover {
236
+ color: ${cssManager.bdTheme('#18181b', '#fafafa')};
237
+ }
238
+
239
+ .tab.active {
240
+ color: ${cssManager.bdTheme('#18181b', '#fafafa')};
241
+ }
242
+
243
+ .tab.active::after {
244
+ content: '';
245
+ position: absolute;
246
+ bottom: -1px;
247
+ left: 0;
248
+ right: 0;
249
+ height: 2px;
250
+ background: ${cssManager.bdTheme('#18181b', '#fafafa')};
251
+ border-radius: 1px 1px 0 0;
252
+ }
253
+
254
+ .back-button {
255
+ display: inline-flex;
256
+ align-items: center;
257
+ gap: 6px;
258
+ padding: 6px 12px;
259
+ background: transparent;
260
+ border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
261
+ border-radius: 6px;
262
+ font-size: 13px;
263
+ color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
264
+ cursor: pointer;
265
+ margin-bottom: 16px;
266
+ transition: all 200ms ease;
267
+ }
268
+
269
+ .back-button:hover {
270
+ background: ${cssManager.bdTheme('#f4f4f5', '#18181b')};
271
+ color: ${cssManager.bdTheme('#18181b', '#fafafa')};
272
+ }
273
+ `,
274
+ ];
275
+ render() {
276
+ return html `
277
+ ${this.currentView === 'list' ? this.renderListView() : ''}
278
+ ${this.currentView === 'create' ? this.renderCreateView() : ''}
279
+ ${this.currentView === 'detail' ? this.renderDetailView() : ''}
280
+ ${this.currentView === 'backups' ? this.renderBackupsView() : ''}
281
+ ${this.currentView === 'platform-detail' ? this.renderPlatformDetailView() : ''}
282
+ `;
283
+ }
284
+ renderListView() {
285
+ return html `
286
+ <div class="page-header">
287
+ <div class="header-info">
288
+ <h1 class="page-title">Services</h1>
289
+ <p class="page-subtitle">Manage your Docker containers and platform services</p>
290
+ </div>
291
+ <div class="header-actions">
292
+ <button class="action-button secondary" @click=${() => this.currentView = 'backups'}>
293
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
294
+ <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
295
+ <polyline points="17 8 12 3 7 8"/>
296
+ <line x1="12" y1="3" x2="12" y2="15"/>
297
+ </svg>
298
+ Backups
299
+ </button>
300
+ <button class="action-button" @click=${() => this.currentView = 'create'}>
301
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
302
+ <line x1="12" y1="5" x2="12" y2="19"/>
303
+ <line x1="5" y1="12" x2="19" y2="12"/>
304
+ </svg>
305
+ Deploy Service
306
+ </button>
307
+ </div>
308
+ </div>
309
+
310
+ <div class="tabs">
311
+ <button class="tab active">Docker Services</button>
312
+ <button class="tab" @click=${() => { this.selectedPlatformService = this.demoPlatformService; this.currentView = 'platform-detail'; }}>Platform Services</button>
313
+ </div>
314
+
315
+ <sz-services-list-view
316
+ .services=${this.demoServices}
317
+ @view-service=${(e) => { this.selectedService = e.detail; this.currentView = 'detail'; }}
318
+ @start-service=${(e) => console.log('Start service:', e.detail)}
319
+ @stop-service=${(e) => console.log('Stop service:', e.detail)}
320
+ @restart-service=${(e) => console.log('Restart service:', e.detail)}
321
+ @delete-service=${(e) => console.log('Delete service:', e.detail)}
322
+ ></sz-services-list-view>
323
+ `;
324
+ }
325
+ renderCreateView() {
326
+ return html `
327
+ <button class="back-button" @click=${() => this.currentView = 'list'}>
328
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
329
+ <polyline points="15 18 9 12 15 6"/>
330
+ </svg>
331
+ Back to Services
332
+ </button>
333
+
334
+ <sz-service-create-view
335
+ .registries=${[
336
+ { id: '1', name: 'Onebox Registry', url: 'registry.onebox.local' },
337
+ { id: '2', name: 'Docker Hub', url: 'docker.io' },
338
+ ]}
339
+ @create-service=${(e) => { console.log('Create service:', e.detail); this.currentView = 'list'; }}
340
+ @cancel=${() => this.currentView = 'list'}
341
+ ></sz-service-create-view>
342
+ `;
343
+ }
344
+ renderDetailView() {
345
+ return html `
346
+ <button class="back-button" @click=${() => this.currentView = 'list'}>
347
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
348
+ <polyline points="15 18 9 12 15 6"/>
349
+ </svg>
350
+ Back to Services
351
+ </button>
352
+
353
+ <sz-service-detail-view
354
+ .service=${{
355
+ id: this.selectedService?.id || '1',
356
+ name: this.selectedService?.name || 'nginx-proxy',
357
+ image: this.selectedService?.image || 'nginx:latest',
358
+ status: this.selectedService?.status || 'running',
359
+ ports: [{ host: '80', container: '80' }, { host: '443', container: '443' }],
360
+ envVars: [
361
+ { key: 'NGINX_HOST', value: 'localhost' },
362
+ { key: 'NGINX_PORT', value: '80' },
363
+ ],
364
+ volumes: [
365
+ { host: '/data/nginx/conf', container: '/etc/nginx/conf.d' },
366
+ ],
367
+ createdAt: '2024-01-15 10:30:00',
368
+ restartPolicy: 'always',
369
+ }}
370
+ .logs=${[
371
+ { timestamp: '2024-01-20 14:30:22', level: 'info', message: '127.0.0.1 - - [20/Jan/2024:14:30:22 +0000] "GET / HTTP/1.1" 200 612' },
372
+ { timestamp: '2024-01-20 14:30:21', level: 'info', message: '127.0.0.1 - - [20/Jan/2024:14:30:21 +0000] "GET /api/health HTTP/1.1" 200 15' },
373
+ { timestamp: '2024-01-20 14:30:20', level: 'warn', message: 'upstream timed out (110: Connection timed out)' },
374
+ { timestamp: '2024-01-20 14:30:19', level: 'info', message: '127.0.0.1 - - [20/Jan/2024:14:30:19 +0000] "POST /api/data HTTP/1.1" 201 89' },
375
+ ]}
376
+ @start=${() => console.log('Start')}
377
+ @stop=${() => console.log('Stop')}
378
+ @restart=${() => console.log('Restart')}
379
+ ></sz-service-detail-view>
380
+ `;
381
+ }
382
+ renderBackupsView() {
383
+ return html `
384
+ <button class="back-button" @click=${() => this.currentView = 'list'}>
385
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
386
+ <polyline points="15 18 9 12 15 6"/>
387
+ </svg>
388
+ Back to Services
389
+ </button>
390
+
391
+ <div class="page-header">
392
+ <div class="header-info">
393
+ <h1 class="page-title">Backups</h1>
394
+ <p class="page-subtitle">Manage backup schedules and restore points</p>
395
+ </div>
396
+ </div>
397
+
398
+ <sz-services-backups-view
399
+ .schedules=${this.demoBackupSchedules}
400
+ .backups=${this.demoBackups}
401
+ @create-schedule=${() => console.log('Create schedule')}
402
+ @run-now=${(e) => console.log('Run now:', e.detail)}
403
+ @download=${(e) => console.log('Download:', e.detail)}
404
+ ></sz-services-backups-view>
405
+ `;
406
+ }
407
+ renderPlatformDetailView() {
408
+ return html `
409
+ <button class="back-button" @click=${() => this.currentView = 'list'}>
410
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
411
+ <polyline points="15 18 9 12 15 6"/>
412
+ </svg>
413
+ Back to Services
414
+ </button>
415
+
416
+ <sz-platform-service-detail-view
417
+ .service=${this.demoPlatformService}
418
+ .logs=${this.demoPlatformLogs}
419
+ @start=${() => console.log('Start')}
420
+ @stop=${() => console.log('Stop')}
421
+ @restart=${() => console.log('Restart')}
422
+ ></sz-platform-service-detail-view>
423
+ `;
424
+ }
425
+ async onActivate(context) {
426
+ this.appui = context.appui;
427
+ // Set up content tabs
428
+ this.appui.setContentTabs([
429
+ { key: 'Docker Services', action: () => { this.currentView = 'list'; this.updateSecondaryMenu(); } },
430
+ { key: 'Platform Services', action: () => { this.currentView = 'platform-detail'; this.updateSecondaryMenu(); } },
431
+ { key: 'Backups', action: () => { this.currentView = 'backups'; this.updateSecondaryMenu(); } },
432
+ ]);
433
+ this.updateSecondaryMenu();
434
+ }
435
+ updateSecondaryMenu() {
436
+ if (!this.appui)
437
+ return;
438
+ this.appui.setSecondaryMenu({
439
+ heading: 'Services',
440
+ groups: [
441
+ {
442
+ name: 'Actions',
443
+ items: [
444
+ { type: 'action', key: 'Deploy Service', iconName: 'lucide:Plus', action: () => { this.currentView = 'create'; } },
445
+ { type: 'action', key: 'Refresh', iconName: 'lucide:RefreshCw', action: () => { console.log('Refresh'); } },
446
+ ],
447
+ },
448
+ {
449
+ name: 'Quick Filters',
450
+ items: [
451
+ { key: 'Running', iconName: 'lucide:Play', badge: '3', badgeVariant: 'success', action: () => { console.log('Filter running'); } },
452
+ { key: 'Stopped', iconName: 'lucide:Square', badge: '1', action: () => { console.log('Filter stopped'); } },
453
+ ],
454
+ },
455
+ ],
456
+ });
457
+ }
458
+ onDeactivate() {
459
+ // Cleanup if needed
460
+ }
461
+ static {
462
+ __runInitializers(_classThis, _classExtraInitializers);
463
+ }
464
+ };
465
+ return SzDemoViewServices = _classThis;
466
+ })();
467
+ export { SzDemoViewServices };
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3otZGVtby12aWV3LXNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3N6LWRlbW8tdmlldy1zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssR0FFTixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sWUFBWSxDQUFDO0lBU1Asa0JBQWtCOzRCQUQ5QixhQUFhLENBQUMsdUJBQXVCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7OztrQ0FBbkIsU0FBUSxXQUFXOzs7O3VDQUdoRCxLQUFLLEVBQUU7MkNBR1AsS0FBSyxFQUFFO21EQUdQLEtBQUssRUFBRTtZQUxSLHNMQUFpQixXQUFXLDZCQUFYLFdBQVcsaUdBQXdFO1lBR3BHLGtNQUFpQixlQUFlLDZCQUFmLGVBQWUseUdBQWE7WUFHN0MsME5BQWlCLHVCQUF1Qiw2QkFBdkIsdUJBQXVCLHlIQUFhO1lBVnZELDZLQTZaQzs7OztRQTVaUyxLQUFLLEdBQXFCLElBQUksQ0FBQztRQUd2QyxtRkFBNkYsTUFBTSxFQUFDO1FBQXBHLElBQWlCLFdBQVcsaURBQXdFO1FBQXBHLElBQWlCLFdBQVcsdURBQXdFO1FBR3BHLHFKQUF3QyxJQUFJLEdBQUM7UUFBN0MsSUFBaUIsZUFBZSxxREFBYTtRQUE3QyxJQUFpQixlQUFlLDJEQUFhO1FBRzdDLHlLQUFnRCxJQUFJLEdBQUM7UUFBckQsSUFBaUIsdUJBQXVCLDZEQUFhO1FBQXJELElBQWlCLHVCQUF1QixtRUFBYTtRQUU3QyxZQUFZLHlFQUFHO1lBQ3JCO2dCQUNFLEVBQUUsRUFBRSxHQUFHO2dCQUNQLElBQUksRUFBRSxhQUFhO2dCQUNuQixLQUFLLEVBQUUsY0FBYztnQkFDckIsTUFB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
@@ -0,0 +1,19 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import type { DeesAppui } from '@design.estate/dees-catalog';
3
+ import './index.js';
4
+ declare global {
5
+ interface HTMLElementTagNameMap {
6
+ 'sz-demo-view-settings': SzDemoViewSettings;
7
+ }
8
+ }
9
+ export declare class SzDemoViewSettings extends DeesElement {
10
+ private appui;
11
+ onActivate(context: {
12
+ appui: DeesAppui;
13
+ viewId: string;
14
+ }): Promise<void>;
15
+ onDeactivate(): void;
16
+ private demoSettings;
17
+ static styles: import("@design.estate/dees-element").CSSResult[];
18
+ render(): TemplateResult;
19
+ }
@@ -0,0 +1,151 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { DeesElement, customElement, html, css, cssManager, } from '@design.estate/dees-element';
36
+ import './index.js';
37
+ let SzDemoViewSettings = (() => {
38
+ let _classDecorators = [customElement('sz-demo-view-settings')];
39
+ let _classDescriptor;
40
+ let _classExtraInitializers = [];
41
+ let _classThis;
42
+ let _classSuper = DeesElement;
43
+ var SzDemoViewSettings = class extends _classSuper {
44
+ static { _classThis = this; }
45
+ static {
46
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
47
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
48
+ SzDemoViewSettings = _classThis = _classDescriptor.value;
49
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
50
+ }
51
+ appui = null;
52
+ async onActivate(context) {
53
+ this.appui = context.appui;
54
+ // Settings doesn't need content tabs, but we set up the secondary menu
55
+ this.appui.setSecondaryMenu({
56
+ heading: 'Settings',
57
+ groups: [
58
+ {
59
+ name: 'Categories',
60
+ items: [
61
+ { key: 'General', iconName: 'lucide:Settings', action: () => { console.log('General settings'); } },
62
+ { key: 'Network', iconName: 'lucide:Network', action: () => { console.log('Network settings'); } },
63
+ { key: 'Security', iconName: 'lucide:Shield', action: () => { console.log('Security settings'); } },
64
+ { key: 'Certificates', iconName: 'lucide:FileBadge', action: () => { console.log('Certificate settings'); } },
65
+ ],
66
+ },
67
+ {
68
+ name: 'Actions',
69
+ items: [
70
+ { type: 'action', key: 'Export Config', iconName: 'lucide:Download', action: () => { console.log('Export config'); } },
71
+ { type: 'action', key: 'Import Config', iconName: 'lucide:Upload', action: () => { console.log('Import config'); } },
72
+ { type: 'action', variant: 'danger', key: 'Reset to Default', iconName: 'lucide:RotateCcw', confirmMessage: 'Are you sure you want to reset all settings to default?', action: () => { console.log('Reset settings'); } },
73
+ ],
74
+ },
75
+ ],
76
+ });
77
+ }
78
+ onDeactivate() {
79
+ // Cleanup if needed
80
+ }
81
+ demoSettings = {
82
+ darkMode: true,
83
+ cloudflareToken: '',
84
+ cloudflareZoneId: '',
85
+ autoRenewCerts: true,
86
+ renewalThreshold: 30,
87
+ acmeEmail: 'admin@serve.zone',
88
+ httpPort: 80,
89
+ httpsPort: 443,
90
+ forceHttps: true,
91
+ };
92
+ static styles = [
93
+ cssManager.defaultStyles,
94
+ css `
95
+ :host {
96
+ display: block;
97
+ padding: 24px;
98
+ height: 100%;
99
+ overflow-y: auto;
100
+ box-sizing: border-box;
101
+ }
102
+
103
+ .page-header {
104
+ margin-bottom: 24px;
105
+ }
106
+
107
+ .page-title {
108
+ font-size: 24px;
109
+ font-weight: 700;
110
+ color: ${cssManager.bdTheme('#18181b', '#fafafa')};
111
+ margin: 0 0 8px 0;
112
+ }
113
+
114
+ .page-subtitle {
115
+ font-size: 14px;
116
+ color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
117
+ margin: 0;
118
+ }
119
+
120
+ .settings-container {
121
+ max-width: 800px;
122
+ }
123
+ `,
124
+ ];
125
+ render() {
126
+ return html `
127
+ <div class="page-header">
128
+ <h1 class="page-title">Settings</h1>
129
+ <p class="page-subtitle">Configure your onebox instance</p>
130
+ </div>
131
+
132
+ <div class="settings-container">
133
+ <sz-settings-view
134
+ .settings=${this.demoSettings}
135
+ currentUser="admin"
136
+ @setting-change=${(e) => console.log('Setting change:', e.detail)}
137
+ @change-password=${(e) => console.log('Change password:', e.detail)}
138
+ @reset=${() => console.log('Reset settings')}
139
+ @save=${(e) => console.log('Save settings:', e.detail)}
140
+ ></sz-settings-view>
141
+ </div>
142
+ `;
143
+ }
144
+ static {
145
+ __runInitializers(_classThis, _classExtraInitializers);
146
+ }
147
+ };
148
+ return SzDemoViewSettings = _classThis;
149
+ })();
150
+ export { SzDemoViewSettings };
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3otZGVtby12aWV3LXNldHRpbmdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3N6LWRlbW8tdmlldy1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxVQUFVLEdBRVgsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLFlBQVksQ0FBQztJQVNQLGtCQUFrQjs0QkFEOUIsYUFBYSxDQUFDLHVCQUF1QixDQUFDOzs7O3NCQUNDLFdBQVc7a0NBQW5CLFNBQVEsV0FBVzs7OztZQUFuRCw2S0FtR0M7Ozs7UUFsR1MsS0FBSyxHQUFxQixJQUFJLENBQUM7UUFFdkMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUE2QztZQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFFM0IsdUVBQXVFO1lBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzFCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixNQUFNLEVBQUU7b0JBQ047d0JBQ0UsSUFBSSxFQUFFLFlBQVk7d0JBQ2xCLEtBQUssRUFBRTs0QkFDTCxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ25HLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTs0QkFDbEcsRUFBRSxHQUFHLEVBQUUsVUFB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