var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
var _, done = false;
for (var i = decorators.length - 1; i >= 0; i--) {
var context = {};
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
if (kind === "accessor") {
if (result === void 0) continue;
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
if (_ = accept(result.get)) descriptor.get = _;
if (_ = accept(result.set)) descriptor.set = _;
if (_ = accept(result.init)) initializers.unshift(_);
}
else if (_ = accept(result)) {
if (kind === "field") initializers.unshift(_);
else descriptor[key] = _;
}
}
if (target) Object.defineProperty(target, contextIn.name, descriptor);
done = true;
};
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
var useValue = arguments.length > 2;
for (var i = 0; i < initializers.length; i++) {
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
}
return useValue ? value : void 0;
};
import { DeesElement, customElement, html, css, cssManager, property, state, } from '@design.estate/dees-element';
let SzServiceCreateView = (() => {
let _classDecorators = [customElement('sz-service-create-view')];
let _classDescriptor;
let _classExtraInitializers = [];
let _classThis;
let _classSuper = DeesElement;
let _registries_decorators;
let _registries_initializers = [];
let _registries_extraInitializers = [];
let _loading_decorators;
let _loading_initializers = [];
let _loading_extraInitializers = [];
let _serviceName_decorators;
let _serviceName_initializers = [];
let _serviceName_extraInitializers = [];
let _imageUrl_decorators;
let _imageUrl_initializers = [];
let _imageUrl_extraInitializers = [];
let _selectedRegistry_decorators;
let _selectedRegistry_initializers = [];
let _selectedRegistry_extraInitializers = [];
let _ports_decorators;
let _ports_initializers = [];
let _ports_extraInitializers = [];
let _envVars_decorators;
let _envVars_initializers = [];
let _envVars_extraInitializers = [];
let _volumes_decorators;
let _volumes_initializers = [];
let _volumes_extraInitializers = [];
let _cpuLimit_decorators;
let _cpuLimit_initializers = [];
let _cpuLimit_extraInitializers = [];
let _memoryLimit_decorators;
let _memoryLimit_initializers = [];
let _memoryLimit_extraInitializers = [];
let _restartPolicy_decorators;
let _restartPolicy_initializers = [];
let _restartPolicy_extraInitializers = [];
let _networkMode_decorators;
let _networkMode_initializers = [];
let _networkMode_extraInitializers = [];
let _showAdvanced_decorators;
let _showAdvanced_initializers = [];
let _showAdvanced_extraInitializers = [];
var SzServiceCreateView = class extends _classSuper {
static { _classThis = this; }
static {
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
_registries_decorators = [property({ type: Array })];
_loading_decorators = [property({ type: Boolean })];
_serviceName_decorators = [state()];
_imageUrl_decorators = [state()];
_selectedRegistry_decorators = [state()];
_ports_decorators = [state()];
_envVars_decorators = [state()];
_volumes_decorators = [state()];
_cpuLimit_decorators = [state()];
_memoryLimit_decorators = [state()];
_restartPolicy_decorators = [state()];
_networkMode_decorators = [state()];
_showAdvanced_decorators = [state()];
__esDecorate(this, null, _registries_decorators, { kind: "accessor", name: "registries", static: false, private: false, access: { has: obj => "registries" in obj, get: obj => obj.registries, set: (obj, value) => { obj.registries = value; } }, metadata: _metadata }, _registries_initializers, _registries_extraInitializers);
__esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
__esDecorate(this, null, _serviceName_decorators, { kind: "accessor", name: "serviceName", static: false, private: false, access: { has: obj => "serviceName" in obj, get: obj => obj.serviceName, set: (obj, value) => { obj.serviceName = value; } }, metadata: _metadata }, _serviceName_initializers, _serviceName_extraInitializers);
__esDecorate(this, null, _imageUrl_decorators, { kind: "accessor", name: "imageUrl", static: false, private: false, access: { has: obj => "imageUrl" in obj, get: obj => obj.imageUrl, set: (obj, value) => { obj.imageUrl = value; } }, metadata: _metadata }, _imageUrl_initializers, _imageUrl_extraInitializers);
__esDecorate(this, null, _selectedRegistry_decorators, { kind: "accessor", name: "selectedRegistry", static: false, private: false, access: { has: obj => "selectedRegistry" in obj, get: obj => obj.selectedRegistry, set: (obj, value) => { obj.selectedRegistry = value; } }, metadata: _metadata }, _selectedRegistry_initializers, _selectedRegistry_extraInitializers);
__esDecorate(this, null, _ports_decorators, { kind: "accessor", name: "ports", static: false, private: false, access: { has: obj => "ports" in obj, get: obj => obj.ports, set: (obj, value) => { obj.ports = value; } }, metadata: _metadata }, _ports_initializers, _ports_extraInitializers);
__esDecorate(this, null, _envVars_decorators, { kind: "accessor", name: "envVars", static: false, private: false, access: { has: obj => "envVars" in obj, get: obj => obj.envVars, set: (obj, value) => { obj.envVars = value; } }, metadata: _metadata }, _envVars_initializers, _envVars_extraInitializers);
__esDecorate(this, null, _volumes_decorators, { kind: "accessor", name: "volumes", static: false, private: false, access: { has: obj => "volumes" in obj, get: obj => obj.volumes, set: (obj, value) => { obj.volumes = value; } }, metadata: _metadata }, _volumes_initializers, _volumes_extraInitializers);
__esDecorate(this, null, _cpuLimit_decorators, { kind: "accessor", name: "cpuLimit", static: false, private: false, access: { has: obj => "cpuLimit" in obj, get: obj => obj.cpuLimit, set: (obj, value) => { obj.cpuLimit = value; } }, metadata: _metadata }, _cpuLimit_initializers, _cpuLimit_extraInitializers);
__esDecorate(this, null, _memoryLimit_decorators, { kind: "accessor", name: "memoryLimit", static: false, private: false, access: { has: obj => "memoryLimit" in obj, get: obj => obj.memoryLimit, set: (obj, value) => { obj.memoryLimit = value; } }, metadata: _metadata }, _memoryLimit_initializers, _memoryLimit_extraInitializers);
__esDecorate(this, null, _restartPolicy_decorators, { kind: "accessor", name: "restartPolicy", static: false, private: false, access: { has: obj => "restartPolicy" in obj, get: obj => obj.restartPolicy, set: (obj, value) => { obj.restartPolicy = value; } }, metadata: _metadata }, _restartPolicy_initializers, _restartPolicy_extraInitializers);
__esDecorate(this, null, _networkMode_decorators, { kind: "accessor", name: "networkMode", static: false, private: false, access: { has: obj => "networkMode" in obj, get: obj => obj.networkMode, set: (obj, value) => { obj.networkMode = value; } }, metadata: _metadata }, _networkMode_initializers, _networkMode_extraInitializers);
__esDecorate(this, null, _showAdvanced_decorators, { kind: "accessor", name: "showAdvanced", static: false, private: false, access: { has: obj => "showAdvanced" in obj, get: obj => obj.showAdvanced, set: (obj, value) => { obj.showAdvanced = value; } }, metadata: _metadata }, _showAdvanced_initializers, _showAdvanced_extraInitializers);
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
SzServiceCreateView = _classThis = _classDescriptor.value;
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
}
static demo = () => html `
`;
#registries_accessor_storage = __runInitializers(this, _registries_initializers, []);
get registries() { return this.#registries_accessor_storage; }
set registries(value) { this.#registries_accessor_storage = value; }
#loading_accessor_storage = (__runInitializers(this, _registries_extraInitializers), __runInitializers(this, _loading_initializers, false));
get loading() { return this.#loading_accessor_storage; }
set loading(value) { this.#loading_accessor_storage = value; }
#serviceName_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _serviceName_initializers, ''));
get serviceName() { return this.#serviceName_accessor_storage; }
set serviceName(value) { this.#serviceName_accessor_storage = value; }
#imageUrl_accessor_storage = (__runInitializers(this, _serviceName_extraInitializers), __runInitializers(this, _imageUrl_initializers, ''));
get imageUrl() { return this.#imageUrl_accessor_storage; }
set imageUrl(value) { this.#imageUrl_accessor_storage = value; }
#selectedRegistry_accessor_storage = (__runInitializers(this, _imageUrl_extraInitializers), __runInitializers(this, _selectedRegistry_initializers, ''));
get selectedRegistry() { return this.#selectedRegistry_accessor_storage; }
set selectedRegistry(value) { this.#selectedRegistry_accessor_storage = value; }
#ports_accessor_storage = (__runInitializers(this, _selectedRegistry_extraInitializers), __runInitializers(this, _ports_initializers, [{ hostPort: '', containerPort: '', protocol: 'tcp' }]));
get ports() { return this.#ports_accessor_storage; }
set ports(value) { this.#ports_accessor_storage = value; }
#envVars_accessor_storage = (__runInitializers(this, _ports_extraInitializers), __runInitializers(this, _envVars_initializers, [{ key: '', value: '' }]));
get envVars() { return this.#envVars_accessor_storage; }
set envVars(value) { this.#envVars_accessor_storage = value; }
#volumes_accessor_storage = (__runInitializers(this, _envVars_extraInitializers), __runInitializers(this, _volumes_initializers, []));
get volumes() { return this.#volumes_accessor_storage; }
set volumes(value) { this.#volumes_accessor_storage = value; }
#cpuLimit_accessor_storage = (__runInitializers(this, _volumes_extraInitializers), __runInitializers(this, _cpuLimit_initializers, ''));
get cpuLimit() { return this.#cpuLimit_accessor_storage; }
set cpuLimit(value) { this.#cpuLimit_accessor_storage = value; }
#memoryLimit_accessor_storage = (__runInitializers(this, _cpuLimit_extraInitializers), __runInitializers(this, _memoryLimit_initializers, ''));
get memoryLimit() { return this.#memoryLimit_accessor_storage; }
set memoryLimit(value) { this.#memoryLimit_accessor_storage = value; }
#restartPolicy_accessor_storage = (__runInitializers(this, _memoryLimit_extraInitializers), __runInitializers(this, _restartPolicy_initializers, 'always'));
get restartPolicy() { return this.#restartPolicy_accessor_storage; }
set restartPolicy(value) { this.#restartPolicy_accessor_storage = value; }
#networkMode_accessor_storage = (__runInitializers(this, _restartPolicy_extraInitializers), __runInitializers(this, _networkMode_initializers, 'bridge'));
get networkMode() { return this.#networkMode_accessor_storage; }
set networkMode(value) { this.#networkMode_accessor_storage = value; }
#showAdvanced_accessor_storage = (__runInitializers(this, _networkMode_extraInitializers), __runInitializers(this, _showAdvanced_initializers, false));
get showAdvanced() { return this.#showAdvanced_accessor_storage; }
set showAdvanced(value) { this.#showAdvanced_accessor_storage = value; }
static styles = [
cssManager.defaultStyles,
css `
:host {
display: block;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24px;
}
.header-title {
font-size: 20px;
font-weight: 600;
color: ${cssManager.bdTheme('#18181b', '#fafafa')};
}
.header-subtitle {
font-size: 14px;
color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
margin-top: 4px;
}
.section {
background: ${cssManager.bdTheme('#ffffff', '#09090b')};
border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
border-radius: 8px;
padding: 20px;
margin-bottom: 16px;
}
.section-title {
font-size: 15px;
font-weight: 600;
color: ${cssManager.bdTheme('#18181b', '#fafafa')};
margin-bottom: 16px;
display: flex;
align-items: center;
gap: 8px;
}
.section-title svg {
width: 18px;
height: 18px;
color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
margin-bottom: 16px;
}
.form-row.single {
grid-template-columns: 1fr;
}
.form-group {
display: flex;
flex-direction: column;
gap: 6px;
}
.form-label {
font-size: 13px;
font-weight: 500;
color: ${cssManager.bdTheme('#18181b', '#fafafa')};
}
.form-label .required {
color: ${cssManager.bdTheme('#ef4444', '#f87171')};
}
.form-hint {
font-size: 12px;
color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
}
.form-input,
.form-select {
width: 100%;
padding: 10px 12px;
background: ${cssManager.bdTheme('#ffffff', '#18181b')};
border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
border-radius: 6px;
font-size: 14px;
color: ${cssManager.bdTheme('#18181b', '#fafafa')};
outline: none;
transition: border-color 200ms ease;
box-sizing: border-box;
}
.form-input:focus,
.form-select:focus {
border-color: ${cssManager.bdTheme('#3b82f6', '#60a5fa')};
}
.form-input::placeholder {
color: ${cssManager.bdTheme('#a1a1aa', '#52525b')};
}
.form-select {
cursor: pointer;
}
.dynamic-list {
display: flex;
flex-direction: column;
gap: 8px;
}
.dynamic-row {
display: flex;
gap: 8px;
align-items: flex-start;
}
.dynamic-row .form-input {
flex: 1;
}
.dynamic-row .form-select {
width: 80px;
flex-shrink: 0;
}
.remove-button {
padding: 10px;
background: transparent;
border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
border-radius: 6px;
color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
cursor: pointer;
transition: all 200ms ease;
flex-shrink: 0;
}
.remove-button:hover {
background: ${cssManager.bdTheme('#fee2e2', 'rgba(239, 68, 68, 0.2)')};
border-color: ${cssManager.bdTheme('#fecaca', 'rgba(239, 68, 68, 0.3)')};
color: ${cssManager.bdTheme('#dc2626', '#ef4444')};
}
.add-button {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 8px 12px;
background: transparent;
border: 1px dashed ${cssManager.bdTheme('#e4e4e7', '#27272a')};
border-radius: 6px;
font-size: 13px;
color: ${cssManager.bdTheme('#71717a', '#a1a1aa')};
cursor: pointer;
transition: all 200ms ease;
margin-top: 8px;
}
.add-button:hover {
background: ${cssManager.bdTheme('#f4f4f5', '#18181b')};
border-color: ${cssManager.bdTheme('#a1a1aa', '#52525b')};
color: ${cssManager.bdTheme('#18181b', '#fafafa')};
}
.add-button svg {
width: 14px;
height: 14px;
}
.toggle-advanced {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 0;
font-size: 14px;
font-weight: 500;
color: ${cssManager.bdTheme('#3b82f6', '#60a5fa')};
cursor: pointer;
background: none;
border: none;
}
.toggle-advanced svg {
width: 16px;
height: 16px;
transition: transform 200ms ease;
}
.toggle-advanced.open svg {
transform: rotate(180deg);
}
.checkbox-row {
display: flex;
align-items: center;
gap: 8px;
}
.checkbox {
width: 18px;
height: 18px;
accent-color: ${cssManager.bdTheme('#3b82f6', '#60a5fa')};
}
.actions {
display: flex;
justify-content: flex-end;
gap: 12px;
padding-top: 16px;
border-top: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
margin-top: 8px;
}
.button {
padding: 10px 20px;
border-radius: 6px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 200ms ease;
display: inline-flex;
align-items: center;
gap: 8px;
}
.button.secondary {
background: ${cssManager.bdTheme('#ffffff', '#09090b')};
border: 1px solid ${cssManager.bdTheme('#e4e4e7', '#27272a')};
color: ${cssManager.bdTheme('#18181b', '#fafafa')};
}
.button.secondary:hover {
background: ${cssManager.bdTheme('#f4f4f5', '#18181b')};
}
.button.primary {
background: ${cssManager.bdTheme('#18181b', '#fafafa')};
border: none;
color: ${cssManager.bdTheme('#fafafa', '#18181b')};
}
.button.primary:hover:not(:disabled) {
opacity: 0.9;
}
.button.primary:disabled {
opacity: 0.6;
cursor: not-allowed;
}
.spinner {
width: 16px;
height: 16px;
border: 2px solid transparent;
border-top-color: currentColor;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
`,
];
render() {
return html `
${this.showAdvanced ? html `
${this.volumes.length === 0 ? html `
No volumes configured
` : this.volumes.map((vol, index) => html `
`)}
` : ''}
`;
}
isValid() {
return this.serviceName.trim() !== '' && this.imageUrl.trim() !== '';
}
addPort() {
this.ports = [...this.ports, { hostPort: '', containerPort: '', protocol: 'tcp' }];
}
removePort(index) {
this.ports = this.ports.filter((_, i) => i !== index);
}
updatePort(index, field, value) {
const newPorts = [...this.ports];
newPorts[index][field] = value;
this.ports = newPorts;
}
addEnvVar() {
this.envVars = [...this.envVars, { key: '', value: '' }];
}
removeEnvVar(index) {
this.envVars = this.envVars.filter((_, i) => i !== index);
}
updateEnvVar(index, field, value) {
const newEnvVars = [...this.envVars];
newEnvVars[index][field] = value;
this.envVars = newEnvVars;
}
addVolume() {
this.volumes = [...this.volumes, { hostPath: '', containerPath: '', readOnly: false }];
}
removeVolume(index) {
this.volumes = this.volumes.filter((_, i) => i !== index);
}
updateVolume(index, field, value) {
const newVolumes = [...this.volumes];
newVolumes[index][field] = value;
this.volumes = newVolumes;
}
handleCancel() {
this.dispatchEvent(new CustomEvent('cancel', { bubbles: true, composed: true }));
}
handleCreate() {
const config = {
name: this.serviceName.trim(),
image: this.imageUrl.trim(),
ports: this.ports.filter(p => p.hostPort && p.containerPort),
envVars: this.envVars.filter(e => e.key),
volumes: this.volumes.filter(v => v.hostPath && v.containerPath),
cpuLimit: this.cpuLimit,
memoryLimit: this.memoryLimit,
restartPolicy: this.restartPolicy,
networkMode: this.networkMode,
};
this.dispatchEvent(new CustomEvent('create-service', {
detail: config,
bubbles: true,
composed: true,
}));
}
reset() {
this.serviceName = '';
this.imageUrl = '';
this.selectedRegistry = '';
this.ports = [{ hostPort: '', containerPort: '', protocol: 'tcp' }];
this.envVars = [{ key: '', value: '' }];
this.volumes = [];
this.cpuLimit = '';
this.memoryLimit = '';
this.restartPolicy = 'always';
this.networkMode = 'bridge';
this.showAdvanced = false;
}
constructor() {
super(...arguments);
__runInitializers(this, _showAdvanced_extraInitializers);
}
static {
__runInitializers(_classThis, _classExtraInitializers);
}
};
return SzServiceCreateView = _classThis;
})();
export { SzServiceCreateView };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3otc2VydmljZS1jcmVhdGUtdmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9zei1zZXJ2aWNlLWNyZWF0ZS12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLGFBQWEsRUFDYixJQUFJLEVBQ0osR0FBRyxFQUNILFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxHQUVOLE1BQU0sNkJBQTZCLENBQUM7SUE0Q3hCLG1CQUFtQjs0QkFEL0IsYUFBYSxDQUFDLHdCQUF3QixDQUFDOzs7O3NCQUNDLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUNBQW5CLFNBQVEsV0FBVzs7OztzQ0FZakQsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO21DQUd6QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7dUNBRzNCLEtBQUssRUFBRTtvQ0FHUCxLQUFLLEVBQUU7NENBR1AsS0FBSyxFQUFFO2lDQUdQLEtBQUssRUFBRTttQ0FHUCxLQUFLLEVBQUU7bUNBR1AsS0FBSyxFQUFFO29DQUdQLEtBQUssRUFBRTt1Q0FHUCxLQUFLLEVBQUU7eUNBR1AsS0FBSyxFQUFFO3VDQUdQLEtBQUssRUFBRTt3Q0FHUCxLQUFLLEVBQUU7WUFuQ1IsbUxBQWdCLFVBQVUsNkJBQVYsVUFBVSwrRkFBbUI7WUFHN0MsMEtBQWdCLE9BQU8sNkJBQVAsT0FBTyx5RkFBa0I7WUFHekMsc0xBQWlCLFdBQVcsNkJBQVgsV0FBVyxpR0FBYztZQUcxQyw2S0FBaUIsUUFBUSw2QkFBUixRQUFRLDJGQUFjO1lBR3ZDLHFNQUFpQixnQkFBZ0IsNkJBQWhCLGdCQUFnQiwyR0FBYztZQUcvQyxvS0FBaUIsS0FBSyw2QkFBTCxLQUFLLHFGQUEwRTtZQUdoRywwS0FB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