aiservermanager 0.3.0 → 0.3.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.
@@ -11,5 +11,5 @@
11
11
  <style>html{--mat-sys-on-surface:initial}html{--mat-app-background-color:#fafafa;--mat-app-text-color:rgba(0, 0, 0, .87);--mat-app-elevation-shadow-level-0:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-1:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-2:0px 3px 1px -2px rgba(0, 0, 0, .2), 0px 2px 2px 0px rgba(0, 0, 0, .14), 0px 1px 5px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-3:0px 3px 3px -2px rgba(0, 0, 0, .2), 0px 3px 4px 0px rgba(0, 0, 0, .14), 0px 1px 8px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-4:0px 2px 4px -1px rgba(0, 0, 0, .2), 0px 4px 5px 0px rgba(0, 0, 0, .14), 0px 1px 10px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-5:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 5px 8px 0px rgba(0, 0, 0, .14), 0px 1px 14px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-6:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-7:0px 4px 5px -2px rgba(0, 0, 0, .2), 0px 7px 10px 1px rgba(0, 0, 0, .14), 0px 2px 16px 1px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-8:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-9:0px 5px 6px -3px rgba(0, 0, 0, .2), 0px 9px 12px 1px rgba(0, 0, 0, .14), 0px 3px 16px 2px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-10:0px 6px 6px -3px rgba(0, 0, 0, .2), 0px 10px 14px 1px rgba(0, 0, 0, .14), 0px 4px 18px 3px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-11:0px 6px 7px -4px rgba(0, 0, 0, .2), 0px 11px 15px 1px rgba(0, 0, 0, .14), 0px 4px 20px 3px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-12:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-13:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 13px 19px 2px rgba(0, 0, 0, .14), 0px 5px 24px 4px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-14:0px 7px 9px -4px rgba(0, 0, 0, .2), 0px 14px 21px 2px rgba(0, 0, 0, .14), 0px 5px 26px 4px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-15:0px 8px 9px -5px rgba(0, 0, 0, .2), 0px 15px 22px 2px rgba(0, 0, 0, .14), 0px 6px 28px 5px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-16:0px 8px 10px -5px rgba(0, 0, 0, .2), 0px 16px 24px 2px rgba(0, 0, 0, .14), 0px 6px 30px 5px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-17:0px 8px 11px -5px rgba(0, 0, 0, .2), 0px 17px 26px 2px rgba(0, 0, 0, .14), 0px 6px 32px 5px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-18:0px 9px 11px -5px rgba(0, 0, 0, .2), 0px 18px 28px 2px rgba(0, 0, 0, .14), 0px 7px 34px 6px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-19:0px 9px 12px -6px rgba(0, 0, 0, .2), 0px 19px 29px 2px rgba(0, 0, 0, .14), 0px 7px 36px 6px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-20:0px 10px 13px -6px rgba(0, 0, 0, .2), 0px 20px 31px 3px rgba(0, 0, 0, .14), 0px 8px 38px 7px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-21:0px 10px 13px -6px rgba(0, 0, 0, .2), 0px 21px 33px 3px rgba(0, 0, 0, .14), 0px 8px 40px 7px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-22:0px 10px 14px -6px rgba(0, 0, 0, .2), 0px 22px 35px 3px rgba(0, 0, 0, .14), 0px 8px 42px 7px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-23:0px 11px 14px -7px rgba(0, 0, 0, .2), 0px 23px 36px 3px rgba(0, 0, 0, .14), 0px 9px 44px 8px rgba(0, 0, 0, .12);--mat-app-elevation-shadow-level-24:0px 11px 15px -7px rgba(0, 0, 0, .2), 0px 24px 38px 3px rgba(0, 0, 0, .14), 0px 9px 46px 8px rgba(0, 0, 0, .12)}html{--mat-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent)}html{--mat-option-selected-state-label-text-color:#3f51b5;--mat-option-label-text-color:rgba(0, 0, 0, .87);--mat-option-hover-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 4%, transparent);--mat-option-focus-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-option-selected-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent)}html{--mat-optgroup-label-text-color:rgba(0, 0, 0, .87)}html{--mat-pseudo-checkbox-full-selected-icon-color:#ff4081;--mat-pseudo-checkbox-full-selected-checkmark-color:#fafafa;--mat-pseudo-checkbox-full-unselected-icon-color:rgba(0, 0, 0, .54);--mat-pseudo-checkbox-full-disabled-selected-checkmark-color:#fafafa;--mat-pseudo-checkbox-full-disabled-unselected-icon-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-pseudo-checkbox-full-disabled-selected-icon-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-pseudo-checkbox-minimal-selected-checkmark-color:#ff4081;--mat-pseudo-checkbox-minimal-disabled-selected-checkmark-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent)}html{--mat-option-label-text-font:Roboto, sans-serif;--mat-option-label-text-line-height:24px;--mat-option-label-text-size:16px;--mat-option-label-text-tracking:.03125em;--mat-option-label-text-weight:400}html{--mat-optgroup-label-text-font:Roboto, sans-serif;--mat-optgroup-label-text-line-height:24px;--mat-optgroup-label-text-size:16px;--mat-optgroup-label-text-tracking:.03125em;--mat-optgroup-label-text-weight:400}html{--mat-card-elevated-container-shape:4px;--mat-card-outlined-container-shape:4px;--mat-card-filled-container-shape:4px;--mat-card-outlined-outline-width:1px}html{--mat-card-elevated-container-color:white;--mat-card-elevated-container-elevation:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-card-outlined-container-color:white;--mat-card-outlined-container-elevation:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-card-outlined-outline-color:rgba(0, 0, 0, .12);--mat-card-subtitle-text-color:rgba(0, 0, 0, .54);--mat-card-filled-container-color:white;--mat-card-filled-container-elevation:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12)}html{--mat-card-title-text-font:Roboto, sans-serif;--mat-card-title-text-line-height:32px;--mat-card-title-text-size:20px;--mat-card-title-text-tracking:.0125em;--mat-card-title-text-weight:500;--mat-card-subtitle-text-font:Roboto, sans-serif;--mat-card-subtitle-text-line-height:22px;--mat-card-subtitle-text-size:14px;--mat-card-subtitle-text-tracking:.0071428571em;--mat-card-subtitle-text-weight:500}html{--mat-progress-bar-active-indicator-height:4px;--mat-progress-bar-track-height:4px;--mat-progress-bar-track-shape:0}html{--mat-tooltip-container-shape:4px;--mat-tooltip-supporting-text-line-height:16px}html{--mat-tooltip-container-color:#424242;--mat-tooltip-supporting-text-color:white}html{--mat-tooltip-supporting-text-font:Roboto, sans-serif;--mat-tooltip-supporting-text-size:12px;--mat-tooltip-supporting-text-weight:400;--mat-tooltip-supporting-text-tracking:.0333333333em}html{--mat-form-field-filled-active-indicator-height:1px;--mat-form-field-filled-focus-active-indicator-height:2px;--mat-form-field-filled-container-shape:4px;--mat-form-field-outlined-outline-width:1px;--mat-form-field-outlined-focus-outline-width:2px;--mat-form-field-outlined-container-shape:4px}html{--mat-form-field-focus-select-arrow-color:color-mix(in srgb, #3f51b5 87%, transparent);--mat-form-field-filled-caret-color:#3f51b5;--mat-form-field-filled-focus-active-indicator-color:#3f51b5;--mat-form-field-filled-focus-label-text-color:color-mix(in srgb, #3f51b5 87%, transparent);--mat-form-field-outlined-caret-color:#3f51b5;--mat-form-field-outlined-focus-outline-color:#3f51b5;--mat-form-field-outlined-focus-label-text-color:color-mix(in srgb, #3f51b5 87%, transparent);--mat-form-field-disabled-input-text-placeholder-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-form-field-state-layer-color:rgba(0, 0, 0, .87);--mat-form-field-error-text-color:#f44336;--mat-form-field-select-option-text-color:inherit;--mat-form-field-select-disabled-option-text-color:GrayText;--mat-form-field-leading-icon-color:unset;--mat-form-field-disabled-leading-icon-color:unset;--mat-form-field-trailing-icon-color:unset;--mat-form-field-disabled-trailing-icon-color:unset;--mat-form-field-error-focus-trailing-icon-color:unset;--mat-form-field-error-hover-trailing-icon-color:unset;--mat-form-field-error-trailing-icon-color:unset;--mat-form-field-enabled-select-arrow-color:rgba(0, 0, 0, .54);--mat-form-field-disabled-select-arrow-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-form-field-hover-state-layer-opacity:.04;--mat-form-field-focus-state-layer-opacity:.12;--mat-form-field-filled-container-color:#f6f6f6;--mat-form-field-filled-disabled-container-color:color-mix(in srgb, rgba(0, 0, 0, .87) 4%, transparent);--mat-form-field-filled-label-text-color:rgba(0, 0, 0, .54);--mat-form-field-filled-hover-label-text-color:rgba(0, 0, 0, .54);--mat-form-field-filled-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-form-field-filled-input-text-color:rgba(0, 0, 0, .87);--mat-form-field-filled-disabled-input-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-form-field-filled-input-text-placeholder-color:rgba(0, 0, 0, .54);--mat-form-field-filled-error-hover-label-text-color:#f44336;--mat-form-field-filled-error-focus-label-text-color:#f44336;--mat-form-field-filled-error-label-text-color:#f44336;--mat-form-field-filled-error-caret-color:#f44336;--mat-form-field-filled-active-indicator-color:rgba(0, 0, 0, .54);--mat-form-field-filled-disabled-active-indicator-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-form-field-filled-hover-active-indicator-color:rgba(0, 0, 0, .87);--mat-form-field-filled-error-active-indicator-color:#f44336;--mat-form-field-filled-error-focus-active-indicator-color:#f44336;--mat-form-field-filled-error-hover-active-indicator-color:#f44336;--mat-form-field-outlined-label-text-color:rgba(0, 0, 0, .54);--mat-form-field-outlined-hover-label-text-color:rgba(0, 0, 0, .87);--mat-form-field-outlined-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-form-field-outlined-input-text-color:rgba(0, 0, 0, .87);--mat-form-field-outlined-disabled-input-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-form-field-outlined-input-text-placeholder-color:rgba(0, 0, 0, .54);--mat-form-field-outlined-error-caret-color:#f44336;--mat-form-field-outlined-error-focus-label-text-color:#f44336;--mat-form-field-outlined-error-label-text-color:#f44336;--mat-form-field-outlined-error-hover-label-text-color:#f44336;--mat-form-field-outlined-outline-color:rgba(0, 0, 0, .38);--mat-form-field-outlined-disabled-outline-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-form-field-outlined-hover-outline-color:rgba(0, 0, 0, .87);--mat-form-field-outlined-error-focus-outline-color:#f44336;--mat-form-field-outlined-error-hover-outline-color:#f44336;--mat-form-field-outlined-error-outline-color:#f44336}html{--mat-form-field-container-height:56px;--mat-form-field-filled-label-display:block;--mat-form-field-container-vertical-padding:16px;--mat-form-field-filled-with-label-container-padding-top:24px;--mat-form-field-filled-with-label-container-padding-bottom:8px}html{--mat-form-field-container-text-font:Roboto, sans-serif;--mat-form-field-container-text-line-height:24px;--mat-form-field-container-text-size:16px;--mat-form-field-container-text-tracking:.03125em;--mat-form-field-container-text-weight:400;--mat-form-field-outlined-label-text-populated-size:16px;--mat-form-field-subscript-text-font:Roboto, sans-serif;--mat-form-field-subscript-text-line-height:20px;--mat-form-field-subscript-text-size:12px;--mat-form-field-subscript-text-tracking:.0333333333em;--mat-form-field-subscript-text-weight:400;--mat-form-field-filled-label-text-font:Roboto, sans-serif;--mat-form-field-filled-label-text-size:16px;--mat-form-field-filled-label-text-tracking:.03125em;--mat-form-field-filled-label-text-weight:400;--mat-form-field-outlined-label-text-font:Roboto, sans-serif;--mat-form-field-outlined-label-text-size:16px;--mat-form-field-outlined-label-text-tracking:.03125em;--mat-form-field-outlined-label-text-weight:400}html{--mat-select-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12)}html{--mat-select-panel-background-color:white;--mat-select-enabled-trigger-text-color:rgba(0, 0, 0, .87);--mat-select-disabled-trigger-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-select-placeholder-text-color:rgba(0, 0, 0, .54);--mat-select-enabled-arrow-color:rgba(0, 0, 0, .54);--mat-select-disabled-arrow-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-select-focused-arrow-color:#3f51b5;--mat-select-invalid-arrow-color:#f44336}html{--mat-select-arrow-transform:translateY(-8px)}html{--mat-select-trigger-text-font:Roboto, sans-serif;--mat-select-trigger-text-line-height:24px;--mat-select-trigger-text-size:16px;--mat-select-trigger-text-tracking:.03125em;--mat-select-trigger-text-weight:400}html{--mat-autocomplete-container-shape:4px;--mat-autocomplete-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12)}html{--mat-autocomplete-background-color:white}html{--mat-dialog-container-shape:4px;--mat-dialog-container-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, .2), 0px 24px 38px 3px rgba(0, 0, 0, .14), 0px 9px 46px 8px rgba(0, 0, 0, .12);--mat-dialog-container-max-width:80vw;--mat-dialog-container-small-max-width:80vw;--mat-dialog-container-min-width:0;--mat-dialog-actions-alignment:start;--mat-dialog-actions-padding:8px;--mat-dialog-content-padding:20px 24px;--mat-dialog-with-actions-content-padding:20px 24px;--mat-dialog-headline-padding:0 24px 9px}html{--mat-dialog-container-color:white;--mat-dialog-subhead-color:rgba(0, 0, 0, .87);--mat-dialog-supporting-text-color:rgba(0, 0, 0, .54)}html{--mat-dialog-subhead-font:Roboto, sans-serif;--mat-dialog-subhead-line-height:32px;--mat-dialog-subhead-size:20px;--mat-dialog-subhead-weight:500;--mat-dialog-subhead-tracking:.0125em;--mat-dialog-supporting-text-font:Roboto, sans-serif;--mat-dialog-supporting-text-line-height:24px;--mat-dialog-supporting-text-size:16px;--mat-dialog-supporting-text-weight:400;--mat-dialog-supporting-text-tracking:.03125em}html{--mat-slide-toggle-disabled-handle-opacity:.38;--mat-slide-toggle-disabled-selected-handle-opacity:.38;--mat-slide-toggle-disabled-selected-icon-opacity:.38;--mat-slide-toggle-disabled-track-opacity:.12;--mat-slide-toggle-disabled-unselected-handle-opacity:.38;--mat-slide-toggle-disabled-unselected-icon-opacity:.38;--mat-slide-toggle-disabled-unselected-track-outline-color:transparent;--mat-slide-toggle-disabled-unselected-track-outline-width:1px;--mat-slide-toggle-handle-height:20px;--mat-slide-toggle-handle-shape:10px;--mat-slide-toggle-handle-width:20px;--mat-slide-toggle-hidden-track-opacity:1;--mat-slide-toggle-hidden-track-transition:transform 75ms 0ms cubic-bezier(.4, 0, .6, 1);--mat-slide-toggle-pressed-handle-size:20px;--mat-slide-toggle-selected-focus-state-layer-opacity:.12;--mat-slide-toggle-selected-handle-horizontal-margin:0;--mat-slide-toggle-selected-handle-size:20px;--mat-slide-toggle-selected-hover-state-layer-opacity:.04;--mat-slide-toggle-selected-icon-size:18px;--mat-slide-toggle-selected-pressed-handle-horizontal-margin:0;--mat-slide-toggle-selected-pressed-state-layer-opacity:.12;--mat-slide-toggle-selected-track-outline-color:transparent;--mat-slide-toggle-selected-track-outline-width:1px;--mat-slide-toggle-selected-with-icon-handle-horizontal-margin:0;--mat-slide-toggle-track-height:14px;--mat-slide-toggle-track-outline-color:transparent;--mat-slide-toggle-track-outline-width:1px;--mat-slide-toggle-track-shape:7px;--mat-slide-toggle-track-width:36px;--mat-slide-toggle-unselected-focus-state-layer-opacity:.12;--mat-slide-toggle-unselected-handle-horizontal-margin:0;--mat-slide-toggle-unselected-handle-size:20px;--mat-slide-toggle-unselected-hover-state-layer-opacity:.12;--mat-slide-toggle-unselected-icon-size:18px;--mat-slide-toggle-unselected-pressed-handle-horizontal-margin:0;--mat-slide-toggle-unselected-pressed-state-layer-opacity:.1;--mat-slide-toggle-unselected-with-icon-handle-horizontal-margin:0;--mat-slide-toggle-visible-track-opacity:1;--mat-slide-toggle-visible-track-transition:transform 75ms 0ms cubic-bezier(0, 0, .2, 1);--mat-slide-toggle-with-icon-handle-size:20px;--mat-slide-toggle-touch-target-size:48px}html{--mat-slide-toggle-selected-icon-color:white;--mat-slide-toggle-disabled-selected-icon-color:white;--mat-slide-toggle-selected-focus-state-layer-color:#3f51b5;--mat-slide-toggle-selected-handle-color:#3f51b5;--mat-slide-toggle-selected-hover-state-layer-color:#3f51b5;--mat-slide-toggle-selected-pressed-state-layer-color:#3f51b5;--mat-slide-toggle-selected-focus-handle-color:#3f51b5;--mat-slide-toggle-selected-hover-handle-color:#3f51b5;--mat-slide-toggle-selected-pressed-handle-color:#3f51b5;--mat-slide-toggle-selected-focus-track-color:#7986cb;--mat-slide-toggle-selected-hover-track-color:#7986cb;--mat-slide-toggle-selected-pressed-track-color:#7986cb;--mat-slide-toggle-selected-track-color:#7986cb;--mat-slide-toggle-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-slide-toggle-disabled-handle-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-slide-toggle-disabled-selected-handle-color:rgba(0, 0, 0, .87);--mat-slide-toggle-disabled-selected-track-color:rgba(0, 0, 0, .87);--mat-slide-toggle-disabled-unselected-handle-color:rgba(0, 0, 0, .87);--mat-slide-toggle-disabled-unselected-icon-color:#f6f6f6;--mat-slide-toggle-disabled-unselected-track-color:rgba(0, 0, 0, .87);--mat-slide-toggle-handle-elevation-shadow:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-slide-toggle-handle-surface-color:white;--mat-slide-toggle-label-text-color:rgba(0, 0, 0, .87);--mat-slide-toggle-unselected-hover-handle-color:#424242;--mat-slide-toggle-unselected-focus-handle-color:#424242;--mat-slide-toggle-unselected-focus-state-layer-color:rgba(0, 0, 0, .87);--mat-slide-toggle-unselected-focus-track-color:rgba(0, 0, 0, .12);--mat-slide-toggle-unselected-icon-color:#f6f6f6;--mat-slide-toggle-unselected-handle-color:rgba(0, 0, 0, .54);--mat-slide-toggle-unselected-hover-state-layer-color:rgba(0, 0, 0, .87);--mat-slide-toggle-unselected-hover-track-color:rgba(0, 0, 0, .12);--mat-slide-toggle-unselected-pressed-handle-color:#424242;--mat-slide-toggle-unselected-pressed-track-color:rgba(0, 0, 0, .12);--mat-slide-toggle-unselected-pressed-state-layer-color:rgba(0, 0, 0, .87);--mat-slide-toggle-unselected-track-color:rgba(0, 0, 0, .12)}html{--mat-slide-toggle-state-layer-size:40px;--mat-slide-toggle-touch-target-display:block}html{--mat-slide-toggle-label-text-font:Roboto, sans-serif;--mat-slide-toggle-label-text-line-height:20px;--mat-slide-toggle-label-text-size:14px;--mat-slide-toggle-label-text-tracking:.0178571429em;--mat-slide-toggle-label-text-weight:400}html{--mat-radio-disabled-selected-icon-opacity:.38;--mat-radio-disabled-unselected-icon-opacity:.38;--mat-radio-state-layer-size:40px;--mat-radio-touch-target-size:48px}html{--mat-radio-state-layer-size:40px;--mat-radio-touch-target-display:block}html{--mat-radio-label-text-font:Roboto, sans-serif;--mat-radio-label-text-line-height:20px;--mat-radio-label-text-size:14px;--mat-radio-label-text-tracking:.0178571429em;--mat-radio-label-text-weight:400}html{--mat-slider-active-track-height:6px;--mat-slider-active-track-shape:9999px;--mat-slider-handle-elevation:0px 2px 1px -1px rgba(0, 0, 0, .2), 0px 1px 1px 0px rgba(0, 0, 0, .14), 0px 1px 3px 0px rgba(0, 0, 0, .12);--mat-slider-handle-height:20px;--mat-slider-handle-shape:50%;--mat-slider-handle-width:20px;--mat-slider-inactive-track-height:4px;--mat-slider-inactive-track-shape:9999px;--mat-slider-value-indicator-border-radius:4px;--mat-slider-value-indicator-caret-display:block;--mat-slider-value-indicator-container-transform:translateX(-50%);--mat-slider-value-indicator-height:32px;--mat-slider-value-indicator-padding:0 12px;--mat-slider-value-indicator-text-transform:none;--mat-slider-value-indicator-width:auto;--mat-slider-with-overlap-handle-outline-width:1px;--mat-slider-with-tick-marks-active-container-opacity:.6;--mat-slider-with-tick-marks-container-shape:50%;--mat-slider-with-tick-marks-container-size:2px;--mat-slider-with-tick-marks-inactive-container-opacity:.6;--mat-slider-value-indicator-transform-origin:bottom}html{--mat-slider-active-track-color:#3f51b5;--mat-slider-focus-handle-color:#3f51b5;--mat-slider-handle-color:#3f51b5;--mat-slider-hover-handle-color:#3f51b5;--mat-slider-focus-state-layer-color:color-mix(in srgb, #3f51b5 12%, transparent);--mat-slider-hover-state-layer-color:color-mix(in srgb, #3f51b5 4%, transparent);--mat-slider-inactive-track-color:#3f51b5;--mat-slider-ripple-color:#3f51b5;--mat-slider-with-tick-marks-active-container-color:white;--mat-slider-with-tick-marks-inactive-container-color:#3f51b5;--mat-slider-disabled-active-track-color:rgba(0, 0, 0, .87);--mat-slider-disabled-handle-color:rgba(0, 0, 0, .87);--mat-slider-disabled-inactive-track-color:rgba(0, 0, 0, .87);--mat-slider-label-container-color:#424242;--mat-slider-label-label-text-color:white;--mat-slider-value-indicator-opacity:1;--mat-slider-with-overlap-handle-outline-color:rgba(0, 0, 0, .87);--mat-slider-with-tick-marks-disabled-container-color:rgba(0, 0, 0, .87)}html{--mat-slider-label-label-text-font:Roboto, sans-serif;--mat-slider-label-label-text-size:14px;--mat-slider-label-label-text-line-height:22px;--mat-slider-label-label-text-tracking:.0071428571em;--mat-slider-label-label-text-weight:500}html{--mat-menu-container-shape:4px;--mat-menu-divider-bottom-spacing:0;--mat-menu-divider-top-spacing:0;--mat-menu-item-spacing:16px;--mat-menu-item-icon-size:24px;--mat-menu-item-leading-spacing:16px;--mat-menu-item-trailing-spacing:16px;--mat-menu-item-with-icon-leading-spacing:16px;--mat-menu-item-with-icon-trailing-spacing:16px;--mat-menu-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12)}html{--mat-menu-item-label-text-color:rgba(0, 0, 0, .87);--mat-menu-item-icon-color:rgba(0, 0, 0, .87);--mat-menu-item-hover-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 4%, transparent);--mat-menu-item-focus-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-menu-container-color:white;--mat-menu-divider-color:rgba(0, 0, 0, .12)}html{--mat-menu-item-label-text-font:Roboto, sans-serif;--mat-menu-item-label-text-size:16px;--mat-menu-item-label-text-tracking:.03125em;--mat-menu-item-label-text-line-height:24px;--mat-menu-item-label-text-weight:400}html{--mat-list-active-indicator-color:transparent;--mat-list-active-indicator-shape:4px;--mat-list-list-item-container-shape:0;--mat-list-list-item-leading-avatar-shape:50%;--mat-list-list-item-container-color:transparent;--mat-list-list-item-selected-container-color:transparent;--mat-list-list-item-leading-avatar-color:transparent;--mat-list-list-item-leading-icon-size:24px;--mat-list-list-item-leading-avatar-size:40px;--mat-list-list-item-trailing-icon-size:24px;--mat-list-list-item-disabled-state-layer-color:transparent;--mat-list-list-item-disabled-state-layer-opacity:0;--mat-list-list-item-disabled-label-text-opacity:.38;--mat-list-list-item-disabled-leading-icon-opacity:.38;--mat-list-list-item-disabled-trailing-icon-opacity:.38}html{--mat-list-list-item-label-text-color:rgba(0, 0, 0, .87);--mat-list-list-item-supporting-text-color:rgba(0, 0, 0, .54);--mat-list-list-item-leading-icon-color:rgba(0, 0, 0, .54);--mat-list-list-item-trailing-supporting-text-color:rgba(0, 0, 0, .54);--mat-list-list-item-trailing-icon-color:rgba(0, 0, 0, .54);--mat-list-list-item-selected-trailing-icon-color:rgba(0, 0, 0, .54);--mat-list-list-item-disabled-label-text-color:rgba(0, 0, 0, .87);--mat-list-list-item-disabled-leading-icon-color:rgba(0, 0, 0, .87);--mat-list-list-item-disabled-trailing-icon-color:rgba(0, 0, 0, .87);--mat-list-list-item-hover-label-text-color:rgba(0, 0, 0, .87);--mat-list-list-item-hover-leading-icon-color:rgba(0, 0, 0, .54);--mat-list-list-item-hover-state-layer-color:rgba(0, 0, 0, .87);--mat-list-list-item-hover-state-layer-opacity:.04;--mat-list-list-item-hover-trailing-icon-color:rgba(0, 0, 0, .54);--mat-list-list-item-focus-label-text-color:rgba(0, 0, 0, .87);--mat-list-list-item-focus-state-layer-color:rgba(0, 0, 0, .87);--mat-list-list-item-focus-state-layer-opacity:.12}html{--mat-list-list-item-leading-icon-start-space:16px;--mat-list-list-item-leading-icon-end-space:32px;--mat-list-list-item-one-line-container-height:48px;--mat-list-list-item-two-line-container-height:64px;--mat-list-list-item-three-line-container-height:88px}html{--mat-list-list-item-label-text-font:Roboto, sans-serif;--mat-list-list-item-label-text-line-height:24px;--mat-list-list-item-label-text-size:16px;--mat-list-list-item-label-text-tracking:.03125em;--mat-list-list-item-label-text-weight:400;--mat-list-list-item-supporting-text-font:Roboto, sans-serif;--mat-list-list-item-supporting-text-line-height:20px;--mat-list-list-item-supporting-text-size:14px;--mat-list-list-item-supporting-text-tracking:.0178571429em;--mat-list-list-item-supporting-text-weight:400;--mat-list-list-item-trailing-supporting-text-font:Roboto, sans-serif;--mat-list-list-item-trailing-supporting-text-line-height:20px;--mat-list-list-item-trailing-supporting-text-size:12px;--mat-list-list-item-trailing-supporting-text-tracking:.0333333333em;--mat-list-list-item-trailing-supporting-text-weight:400}html{--mat-paginator-page-size-select-width:84px;--mat-paginator-page-size-select-touch-target-height:48px}html{--mat-paginator-container-text-color:rgba(0, 0, 0, .87);--mat-paginator-container-background-color:white;--mat-paginator-enabled-icon-color:rgba(0, 0, 0, .54);--mat-paginator-disabled-icon-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent)}html{--mat-paginator-container-size:56px;--mat-paginator-form-field-container-height:40px;--mat-paginator-form-field-container-vertical-padding:8px;--mat-paginator-touch-target-display:block}html{--mat-paginator-container-text-font:Roboto, sans-serif;--mat-paginator-container-text-line-height:20px;--mat-paginator-container-text-size:12px;--mat-paginator-container-text-tracking:.0333333333em;--mat-paginator-container-text-weight:400;--mat-paginator-select-trigger-text-size:12px}html{--mat-tab-container-height:48px;--mat-tab-divider-color:transparent;--mat-tab-divider-height:0;--mat-tab-active-indicator-height:2px;--mat-tab-active-indicator-shape:0}html{--mat-checkbox-disabled-selected-checkmark-color:white;--mat-checkbox-selected-focus-state-layer-opacity:.12;--mat-checkbox-selected-hover-state-layer-opacity:.04;--mat-checkbox-selected-pressed-state-layer-opacity:.12;--mat-checkbox-unselected-focus-state-layer-opacity:.12;--mat-checkbox-unselected-hover-state-layer-opacity:.04;--mat-checkbox-unselected-pressed-state-layer-opacity:.12;--mat-checkbox-touch-target-size:48px}html{--mat-checkbox-disabled-label-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-checkbox-label-text-color:rgba(0, 0, 0, .87);--mat-checkbox-disabled-selected-icon-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-checkbox-disabled-unselected-icon-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-checkbox-selected-checkmark-color:white;--mat-checkbox-selected-focus-icon-color:#ff4081;--mat-checkbox-selected-hover-icon-color:#ff4081;--mat-checkbox-selected-icon-color:#ff4081;--mat-checkbox-selected-pressed-icon-color:#ff4081;--mat-checkbox-unselected-focus-icon-color:rgba(0, 0, 0, .87);--mat-checkbox-unselected-hover-icon-color:rgba(0, 0, 0, .87);--mat-checkbox-unselected-icon-color:rgba(0, 0, 0, .54);--mat-checkbox-selected-focus-state-layer-color:#ff4081;--mat-checkbox-selected-hover-state-layer-color:#ff4081;--mat-checkbox-selected-pressed-state-layer-color:#ff4081;--mat-checkbox-unselected-focus-state-layer-color:rgba(0, 0, 0, .87);--mat-checkbox-unselected-hover-state-layer-color:rgba(0, 0, 0, .87);--mat-checkbox-unselected-pressed-state-layer-color:rgba(0, 0, 0, .87)}html{--mat-checkbox-touch-target-display:block;--mat-checkbox-state-layer-size:40px}html{--mat-checkbox-label-text-font:Roboto, sans-serif;--mat-checkbox-label-text-line-height:20px;--mat-checkbox-label-text-size:14px;--mat-checkbox-label-text-tracking:.0178571429em;--mat-checkbox-label-text-weight:400}html{--mat-button-filled-container-shape:4px;--mat-button-filled-horizontal-padding:16px;--mat-button-filled-icon-offset:-4px;--mat-button-filled-icon-spacing:8px;--mat-button-filled-touch-target-size:48px;--mat-button-outlined-container-shape:4px;--mat-button-outlined-horizontal-padding:15px;--mat-button-outlined-icon-offset:-4px;--mat-button-outlined-icon-spacing:8px;--mat-button-outlined-keep-touch-target:false;--mat-button-outlined-outline-width:1px;--mat-button-outlined-touch-target-size:48px;--mat-button-protected-container-elevation-shadow:0px 3px 1px -2px rgba(0, 0, 0, .2), 0px 2px 2px 0px rgba(0, 0, 0, .14), 0px 1px 5px 0px rgba(0, 0, 0, .12);--mat-button-protected-container-shape:4px;--mat-button-protected-disabled-container-elevation-shadow:0px 0px 0px 0px rgba(0, 0, 0, .2), 0px 0px 0px 0px rgba(0, 0, 0, .14), 0px 0px 0px 0px rgba(0, 0, 0, .12);--mat-button-protected-focus-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, .2), 0px 4px 5px 0px rgba(0, 0, 0, .14), 0px 1px 10px 0px rgba(0, 0, 0, .12);--mat-button-protected-horizontal-padding:16px;--mat-button-protected-hover-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, .2), 0px 4px 5px 0px rgba(0, 0, 0, .14), 0px 1px 10px 0px rgba(0, 0, 0, .12);--mat-button-protected-icon-offset:-4px;--mat-button-protected-icon-spacing:8px;--mat-button-protected-pressed-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-button-protected-touch-target-size:48px;--mat-button-text-container-shape:4px;--mat-button-text-horizontal-padding:8px;--mat-button-text-icon-offset:0;--mat-button-text-icon-spacing:8px;--mat-button-text-with-icon-horizontal-padding:8px;--mat-button-text-touch-target-size:48px;--mat-button-tonal-container-shape:4px;--mat-button-tonal-horizontal-padding:16px;--mat-button-tonal-icon-offset:-4px;--mat-button-tonal-icon-spacing:8px;--mat-button-tonal-touch-target-size:48px}html{--mat-button-filled-container-color:white;--mat-button-filled-disabled-container-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-filled-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-filled-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-button-filled-focus-state-layer-opacity:.12;--mat-button-filled-hover-state-layer-opacity:.04;--mat-button-filled-label-text-color:rgba(0, 0, 0, .87);--mat-button-filled-pressed-state-layer-opacity:.12;--mat-button-filled-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-filled-state-layer-color:rgba(0, 0, 0, .87);--mat-button-outlined-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-outlined-disabled-outline-color:rgba(0, 0, 0, .12);--mat-button-outlined-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-button-outlined-focus-state-layer-opacity:.12;--mat-button-outlined-hover-state-layer-opacity:.04;--mat-button-outlined-label-text-color:rgba(0, 0, 0, .87);--mat-button-outlined-outline-color:rgba(0, 0, 0, .12);--mat-button-outlined-pressed-state-layer-opacity:.12;--mat-button-outlined-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-outlined-state-layer-color:rgba(0, 0, 0, .87);--mat-button-protected-container-color:white;--mat-button-protected-disabled-container-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-protected-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-protected-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-button-protected-focus-state-layer-opacity:.12;--mat-button-protected-hover-state-layer-opacity:.04;--mat-button-protected-label-text-color:rgba(0, 0, 0, .87);--mat-button-protected-pressed-state-layer-opacity:.12;--mat-button-protected-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-protected-state-layer-color:rgba(0, 0, 0, .87);--mat-button-text-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-text-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-button-text-focus-state-layer-opacity:.12;--mat-button-text-hover-state-layer-opacity:.04;--mat-button-text-label-text-color:rgba(0, 0, 0, .87);--mat-button-text-pressed-state-layer-opacity:.12;--mat-button-text-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-text-state-layer-color:rgba(0, 0, 0, .87);--mat-button-tonal-container-color:white;--mat-button-tonal-disabled-container-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-tonal-disabled-label-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-tonal-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-button-tonal-focus-state-layer-opacity:.12;--mat-button-tonal-hover-state-layer-opacity:.04;--mat-button-tonal-label-text-color:rgba(0, 0, 0, .87);--mat-button-tonal-pressed-state-layer-opacity:.12;--mat-button-tonal-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-tonal-state-layer-color:rgba(0, 0, 0, .87)}html{--mat-button-filled-container-height:36px;--mat-button-filled-touch-target-display:block;--mat-button-outlined-container-height:36px;--mat-button-outlined-touch-target-display:block;--mat-button-protected-container-height:36px;--mat-button-protected-touch-target-display:block;--mat-button-text-container-height:36px;--mat-button-text-touch-target-display:block;--mat-button-tonal-container-height:36px;--mat-button-tonal-touch-target-display:block}html{--mat-button-filled-label-text-font:Roboto, sans-serif;--mat-button-filled-label-text-size:14px;--mat-button-filled-label-text-tracking:.0892857143em;--mat-button-filled-label-text-transform:none;--mat-button-filled-label-text-weight:500;--mat-button-outlined-label-text-font:Roboto, sans-serif;--mat-button-outlined-label-text-size:14px;--mat-button-outlined-label-text-tracking:.0892857143em;--mat-button-outlined-label-text-transform:none;--mat-button-outlined-label-text-weight:500;--mat-button-protected-label-text-font:Roboto, sans-serif;--mat-button-protected-label-text-size:14px;--mat-button-protected-label-text-tracking:.0892857143em;--mat-button-protected-label-text-transform:none;--mat-button-protected-label-text-weight:500;--mat-button-text-label-text-font:Roboto, sans-serif;--mat-button-text-label-text-size:14px;--mat-button-text-label-text-tracking:.0892857143em;--mat-button-text-label-text-transform:none;--mat-button-text-label-text-weight:500;--mat-button-tonal-label-text-font:Roboto, sans-serif;--mat-button-tonal-label-text-size:14px;--mat-button-tonal-label-text-tracking:.0892857143em;--mat-button-tonal-label-text-transform:none;--mat-button-tonal-label-text-weight:500}html{--mat-icon-button-icon-size:24px;--mat-icon-button-container-shape:50%;--mat-icon-button-touch-target-size:48px}html{--mat-icon-button-disabled-icon-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-icon-button-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-icon-button-focus-state-layer-opacity:.12;--mat-icon-button-hover-state-layer-opacity:.04;--mat-icon-button-icon-color:inherit;--mat-icon-button-pressed-state-layer-opacity:.12;--mat-icon-button-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-icon-button-state-layer-color:rgba(0, 0, 0, .87)}html{--mat-icon-button-touch-target-display:block}html{--mat-fab-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-fab-container-shape:50%;--mat-fab-touch-target-size:48px;--mat-fab-extended-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-fab-extended-container-height:48px;--mat-fab-extended-container-shape:24px;--mat-fab-extended-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-fab-extended-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-fab-extended-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-fab-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-fab-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-fab-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12);--mat-fab-small-container-elevation-shadow:0px 3px 5px -1px rgba(0, 0, 0, .2), 0px 6px 10px 0px rgba(0, 0, 0, .14), 0px 1px 18px 0px rgba(0, 0, 0, .12);--mat-fab-small-container-shape:50%;--mat-fab-small-touch-target-size:48px;--mat-fab-small-focus-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-fab-small-hover-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12);--mat-fab-small-pressed-container-elevation-shadow:0px 7px 8px -4px rgba(0, 0, 0, .2), 0px 12px 17px 2px rgba(0, 0, 0, .14), 0px 5px 22px 4px rgba(0, 0, 0, .12)}html{--mat-fab-container-color:white;--mat-fab-disabled-state-container-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-fab-disabled-state-foreground-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-fab-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-fab-focus-state-layer-opacity:.12;--mat-fab-foreground-color:rgba(0, 0, 0, .87);--mat-fab-hover-state-layer-opacity:.04;--mat-fab-pressed-state-layer-opacity:.12;--mat-fab-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-fab-small-container-color:white;--mat-fab-small-disabled-state-container-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-fab-small-disabled-state-foreground-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-fab-small-disabled-state-layer-color:rgba(0, 0, 0, .54);--mat-fab-small-focus-state-layer-opacity:.12;--mat-fab-small-foreground-color:rgba(0, 0, 0, .87);--mat-fab-small-hover-state-layer-opacity:.04;--mat-fab-small-pressed-state-layer-opacity:.12;--mat-fab-small-ripple-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-fab-small-state-layer-color:rgba(0, 0, 0, .87);--mat-fab-state-layer-color:rgba(0, 0, 0, .87)}html{--mat-fab-small-touch-target-display:block;--mat-fab-touch-target-display:block}html{--mat-fab-extended-label-text-font:Roboto, sans-serif;--mat-fab-extended-label-text-size:14px;--mat-fab-extended-label-text-tracking:.0892857143em;--mat-fab-extended-label-text-weight:500}html{--mat-snack-bar-container-shape:4px}html{--mat-snack-bar-container-color:#424242;--mat-snack-bar-supporting-text-color:white;--mat-snack-bar-button-color:#7986cb}html{--mat-snack-bar-supporting-text-font:Roboto, sans-serif;--mat-snack-bar-supporting-text-line-height:20px;--mat-snack-bar-supporting-text-size:14px;--mat-snack-bar-supporting-text-weight:400}html{--mat-table-row-item-outline-width:1px}html{--mat-table-background-color:white;--mat-table-header-headline-color:rgba(0, 0, 0, .87);--mat-table-row-item-label-text-color:rgba(0, 0, 0, .87);--mat-table-row-item-outline-color:rgba(0, 0, 0, .12)}html{--mat-table-header-container-height:56px;--mat-table-footer-container-height:52px;--mat-table-row-item-container-height:52px}html{--mat-table-header-headline-font:Roboto, sans-serif;--mat-table-header-headline-line-height:22px;--mat-table-header-headline-size:14px;--mat-table-header-headline-weight:500;--mat-table-header-headline-tracking:.0071428571em;--mat-table-row-item-label-text-font:Roboto, sans-serif;--mat-table-row-item-label-text-line-height:20px;--mat-table-row-item-label-text-size:14px;--mat-table-row-item-label-text-weight:400;--mat-table-row-item-label-text-tracking:.0178571429em;--mat-table-footer-supporting-text-font:Roboto, sans-serif;--mat-table-footer-supporting-text-line-height:20px;--mat-table-footer-supporting-text-size:14px;--mat-table-footer-supporting-text-weight:400;--mat-table-footer-supporting-text-tracking:.0178571429em}html{--mat-progress-spinner-active-indicator-width:4px;--mat-progress-spinner-size:48px}html{--mat-progress-spinner-active-indicator-color:#3f51b5}html{--mat-badge-container-shape:50%;--mat-badge-container-size:unset;--mat-badge-small-size-container-size:unset;--mat-badge-large-size-container-size:unset;--mat-badge-legacy-container-size:22px;--mat-badge-legacy-small-size-container-size:16px;--mat-badge-legacy-large-size-container-size:28px;--mat-badge-container-offset:-11px 0;--mat-badge-small-size-container-offset:-8px 0;--mat-badge-large-size-container-offset:-14px 0;--mat-badge-container-overlap-offset:-11px;--mat-badge-small-size-container-overlap-offset:-8px;--mat-badge-large-size-container-overlap-offset:-14px;--mat-badge-container-padding:0;--mat-badge-small-size-container-padding:0;--mat-badge-large-size-container-padding:0}html{--mat-badge-background-color:#3f51b5;--mat-badge-text-color:white;--mat-badge-disabled-state-background-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-badge-disabled-state-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent)}html{--mat-badge-text-font:Roboto, sans-serif;--mat-badge-line-height:22px;--mat-badge-text-size:12px;--mat-badge-text-weight:600;--mat-badge-small-size-text-size:9px;--mat-badge-small-size-line-height:16px;--mat-badge-large-size-text-size:24px;--mat-badge-large-size-line-height:28px}html{--mat-bottom-sheet-container-shape:4px}html{--mat-bottom-sheet-container-text-color:rgba(0, 0, 0, .87);--mat-bottom-sheet-container-background-color:white}html{--mat-bottom-sheet-container-text-font:Roboto, sans-serif;--mat-bottom-sheet-container-text-line-height:20px;--mat-bottom-sheet-container-text-size:14px;--mat-bottom-sheet-container-text-tracking:.0178571429em;--mat-bottom-sheet-container-text-weight:400}html{--mat-button-toggle-focus-state-layer-opacity:.12;--mat-button-toggle-hover-state-layer-opacity:.04;--mat-button-toggle-legacy-focus-state-layer-opacity:1;--mat-button-toggle-legacy-height:36px;--mat-button-toggle-legacy-shape:2px;--mat-button-toggle-shape:4px}html{--mat-button-toggle-background-color:white;--mat-button-toggle-disabled-selected-state-background-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-toggle-disabled-selected-state-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-toggle-disabled-state-background-color:white;--mat-button-toggle-disabled-state-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-toggle-divider-color:rgba(0, 0, 0, .12);--mat-button-toggle-legacy-disabled-selected-state-background-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-toggle-legacy-disabled-state-background-color:white;--mat-button-toggle-legacy-disabled-state-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-button-toggle-legacy-selected-state-background-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-toggle-legacy-selected-state-text-color:rgba(0, 0, 0, .87);--mat-button-toggle-legacy-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-toggle-legacy-text-color:rgba(0, 0, 0, .87);--mat-button-toggle-selected-state-background-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-button-toggle-selected-state-text-color:rgba(0, 0, 0, .87);--mat-button-toggle-state-layer-color:rgba(0, 0, 0, .87);--mat-button-toggle-text-color:rgba(0, 0, 0, .87)}html{--mat-button-toggle-height:48px}html{--mat-button-toggle-label-text-font:Roboto, sans-serif;--mat-button-toggle-label-text-line-height:24px;--mat-button-toggle-label-text-size:16px;--mat-button-toggle-label-text-tracking:.03125em;--mat-button-toggle-label-text-weight:400;--mat-button-toggle-legacy-label-text-font:Roboto, sans-serif;--mat-button-toggle-legacy-label-text-line-height:24px;--mat-button-toggle-legacy-label-text-size:16px;--mat-button-toggle-legacy-label-text-tracking:.03125em;--mat-button-toggle-legacy-label-text-weight:400}html{--mat-datepicker-calendar-container-shape:4px;--mat-datepicker-calendar-container-touch-shape:4px;--mat-datepicker-calendar-container-elevation-shadow:0px 2px 4px -1px rgba(0, 0, 0, .2), 0px 4px 5px 0px rgba(0, 0, 0, .14), 0px 1px 10px 0px rgba(0, 0, 0, .12);--mat-datepicker-calendar-container-touch-elevation-shadow:0px 11px 15px -7px rgba(0, 0, 0, .2), 0px 24px 38px 3px rgba(0, 0, 0, .14), 0px 9px 46px 8px rgba(0, 0, 0, .12)}html{--mat-datepicker-calendar-date-in-range-state-background-color:color-mix(in srgb, #3f51b5 20%, transparent);--mat-datepicker-calendar-date-in-comparison-range-state-background-color:color-mix(in srgb, #ff4081 20%, transparent);--mat-datepicker-calendar-date-in-overlap-range-state-background-color:#a8dab5;--mat-datepicker-calendar-date-in-overlap-range-selected-state-background-color:rgb(69.5241935484, 163.4758064516, 93.9516129032);--mat-datepicker-calendar-date-selected-state-text-color:white;--mat-datepicker-calendar-date-selected-state-background-color:#3f51b5;--mat-datepicker-calendar-date-selected-disabled-state-background-color:color-mix(in srgb, #3f51b5 38%, transparent);--mat-datepicker-calendar-date-today-selected-state-outline-color:white;--mat-datepicker-calendar-date-focus-state-background-color:color-mix(in srgb, #3f51b5 12%, transparent);--mat-datepicker-calendar-date-hover-state-background-color:color-mix(in srgb, #3f51b5 4%, transparent);--mat-datepicker-toggle-active-state-icon-color:#3f51b5;--mat-datepicker-toggle-icon-color:rgba(0, 0, 0, .54);--mat-datepicker-calendar-body-label-text-color:rgba(0, 0, 0, .54);--mat-datepicker-calendar-period-button-text-color:rgba(0, 0, 0, .87);--mat-datepicker-calendar-period-button-icon-color:rgba(0, 0, 0, .54);--mat-datepicker-calendar-navigation-button-icon-color:rgba(0, 0, 0, .54);--mat-datepicker-calendar-header-divider-color:rgba(0, 0, 0, .12);--mat-datepicker-calendar-header-text-color:rgba(0, 0, 0, .54);--mat-datepicker-calendar-date-today-outline-color:rgba(0, 0, 0, .54);--mat-datepicker-calendar-date-today-disabled-state-outline-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-datepicker-calendar-date-text-color:rgba(0, 0, 0, .87);--mat-datepicker-calendar-date-outline-color:transparent;--mat-datepicker-calendar-date-disabled-state-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-datepicker-calendar-date-preview-state-outline-color:rgba(0, 0, 0, .54);--mat-datepicker-range-input-separator-color:rgba(0, 0, 0, .87);--mat-datepicker-range-input-disabled-state-separator-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-datepicker-range-input-disabled-state-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-datepicker-calendar-container-background-color:white;--mat-datepicker-calendar-container-text-color:rgba(0, 0, 0, .87)}html{--mat-datepicker-calendar-text-font:Roboto, sans-serif;--mat-datepicker-calendar-text-size:13px;--mat-datepicker-calendar-body-label-text-size:14px;--mat-datepicker-calendar-body-label-text-weight:500;--mat-datepicker-calendar-period-button-text-size:14px;--mat-datepicker-calendar-period-button-text-weight:500;--mat-datepicker-calendar-header-text-size:11px;--mat-datepicker-calendar-header-text-weight:400}html{--mat-divider-width:1px}html{--mat-divider-color:rgba(0, 0, 0, .12)}html{--mat-expansion-container-shape:4px;--mat-expansion-container-elevation-shadow:0px 3px 1px -2px rgba(0, 0, 0, .2), 0px 2px 2px 0px rgba(0, 0, 0, .14), 0px 1px 5px 0px rgba(0, 0, 0, .12);--mat-expansion-legacy-header-indicator-display:inline-block;--mat-expansion-header-indicator-display:none}html{--mat-expansion-container-background-color:white;--mat-expansion-container-text-color:rgba(0, 0, 0, .87);--mat-expansion-actions-divider-color:rgba(0, 0, 0, .12);--mat-expansion-header-hover-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 4%, transparent);--mat-expansion-header-focus-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-expansion-header-disabled-state-text-color:color-mix(in srgb, rgba(0, 0, 0, .87) 38%, transparent);--mat-expansion-header-text-color:rgba(0, 0, 0, .87);--mat-expansion-header-description-color:rgba(0, 0, 0, .54);--mat-expansion-header-indicator-color:rgba(0, 0, 0, .54)}html{--mat-expansion-header-collapsed-state-height:48px;--mat-expansion-header-expanded-state-height:64px}html{--mat-expansion-header-text-font:Roboto, sans-serif;--mat-expansion-header-text-size:14px;--mat-expansion-header-text-weight:500;--mat-expansion-header-text-line-height:inherit;--mat-expansion-header-text-tracking:inherit;--mat-expansion-container-text-font:Roboto, sans-serif;--mat-expansion-container-text-line-height:20px;--mat-expansion-container-text-size:14px;--mat-expansion-container-text-tracking:.0178571429em;--mat-expansion-container-text-weight:400}html{--mat-grid-list-tile-header-primary-text-size:14px;--mat-grid-list-tile-header-secondary-text-size:12px;--mat-grid-list-tile-footer-primary-text-size:14px;--mat-grid-list-tile-footer-secondary-text-size:12px}html{--mat-icon-color:inherit}html{--mat-sidenav-container-shape:0;--mat-sidenav-container-elevation-shadow:0px 8px 10px -5px rgba(0, 0, 0, .2), 0px 16px 24px 2px rgba(0, 0, 0, .14), 0px 6px 30px 5px rgba(0, 0, 0, .12);--mat-sidenav-container-width:auto}html{--mat-sidenav-container-divider-color:rgba(0, 0, 0, .12);--mat-sidenav-container-background-color:white;--mat-sidenav-container-text-color:rgba(0, 0, 0, .87);--mat-sidenav-content-background-color:#fafafa;--mat-sidenav-content-text-color:rgba(0, 0, 0, .87);--mat-sidenav-scrim-color:rgba(0, 0, 0, .6)}html{--mat-stepper-header-focus-state-layer-shape:0;--mat-stepper-header-hover-state-layer-shape:0}html{--mat-stepper-header-icon-foreground-color:white;--mat-stepper-header-selected-state-icon-background-color:#3f51b5;--mat-stepper-header-selected-state-icon-foreground-color:white;--mat-stepper-header-done-state-icon-background-color:#3f51b5;--mat-stepper-header-done-state-icon-foreground-color:white;--mat-stepper-header-edit-state-icon-background-color:#3f51b5;--mat-stepper-header-edit-state-icon-foreground-color:white;--mat-stepper-container-color:white;--mat-stepper-line-color:rgba(0, 0, 0, .12);--mat-stepper-header-hover-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 4%, transparent);--mat-stepper-header-focus-state-layer-color:color-mix(in srgb, rgba(0, 0, 0, .87) 12%, transparent);--mat-stepper-header-label-text-color:rgba(0, 0, 0, .54);--mat-stepper-header-optional-label-text-color:rgba(0, 0, 0, .54);--mat-stepper-header-selected-state-label-text-color:rgba(0, 0, 0, .87);--mat-stepper-header-error-state-label-text-color:#f44336;--mat-stepper-header-icon-background-color:rgba(0, 0, 0, .54);--mat-stepper-header-error-state-icon-foreground-color:#f44336;--mat-stepper-header-error-state-icon-background-color:transparent}html{--mat-stepper-header-height:72px}html{--mat-stepper-container-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-font:Roboto, sans-serif;--mat-stepper-header-label-text-size:14px;--mat-stepper-header-label-text-weight:400;--mat-stepper-header-error-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-size:16px;--mat-stepper-header-selected-state-label-text-weight:400}html{--mat-sort-arrow-color:rgba(0, 0, 0, .87)}html{--mat-toolbar-container-background-color:white;--mat-toolbar-container-text-color:rgba(0, 0, 0, .87)}html{--mat-toolbar-standard-height:64px;--mat-toolbar-mobile-height:56px}html{--mat-toolbar-title-text-font:Roboto, sans-serif;--mat-toolbar-title-text-line-height:32px;--mat-toolbar-title-text-size:20px;--mat-toolbar-title-text-tracking:.0125em;--mat-toolbar-title-text-weight:500}html{--mat-tree-container-background-color:white;--mat-tree-node-text-color:rgba(0, 0, 0, .87)}html{--mat-tree-node-min-height:48px}html{--mat-tree-node-text-font:Roboto, sans-serif;--mat-tree-node-text-size:14px;--mat-tree-node-text-weight:400}html{--mat-timepicker-container-shape:4px;--mat-timepicker-container-elevation-shadow:0px 5px 5px -3px rgba(0, 0, 0, .2), 0px 8px 10px 1px rgba(0, 0, 0, .14), 0px 3px 14px 2px rgba(0, 0, 0, .12)}html{--mat-timepicker-container-background-color:white}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;overflow:hidden}body{font-family:Roboto,Helvetica Neue,sans-serif;background-color:#f5f5f5}</style><link rel="stylesheet" href="styles-QBUDNRKH.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-QBUDNRKH.css"></noscript></head>
12
12
  <body>
13
13
  <app-root></app-root>
14
- <link rel="modulepreload" href="chunk-M2HJXJRB.js"><script src="polyfills-5CFQRCPP.js" type="module"></script><script src="main-AHJOEU5J.js" type="module"></script></body>
14
+ <link rel="modulepreload" href="chunk-M2HJXJRB.js"><script src="polyfills-5CFQRCPP.js" type="module"></script><script src="main-RLEKEBCZ.js" type="module"></script></body>
15
15
  </html>
@@ -5581,4 +5581,4 @@ div.mat-mdc-select-panel {
5581
5581
  animation: mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards;
5582
5582
  }
5583
5583
  `],encapsulation:2})}return i})();var lp=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=z({type:i});static \u0275inj=V({imports:[Ko,Et,Q,li]})}return i})();function sn(i,o){for(let e of i){let t=e.indexOf("=");if(t>0&&e.slice(0,t)===o)return e.slice(t+1);let n=e.indexOf(" ");if(n>0&&e.slice(0,n)===o)return e.slice(n+1).trim()}for(let e=0;e<i.length;e++)if(i[e]===o&&e+1<i.length)return i[e+1];return null}function Rn(i,o,e,t){for(let n of i){let a=n.split(/\s|=/)[0];if(a===o)return!0;if(a===e)return!1}return t}function Ge(i,o,e){let t=sn(i,o);return t!==null?t:e}function De(i,o,e){let t=sn(i,o);if(t!==null){let n=parseInt(t,10);return isNaN(n)?e:n}return e}function st(i,o,e){let t=sn(i,o);if(t!==null){let n=parseFloat(t);return isNaN(n)?e:n}return e}var Fy=(i,o)=>o.path;function Py(i,o){i&1&&(l(0,"span",7),u(1,"(dir)"),c())}function Ny(i,o){if(i&1&&(l(0,"mat-option",5)(1,"span",6),u(2),c(),S(3,Py,2,0,"span",7),c()),i&2){let e=o.$implicit;w("value",e.path),d(2),Z(e.path),d(),E(e.isDir?3:-1)}}var cp=(()=>{class i{constructor(){this.fb=s(oo),this.service=s(Zt),this.label="Path",this.placeholder="/path/to/file",this.required=!1,this.fieldClass="",this.existingPaths=[],this.onChange=e=>{},this.onTouched=()=>{},this._subscription=null,this.suggestions=N([]),this.innerForm=this.fb.group({value:[""]})}writeValue(e){let t=(e??"").toString();this.innerForm.patchValue({value:t},{emitEvent:!1})}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){e?this.innerForm.disable():this.innerForm.enable()}ngOnInit(){this._subscription=this.innerForm.get("value").valueChanges.subscribe(e=>{this.onChange(e)}),this._subscription.add(this.innerForm.get("value").valueChanges.pipe(ei(200),Fi(),We(e=>{let t=(e??"").trim();return t?this.service.getLlamaAutocomplete("path",t).pipe(hi(()=>be([]))):be(this.emptySuggestions)})).subscribe(e=>{this.suggestions.set(e)}))}get emptySuggestions(){return this.existingPaths.filter(Boolean).map(e=>({path:e,source:"existing config"}))}ngOnDestroy(){this._subscription?.unsubscribe()}onSelect(e){this.innerForm.patchValue({value:e},{emitEvent:!1}),this.onChange(e)}onBlur(){this.onTouched()}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-file-autocomplete"]],inputs:{label:"label",placeholder:"placeholder",required:"required",fieldClass:"fieldClass",existingPaths:"existingPaths"},features:[te([{provide:_i,useExisting:lt(()=>i),multi:!0}])],decls:9,vars:7,consts:[["auto","matAutocomplete"],[3,"formGroup"],["appearance","outline",1,"full-width"],["matInput","","formControlName","value",3,"blur","placeholder","required","matAutocomplete"],[3,"optionSelected"],[3,"value"],[1,"file-path"],[1,"file-dir"]],template:function(t,n){if(t&1&&(Nt(0,1),l(1,"mat-form-field",2)(2,"input",3),I("blur",function(){return n.onBlur()}),c(),D(),l(3,"mat-label"),u(4),c()(),l(5,"mat-autocomplete",4,0),I("optionSelected",function(r){return n.onSelect(r.option.value)}),Le(7,Ny,4,3,"mat-option",5,Fy),c(),Lt()),t&2){let a=Ye(6);w("formGroup",n.innerForm),d(),Qe(n.fieldClass),d(),w("placeholder",n.placeholder)("required",n.required)("matAutocomplete",a),k(),d(2),Z(n.label),d(3),Be(n.suggestions())}},dependencies:[$e,ro,Yi,Xi,no,Tr,ri,Dn,Ct,yt,Ut,$t,Gt,wo,xo,Mt,Tn],styles:[".full-width[_ngcontent-%COMP%]{width:100%}.file-path[_ngcontent-%COMP%]{font-family:monospace}.file-dir[_ngcontent-%COMP%]{margin-left:4px;color:#1976d2;font-size:11px;font-weight:500}.file-source[_ngcontent-%COMP%]{margin-left:8px;opacity:.6;font-size:12px}"]})}}return i})();function Da(i){i||(i=s(ni));let o=new ft(e=>{if(i.destroyed){e.next();return}return i.onDestroy(e.next.bind(e))});return e=>e.pipe(ne(o))}function gs(i,o){let t=!o?.manualCleanup?o?.injector?.get(ni)??s(ni):null,n=Ly(o?.equal),a;o?.requireSync?a=N({kind:0},{equal:n}):a=N({kind:1,value:o?.initialValue},{equal:n});let r,m=i.subscribe({next:h=>a.set({kind:1,value:h}),error:h=>{a.set({kind:2,error:h}),r?.()},complete:()=>{r?.()}});if(o?.requireSync&&a().kind===0)throw new oe(601,!1);return r=t?.onDestroy(m.unsubscribe.bind(m)),K(()=>{let h=a();switch(h.kind){case 1:return h.value;case 2:throw h.error;case 0:throw new oe(601,!1)}},{equal:o?.equal})}function Ly(i=Object.is){return(o,e)=>o.kind===1&&e.kind===1&&i(o.value,e.value)}function _s(i){if(typeof i=="number")return i;let o=i.trim();if(!o)return 0;let e=o.split(/\s*x\s*/i),t=1,n;if(e.length>=2){let h=e[0].trim();h&&(t=parseInt(h,10),(isNaN(t)||t<1)&&(t=1)),n=e.slice(1).join("").trim()}else n=o;let a=n.match(/^(\d+)\s*([kKmM])?$/);if(!a)return 0;let r=parseInt(a[1],10),m=a[2];return m&&(m.toLowerCase()==="k"?r*=1024:m.toLowerCase()==="m"&&(r*=1024*1024)),t*r}var kc=[8192,16384,32768,65536,98304,131072,196608,262144,524288,1048576];function dp(i){if(i<=0)return"0";if(i>=1048576){let o=i/1048576;return`${o%1===0?o:o.toFixed(1)}M`}if(i>=1024){let o=i/1024;return`${o%1===0?o:o.toFixed(1)}K`}return`${i}`}function bs(i,o){if(i<=0)return"";if(o>1&&i%o===0){let e=i/o;if(kc.includes(e))return`${o} x ${dp(e)}`}return dp(i)}var By=(i,o)=>o.command,Sc=(i,o)=>o.path,Vy=(i,o)=>o.label;function zy(i,o){i&1&&(l(0,"mat-error"),u(1,"Required"),c())}function jy(i,o){i&1&&(l(0,"mat-error"),u(1,"Starts with letter, alphanumeric + hyphens/underscores, max 128 chars"),c())}function Hy(i,o){i&1&&(l(0,"mat-error"),u(1,"Required"),c())}function Uy(i,o){if(i&1&&(l(0,"mat-option",8)(1,"span",98),u(2),c(),l(3,"span",99),u(4),c()()),i&2){let e=o.$implicit;w("value",e.command),d(2),Z(e.command),d(2),ye("(",e.from,")")}}function Gy(i,o){if(i&1&&(l(0,"mat-option",8),u(1),c()),i&2){let e=o.$implicit;w("value",e.path),d(),Z(e.path)}}function $y(i,o){if(i&1&&(l(0,"mat-option",8),u(1),c()),i&2){let e=o.$implicit;w("value",e.label),d(),Z(e.label)}}function Wy(i,o){if(i&1&&(l(0,"mat-option",8),u(1),c()),i&2){let e=o.$implicit;w("value",e),d(),Z(e)}}function qy(i,o){if(i&1&&(l(0,"mat-option",8),u(1),c()),i&2){let e=o.$implicit;w("value",e),d(),Z(e)}}function Ky(i,o){if(i&1&&(l(0,"div",26),u(1,"YaRN Parameters"),c(),l(2,"div",13)(3,"mat-form-field",18),v(4,"input",100),D(),l(5,"mat-label"),u(6,"YaRN Orig Ctx"),c()(),l(7,"mat-form-field",18),v(8,"input",101),D(),l(9,"mat-label"),u(10,"Extrapolation Mix"),c()(),l(11,"mat-form-field",18),v(12,"input",102),D(),l(13,"mat-label"),u(14,"Attn Factor"),c()(),l(15,"mat-form-field",18),v(16,"input",103),D(),l(17,"mat-label"),u(18,"Beta Slow"),c()(),l(19,"mat-form-field",18),v(20,"input",104),D(),l(21,"mat-label"),u(22,"Beta Fast"),c()()()),i&2){let e=C();d(3),f("changed",e.isControlChanged("yarnOrigCtx")),d(),k(),d(3),f("changed",e.isControlChanged("yarnExtFactor")),d(),k(),d(3),f("changed",e.isControlChanged("yarnAttnFactor")),d(),k(),d(3),f("changed",e.isControlChanged("yarnBetaSlow")),d(),k(),d(3),f("changed",e.isControlChanged("yarnBetaFast")),d(),k()}}function Yy(i,o){i&1&&(l(0,"div",78),u(1," draft-mtp generates drafts with the model's built-in MTP head \u2014 no separate draft model "),c())}function Xy(i,o){if(i&1&&(l(0,"mat-option",8),u(1),c()),i&2){let e=o.$implicit;w("value",e.path),d(),Z(e.path)}}function Zy(i,o){if(i&1&&(v(0,"app-file-autocomplete",107),D(),l(1,"div",13)(2,"mat-form-field",18)(3,"mat-select",108),Le(4,Xy,2,2,"mat-option",8,Sc),c(),D(),l(6,"mat-label"),u(7,"Draft Device (multi-select)"),c()()()),i&2){let e=C(2);w("existingPaths",e.existingDraftModelPaths())("fieldClass",e.isControlChanged("modelDraft")?"changed":""),k(),d(2),f("changed",e.isControlChanged("specDraftDevice")),d(),k(),d(),Be(e.availableDevices())}}function Qy(i,o){if(i&1&&(l(0,"mat-form-field",18),v(1,"input",109),D(),l(2,"mat-label"),u(3,"Draft GPU Layers"),c()()),i&2){let e=C(2);f("changed",e.isControlChanged("nGpuLayersDraft")),d(),k()}}function Jy(i,o){if(i&1&&(l(0,"mat-option",8),u(1),c()),i&2){let e=o.$implicit;w("value",e),d(),Z(e)}}function e0(i,o){if(i&1&&(l(0,"mat-option",8),u(1),c()),i&2){let e=o.$implicit;w("value",e),d(),Z(e)}}function t0(i,o){if(i&1&&(l(0,"div",13)(1,"mat-form-field",18)(2,"mat-select",110),Le(3,Jy,2,2,"mat-option",8,wi),c(),D(),l(5,"mat-label"),u(6,"Draft Cache Type K"),c()(),l(7,"mat-form-field",18)(8,"mat-select",111),Le(9,e0,2,2,"mat-option",8,wi),c(),D(),l(11,"mat-label"),u(12,"Draft Cache Type V"),c()()()),i&2){let e=C(2);d(),f("changed",e.isControlChanged("specDraftCacheTypeK")),d(),k(),d(),Be(e.kvCacheTypes),d(4),f("changed",e.isControlChanged("specDraftCacheTypeV")),d(),k(),d(),Be(e.kvCacheTypes)}}function i0(i,o){if(i&1&&(l(0,"div",26),u(1,"Draft Model"),c(),S(2,Zy,8,4),l(3,"div",13)(4,"mat-form-field",18),v(5,"input",105),D(),l(6,"mat-label"),u(7,"Draft N Max"),c()(),S(8,Qy,4,2,"mat-form-field",106),c(),S(9,t0,13,4,"div",13)),i&2){let e=C();d(2),E(e.showDraftModelFields()?2:-1),d(2),f("changed",e.isControlChanged("specDraftNMax")),d(),k(),d(3),E(e.showDraftModelFields()?8:-1),d(),E(e.showDraftModelFields()?9:-1)}}function n0(i,o){if(i&1&&(l(0,"div",26),u(1,"Ngram Mod Parameters"),c(),l(2,"div",13)(3,"mat-form-field",18),v(4,"input",112),D(),l(5,"mat-label"),u(6,"Ngram Mod N Min"),c()(),l(7,"mat-form-field",18),v(8,"input",113),D(),l(9,"mat-label"),u(10,"Ngram Mod N Max"),c()(),l(11,"mat-form-field",18),v(12,"input",114),D(),l(13,"mat-label"),u(14,"Ngram Mod Match"),c()()()),i&2){let e=C();d(3),f("changed",e.isControlChanged("specNgramModNMin")),d(),k(),d(3),f("changed",e.isControlChanged("specNgramModNMax")),d(),k(),d(3),f("changed",e.isControlChanged("specNgramModNMatch")),d(),k()}}function o0(i,o){if(i&1&&(l(0,"div",26),u(1,"Ngram Simple Parameters"),c(),l(2,"div",13)(3,"mat-form-field",18),v(4,"input",115),D(),l(5,"mat-label"),u(6,"Simple Size N"),c()(),l(7,"mat-form-field",18),v(8,"input",116),D(),l(9,"mat-label"),u(10,"Simple Size M"),c()(),l(11,"mat-form-field",18),v(12,"input",117),D(),l(13,"mat-label"),u(14,"Simple Min Hits"),c()()()),i&2){let e=C();d(3),f("changed",e.isControlChanged("specNgramSimpleSizeN")),d(),k(),d(3),f("changed",e.isControlChanged("specNgramSimpleSizeM")),d(),k(),d(3),f("changed",e.isControlChanged("specNgramSimpleMinHits")),d(),k()}}function a0(i,o){if(i&1&&(l(0,"mat-option",8)(1,"span",98),u(2),c(),l(3,"span",99),u(4),c()()),i&2){let e=o.$implicit;w("value",e.path),d(2),Z(e.path),d(2),ye("(",e.source,")")}}var p={host:"127.0.0.1",port:8080,threads:-1,flashAttn:"auto",fit:"on",parallel:-1,alias:"",nPredict:-1,contextShift:"off",contBatching:"on",model:"",mmproj:"",nGpuLayers:"auto",device:[],tensorSplit:"",splitMode:"layer",mainGpu:0,fitTarget:1024,fitCtx:4096,mlock:"off",mmap:"on",cpuMoe:"off",nCpuMoe:0,ctxSize:0,batchSize:2048,ubatchSize:512,cacheTypeK:"f16",cacheTypeV:"f16",kvOffload:"on",cacheRam:8192,swaFull:"off",ropeScaling:"none",ropeScale:1,ropeFreqBase:0,ropeFreqScale:0,yarnOrigCtx:0,yarnExtFactor:-1,yarnAttnFactor:-1,yarnBetaSlow:-1,yarnBetaFast:-1,temperature:.8,seed:-1,topK:40,topP:.95,minP:.05,typicalP:1,repeatLastN:64,repeatPenalty:1,presencePenalty:0,frequencyPenalty:0,dryMultiplier:0,dryBase:1.75,mirostat:0,dynatempRange:0,modelDraft:"",specDraftDevice:[],specDraftNMax:3,nGpuLayersDraft:"auto",specDraftCacheTypeK:"f16",specDraftCacheTypeV:"f16",specType:"none",specNgramModNMin:48,specNgramModNMax:64,specNgramModNMatch:24,specNgramSimpleSizeN:12,specNgramSimpleSizeM:48,specNgramSimpleMinHits:1,lora:"",loraScaled:"",timeout:3600,threadsHttp:-1,metrics:"off",slots:"on",cachePrompt:"on",cacheReuse:0,reasoning:"auto",reasoningBudget:-1,reasoningFormat:"auto",apiKeyFile:""};function r0(i,o){let e=p[i];if(e===void 0)return!1;if(Array.isArray(o)||Array.isArray(e)){let t=Array.isArray(o)?o:[],n=Array.isArray(e)?e:[];return t.length!==n.length||t.some((a,r)=>a!==n[r])}return String(o)!==String(e)}var s0="^[a-zA-Z][a-zA-Z0-9_-]{0,127}$",l0=["f32","f16","bf16","q8_0","q4_0","q4_1","iq4_nl","q5_0","q5_1"],mp=(()=>{class i{constructor(){this.fb=s(oo),this.dialogRef=s(Xt),this.data=s(va),this.serviceService=s(Zt),this.cdr=s(ie),this.destroyRef=s(ni),this.isEdit=this.data.config!==null,this.isClone=this.data.clone===!0,this.kvCacheTypes=l0,this.allExistingCommands=K(()=>{let e=this.data.allConfigs??[],t=this.data.config?.name??null,n=new Set,a=[];for(let r of e)r.name!==t&&(n.has(r.command)||(n.add(r.command),a.push({command:r.command,from:r.name})));return a}),this._commandValue=N(this.data.config?.command??""),this.commandValue=this._commandValue.asReadonly(),this.filteredCommands=K(()=>{let e=this.commandValue()?.toLowerCase()??"";return this.allExistingCommands().filter(t=>t.command.toLowerCase().includes(e)||t.from.toLowerCase().includes(e))}),this.form=this.fb.group({name:[this.data.config?.name??"",{validators:[vt.required,vt.pattern(s0)]}],command:[this.data.config?.command??"",vt.required],host:[p.host],port:[p.port],threads:[p.threads],flashAttn:[p.flashAttn],fit:[p.fit],parallel:[p.parallel],alias:[p.alias],nPredict:[p.nPredict],contextShift:[p.contextShift],contBatching:[p.contBatching],model:[""],mmproj:[""],nGpuLayers:[p.nGpuLayers],device:[[]],tensorSplit:[""],splitMode:[p.splitMode],mainGpu:[p.mainGpu],fitTarget:[p.fitTarget],fitCtx:[p.fitCtx],mlock:[p.mlock],mmap:[p.mmap],cpuMoe:[p.cpuMoe],nCpuMoe:[p.nCpuMoe],ctxSize:[""],batchSize:[p.batchSize],ubatchSize:[p.ubatchSize],cacheTypeK:[p.cacheTypeK],cacheTypeV:[p.cacheTypeV],kvOffload:[p.kvOffload],cacheRam:[p.cacheRam],swaFull:[p.swaFull],ropeScaling:[p.ropeScaling],ropeScale:[p.ropeScale],ropeFreqBase:[p.ropeFreqBase],ropeFreqScale:[p.ropeFreqScale],yarnOrigCtx:[p.yarnOrigCtx],yarnExtFactor:[p.yarnExtFactor],yarnAttnFactor:[p.yarnAttnFactor],yarnBetaSlow:[p.yarnBetaSlow],yarnBetaFast:[p.yarnBetaFast],temperature:[p.temperature],seed:[p.seed],topK:[p.topK],topP:[p.topP],minP:[p.minP],typicalP:[p.typicalP],repeatLastN:[p.repeatLastN],repeatPenalty:[p.repeatPenalty],presencePenalty:[p.presencePenalty],frequencyPenalty:[p.frequencyPenalty],dryMultiplier:[p.dryMultiplier],dryBase:[p.dryBase],mirostat:[p.mirostat],dynatempRange:[p.dynatempRange],modelDraft:[""],specDraftDevice:[[]],specDraftNMax:[p.specDraftNMax],nGpuLayersDraft:[p.nGpuLayersDraft],specDraftCacheTypeK:[p.specDraftCacheTypeK],specDraftCacheTypeV:[p.specDraftCacheTypeV],specType:[p.specType],specNgramModNMin:[p.specNgramModNMin],specNgramModNMax:[p.specNgramModNMax],specNgramModNMatch:[p.specNgramModNMatch],specNgramSimpleSizeN:[p.specNgramSimpleSizeN],specNgramSimpleSizeM:[p.specNgramSimpleSizeM],specNgramSimpleMinHits:[p.specNgramSimpleMinHits],lora:[""],loraScaled:[""],timeout:[p.timeout],threadsHttp:[p.threadsHttp],metrics:[p.metrics],slots:[p.slots],cachePrompt:[p.cachePrompt],cacheReuse:[p.cacheReuse],reasoning:[p.reasoning],reasoningBudget:[p.reasoningBudget],reasoningFormat:[p.reasoningFormat],apiKeyFile:[""]}),this.availableDevices=K(()=>this.availableDevicesRaw()),this.availableDevicesRaw=gs(this.form.controls.command.valueChanges.pipe(Da(),Ie(this.form.controls.command.value),ei(300),Fi(),We(e=>{let t=(e??"").trim();return t?this.serviceService.getLlamaAutocomplete("device","",t).pipe(hi(()=>be([]))):this.serviceService.getLlamaAutocomplete("device","").pipe(hi(()=>be([])))})),{initialValue:[]}),this.filteredHosts=gs(this.form.controls.host.valueChanges.pipe(Da(),Ie(this.form.controls.host.value),ei(250),Fi(),We(e=>{let t=(e??"").trim();return t?this.serviceService.getLlamaAutocomplete("host",t).pipe(hi(()=>be([]))):be([])})),{initialValue:[]}),this.existingModelPaths=K(()=>this.extractConfigPaths("--model")),this.existingMmprojPaths=K(()=>this.extractConfigPaths("--mmproj")),this.existingApiKeyPaths=K(()=>this.extractConfigPaths("--api-key-file")),this.existingDraftModelPaths=K(()=>this.extractConfigPaths("--model-draft")),this.existingLoraPaths=K(()=>this.extractConfigPaths("--lora")),this.formValue=gs(this.form.valueChanges,{initialValue:this.form.value}),this.fitValue=K(()=>this.formValue()?.fit),this.splitModeValue=K(()=>this.formValue()?.splitMode),this.specTypeValue=K(()=>this.formValue()?.specType),this.ropeScalingValue=K(()=>this.formValue()?.ropeScaling),this.cpuMoeValue=K(()=>this.formValue()?.cpuMoe),this.cachePromptValue=K(()=>this.formValue()?.cachePrompt),this.reasoningValue=K(()=>this.formValue()?.reasoning),this.mirostatValue=K(()=>this.formValue()?.mirostat),this.hostValue=K(()=>this.formValue()?.host),this.isTensorSplitDisabled=K(()=>this.splitModeValue()==="none"),this.isFitTargetDisabled=K(()=>this.fitValue()==="off"),this.isCpuMoeLayersDisabled=K(()=>this.cpuMoeValue()==="on"),this.isCacheReuseDisabled=K(()=>this.cachePromptValue()==="off"),this.isReasoningParamsDisabled=K(()=>this.reasoningValue()==="off"),this.isMirostatEnabled=K(()=>(this.mirostatValue()??0)!==0),this.isRopeParamsDisabled=K(()=>this.ropeScalingValue()==="none"),this.isPortDisabled=K(()=>(this.hostValue()??"").trim().toLowerCase().endsWith(".sock")),this.showDraftParams=K(()=>(this.specTypeValue()??"").includes("draft")),this.showDraftModelFields=K(()=>{let e=this.specTypeValue()??"";return e.includes("draft")&&!e.includes("mtp")}),this.showNgramModParams=K(()=>(this.specTypeValue()??"").includes("ngram-mod")),this.showNgramSimpleParams=K(()=>(this.specTypeValue()??"").includes("ngram-simple")),this.showYarnParams=K(()=>this.ropeScalingValue()==="yarn"),this.parallelSlots=K(()=>{let e=this.formValue()?.parallel;return typeof e=="number"&&e>0?e:1}),this.ctxPresets=K(()=>{let e=this.parallelSlots();return kc.map(t=>({label:bs(e*t,e)}))}),this._flags=null}extractConfigPaths(e){let t=this.data.allConfigs??[],n=this.data.config?.name??null,a=new Set,r=[];for(let m of t){if(m.name===n||!m.flags)continue;let h=sn(m.flags,e);h&&!a.has(h)&&(a.add(h),r.push(h))}return r}isControlChanged(e){let t=this.form.get(e)?.value;return e==="ctxSize"?+_s(t)!==p.ctxSize:t!==void 0&&r0(e,t)}isSectionChanged(...e){return e.some(t=>this.isControlChanged(t))}onCtxSizeInput(e){let t=e.target.value,n=_s(t),a=bs(n,this.parallelSlots());this.form.get("ctxSize")?.setValue(a,{emitEvent:!1})}ngOnInit(){this.form.controls.command.valueChanges.pipe(Da(this.destroyRef)).subscribe(e=>this._commandValue.set(e)),this.data.config&&this.populateFormFromFlags(this.data.config.flags),this.form.valueChanges.pipe(Da(this.destroyRef)).subscribe(()=>{this.cdr.markForCheck()})}populateFormFromFlags(e){let t=this.form.controls;t.host.setValue(Ge(e,"--host",p.host)),t.port.setValue(De(e,"--port",p.port)),t.threads.setValue(De(e,"--threads",p.threads)),t.flashAttn.setValue(Ge(e,"--flash-attn",p.flashAttn)),t.fit.setValue(Ge(e,"--fit",p.fit)),t.parallel.setValue(De(e,"--parallel",p.parallel)),t.alias.setValue(Ge(e,"--alias","")),t.nPredict.setValue(De(e,"--n-predict",p.nPredict)),t.contextShift.setValue(Rn(e,"--context-shift","--no-context-shift",!1)?"on":"off"),t.contBatching.setValue(Rn(e,"--cont-batching","--no-cont-batching",!0)?"on":"off");let n=sn(e,"--device");t.device.setValue(n?n.split(",").map(h=>h.trim()).filter(Boolean):[]),t.tensorSplit.setValue(Ge(e,"--tensor-split","")),t.model.setValue(Ge(e,"--model","")),t.mmproj.setValue(Ge(e,"--mmproj","")),t.nGpuLayers.setValue(Ge(e,"--n-gpu-layers",p.nGpuLayers)),t.splitMode.setValue(Ge(e,"--split-mode",p.splitMode)),t.mainGpu.setValue(De(e,"--main-gpu",p.mainGpu)),t.fitTarget.setValue(De(e,"--fit-target",p.fitTarget)),t.fitCtx.setValue(De(e,"--fit-ctx",p.fitCtx)),t.mlock.setValue(e.includes("--mlock")?"on":"off"),t.mmap.setValue(Rn(e,"--mmap","--no-mmap",!0)?"on":"off"),t.cpuMoe.setValue(e.includes("--cpu-moe")?"on":"off"),t.nCpuMoe.setValue(De(e,"--n-cpu-moe",0));let a=De(e,"--ctx-size",p.ctxSize),r=typeof t.parallel.value=="number"&&t.parallel.value>0?t.parallel.value:1;t.ctxSize.setValue(bs(a,r)),t.batchSize.setValue(De(e,"--batch-size",p.batchSize)),t.ubatchSize.setValue(De(e,"--ubatch-size",p.ubatchSize)),t.cacheTypeK.setValue(Ge(e,"--cache-type-k",p.cacheTypeK)),t.cacheTypeV.setValue(Ge(e,"--cache-type-v",p.cacheTypeV)),t.kvOffload.setValue(Rn(e,"--kv-offload","--no-kv-offload",!0)?"on":"off"),t.cacheRam.setValue(De(e,"--cache-ram",p.cacheRam)),t.swaFull.setValue(e.includes("--swa-full")?"on":"off"),t.ropeScaling.setValue(Ge(e,"--rope-scaling",p.ropeScaling)),t.ropeScale.setValue(st(e,"--rope-scale",p.ropeScale)),t.ropeFreqBase.setValue(st(e,"--rope-freq-base",p.ropeFreqBase)),t.ropeFreqScale.setValue(st(e,"--rope-freq-scale",p.ropeFreqScale)),t.yarnOrigCtx.setValue(De(e,"--yarn-orig-ctx",p.yarnOrigCtx)),t.yarnExtFactor.setValue(st(e,"--yarn-ext-factor",p.yarnExtFactor)),t.yarnAttnFactor.setValue(st(e,"--yarn-attn-factor",p.yarnAttnFactor)),t.yarnBetaSlow.setValue(st(e,"--yarn-beta-slow",p.yarnBetaSlow)),t.yarnBetaFast.setValue(st(e,"--yarn-beta-fast",p.yarnBetaFast)),t.temperature.setValue(st(e,"--temperature",p.temperature)),t.seed.setValue(De(e,"--seed",p.seed)),t.topK.setValue(De(e,"--top-k",p.topK)),t.topP.setValue(st(e,"--top-p",p.topP)),t.minP.setValue(st(e,"--min-p",p.minP)),t.typicalP.setValue(st(e,"--typical",p.typicalP)),t.repeatLastN.setValue(De(e,"--repeat-last-n",p.repeatLastN)),t.repeatPenalty.setValue(st(e,"--repeat-penalty",p.repeatPenalty)),t.presencePenalty.setValue(st(e,"--presence-penalty",p.presencePenalty)),t.frequencyPenalty.setValue(st(e,"--frequency-penalty",p.frequencyPenalty)),t.dryMultiplier.setValue(st(e,"--dry-multiplier",p.dryMultiplier)),t.dryBase.setValue(st(e,"--dry-base",p.dryBase)),t.mirostat.setValue(De(e,"--mirostat",p.mirostat)),t.dynatempRange.setValue(st(e,"--dynatemp-range",p.dynatempRange)),t.modelDraft.setValue(Ge(e,"--model-draft",""));let m=sn(e,"--spec-draft-device")??sn(e,"--device-draft");t.specDraftDevice.setValue(m?m.split(",").map(h=>h.trim()).filter(Boolean):[]),t.specDraftNMax.setValue(De(e,"--spec-draft-n-max",p.specDraftNMax)),t.nGpuLayersDraft.setValue(Ge(e,"--n-gpu-layers-draft",p.nGpuLayersDraft)),t.specDraftCacheTypeK.setValue(Ge(e,"--cache-type-k-draft",p.specDraftCacheTypeK)),t.specDraftCacheTypeV.setValue(Ge(e,"--cache-type-v-draft",p.specDraftCacheTypeV)),t.specType.setValue(Ge(e,"--spec-type",p.specType)),t.specNgramModNMin.setValue(De(e,"--spec-ngram-mod-n-min",p.specNgramModNMin)),t.specNgramModNMax.setValue(De(e,"--spec-ngram-mod-n-max",p.specNgramModNMax)),t.specNgramModNMatch.setValue(De(e,"--spec-ngram-mod-n-match",p.specNgramModNMatch)),t.specNgramSimpleSizeN.setValue(De(e,"--spec-ngram-simple-size-n",p.specNgramSimpleSizeN)),t.specNgramSimpleSizeM.setValue(De(e,"--spec-ngram-simple-size-m",p.specNgramSimpleSizeM)),t.specNgramSimpleMinHits.setValue(De(e,"--spec-ngram-simple-min-hits",p.specNgramSimpleMinHits)),t.lora.setValue(Ge(e,"--lora","")),t.loraScaled.setValue(Ge(e,"--lora-scaled","")),t.timeout.setValue(De(e,"--timeout",p.timeout)),t.threadsHttp.setValue(De(e,"--threads-http",p.threadsHttp)),t.metrics.setValue(e.includes("--metrics")?"on":"off"),t.slots.setValue(Rn(e,"--slots","--no-slots",!0)?"on":"off"),t.cachePrompt.setValue(Rn(e,"--cache-prompt","--no-cache-prompt",!0)?"on":"off"),t.cacheReuse.setValue(De(e,"--cache-reuse",p.cacheReuse)),t.reasoning.setValue(Ge(e,"--reasoning",p.reasoning)),t.reasoningBudget.setValue(De(e,"--reasoning-budget",p.reasoningBudget)),t.reasoningFormat.setValue(Ge(e,"--reasoning-format",p.reasoningFormat)),t.apiKeyFile.setValue(Ge(e,"--api-key-file",""))}addIf(e,t,n){String(t)!==String(n)&&this._flags.push(`${e} ${t}`)}addToggle(e,t,n,a){let r=e==="on";r!==a&&this._flags.push(r?t:n)}buildFlags(){this._flags=[];let e=this.form.controls;this.addIf("--host",e.host.value,p.host),this.addIf("--port",e.port.value,p.port),this.addIf("--threads",e.threads.value,p.threads),this.addIf("--flash-attn",e.flashAttn.value,p.flashAttn),this.addIf("--fit",e.fit.value,p.fit),this.addIf("--parallel",e.parallel.value,p.parallel),this.addIf("--alias",e.alias.value,p.alias),this.addIf("--n-predict",e.nPredict.value,p.nPredict),this.addToggle(e.contextShift.value,"--context-shift","--no-context-shift",!1),this.addToggle(e.contBatching.value,"--cont-batching","--no-cont-batching",!0);let t=e.device.value;t&&t.length>0&&this._flags.push(`--device ${t.join(",")}`),e.splitMode.value!=="none"&&this.addIf("--tensor-split",e.tensorSplit.value,p.tensorSplit),this.addIf("--model",e.model.value,p.model),this.addIf("--mmproj",e.mmproj.value,p.mmproj),this.addIf("--n-gpu-layers",e.nGpuLayers.value,p.nGpuLayers),this.addIf("--split-mode",e.splitMode.value,p.splitMode),this.addIf("--main-gpu",e.mainGpu.value,p.mainGpu),e.fit.value==="on"&&(this.addIf("--fit-target",e.fitTarget.value,p.fitTarget),this.addIf("--fit-ctx",e.fitCtx.value,p.fitCtx)),e.mlock.value==="on"&&this._flags.push("--mlock"),this.addToggle(e.mmap.value,"--mmap","--no-mmap",!0),e.cpuMoe.value==="on"&&this._flags.push("--cpu-moe"),e.cpuMoe.value!=="on"&&this.addIf("--n-cpu-moe",e.nCpuMoe.value,p.nCpuMoe),this.addIf("--ctx-size",+_s(e.ctxSize.value??""),p.ctxSize),this.addIf("--batch-size",e.batchSize.value,p.batchSize),this.addIf("--ubatch-size",e.ubatchSize.value,p.ubatchSize),this.addIf("--cache-type-k",e.cacheTypeK.value,p.cacheTypeK),this.addIf("--cache-type-v",e.cacheTypeV.value,p.cacheTypeV),this.addToggle(e.kvOffload.value,"--kv-offload","--no-kv-offload",!0),this.addIf("--cache-ram",e.cacheRam.value,p.cacheRam),e.swaFull.value==="on"&&this._flags.push("--swa-full");let n=e.ropeScaling.value;n&&n!==p.ropeScaling&&(this._flags.push(`--rope-scaling ${n}`),this.addIf("--rope-scale",e.ropeScale.value,p.ropeScale),this.addIf("--rope-freq-base",e.ropeFreqBase.value,p.ropeFreqBase),this.addIf("--rope-freq-scale",e.ropeFreqScale.value,p.ropeFreqScale),n==="yarn"&&(this.addIf("--yarn-orig-ctx",e.yarnOrigCtx.value,p.yarnOrigCtx),this.addIf("--yarn-ext-factor",e.yarnExtFactor.value,p.yarnExtFactor),this.addIf("--yarn-attn-factor",e.yarnAttnFactor.value,p.yarnAttnFactor),this.addIf("--yarn-beta-slow",e.yarnBetaSlow.value,p.yarnBetaSlow),this.addIf("--yarn-beta-fast",e.yarnBetaFast.value,p.yarnBetaFast))),this.addIf("--temperature",e.temperature.value,p.temperature),this.addIf("--seed",e.seed.value,p.seed),this.addIf("--top-k",e.topK.value,p.topK),this.addIf("--top-p",e.topP.value,p.topP),this.addIf("--min-p",e.minP.value,p.minP),this.addIf("--typical",e.typicalP.value,p.typicalP),this.addIf("--repeat-last-n",e.repeatLastN.value,p.repeatLastN),this.addIf("--repeat-penalty",e.repeatPenalty.value,p.repeatPenalty),this.addIf("--presence-penalty",e.presencePenalty.value,p.presencePenalty),this.addIf("--frequency-penalty",e.frequencyPenalty.value,p.frequencyPenalty),this.addIf("--dry-multiplier",e.dryMultiplier.value,p.dryMultiplier),this.addIf("--dry-base",e.dryBase.value,p.dryBase),this.addIf("--mirostat",e.mirostat.value,p.mirostat),this.addIf("--dynatemp-range",e.dynatempRange.value,p.dynatempRange);let a=e.specType.value;if(this.addIf("--spec-type",a,p.specType),a?.includes("draft")&&(this.addIf("--spec-draft-n-max",e.specDraftNMax.value,p.specDraftNMax),!a.includes("mtp"))){this.addIf("--model-draft",e.modelDraft.value,p.modelDraft);let m=e.specDraftDevice.value;m&&m.length>0&&this._flags.push(`--spec-draft-device ${m.join(",")}`),this.addIf("--n-gpu-layers-draft",e.nGpuLayersDraft.value,p.nGpuLayersDraft),this.addIf("--cache-type-k-draft",e.specDraftCacheTypeK.value,p.specDraftCacheTypeK),this.addIf("--cache-type-v-draft",e.specDraftCacheTypeV.value,p.specDraftCacheTypeV)}a?.includes("ngram")&&(this.addIf("--spec-ngram-mod-n-min",e.specNgramModNMin.value,p.specNgramModNMin),this.addIf("--spec-ngram-mod-n-max",e.specNgramModNMax.value,p.specNgramModNMax),this.addIf("--spec-ngram-mod-n-match",e.specNgramModNMatch.value,p.specNgramModNMatch),this.addIf("--spec-ngram-simple-size-n",e.specNgramSimpleSizeN.value,p.specNgramSimpleSizeN),this.addIf("--spec-ngram-simple-size-m",e.specNgramSimpleSizeM.value,p.specNgramSimpleSizeM),this.addIf("--spec-ngram-simple-min-hits",e.specNgramSimpleMinHits.value,p.specNgramSimpleMinHits)),this.addIf("--lora",e.lora.value,p.lora),this.addIf("--lora-scaled",e.loraScaled.value,p.loraScaled),this.addIf("--timeout",e.timeout.value,p.timeout),this.addIf("--threads-http",e.threadsHttp.value,p.threadsHttp),e.metrics.value==="on"&&this._flags.push("--metrics"),this.addToggle(e.slots.value,"--slots","--no-slots",!0),this.addToggle(e.cachePrompt.value,"--cache-prompt","--no-cache-prompt",!0),e.cachePrompt.value==="on"&&this.addIf("--cache-reuse",e.cacheReuse.value,p.cacheReuse),this.addIf("--reasoning",e.reasoning.value,p.reasoning),this.addIf("--reasoning-budget",e.reasoningBudget.value,p.reasoningBudget),this.addIf("--reasoning-format",e.reasoningFormat.value,p.reasoningFormat),this.addIf("--api-key-file",e.apiKeyFile.value,p.apiKeyFile);let r=this._flags;return this._flags=null,r}save(){if(this.form.invalid)return;let e={name:this.form.controls.name.value.trim(),type:"llama-server",command:this.form.controls.command.value.trim(),flags:this.buildFlags()};this.dialogRef.close(e)}cancel(){this.dialogRef.close()}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-llama-server-dialog"]],decls:448,vars:180,consts:[["commandAuto","matAutocomplete"],["ctxSizeAuto","matAutocomplete"],["hostAuto","matAutocomplete"],["mat-dialog-title",""],[1,"llama-form",3,"formGroup"],["appearance","outline",1,"full-width"],["matInput","","formControlName","name","placeholder","e.g. llama-qwen3_6-27b-q8",3,"disabled"],["matInput","","formControlName","command","placeholder","/path/to/llama-server",3,"matAutocomplete"],[3,"value"],["expanded",""],["formControlName","model","label","Model Path","placeholder","/path/to/model.gguf",3,"existingPaths","fieldClass"],["formControlName","mmproj","label","MMProj Path","placeholder","/path/to/mmproj.gguf (optional)",3,"existingPaths","fieldClass"],["matInput","","formControlName","alias","type","text","matTooltip","Set model name aliases (comma-separated). Used by API for model identification"],[1,"form-row"],["appearance","outline",1,"form-col-40"],["matInput","","formControlName","nGpuLayers","type","number","matTooltip","Max number of layers to store in VRAM. 999 = all layers. Can use 'auto' or 'all'"],["appearance","outline",1,"form-col-60"],["formControlName","device","multiple","","placeholder","Select GPU devices","matTooltip","Comma-separated list of devices for offloading. Use --list-devices to see available"],["appearance","outline",1,"form-col"],["formControlName","splitMode","matTooltip","How to split model across multiple GPUs. layer=pipelined, row=parallelized, tensor=experimental"],["value","layer"],["value","row"],["value","tensor"],["value","none"],["matInput","","formControlName","tensorSplit","placeholder","10,10,10","matTooltip","Fraction of model to offload to each GPU (comma-separated proportions, e.g. 3,1)",3,"disabled"],["matInput","","formControlName","mainGpu","type","number","matTooltip","GPU index for model (with split-mode=none) or for intermediate results and KV (with split-mode=row)"],[1,"subsection-label"],["formControlName","fit","matTooltip","Adjust unset arguments to fit in device memory. Helps prevent OOM errors"],["value","on"],["value","off"],["matInput","","formControlName","fitTarget","type","number","matTooltip","Target margin per device in MiB for --fit option. Default: 1024",3,"disabled"],["matInput","","formControlName","fitCtx","type","number","matTooltip","Minimum context size that can be set by --fit option. Default: 4096",3,"disabled"],["formControlName","mlock","matTooltip","Force system to keep model in RAM rather than swapping or compressing"],["formControlName","mmap","matTooltip","Memory-map model. If disabled: slower load but may reduce pageouts if not using mlock"],["formControlName","cpuMoe","matTooltip","Keep all Mixture of Experts (MoE) weights in CPU memory"],["matInput","","formControlName","nCpuMoe","type","number","matTooltip","Keep MoE weights of first N layers in CPU. 0 = disabled",3,"disabled"],["matInput","","formControlName","ctxSize","type","text","placeholder","e.g. 8K, 3x16K, 20000","matTooltip","Context size. Supports: 20000, 20K, 3x20K. 0 = from model metadata",3,"blur","keyup.enter","matAutocomplete"],["matInput","","formControlName","batchSize","type","number","matTooltip","Logical maximum batch size for processing. Default: 2048"],["matInput","","formControlName","ubatchSize","type","number","matTooltip","Physical maximum batch size. Default: 512"],["formControlName","cacheTypeK","matTooltip","KV cache data type for K. Options: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1"],["formControlName","cacheTypeV","matTooltip","KV cache data type for V. Options: f32, f16, bf16, q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1"],["formControlName","kvOffload","matTooltip","Enable KV cache offloading to GPU. Reduces CPU memory usage"],["matInput","","formControlName","cacheRam","type","number","matTooltip","Maximum prompt cache size in MiB. -1 = no limit, 0 = disable. Default: 8192"],["formControlName","swaFull","matTooltip","Use full-size SWA (Sliding Window Attention) cache instead of compressed"],["formControlName","ropeScaling","matTooltip","RoPE frequency scaling method. linear or yarn for extended context"],["value","linear"],["value","yarn"],["matInput","","formControlName","ropeScale","type","number","matTooltip","RoPE context scaling factor. Expands context by factor of N",3,"disabled"],["matInput","","formControlName","ropeFreqBase","type","number","matTooltip","RoPE base frequency for NTK-aware scaling. 0 = loaded from model",3,"disabled"],["matInput","","formControlName","ropeFreqScale","type","number","matTooltip","RoPE frequency scaling factor. Expands context by factor of 1/N. 0 = from model",3,"disabled"],["matInput","","formControlName","threads","type","number","matTooltip","Number of CPU threads to use during generation. -1 = auto-detect"],["matInput","","formControlName","parallel","type","number","matTooltip","Number of server slots for parallel requests. -1 = auto"],["matInput","","formControlName","nPredict","type","number","matTooltip","Maximum number of tokens to predict. -1 = infinity (unlimited generation)"],["formControlName","flashAttn","matTooltip","Enable Flash Attention for faster inference with lower VRAM usage"],["value","auto"],["formControlName","contBatching","matTooltip","Enable continuous (dynamic) batching for better throughput with multiple requests"],["formControlName","contextShift","matTooltip","Enable context shift on infinite text generation. Shifts context window when full"],["matInput","","formControlName","temperature","type","number","matTooltip","Temperature for sampling. Higher = more random, lower = more deterministic. Default: 0.8"],["matInput","","formControlName","seed","type","number","matTooltip","RNG seed for reproducibility. -1 = random seed"],["matInput","","formControlName","topK","type","number","matTooltip","Top-K sampling: limit to K most likely tokens. 0 = disabled. Default: 40",3,"disabled"],["matInput","","formControlName","topP","type","number","matTooltip","Top-P (nucleus) sampling: cumulative probability threshold. 1.0 = disabled. Default: 0.95",3,"disabled"],["matInput","","formControlName","minP","type","number","matTooltip","Min-P sampling: minimum probability threshold. 0.0 = disabled. Default: 0.05"],["matInput","","formControlName","typicalP","type","number","matTooltip","Locally typical sampling parameter p. 1.0 = disabled",3,"disabled"],["formControlName","mirostat","matTooltip","Mirostat sampling mode. 0=disabled, 1=Mirostat, 2=Mirostat 2.0. Top-K/Nucleus ignored when enabled"],["matInput","","formControlName","dynatempRange","type","number","matTooltip","Dynamic temperature range. 0.0 = disabled"],["matInput","","formControlName","repeatLastN","type","number","matTooltip","Last N tokens to consider for penalty. 0 = disabled, -1 = ctx_size. Default: 64"],["matInput","","formControlName","repeatPenalty","type","number","matTooltip","Penalize repeat sequence of tokens. 1.0 = disabled"],["matInput","","formControlName","presencePenalty","type","number","matTooltip","Alpha presence penalty: penalize tokens that appeared. 0.0 = disabled"],["matInput","","formControlName","frequencyPenalty","type","number","matTooltip","Alpha frequency penalty: penalize by token frequency. 0.0 = disabled"],["matInput","","formControlName","dryMultiplier","type","number","matTooltip","DRY sampling multiplier: prevents repetition by penalizing recent tokens. 0.0 = disabled"],["matInput","","formControlName","dryBase","type","number","matTooltip","DRY sampling base value. Default: 1.75"],["appearance","outline","subscriptSizing","dynamic",1,"full-width"],["formControlName","specType","matTooltip","Type of speculative decoding. draft-* uses draft model, ngram-* uses n-gram lookup"],["value","draft-simple"],["value","draft-eagle3"],["value","draft-mtp"],["value","ngram-simple"],["value","ngram-mod"],[1,"sub-section-hint"],["formControlName","lora","label","LoRA Adapter Path","placeholder","/path/to/lora.gguf (comma-separated for multiple)",3,"existingPaths","fieldClass"],["matInput","","formControlName","loraScaled","type","text","matTooltip","LoRA adapter with user-defined scaling. Format: path:scale,... (e.g. lora.gguf:0.5)"],["matInput","","formControlName","host","type","text","matTooltip","IP address to listen (default: 127.0.0.1). Can bind to UNIX socket if ends with .sock",3,"matAutocomplete"],["matInput","","formControlName","port","type","number","matTooltip","Port to listen (default: 8080). Ignored when host is a UNIX socket",3,"disabled"],["matInput","","formControlName","timeout","type","number","matTooltip","Server read/write timeout in seconds. Default: 3600"],["matInput","","formControlName","threadsHttp","type","number","matTooltip","Number of threads for HTTP requests. -1 = auto"],["formControlName","apiKeyFile","label","API Key File","placeholder","/path/to/keys.ini",3,"existingPaths","fieldClass"],["formControlName","metrics","matTooltip","Enable Prometheus-compatible metrics endpoint at /metrics"],["formControlName","slots","matTooltip","Expose slots monitoring endpoint at /slots"],["formControlName","cachePrompt","matTooltip","Enable prompt caching to speed up repeated prompts"],["matInput","","formControlName","cacheReuse","type","number","matTooltip","Min chunk size to attempt reusing from cache via KV shifting. Requires prompt caching",3,"disabled"],["formControlName","reasoning","matTooltip","Use reasoning/thinking in chat. auto = detect from template"],["matInput","","formControlName","reasoningBudget","type","number","matTooltip","Token budget for thinking. -1 = unlimited, 0 = immediate end, N>0 = token limit",3,"disabled"],["formControlName","reasoningFormat","matTooltip","Format for reasoning output. none=raw, deepseek=reasoning_content field, deepseek-legacy=keep think tags",3,"disabled"],["value","deepseek"],["value","deepseek-legacy"],["align","end"],["mat-stroked-button","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"auto-path"],[1,"auto-from"],["matInput","","formControlName","yarnOrigCtx","type","number","matTooltip","YaRN: original context size of model. 0 = model training context size"],["matInput","","formControlName","yarnExtFactor","type","number","matTooltip","YaRN: extrapolation mix factor. -1 = default, 0.0 = full interpolation"],["matInput","","formControlName","yarnAttnFactor","type","number","matTooltip","YaRN: scale sqrt(t) or attention magnitude. -1 = default"],["matInput","","formControlName","yarnBetaSlow","type","number","matTooltip","YaRN: high correction dim (alpha). -1 = default"],["matInput","","formControlName","yarnBetaFast","type","number","matTooltip","YaRN: low correction dim (beta). -1 = default"],["matInput","","formControlName","specDraftNMax","type","number","matTooltip","Max number of tokens to draft for speculative decoding. Default: 3"],["appearance","outline",1,"form-col",3,"changed"],["formControlName","modelDraft","label","Draft Model Path","placeholder","/path/to/draft-model.gguf",3,"existingPaths","fieldClass"],["formControlName","specDraftDevice","multiple","","placeholder","Select GPU devices for draft model","matTooltip","Devices for offloading the draft model. Same options as main --device"],["matInput","","formControlName","nGpuLayersDraft","type","number","matTooltip","Max draft model layers to store in VRAM. 999 = all layers"],["formControlName","specDraftCacheTypeK","matTooltip","KV cache data type for K for the draft model"],["formControlName","specDraftCacheTypeV","matTooltip","KV cache data type for V for the draft model"],["matInput","","formControlName","specNgramModNMin","type","number","matTooltip","Min number of ngram tokens for ngram-mod speculative decoding. Default: 48"],["matInput","","formControlName","specNgramModNMax","type","number","matTooltip","Max number of ngram tokens for ngram-mod speculative decoding. Default: 64"],["matInput","","formControlName","specNgramModNMatch","type","number","matTooltip","Ngram-mod lookup length. Default: 24"],["matInput","","formControlName","specNgramSimpleSizeN","type","number","matTooltip","Ngram size N for ngram-simple: length of lookup n-gram. Default: 12"],["matInput","","formControlName","specNgramSimpleSizeM","type","number","matTooltip","Ngram size M for ngram-simple: length of draft m-gram. Default: 48"],["matInput","","formControlName","specNgramSimpleMinHits","type","number","matTooltip","Minimum hits for ngram-simple speculative decoding. Default: 1"]],template:function(t,n){if(t&1&&(l(0,"h2",3),u(1),c(),l(2,"mat-dialog-content")(3,"form",4)(4,"mat-form-field",5),v(5,"input",6),D(),l(6,"mat-label"),u(7,"Service Name"),c(),S(8,zy,2,0,"mat-error")(9,jy,2,0,"mat-error"),c(),l(10,"mat-form-field",5),v(11,"input",7),D(),l(12,"mat-label"),u(13,"Binary Path"),c(),S(14,Hy,2,0,"mat-error"),c(),l(15,"mat-autocomplete",null,0),Le(17,Uy,5,3,"mat-option",8,By),c(),l(19,"mat-expansion-panel",9)(20,"mat-expansion-panel-header")(21,"mat-panel-title"),u(22,"Model"),c()(),v(23,"app-file-autocomplete",10),D(),v(24,"app-file-autocomplete",11),D(),l(25,"mat-form-field",5),v(26,"input",12),D(),l(27,"mat-label"),u(28,"Model Alias"),c()()(),l(29,"mat-expansion-panel",9)(30,"mat-expansion-panel-header")(31,"mat-panel-title"),u(32,"GPU & Memory"),c()(),l(33,"div",13)(34,"mat-form-field",14),v(35,"input",15),D(),l(36,"mat-label"),u(37,"GPU Layers"),c()(),l(38,"mat-form-field",16)(39,"mat-select",17),Le(40,Gy,2,2,"mat-option",8,Sc),c(),D(),l(42,"mat-label"),u(43,"Device (multi-select)"),c()()(),l(44,"div",13)(45,"mat-form-field",18)(46,"mat-select",19)(47,"mat-option",20),u(48,"layer (pipelined)"),c(),l(49,"mat-option",21),u(50,"row (parallelized)"),c(),l(51,"mat-option",22),u(52,"tensor (experimental)"),c(),l(53,"mat-option",23),u(54,"none (single GPU)"),c()(),D(),l(55,"mat-label"),u(56,"Split Mode"),c()(),l(57,"mat-form-field",18),v(58,"input",24),D(),l(59,"mat-label"),u(60,"Tensor Split"),c()(),l(61,"mat-form-field",18),v(62,"input",25),D(),l(63,"mat-label"),u(64,"Main GPU"),c()()(),l(65,"div",26),u(66,"Memory"),c(),l(67,"div",13)(68,"mat-form-field",18)(69,"mat-select",27)(70,"mat-option",28),u(71,"on"),c(),l(72,"mat-option",29),u(73,"off"),c()(),D(),l(74,"mat-label"),u(75,"Fit to VRAM"),c()(),l(76,"mat-form-field",18),v(77,"input",30),D(),l(78,"mat-label"),u(79,"Fit Target (MiB)"),c()(),l(80,"mat-form-field",18),v(81,"input",31),D(),l(82,"mat-label"),u(83,"Fit Min Ctx"),c()()(),l(84,"div",13)(85,"mat-form-field",18)(86,"mat-select",32)(87,"mat-option",28),u(88,"on"),c(),l(89,"mat-option",29),u(90,"off"),c()(),D(),l(91,"mat-label"),u(92,"mlock (pin RAM)"),c()(),l(93,"mat-form-field",18)(94,"mat-select",33)(95,"mat-option",28),u(96,"on"),c(),l(97,"mat-option",29),u(98,"off"),c()(),D(),l(99,"mat-label"),u(100,"mmap"),c()(),l(101,"mat-form-field",18)(102,"mat-select",34)(103,"mat-option",28),u(104,"on"),c(),l(105,"mat-option",29),u(106,"off"),c()(),D(),l(107,"mat-label"),u(108,"CPU MoE"),c()(),l(109,"mat-form-field",18),v(110,"input",35),D(),l(111,"mat-label"),u(112,"N CPU MoE Layers"),c()()()(),l(113,"mat-expansion-panel")(114,"mat-expansion-panel-header")(115,"mat-panel-title"),u(116,"Context & KV Cache"),c()(),l(117,"div",13)(118,"mat-form-field",18)(119,"input",36),I("blur",function(r){return n.onCtxSizeInput(r)})("keyup.enter",function(r){return n.onCtxSizeInput(r)}),c(),D(),l(120,"mat-label"),u(121,"Context Size"),c()(),l(122,"mat-autocomplete",null,1),Le(124,$y,2,2,"mat-option",8,Vy),c(),l(126,"mat-form-field",18),v(127,"input",37),D(),l(128,"mat-label"),u(129,"Batch Size"),c()(),l(130,"mat-form-field",18),v(131,"input",38),D(),l(132,"mat-label"),u(133,"Ubatch Size"),c()()(),l(134,"div",13)(135,"mat-form-field",18)(136,"mat-select",39),Le(137,Wy,2,2,"mat-option",8,wi),c(),D(),l(139,"mat-label"),u(140,"KV Cache Type K"),c()(),l(141,"mat-form-field",18)(142,"mat-select",40),Le(143,qy,2,2,"mat-option",8,wi),c(),D(),l(145,"mat-label"),u(146,"KV Cache Type V"),c()(),l(147,"mat-form-field",18)(148,"mat-select",41)(149,"mat-option",28),u(150,"on"),c(),l(151,"mat-option",29),u(152,"off"),c()(),D(),l(153,"mat-label"),u(154,"KV Offload"),c()()(),l(155,"div",13)(156,"mat-form-field",18),v(157,"input",42),D(),l(158,"mat-label"),u(159,"Cache RAM (MiB)"),c()(),l(160,"mat-form-field",18)(161,"mat-select",43)(162,"mat-option",28),u(163,"on"),c(),l(164,"mat-option",29),u(165,"off"),c()(),D(),l(166,"mat-label"),u(167,"Full SWA Cache"),c()()()(),l(168,"mat-expansion-panel")(169,"mat-expansion-panel-header")(170,"mat-panel-title"),u(171,"RoPE Scaling"),c()(),l(172,"div",13)(173,"mat-form-field",18)(174,"mat-select",44)(175,"mat-option",23),u(176,"none"),c(),l(177,"mat-option",45),u(178,"linear"),c(),l(179,"mat-option",46),u(180,"yarn"),c()(),D(),l(181,"mat-label"),u(182,"Scaling Method"),c()(),l(183,"mat-form-field",18),v(184,"input",47),D(),l(185,"mat-label"),u(186,"Scale Factor"),c()(),l(187,"mat-form-field",18),v(188,"input",48),D(),l(189,"mat-label"),u(190,"Freq Base"),c()(),l(191,"mat-form-field",18),v(192,"input",49),D(),l(193,"mat-label"),u(194,"Freq Scale"),c()()(),S(195,Ky,23,10),c(),l(196,"mat-expansion-panel")(197,"mat-expansion-panel-header")(198,"mat-panel-title"),u(199,"Generation"),c(),l(200,"mat-panel-description"),u(201,"Runtime and batching defaults"),c()(),l(202,"div",13)(203,"mat-form-field",18),v(204,"input",50),D(),l(205,"mat-label"),u(206,"Threads"),c()(),l(207,"mat-form-field",18),v(208,"input",51),D(),l(209,"mat-label"),u(210,"Parallel Slots"),c()(),l(211,"mat-form-field",18),v(212,"input",52),D(),l(213,"mat-label"),u(214,"Max Tokens (n-predict)"),c()()(),l(215,"div",13)(216,"mat-form-field",18)(217,"mat-select",53)(218,"mat-option",28),u(219,"on"),c(),l(220,"mat-option",29),u(221,"off"),c(),l(222,"mat-option",54),u(223,"auto"),c()(),D(),l(224,"mat-label"),u(225,"Flash Attention"),c()(),l(226,"mat-form-field",18)(227,"mat-select",55)(228,"mat-option",28),u(229,"on"),c(),l(230,"mat-option",29),u(231,"off"),c()(),D(),l(232,"mat-label"),u(233,"Cont. Batching"),c()(),l(234,"mat-form-field",18)(235,"mat-select",56)(236,"mat-option",28),u(237,"on"),c(),l(238,"mat-option",29),u(239,"off"),c()(),D(),l(240,"mat-label"),u(241,"Context Shift"),c()()()(),l(242,"mat-expansion-panel")(243,"mat-expansion-panel-header")(244,"mat-panel-title"),u(245,"Sampling Defaults"),c(),l(246,"mat-panel-description"),u(247,"Default sampling parameters for generation"),c()(),l(248,"div",26),u(249,"Core"),c(),l(250,"div",13)(251,"mat-form-field",18),v(252,"input",57),D(),l(253,"mat-label"),u(254,"Temperature"),c()(),l(255,"mat-form-field",18),v(256,"input",58),D(),l(257,"mat-label"),u(258,"Seed"),c()(),l(259,"mat-form-field",18),v(260,"input",59),D(),l(261,"mat-label"),u(262,"Top-K"),c()(),l(263,"mat-form-field",18),v(264,"input",60),D(),l(265,"mat-label"),u(266,"Top-P"),c()()(),l(267,"div",13)(268,"mat-form-field",18),v(269,"input",61),D(),l(270,"mat-label"),u(271,"Min-P"),c()(),l(272,"mat-form-field",18),v(273,"input",62),D(),l(274,"mat-label"),u(275,"Typical-P"),c()(),l(276,"mat-form-field",18)(277,"mat-select",63)(278,"mat-option",8),u(279,"disabled"),c(),l(280,"mat-option",8),u(281,"Mirostat"),c(),l(282,"mat-option",8),u(283,"Mirostat 2.0"),c()(),D(),l(284,"mat-label"),u(285,"Mirostat"),c()(),l(286,"mat-form-field",18),v(287,"input",64),D(),l(288,"mat-label"),u(289,"Dyn. Temp Range"),c()()(),l(290,"div",26),u(291,"Penalties"),c(),l(292,"div",13)(293,"mat-form-field",18),v(294,"input",65),D(),l(295,"mat-label"),u(296,"Repeat Last N"),c()(),l(297,"mat-form-field",18),v(298,"input",66),D(),l(299,"mat-label"),u(300,"Repeat Penalty"),c()(),l(301,"mat-form-field",18),v(302,"input",67),D(),l(303,"mat-label"),u(304,"Presence Penalty"),c()(),l(305,"mat-form-field",18),v(306,"input",68),D(),l(307,"mat-label"),u(308,"Frequency Penalty"),c()()(),l(309,"div",26),u(310,"DRY Sampling"),c(),l(311,"div",13)(312,"mat-form-field",18),v(313,"input",69),D(),l(314,"mat-label"),u(315,"DRY Multiplier"),c()(),l(316,"mat-form-field",18),v(317,"input",70),D(),l(318,"mat-label"),u(319,"DRY Base"),c()()()(),l(320,"mat-expansion-panel")(321,"mat-expansion-panel-header")(322,"mat-panel-title"),u(323,"Speculative Decoding"),c(),l(324,"mat-panel-description"),u(325,"Draft model and speculative decoding options"),c()(),l(326,"mat-form-field",71)(327,"mat-select",72)(328,"mat-option",23),u(329,"none"),c(),l(330,"mat-option",73),u(331,"draft-simple"),c(),l(332,"mat-option",74),u(333,"draft-eagle3"),c(),l(334,"mat-option",75),u(335,"draft-mtp"),c(),l(336,"mat-option",76),u(337,"ngram-simple"),c(),l(338,"mat-option",77),u(339,"ngram-mod"),c()(),D(),l(340,"mat-label"),u(341,"Spec Type"),c()(),S(342,Yy,2,0,"div",78),S(343,i0,10,5),S(344,n0,15,6),S(345,o0,15,6),c(),l(346,"mat-expansion-panel")(347,"mat-expansion-panel-header")(348,"mat-panel-title"),u(349,"LoRA & Adapters"),c()(),v(350,"app-file-autocomplete",79),D(),l(351,"mat-form-field",5),v(352,"input",80),D(),l(353,"mat-label"),u(354,"LoRA Scaled"),c()()(),l(355,"mat-expansion-panel")(356,"mat-expansion-panel-header")(357,"mat-panel-title"),u(358,"Server & Network"),c()(),l(359,"div",13)(360,"mat-form-field",18),v(361,"input",81),D(),l(362,"mat-label"),u(363,"Host"),c()(),l(364,"mat-autocomplete",null,2),Le(366,a0,5,3,"mat-option",8,Sc),c(),l(368,"mat-form-field",18),v(369,"input",82),D(),l(370,"mat-label"),u(371,"Port"),c()(),l(372,"mat-form-field",18),v(373,"input",83),D(),l(374,"mat-label"),u(375,"Timeout (s)"),c()(),l(376,"mat-form-field",18),v(377,"input",84),D(),l(378,"mat-label"),u(379,"HTTP Threads"),c()()(),v(380,"app-file-autocomplete",85),D(),l(381,"div",13)(382,"mat-form-field",18)(383,"mat-select",86)(384,"mat-option",28),u(385,"on"),c(),l(386,"mat-option",29),u(387,"off"),c()(),D(),l(388,"mat-label"),u(389,"Prometheus Metrics"),c()(),l(390,"mat-form-field",18)(391,"mat-select",87)(392,"mat-option",28),u(393,"on"),c(),l(394,"mat-option",29),u(395,"off"),c()(),D(),l(396,"mat-label"),u(397,"Slots Endpoint"),c()(),l(398,"mat-form-field",18)(399,"mat-select",88)(400,"mat-option",28),u(401,"on"),c(),l(402,"mat-option",29),u(403,"off"),c()(),D(),l(404,"mat-label"),u(405,"Prompt Cache"),c()(),l(406,"mat-form-field",18),v(407,"input",89),D(),l(408,"mat-label"),u(409,"Cache Reuse"),c()()()(),l(410,"mat-expansion-panel")(411,"mat-expansion-panel-header")(412,"mat-panel-title"),u(413,"Reasoning"),c(),l(414,"mat-panel-description"),u(415,"Thinking/reasoning mode settings"),c()(),l(416,"div",13)(417,"mat-form-field",18)(418,"mat-select",90)(419,"mat-option",28),u(420,"on"),c(),l(421,"mat-option",29),u(422,"off"),c(),l(423,"mat-option",54),u(424,"auto"),c()(),D(),l(425,"mat-label"),u(426,"Reasoning"),c()(),l(427,"mat-form-field",18),v(428,"input",91),D(),l(429,"mat-label"),u(430,"Reasoning Budget"),c()(),l(431,"mat-form-field",18)(432,"mat-select",92)(433,"mat-option",54),u(434,"auto"),c(),l(435,"mat-option",23),u(436,"none (raw)"),c(),l(437,"mat-option",93),u(438,"deepseek"),c(),l(439,"mat-option",94),u(440,"deepseek-legacy"),c()(),D(),l(441,"mat-label"),u(442,"Reasoning Format"),c()()()()()(),l(443,"mat-dialog-actions",95)(444,"button",96),I("click",function(){return n.cancel()}),u(445,"Cancel"),c(),l(446,"button",97),I("click",function(){return n.save()}),u(447),c()()),t&2){let a=Ye(16),r=Ye(123),m=Ye(365);d(),ye("",n.isClone?"Clone":n.isEdit?"Edit":"Add"," llama-server service"),d(2),w("formGroup",n.form),d(),f("changed",n.isControlChanged("name")),d(),w("disabled",n.isEdit&&!n.isClone),k(),d(3),E(n.form.controls.name.errors?.required?8:n.form.controls.name.errors?.pattern?9:-1),d(2),f("changed",n.isControlChanged("command")),d(),w("matAutocomplete",a),k(),d(3),E(n.form.controls.command.errors?.required?14:-1),d(3),Be(n.filteredCommands()),d(2),f("has-changed",n.isSectionChanged("model","mmproj","alias")),d(4),w("existingPaths",n.existingModelPaths())("fieldClass",n.isControlChanged("model")?"changed":""),k(),d(),w("existingPaths",n.existingMmprojPaths())("fieldClass",n.isControlChanged("mmproj")?"changed":""),k(),d(),f("changed",n.isControlChanged("alias")),d(),k(),d(3),f("has-changed",n.isSectionChanged("nGpuLayers","device","tensorSplit","splitMode","mainGpu","fit","fitTarget","fitCtx","mlock","mmap","cpuMoe","nCpuMoe")),d(5),f("changed",n.isControlChanged("nGpuLayers")),d(),k(),d(3),f("changed",n.isControlChanged("device")),d(),k(),d(),Be(n.availableDevices()),d(5),f("changed",n.isControlChanged("splitMode")),d(),k(),d(11),f("changed",n.isControlChanged("tensorSplit")&&!n.isTensorSplitDisabled()),d(),w("disabled",n.isTensorSplitDisabled()),k(),d(3),f("changed",n.isControlChanged("mainGpu")),d(),k(),d(6),f("changed",n.isControlChanged("fit")),d(),k(),d(7),f("changed",n.isControlChanged("fitTarget")&&!n.isFitTargetDisabled()),d(),w("disabled",n.isFitTargetDisabled()),k(),d(3),f("changed",n.isControlChanged("fitCtx")&&!n.isFitTargetDisabled()),d(),w("disabled",n.isFitTargetDisabled()),k(),d(4),f("changed",n.isControlChanged("mlock")),d(),k(),d(7),f("changed",n.isControlChanged("mmap")),d(),k(),d(7),f("changed",n.isControlChanged("cpuMoe")),d(),k(),d(7),f("changed",n.isControlChanged("nCpuMoe")&&!n.isCpuMoeLayersDisabled()),d(),w("disabled",n.isCpuMoeLayersDisabled()),k(),d(3),f("has-changed",n.isSectionChanged("ctxSize","batchSize","ubatchSize","cacheTypeK","cacheTypeV","kvOffload","cacheRam","swaFull")),d(5),f("changed",n.isControlChanged("ctxSize")),d(),w("matAutocomplete",r),k(),d(5),Be(n.ctxPresets()),d(2),f("changed",n.isControlChanged("batchSize")),d(),k(),d(3),f("changed",n.isControlChanged("ubatchSize")),d(),k(),d(4),f("changed",n.isControlChanged("cacheTypeK")),d(),k(),d(),Be(n.kvCacheTypes),d(4),f("changed",n.isControlChanged("cacheTypeV")),d(),k(),d(),Be(n.kvCacheTypes),d(4),f("changed",n.isControlChanged("kvOffload")),d(),k(),d(8),f("changed",n.isControlChanged("cacheRam")),d(),k(),d(3),f("changed",n.isControlChanged("swaFull")),d(),k(),d(7),f("has-changed",n.isSectionChanged("ropeScaling","ropeScale","ropeFreqBase","ropeFreqScale","yarnOrigCtx","yarnExtFactor","yarnAttnFactor","yarnBetaSlow","yarnBetaFast")),d(5),f("changed",n.isControlChanged("ropeScaling")),d(),k(),d(9),f("changed",n.isControlChanged("ropeScale")&&!n.isRopeParamsDisabled()),d(),w("disabled",n.isRopeParamsDisabled()),k(),d(3),f("changed",n.isControlChanged("ropeFreqBase")&&!n.isRopeParamsDisabled()),d(),w("disabled",n.isRopeParamsDisabled()),k(),d(3),f("changed",n.isControlChanged("ropeFreqScale")&&!n.isRopeParamsDisabled()),d(),w("disabled",n.isRopeParamsDisabled()),k(),d(3),E(n.showYarnParams()?195:-1),d(),f("has-changed",n.isSectionChanged("threads","parallel","flashAttn","contBatching","contextShift","nPredict")),d(7),f("changed",n.isControlChanged("threads")),d(),k(),d(3),f("changed",n.isControlChanged("parallel")),d(),k(),d(3),f("changed",n.isControlChanged("nPredict")),d(),k(),d(4),f("changed",n.isControlChanged("flashAttn")),d(),k(),d(9),f("changed",n.isControlChanged("contBatching")),d(),k(),d(7),f("changed",n.isControlChanged("contextShift")),d(),k(),d(7),f("has-changed",n.isSectionChanged("temperature","seed","topK","topP","minP","typicalP","mirostat","dynatempRange","repeatLastN","repeatPenalty","presencePenalty","frequencyPenalty","dryMultiplier","dryBase")),d(9),f("changed",n.isControlChanged("temperature")),d(),k(),d(3),f("changed",n.isControlChanged("seed")),d(),k(),d(3),f("changed",n.isControlChanged("topK")&&!n.isMirostatEnabled()),d(),w("disabled",n.isMirostatEnabled()),k(),d(3),f("changed",n.isControlChanged("topP")&&!n.isMirostatEnabled()),d(),w("disabled",n.isMirostatEnabled()),k(),d(4),f("changed",n.isControlChanged("minP")),d(),k(),d(3),f("changed",n.isControlChanged("typicalP")&&!n.isMirostatEnabled()),d(),w("disabled",n.isMirostatEnabled()),k(),d(3),f("changed",n.isControlChanged("mirostat")),d(),k(),d(),w("value",0),d(2),w("value",1),d(2),w("value",2),d(4),f("changed",n.isControlChanged("dynatempRange")),d(),k(),d(6),f("changed",n.isControlChanged("repeatLastN")),d(),k(),d(3),f("changed",n.isControlChanged("repeatPenalty")),d(),k(),d(3),f("changed",n.isControlChanged("presencePenalty")),d(),k(),d(3),f("changed",n.isControlChanged("frequencyPenalty")),d(),k(),d(6),f("changed",n.isControlChanged("dryMultiplier")),d(),k(),d(3),f("changed",n.isControlChanged("dryBase")),d(),k(),d(3),f("has-changed",n.isSectionChanged("modelDraft","specDraftDevice","specDraftNMax","nGpuLayersDraft","specDraftCacheTypeK","specDraftCacheTypeV","specType","specNgramModNMin","specNgramModNMax","specNgramModNMatch","specNgramSimpleSizeN","specNgramSimpleSizeM","specNgramSimpleMinHits")),d(6),f("changed",n.isControlChanged("specType")),d(),k(),d(15),E(n.showDraftParams()&&!n.showDraftModelFields()?342:-1),d(),E(n.showDraftParams()?343:-1),d(),E(n.showNgramModParams()?344:-1),d(),E(n.showNgramSimpleParams()?345:-1),d(),f("has-changed",n.isSectionChanged("lora","loraScaled")),d(4),w("existingPaths",n.existingLoraPaths())("fieldClass",n.isControlChanged("lora")?"changed":""),k(),d(),f("changed",n.isControlChanged("loraScaled")),d(),k(),d(3),f("has-changed",n.isSectionChanged("host","port","timeout","threadsHttp","apiKeyFile","metrics","slots","cachePrompt","cacheReuse")),d(5),f("changed",n.isControlChanged("host")),d(),w("matAutocomplete",m),k(),d(5),Be(n.filteredHosts()),d(2),f("changed",n.isControlChanged("port")&&!n.isPortDisabled()),d(),w("disabled",n.isPortDisabled()),k(),d(3),f("changed",n.isControlChanged("timeout")),d(),k(),d(3),f("changed",n.isControlChanged("threadsHttp")),d(),k(),d(3),w("existingPaths",n.existingApiKeyPaths())("fieldClass",n.isControlChanged("apiKeyFile")?"changed":""),k(),d(2),f("changed",n.isControlChanged("metrics")),d(),k(),d(7),f("changed",n.isControlChanged("slots")),d(),k(),d(7),f("changed",n.isControlChanged("cachePrompt")),d(),k(),d(7),f("changed",n.isControlChanged("cacheReuse")&&!n.isCacheReuseDisabled()),d(),w("disabled",n.isCacheReuseDisabled()),k(),d(3),f("has-changed",n.isSectionChanged("reasoning","reasoningBudget","reasoningFormat")),d(7),f("changed",n.isControlChanged("reasoning")),d(),k(),d(9),f("changed",n.isControlChanged("reasoningBudget")&&!n.isReasoningParamsDisabled()),d(),w("disabled",n.isReasoningParamsDisabled()),k(),d(3),f("changed",n.isControlChanged("reasoningFormat")&&!n.isReasoningParamsDisabled()),d(),w("disabled",n.isReasoningParamsDisabled()),k(),d(14),w("disabled",n.form.invalid),d(),ye(" ",n.isEdit&&!n.isClone?"Save":"Create"," ")}},dependencies:[$e,ao,Or,Yi,zl,Xi,no,ro,ri,Dn,wo,xo,Mt,Tn,dt,ht,us,op,xc,tp,np,ip,Ct,yt,Ut,so,$t,Gt,Ci,nn,an,on,fs,ps,lp,Dc,cp],styles:['@charset "UTF-8";.llama-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;min-width:640px}.form-row[_ngcontent-%COMP%]{display:flex;gap:12px;margin-bottom:4px}.form-col[_ngcontent-%COMP%]{flex:1}.form-col-60[_ngcontent-%COMP%]{flex:3}.form-col-40[_ngcontent-%COMP%]{flex:2}.full-width[_ngcontent-%COMP%]{width:100%}.auto-path[_ngcontent-%COMP%]{font-family:monospace}.auto-from[_ngcontent-%COMP%]{margin-left:8px;opacity:.6;font-size:12px}mat-dialog-content[_ngcontent-%COMP%]{padding-top:10px!important;max-height:80vh}mat-expansion-panel[_ngcontent-%COMP%]{margin-bottom:0}mat-dialog-actions[_ngcontent-%COMP%]{gap:8px}.subsection-label[_ngcontent-%COMP%]{font-size:12px;font-weight:500;color:#0009;margin:4px 0 14px;text-transform:uppercase;letter-spacing:.5px}.sub-section-hint[_ngcontent-%COMP%]{font-size:11px;color:#0006;margin-bottom:4px}mat-expansion-panel.has-changed[_ngcontent-%COMP%] mat-panel-title[_ngcontent-%COMP%]{font-weight:700}mat-form-field.changed[_ngcontent-%COMP%] .mat-mdc-form-field-infix input, mat-form-field.changed[_ngcontent-%COMP%] .mat-mdc-form-field-infix .mat-mdc-select{font-weight:700}']})}}return i})();var c0=(i,o)=>o.name;function d0(i,o){if(i&1){let e=Ve();l(0,"button",21),I("click",function(n){pe(e);let a=C(2).$implicit;return C(2).control(a.name,"start"),fe(n.stopPropagation())}),l(1,"mat-icon"),u(2,"play_arrow"),c(),u(3," Start "),c()}if(i&2){let e=C(2).$implicit,t=C(2);w("disabled",t.busy()?.name===e.name)}}function m0(i,o){if(i&1){let e=Ve();l(0,"button",22),I("click",function(n){pe(e);let a=C(2).$implicit;return C(2).control(a.name,"stop"),fe(n.stopPropagation())}),l(1,"mat-icon"),u(2,"stop"),c(),u(3," Stop "),c()}if(i&2){let e=C(2).$implicit,t=C(2);w("disabled",t.busy()?.name===e.name)}}function u0(i,o){if(i&1){let e=Ve();l(0,"button",23),I("click",function(n){pe(e);let a=C(2).$implicit;return C(2).control(a.name,"disable"),fe(n.stopPropagation())}),l(1,"mat-icon"),u(2,"lock"),c(),u(3," Disable "),c()}if(i&2){let e=C(2).$implicit,t=C(2);w("disabled",t.busy()?.name===e.name)}}function h0(i,o){if(i&1){let e=Ve();l(0,"button",23),I("click",function(n){pe(e);let a=C(2).$implicit;return C(2).control(a.name,"enable"),fe(n.stopPropagation())}),l(1,"mat-icon"),u(2,"lock_open"),c(),u(3," Enable "),c()}if(i&2){let e=C(2).$implicit,t=C(2);w("disabled",e.enabled||t.busy()?.name===e.name)}}function p0(i,o){if(i&1&&(S(0,d0,4,1,"button",18)(1,m0,4,1,"button",19),S(2,u0,4,1,"button",20)(3,h0,4,1,"button",20)),i&2){let e=C().$implicit;E(e.running?1:0),d(2),E(e.enabled?2:3)}}function f0(i,o){if(i&1){let e=Ve();l(0,"tr",11),I("click",function(){let n=pe(e).$implicit,a=C(2);return fe(a.selectedServiceService.select(n.name))}),l(1,"td")(2,"div",12),v(3,"span",13),l(4,"span",14),u(5),c()()(),l(6,"td",15),S(7,p0,4,2),c(),l(8,"td",15)(9,"div")(10,"button",16)(11,"mat-icon"),u(12,"more_vert"),c()(),l(13,"mat-menu",17,1)(15,"button",7),I("click",function(){let n=pe(e).$implicit,a=C(2);return fe(a.editService(n))}),l(16,"mat-icon"),u(17,"edit"),c(),l(18,"span"),u(19,"Edit"),c()(),l(20,"button",7),I("click",function(){let n=pe(e).$implicit,a=C(2);return fe(a.cloneService(n))}),l(21,"mat-icon"),u(22,"content_copy"),c(),l(23,"span"),u(24,"Clone"),c()(),l(25,"button",7),I("click",function(){let n=pe(e).$implicit,a=C(2);return fe(a.deleteService(n.name))}),l(26,"mat-icon"),u(27,"delete"),c(),l(28,"span"),u(29,"Delete"),c()()()()()()}if(i&2){let e=o.$implicit,t=Ye(14);f("custom",e.hasConfig),d(3),f("running",e.running),d(),f("disabled",!e.enabled),d(),Z(e.name),d(2),E(e.installed?7:-1),d(2),Ne("visibility",e.hasConfig?"visible":"hidden"),d(),w("matMenuTriggerFor",t)}}function g0(i,o){if(i&1&&(l(0,"table",8)(1,"tbody"),Le(2,f0,30,11,"tr",10,c0),c()()),i&2){let e=C();d(2),Be(e.unified())}}function _0(i,o){i&1&&(l(0,"div",9)(1,"p"),u(2,'No services configured. Click "Manage" to select system services or "Add Service" to create one.'),c()())}var up=(()=>{class i{constructor(){this.serviceService=s(Zt),this.serviceList=s(ss),this.selectedServiceService=s(rs),this.dialog=s(bo),this.snackBar=s(Lh),this.services=this.serviceList.services,this.configs=N([]),this.loading=N(!0),this.busy=N(null),this.unified=K(()=>{let e=this.services(),t=this.configs(),n=new Map;for(let m of t)n.set(m.name,m);let a=e.filter(m=>n.has(m.name)).map(m=>{let h=n.get(m.name)??null;return{name:m.name,running:m.running,enabled:m.enabled,installed:m.installed,pid:m.pid,error:m.error,config:h,hasConfig:!0}}),r=e.filter(m=>!n.has(m.name)).map(m=>Se(L({},m),{config:null,hasConfig:!1}));return[...a,...r]})}ngOnInit(){this.load()}load(){return Ce(this,null,function*(){this.loading.set(!0);try{yield this.serviceList.refresh(),this.configs.set(yield je(this.serviceService.fetchConfigs()))}catch(e){console.error("[ServicesComponent] load error:",e)}finally{this.loading.set(!1)}})}control(e,t){return Ce(this,null,function*(){let n=this.busy();if(!(n&&n.name===e&&n.action===t)){this.selectedServiceService.select(e),this.busy.set({name:e,action:t});try{let a=yield je(this.serviceService.control(e,t));a.error&&this.showError(`${e}: ${a.error}`),yield this.load()}catch(a){this.showError(`${e}: ${String(a.error||a)}`)}finally{this.busy.set(null)}}})}showError(e){this.snackBar.open(e,"Dismiss",{duration:8e3,horizontalPosition:"center",verticalPosition:"top"})}manageServices(){this.dialog.open(Kh,{maxWidth:"600px"}).afterClosed().subscribe(t=>{t&&this.load()})}addService(e){this.openDialog(null,e)}editService(e){this.selectedServiceService.select(e.name),this.openDialog(e.config,e.config?.type)}cloneService(e){if(!e.config)return;let t=Se(L({},e.config),{name:this.uniqueCloneName(e.name)});this.openDialog(t,t.type,!0)}uniqueCloneName(e){let t=new Set(this.configs().map(a=>a.name));if(!t.has(`${e}-copy`))return`${e}-copy`;let n=2;for(;t.has(`${e}-copy-${n}`);)n++;return`${e}-copy-${n}`}deleteService(e){return Ce(this,null,function*(){this.selectedServiceService.select(e);try{yield je(this.serviceService.deleteConfig(e)),yield this.load()}catch(t){this.showError(`Delete "${e}": ${String(t)}`)}})}hasFlags(e){return e.flags.length>0}openDialog(e,t,n=!1){if((t??e?.type??"generic")==="llama-server"){let r={config:e,allConfigs:this.configs(),clone:n},m=this.dialog.open(mp,{data:r,minWidth:"800px"});this.handleDialogResult(m,e,n)}else{let r={config:e,allConfigs:this.configs(),clone:n},m=this.dialog.open(jh,{data:r,minWidth:"1000px"});this.handleDialogResult(m,e,n)}}handleDialogResult(e,t,n=!1){e.afterClosed().subscribe(a=>Ce(this,null,function*(){if(a)try{if(n)yield je(this.serviceService.saveConfig(a));else{let r=t?.name??null;if(r!==null&&r!==a.name){let h=this.unified().find(y=>y.name===r),g=h?.running??!1,_=h?.enabled??!1;yield je(this.serviceService.deleteConfig(r)),yield je(this.serviceService.saveConfig(a)),_&&(yield je(this.serviceService.control(a.name,"enable"))),g&&(yield je(this.serviceService.control(a.name,"start")))}else yield je(this.serviceService.saveConfig(a))}}catch(r){this.showError(`Save: ${String(r)}`)}finally{yield this.load()}}))}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-services"]],decls:25,vars:2,consts:[["addMenu",""],["serviceMenu","matMenu"],[1,"services-card"],[1,"section-header"],[1,"header-actions"],["mat-stroked-button","",3,"click"],["mat-raised-button","","color","primary","title","Install your own service.",3,"matMenuTriggerFor"],["mat-menu-item","",3,"click"],[1,"services-list"],[1,"empty"],[3,"custom"],[3,"click"],[1,"service-name"],[1,"status-dot"],[1,"name-text"],[1,"service-actions-cell"],["mat-icon-button","","title","Service actions",3,"matMenuTriggerFor"],["yPosition","below"],["mat-raised-button","","color","primary",3,"disabled"],["mat-raised-button","","color","warn",3,"disabled"],["mat-stroked-button","",3,"disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],["mat-raised-button","","color","warn",3,"click","disabled"],["mat-stroked-button","",3,"click","disabled"]],template:function(t,n){if(t&1&&(l(0,"div",2)(1,"div",3)(2,"h2"),u(3,"Services"),c(),l(4,"div",4)(5,"button",5),I("click",function(){return n.manageServices()}),l(6,"mat-icon"),u(7,"tune"),c(),u(8," Select services to manage... "),c(),l(9,"button",6)(10,"mat-icon"),u(11,"add"),c(),u(12," Add custom service... "),c(),l(13,"mat-menu",null,0)(15,"button",7),I("click",function(){return n.addService("generic")}),l(16,"mat-icon"),u(17,"settings"),c(),u(18," Generic service "),c(),l(19,"button",7),I("click",function(){return n.addService("llama-server")}),l(20,"mat-icon"),u(21,"smart_toy"),c(),u(22," llama-server "),c()()()(),S(23,g0,4,0,"table",8)(24,_0,3,0,"div",9),c()),t&2){let a=Ye(14);d(9),w("matMenuTriggerFor",a),d(14),E(n.unified().length>0?23:n.loading()?-1:24)}},dependencies:[$e,dt,ht,Mn,po,as,rn,In,os,Kt,qt],styles:[".services-card[_ngcontent-%COMP%]{margin-bottom:24px}.section-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;margin-top:8px}.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:1.1rem;font-weight:600;color:#333}.section-header[_ngcontent-%COMP%] .header-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.services-list[_ngcontent-%COMP%]{width:100%;border-collapse:collapse}.services-list[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{border-bottom:1px solid #e0e0e0;transition:background-color .2s ease}.services-list[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background-color:#fff}.services-list[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child{border-bottom:none}.services-list[_ngcontent-%COMP%] tr.custom[_ngcontent-%COMP%], .services-list[_ngcontent-%COMP%] tr.custom[_ngcontent-%COMP%]:first-child td[_ngcontent-%COMP%]:first-child{border-left:3px solid #7c4dff}.services-list[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:4px 12px;vertical-align:middle}.service-name[_ngcontent-%COMP%]{font-size:1rem;font-weight:600;white-space:nowrap;display:flex;align-items:center;gap:8px}.service-name[_ngcontent-%COMP%] .status-dot[_ngcontent-%COMP%]{display:inline-block;width:10px;height:10px;border-radius:50%;background-color:#bdbdbd}.service-name[_ngcontent-%COMP%] .status-dot.running[_ngcontent-%COMP%]{background-color:#4caf50}.service-name[_ngcontent-%COMP%] .name-text[_ngcontent-%COMP%]{color:#212121}.service-name[_ngcontent-%COMP%] .name-text.disabled[_ngcontent-%COMP%]{color:#9e9e9e}.service-actions-cell[_ngcontent-%COMP%]{white-space:nowrap}.service-actions-cell[_ngcontent-%COMP%] button[_ngcontent-%COMP%] + button[_ngcontent-%COMP%]{margin-left:8px}.status-chip[_ngcontent-%COMP%], .enabled-chip[_ngcontent-%COMP%]{font-size:.8rem;font-weight:500}.status-chip.running[_ngcontent-%COMP%]{--mat-chip-elevated-container-color: #a5d6a7}.status-chip.stopped[_ngcontent-%COMP%]{--mat-chip-elevated-container-color: #ef9a9a}.enabled-chip.enabled[_ngcontent-%COMP%]{--mat-chip-elevated-container-color: #90caf9}.enabled-chip.disabled[_ngcontent-%COMP%]{--mat-chip-elevated-container-color: #bdbdbd}.empty[_ngcontent-%COMP%]{text-align:center;padding:24px;color:#999;font-size:.9rem}.empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0}"]})}}return i})();var b0=["journalBody"],v0=(i,o)=>o.name;function y0(i,o){if(i&1&&(l(0,"mat-option",7),u(1),c()),i&2){let e=o.$implicit;w("value",e.name),d(),Z(e.name)}}function C0(i,o){if(i&1){let e=Ve();l(0,"button",10),I("click",function(){pe(e);let n=C(2);return fe(n.toggleWordWrap())}),l(1,"mat-icon"),u(2,"wrap_text"),c()()}}function x0(i,o){if(i&1){let e=Ve();l(0,"button",11),I("click",function(){pe(e);let n=C(2);return fe(n.toggleWordWrap())}),l(1,"mat-icon"),u(2,"wrap_text"),c()()}}function w0(i,o){if(i&1){let e=Ve();l(0,"mat-select",6),I("ngModelChange",function(n){pe(e);let a=C();return fe(a.onServiceChange(n))}),l(1,"mat-option",7),u(2,"\u2014 None \u2014"),c(),Le(3,y0,2,2,"mat-option",7,v0),c(),D(),S(5,C0,3,0,"button",8)(6,x0,3,0,"button",9)}if(i&2){let e=C();w("ngModel",e.selectedService()),k(),d(),w("value",null),d(2),Be(e.services()),d(2),E(e.wordWrap()?5:6)}}function D0(i,o){if(i&1&&(l(0,"div",3),u(1),c()),i&2){let e=C();d(),Z(e.error())}}function k0(i,o){if(i&1&&(l(0,"div",4,0)(2,"pre"),u(3),c()()),i&2){let e=C();d(2),f("wrap-on",e.wordWrap()),d(),Z(e.journalText())}}function S0(i,o){i&1&&(l(0,"div",5)(1,"p"),u(2,"No service selected"),c()())}var E0=40,hp=(()=>{class i{toggleWordWrap(){this.wordWrap.update(e=>!e)}constructor(){this.serviceService=s(Zt),this.selectedServiceService=s(rs),this.serviceList=s(ss),this.cdr=s(ie),this.services=this.serviceList.services,this.servicesLoaded=this.serviceList.loaded,this.journalLines=N([]),this.journalLoading=N(!1),this.journalError=N(null),this.error=K(()=>this.serviceList.error()??this.journalError()),this.selectedService=K(()=>this.selectedServiceService.selectedService()),this.wordWrap=N(!0),this.journalText=K(()=>{let e=this.journalLines();return e.length===0?"":e.map(t=>t.timestamp?`${t.timestamp} ${t.message}`:t.message).join(`
5584
- `)}),At(()=>{if(!this.servicesLoaded())return;let e=this.selectedService();e!==null&&!this.services().some(t=>t.name===e)&&this.selectedServiceService.select(null)}),At(()=>{if(!this.servicesLoaded())return;this.selectedService()?(this.journalLines.set([]),this.journalError.set(null),this.restartPolling()):(this.stopPolling(),this.journalLines.set([]))}),this.serviceList.refresh()}ngAfterViewInit(){this.scrollToBottom()}ngOnDestroy(){this.stopPolling()}onServiceChange(e){this.selectedServiceService.select(e)}restartPolling(){this.stopPolling(),this.fetchJournal(),this.journalSub=Ia(0,1e3).subscribe(()=>this.fetchJournal())}stopPolling(){this.journalSub&&(this.journalSub.unsubscribe(),this.journalSub=void 0)}fetchJournal(){let e=this.selectedService();e&&(this.isTextSelected()||(this.journalLoading.set(!0),this.serviceService.fetchJournal(e,100).subscribe({next:t=>{let n=this.isScrolledToBottom();this.journalLines.set(t),this.journalError.set(null),this.journalLoading.set(!1),this.cdr.markForCheck(),requestAnimationFrame(()=>{n&&this.scrollToBottom()})},error:t=>{this.journalError.set(t.message),this.journalLoading.set(!1),this.cdr.markForCheck()}})))}get scrollContainer(){return this.journalBody?.nativeElement??null}isTextSelected(){let e=typeof window<"u"?window:null;if(!e)return!1;let t=e.getSelection();if(!t||t.isCollapsed||!t.rangeCount)return!1;let n=this.scrollContainer;return n?n.contains(t.anchorNode):!1}isScrolledToBottom(){let e=this.scrollContainer;return e?e.scrollHeight-e.scrollTop-e.clientHeight<=E0:!0}scrollToBottom(){let e=this.scrollContainer;e&&(e.scrollTop=e.scrollHeight)}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-journal-panel"]],viewQuery:function(t,n){if(t&1&&we(b0,5),t&2){let a;T(a=R())&&(n.journalBody=a.first)}},decls:9,vars:3,consts:[["journalBody",""],[1,"journal-card"],[1,"journal-header"],[1,"journal-error"],[1,"journal-body"],[1,"journal-body","journal-empty"],["disableOptionCentering","",1,"service-select",3,"ngModelChange","ngModel"],[3,"value"],["mat-flat-button","","color","primary","aria-label","Disable word wrap"],["mat-stroked-button","","aria-label","Enable word wrap"],["mat-flat-button","","color","primary","aria-label","Disable word wrap",3,"click"],["mat-stroked-button","","aria-label","Enable word wrap",3,"click"]],template:function(t,n){t&1&&(l(0,"mat-card",1)(1,"mat-card-content")(2,"div",2)(3,"h2"),u(4,"Journal"),c(),S(5,w0,7,3),c(),S(6,D0,2,1,"div",3),S(7,k0,4,3,"div",4)(8,S0,3,0,"div",5),c()()),t&2&&(d(5),E(n.servicesLoaded()&&n.services().length>0?5:-1),d(),E(n.error()?6:-1),d(),E(n.selectedService()?7:8))},dependencies:[$e,Hi,zi,ji,fs,ps,Mt,dt,ht,Kt,qt,Vi,ao,Xi,Vl],styles:[".journal-card[_ngcontent-%COMP%]{height:100%;display:flex;flex-direction:column;overflow:hidden}.journal-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;padding-bottom:8px}.journal-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-shrink:0}.journal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:20px;font-weight:500}.service-select[_ngcontent-%COMP%]{flex:1;min-width:150px}.journal-error[_ngcontent-%COMP%]{color:#f44336;font-size:13px;margin-bottom:8px;flex-shrink:0}.journal-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;background:#1e1e1e;border-radius:4px;padding:8px;min-height:0}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:#2d2d2d;border-radius:4px}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#555;border-radius:4px}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:#777}.journal-body[_ngcontent-%COMP%]{scrollbar-width:thin;scrollbar-color:#555 #2d2d2d}.journal-body[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:0;font-family:Courier New,Courier,monospace;font-size:12px;line-height:1.6;color:#d4d4d4;white-space:pre}.journal-body[_ngcontent-%COMP%] pre.wrap-on[_ngcontent-%COMP%]{white-space:pre-wrap}.journal-empty[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center}.journal-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:#888;font-size:14px}[_nghost-%COMP%] .mdc-button{min-width:32px}[_nghost-%COMP%] .mat-mdc-unelevated-button>.mat-icon, [_nghost-%COMP%] .mat-mdc-outlined-button>.mat-icon{margin-right:0}"]})}}return i})();var vs=(()=>{class i{constructor(){this.http=s(jt),this.baseUrl="/api/system"}reboot(){return Ce(this,null,function*(){yield je(this.http.post(`${this.baseUrl}/reboot`,null))})}shutdown(){return Ce(this,null,function*(){yield je(this.http.post(`${this.baseUrl}/shutdown`,null))})}getSystemInfo(){return Ce(this,null,function*(){return je(this.http.get(`${this.baseUrl}/info`))})}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275prov=ae({token:i,factory:i.\u0275fac,providedIn:"root"})}}return i})();var M0=(i,o)=>o.device,A0=(i,o)=>o.path;function I0(i,o){i&1&&v(0,"mat-progress-bar",2)}function T0(i,o){if(i&1&&(l(0,"p",3),u(1),c()),i&2){let e=C();d(),Z(e.error())}}function R0(i,o){if(i&1&&(l(0,"span",11),u(1),c()),i&2){let e=C(2);d(),Z(e.info().uptime)}}function O0(i,o){if(i&1&&(l(0,"div",12)(1,"span",13),u(2,"Version"),c(),l(3,"span",14),u(4),c()()),i&2){let e=C(2);d(4),Z(e.info().os.version)}}function F0(i,o){if(i&1&&(l(0,"div",16)(1,"div",18)(2,"span",19),u(3),c(),l(4,"span",20),u(5),c()(),l(6,"div",21),v(7,"div",22),c(),l(8,"div",23)(9,"span"),u(10),c(),l(11,"span"),u(12),c()()()),i&2){let e=o.$implicit,t=C(2);d(3),Z(e.device),d(2),Z(e.mountPoint),d(2),Ne("width",e.usePercent,"%")("background",e.usePercent>90?"#f44336":e.usePercent>75?"#ff9800":"#4caf50"),d(3),mn("",t.formatBytes(e.available)," free of ",t.formatBytes(e.total)),d(2),ye("",e.usePercent,"% used")}}function P0(i,o){if(i&1&&(l(0,"div",27)(1,"span",31),u(2,"Last"),c(),l(3,"span",32),u(4),Mo(5,"date"),c()()),i&2){let e=C(3);d(4),Z(Ao(5,1,e.info().timeshift.lastSnapshot,"medium"))}}function N0(i,o){if(i&1&&(l(0,"mat-chip",33),u(1),c()),i&2){let e=o.$implicit;d(),Z(e)}}function L0(i,o){if(i&1&&(l(0,"mat-chip-set"),Le(1,N0,2,1,"mat-chip",33,wi),c()),i&2){let e=C(3);d(),Be(e.info().timeshift.schedules)}}function B0(i,o){if(i&1&&(l(0,"div",6)(1,"h3"),u(2,"Timeshift Backup"),c(),l(3,"div",7)(4,"div",8)(5,"mat-chip-set")(6,"mat-chip",24),u(7),c(),l(8,"mat-chip",25),u(9),c()(),l(10,"span",26),u(11),c()(),S(12,P0,6,4,"div",27),l(13,"div",28),v(14,"div",29),c(),l(15,"div",30)(16,"span"),u(17),c(),S(18,L0,3,0,"mat-chip-set"),c()()(),v(19,"mat-divider",15)),i&2){let e=C(2);d(7),Z(e.info().timeshift.mode),d(2),Z(e.info().timeshift.device),d(2),ye("",e.info().timeshift.snapshots," snapshots"),d(),E(e.info().timeshift.lastSnapshot?12:-1),d(2),Ne("width",e.info().timeshift.totalSpace>0?(e.info().timeshift.totalSpace-e.info().timeshift.freeSpace)/e.info().timeshift.totalSpace*100:0,"%")("background",e.info().timeshift.totalSpace>0&&(e.info().timeshift.totalSpace-e.info().timeshift.freeSpace)/e.info().timeshift.totalSpace>.9?"#f44336":e.info().timeshift.totalSpace>0&&(e.info().timeshift.totalSpace-e.info().timeshift.freeSpace)/e.info().timeshift.totalSpace>.75?"#ff9800":"#4caf50"),d(3),mn("",e.formatBytes(e.info().timeshift.freeSpace)," free of ",e.formatBytes(e.info().timeshift.totalSpace)),d(),E(e.info().timeshift.schedules.length>0?18:-1)}}function V0(i,o){if(i&1&&u(0),i&2){let e=C().$implicit,t=C(2);ye(" ",t.formatBytes(e.size)," ")}}function z0(i,o){i&1&&u(0," \u2014 ")}function j0(i,o){if(i&1&&(l(0,"div",17)(1,"span",34),u(2),c(),l(3,"span",35),S(4,V0,1,1)(5,z0,1,0),c()()),i&2){let e=o.$implicit;d(2),Z(e.path),d(2),E(e.exists?4:5)}}function H0(i,o){if(i&1&&(l(0,"div",6)(1,"h3"),u(2,"Operating System"),c(),l(3,"div",7)(4,"div",8)(5,"mat-chip-set")(6,"mat-chip",9),u(7),c(),l(8,"mat-chip",10),u(9),c()(),S(10,R0,2,1,"span",11),c(),S(11,O0,5,1,"div",12),l(12,"div",12)(13,"span",13),u(14,"Kernel"),c(),l(15,"span",14),u(16),c()()()(),v(17,"mat-divider",15),l(18,"div",6)(19,"h3"),u(20,"Disks"),c(),Le(21,F0,13,9,"div",16,M0),c(),v(23,"mat-divider",15),S(24,B0,20,11),l(25,"div",6)(26,"h3"),u(27,"System Logs"),c(),Le(28,j0,6,2,"div",17,A0),c()),i&2){let e=C();d(7),Z(e.info().hostname),d(2),Z(e.info().os.name),d(),E(e.info().uptime?10:-1),d(),E(e.info().os.version?11:-1),d(5),Z(e.info().kernel),d(5),Be(e.info().disks),d(3),E(e.info().timeshift?24:-1),d(4),Be(e.info().logs)}}var pp=(()=>{class i{constructor(){this.systemService=s(vs),this.dialogRef=s(Xt),this.loading=N(!0),this.info=N(null),this.error=N(null)}ngOnInit(){return Ce(this,null,function*(){try{let e=yield this.systemService.getSystemInfo();this.info.set(e)}catch(e){this.error.set(e instanceof Error?e.message:"Failed to load system info")}finally{this.loading.set(!1)}})}formatBytes(e){return e===0?"0 B":`${(e/(1024*1024*1024)).toFixed(1)} GB`}close(){this.dialogRef.close()}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-system-info-dialog"]],decls:12,vars:1,consts:[[1,"dialog-container"],["mat-dialog-title",""],["mode","indeterminate"],[1,"dialog-error"],["align","end"],["mat-raised-button","","color","primary",3,"click"],[1,"info-section"],[1,"info-card"],[1,"info-card-header"],[1,"hostname-chip"],[1,"distro-chip"],[1,"os-uptime"],[1,"info-row"],[1,"info-label"],[1,"info-value"],[1,"section-divider"],[1,"disk-row"],[1,"log-row"],[1,"disk-header"],[1,"disk-device"],[1,"disk-mount"],[1,"disk-bar-bg"],[1,"disk-bar-fill"],[1,"disk-details"],[1,"mode-chip"],[1,"device-chip"],[1,"timeshift-snapshots"],[1,"timeshift-row"],[1,"timeshift-disk-bar-bg"],[1,"timeshift-disk-bar-fill"],[1,"timeshift-disk-details"],[1,"timeshift-label"],[1,"timeshift-value"],[1,"schedule-chip"],[1,"log-path"],[1,"log-size"]],template:function(t,n){t&1&&(l(0,"div",0)(1,"h2",1)(2,"mat-icon"),u(3,"info"),c(),u(4," System Info "),c(),l(5,"mat-dialog-content"),S(6,I0,1,0,"mat-progress-bar",2)(7,T0,2,1,"p",3)(8,H0,30,6),c(),l(9,"mat-dialog-actions",4)(10,"button",5),I("click",function(){return n.close()}),u(11,"OK"),c()()()),t&2&&(d(6),E(n.loading()?6:n.error()?7:n.info()?8:-1))},dependencies:[$e,dt,ht,Ci,nn,an,on,Vi,qn,hs,yc,Kt,qt,po,ha,dh,Ws],styles:[".dialog-container[_ngcontent-%COMP%]{min-width:480px}.dialog-error[_ngcontent-%COMP%]{color:#f44336;padding:8px 0}.info-section[_ngcontent-%COMP%]{margin-bottom:8px}.info-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.5px}.info-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:4px 0}.info-row[_ngcontent-%COMP%] .info-label[_ngcontent-%COMP%]{color:#666;font-size:14px}.info-row[_ngcontent-%COMP%] .info-value[_ngcontent-%COMP%]{font-family:monospace;font-size:13px;color:#333}.section-divider[_ngcontent-%COMP%]{margin:12px 0}.disk-row[_ngcontent-%COMP%]{margin-bottom:12px}.disk-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-bottom:4px}.disk-header[_ngcontent-%COMP%] .disk-device[_ngcontent-%COMP%]{font-family:monospace;font-size:13px}.disk-header[_ngcontent-%COMP%] .disk-mount[_ngcontent-%COMP%]{font-size:13px;color:#666}.disk-bar-bg[_ngcontent-%COMP%]{height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden;margin-bottom:2px}.disk-bar-fill[_ngcontent-%COMP%]{height:100%;border-radius:3px}.disk-details[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-size:12px;color:#666}.info-card[_ngcontent-%COMP%]{background:#f5f5f5;border-radius:8px;padding:12px}.info-card-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.info-card-header[_ngcontent-%COMP%] .hostname-chip[_ngcontent-%COMP%]{font-family:monospace;background:#e8eaf6!important;color:#303f9f!important}.info-card-header[_ngcontent-%COMP%] .distro-chip[_ngcontent-%COMP%], .info-card-header[_ngcontent-%COMP%] .mode-chip[_ngcontent-%COMP%]{font-weight:600;background:#e3f2fd!important;color:#1976d2!important}.info-card-header[_ngcontent-%COMP%] .device-chip[_ngcontent-%COMP%]{font-family:monospace;background:#e8eaf6!important;color:#303f9f!important}.os-uptime[_ngcontent-%COMP%], .timeshift-snapshots[_ngcontent-%COMP%]{font-size:13px;color:#666;white-space:nowrap}.timeshift-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:4px 0;margin-bottom:6px}.timeshift-row[_ngcontent-%COMP%] .timeshift-label[_ngcontent-%COMP%]{color:#666;font-size:13px}.timeshift-row[_ngcontent-%COMP%] .timeshift-value[_ngcontent-%COMP%]{font-size:13px;color:#333}.timeshift-disk-bar-bg[_ngcontent-%COMP%]{height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden;margin-bottom:4px}.timeshift-disk-bar-fill[_ngcontent-%COMP%]{height:100%;border-radius:3px}.timeshift-disk-details[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#666}.timeshift-disk-details[_ngcontent-%COMP%] .schedule-chip[_ngcontent-%COMP%]{font-size:11px;background:#fff3e0!important;color:#e65100!important}.log-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:4px 0}.log-row[_ngcontent-%COMP%] .log-path[_ngcontent-%COMP%]{font-family:monospace;font-size:13px}.log-row[_ngcontent-%COMP%] .log-size[_ngcontent-%COMP%]{font-family:monospace;font-size:13px;color:#333}"]})}}return i})();var fp=(()=>{class i{constructor(){this.systemInfo=jn.required(),this.systemService=s(vs),this.dialog=s(bo)}openSystemInfo(){this.dialog.open(pp,{disableClose:!1})}reboot(){return Ce(this,null,function*(){confirm("Reboot the server?")&&(yield this.systemService.reboot())})}shutdown(){return Ce(this,null,function*(){confirm("Shutdown the server?")&&(yield this.systemService.shutdown())})}formatBytes(e){let t=e/1073741824;return`${Math.ceil(t)} GB`}ceilCpu(e){return Math.ceil(e)}colorForUsage(e){return e<40?"#4caf50":e<75?"#ff9800":"#f44336"}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-system-bar"]],inputs:{systemInfo:[1,"systemInfo"]},decls:48,vars:16,consts:[["menu","matMenu"],[1,"system-bar"],[1,"system-panel"],[1,"panel-body"],[1,"panel-icon"],[1,"panel-content"],[1,"panel-header"],[1,"panel-label"],[1,"panel-value"],[1,"bar-bg"],[1,"bar-fill"],[1,"server-controls"],["mat-icon-button","","color","warn","title","Server actions",3,"matMenuTriggerFor"],["yPosition","below"],["mat-menu-item","",3,"click"]],template:function(t,n){if(t&1&&(l(0,"div",1)(1,"mat-card",2)(2,"mat-card-content")(3,"div",3)(4,"mat-icon",4),u(5,"dynamic_feed"),c(),l(6,"div",5)(7,"div",6)(8,"span",7),u(9,"CPU"),c(),l(10,"span",8),u(11),c()(),l(12,"div",9),v(13,"div",10),c()()()()(),l(14,"mat-card",2)(15,"mat-card-content")(16,"div",3)(17,"mat-icon",4),u(18,"memory"),c(),l(19,"div",5)(20,"div",6)(21,"span",7),u(22,"RAM"),c(),l(23,"span",8),u(24),c()(),l(25,"div",9),v(26,"div",10),c()()()()(),l(27,"div",11)(28,"button",12)(29,"mat-icon"),u(30,"more_vert"),c()(),l(31,"mat-menu",13,0)(33,"button",14),I("click",function(){return n.openSystemInfo()}),l(34,"mat-icon"),u(35,"info"),c(),l(36,"span"),u(37,"System info"),c()(),l(38,"button",14),I("click",function(){return n.reboot()}),l(39,"mat-icon"),u(40,"restart_alt"),c(),l(41,"span"),u(42,"Reboot server"),c()(),l(43,"button",14),I("click",function(){return n.shutdown()}),l(44,"mat-icon"),u(45,"power_settings_new"),c(),l(46,"span"),u(47,"Shutdown server"),c()()()()()),t&2){let a=Ye(32);d(10),Ne("color",n.colorForUsage(n.systemInfo().cpuUsage)),d(),ye(" ",n.ceilCpu(n.systemInfo().cpuUsage),"% "),d(2),Ne("width",n.systemInfo().cpuUsage,"%")("background",n.colorForUsage(n.systemInfo().cpuUsage)),d(10),Ne("color",n.colorForUsage(n.systemInfo().memoryPercent)),d(),mn(" ",n.formatBytes(n.systemInfo().memoryUsed)," / ",n.formatBytes(n.systemInfo().memoryTotal)," "),d(2),Ne("width",n.systemInfo().memoryPercent,"%")("background",n.colorForUsage(n.systemInfo().memoryPercent)),d(2),w("matMenuTriggerFor",a)}},dependencies:[$e,Hi,zi,ji,Kt,qt,dt,Mn,as,rn,In,os,Ci],styles:[".system-bar[_ngcontent-%COMP%]{display:flex;gap:16px;margin-bottom:16px;align-items:stretch}.system-panel[_ngcontent-%COMP%]{flex:1}.server-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.panel-body[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.panel-icon[_ngcontent-%COMP%]{color:#757575;font-size:24px;width:24px;height:24px}.panel-content[_ngcontent-%COMP%]{flex:1;min-width:0}.panel-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.panel-label[_ngcontent-%COMP%]{font-weight:500;font-size:.85rem;color:#555;text-transform:uppercase;letter-spacing:.5px}.panel-value[_ngcontent-%COMP%]{font-weight:500;font-size:.9rem;white-space:nowrap}.bar-bg[_ngcontent-%COMP%]{height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden}.bar-fill[_ngcontent-%COMP%]{height:100%;border-radius:3px;transition:width .4s ease,background .4s ease}"]})}}return i})();function U0(i,o){if(i&1&&(l(0,"div",8)(1,"mat-icon",10),u(2,"warning"),c(),u(3),c()),i&2){let e=C(2);d(3),ye(" ",e.loginError()," ")}}function G0(i,o){if(i&1){let e=Ve();l(0,"div",0)(1,"mat-card",1)(2,"mat-card-content")(3,"div",2)(4,"mat-icon",3),u(5,"lock"),c(),l(6,"h2"),u(7,"Authentication Required"),c(),l(8,"p",4),u(9,"Enter your system password to continue"),c()(),l(10,"form",5),I("submit",function(n){return pe(e),C().onLogin(),fe(n.preventDefault())}),l(11,"mat-form-field",6)(12,"mat-label"),u(13,"Password"),c(),l(14,"input",7),I("input",function(n){pe(e);let a=C();return fe(a.loginPassword.set(n.target.value))}),c()(),S(15,U0,4,1,"div",8),l(16,"button",9),u(17,"Sign In"),c()()()()()}if(i&2){let e=C();d(14),w("value",e.loginPassword()),d(),E(e.loginError()?15:-1)}}function $0(i,o){i&1&&v(0,"mat-progress-bar",11)}function W0(i,o){if(i&1&&(l(0,"mat-card",14)(1,"mat-card-content")(2,"mat-icon",18),u(3," error_outline "),c(),l(4,"p"),u(5),c(),l(6,"p",4),u(7,"Make sure the backend is running on port 4242."),c()()()),i&2){let e=C(2);d(5),Z(e.error())}}function q0(i,o){i&1&&(l(0,"mat-card",19)(1,"mat-card-content")(2,"p"),u(3,"No GPUs detected."),c(),l(4,"p",4),u(5,"Ensure nvidia-smi or rocm-smi is available on this system."),c()()())}function K0(i,o){if(i&1){let e=Ve();v(0,"app-system-bar",20),l(1,"app-gpu-table",21),I("gpuLabelChange",function(n){pe(e);let a=C(3);return fe(a.onGpuLabelChange(n))}),c()}if(i&2){let e=C(3);w("systemInfo",e.systemInfo()),d(),w("gpus",e.gpus())}}function Y0(i,o){if(i&1&&(S(0,q0,6,0,"mat-card",19)(1,K0,2,2),v(2,"app-services")),i&2){let e=C(2);E(e.hasGpus()?1:0)}}function X0(i,o){if(i&1){let e=Ve();S(0,$0,1,0,"mat-progress-bar",11),l(1,"div",12)(2,"div",13),S(3,W0,8,1,"mat-card",14)(4,Y0,3,1),c(),l(5,"div",15),I("mousedown",function(n){pe(e);let a=C();return fe(a.startDrag(n))}),v(6,"span",16),c(),l(7,"div",17),v(8,"app-journal-panel"),c()()}if(i&2){let e=C();E(e.loading()?0:-1),d(),f("dragging",e.isDragging()),d(2),E(e.error()?3:4),d(4),Ne("width",e.sidebarWidth(),"px")}}var gp=100,_p=1600,bp=(()=>{class i{ngOnInit(){this.authService.authState.subscribe(t=>{this.isAuthenticated.set(t),t&&(this.loginError.set(null),this.loginPassword.set(""))});let e=localStorage.getItem("journal-sidebar-width");if(e){let t=parseInt(e,10);t>=gp&&t<=_p&&this.sidebarWidth.set(t)}}ngOnDestroy(){}onLogin(){return Ce(this,null,function*(){this.loginError.set(null),(yield this.authService.login(this.loginPassword()))?(this.loading.set(!0),this.initGpus()):this.loginError.set("Invalid password")})}startDrag(e){e.preventDefault(),this.dragOffsetX=e.clientX,this.dragStartWidth=this.sidebarWidth(),this.isDragging.set(!0)}onDrag(e){if(!this.isDragging())return;let t=this.dragOffsetX-e.clientX,n=this.dragStartWidth+t;n=Math.max(gp,Math.min(_p,n)),this.sidebarWidth.set(n)}onDragEnd(){this.isDragging()&&(localStorage.setItem("journal-sidebar-width",String(this.sidebarWidth())),this.isDragging.set(!1))}constructor(){this.gpuService=s(Hu),this.authService=s(cr),this.gpus=N([]),this.systemInfo=N({cpuUsage:0,memoryTotal:0,memoryUsed:0,memoryPercent:0}),this.loading=N(!0),this.error=N(null),this.hasGpus=K(()=>this.gpus().length>0),this.isAuthenticated=N(this.authService.isAuthenticated()),this.loginPassword=N(""),this.loginError=N(null),this.sidebarWidth=N(420),this.isDragging=N(!1),this.dragOffsetX=0,this.dragStartWidth=420,this.isAuthenticated()&&this.initGpus()}initGpus(e=0){this.gpuService.fetchGpus().subscribe({next:t=>{if(t.length===0){e<3?setTimeout(()=>this.initGpus(e+1),5e3):this.loading.set(!1);return}let n=t.map(a=>Se(L({},a),{key:a.pciBusId,usage:0,temperature:0,vramUsed:0}));this.gpus.set(n),this.loading.set(!1),this.error.set(null),this.gpuService.watchStatus(3e5).subscribe({next:a=>{this.systemInfo.set(a.system),this.mergeUsage(a.gpus)},error:a=>{console.error("[AppComponent] status poll error:",a)}})},error:t=>{console.error("[AppComponent] static fetch error:",t),this.error.set(`Failed to fetch GPU data: ${t.message}`),this.loading.set(!1)}})}mergeUsage(e){let t=new Map;for(let n of e)t.set(n.key,n);this.gpus.update(n=>n.map(a=>{let r=t.get(a.pciBusId);return Se(L({},a),{key:a.pciBusId,usage:r?.usage??0,temperature:r?.temperature??0,vramUsed:r?.vramUsed??0})}))}onGpuLabelChange(e){this.gpus.update(t=>t.map(n=>n.pciBusId===e.pciBusId?Se(L({},n),{gpuLabel:e.gpuLabel}):n)),this.gpuService.saveGpuLabel(e.pciBusId,e.gpuLabel).subscribe({error:t=>console.error("[AppComponent] GPU label save error:",t)})}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-root"]],hostBindings:function(t,n){t&1&&I("mousemove",function(r){return n.onDrag(r)},Ms)("mouseup",function(){return n.onDragEnd()},Ms)},decls:2,vars:1,consts:[[1,"login-container"],[1,"login-card"],[1,"login-header"],[1,"login-icon"],[1,"mat-body-2",2,"color","#999"],[1,"login-form",3,"submit"],["appearance","outline",1,"full-width"],["matInput","","type","password","autofocus","",3,"input","value"],[1,"login-error"],["mat-raised-button","","color","primary","type","submit",1,"login-btn"],[2,"font-size","20px","vertical-align","middle"],["mode","query","color","primary"],[1,"layout"],[1,"main-content"],[1,"error-card"],[1,"splitter",3,"mousedown"],[1,"splitter-line"],[1,"journal-sidebar"],[2,"color","#f44336","font-size","48px","float","left","margin-right","16px"],[1,"empty-card"],[3,"systemInfo"],[3,"gpuLabelChange","gpus"]],template:function(t,n){t&1&&S(0,G0,18,2,"div",0)(1,X0,9,6),t&2&&E(n.isAuthenticated()?1:0)},dependencies:[$e,Vi,qn,Hi,zi,ji,$t,Gt,yt,Ut,Ct,dt,ht,Kt,qt,uh,up,hp,fp],styles:[".spacer[_ngcontent-%COMP%]{flex:1 1 auto}.login-container[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 56px);padding:24px;background:#f5f5f5}.login-card[_ngcontent-%COMP%]{width:100%;max-width:400px}.login-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:24px}.login-header[_ngcontent-%COMP%] .login-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;line-height:48px;background:#e3f2fd;border-radius:50%;padding:8px;color:#1976d2}.login-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:16px 0 4px;font-size:22px;font-weight:500}.login-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.login-error[_ngcontent-%COMP%]{color:#d32f2f;font-size:14px;text-align:center;padding:8px;background:#ffebee;border-radius:4px}.login-btn[_ngcontent-%COMP%]{width:100%;margin-top:8px}.full-width[_ngcontent-%COMP%]{width:100%}.layout[_ngcontent-%COMP%]{display:flex;height:100%;overflow:hidden}.layout.dragging[_ngcontent-%COMP%]{user-select:none;-webkit-user-select:none}.main-content[_ngcontent-%COMP%]{flex:1;min-width:0;overflow-y:auto;padding:24px 8px 24px 24px;max-width:100%}.splitter[_ngcontent-%COMP%]{width:8px;flex-shrink:0;cursor:col-resize;display:flex;align-items:center;justify-content:center;background:transparent;transition:background .15s}.splitter[_ngcontent-%COMP%]:hover{background:#0000000a}.splitter[_ngcontent-%COMP%] .splitter-line[_ngcontent-%COMP%]{width:2px;height:32px;border-radius:1px;background:#bdbdbd;transition:background .15s,width .15s}.splitter[_ngcontent-%COMP%]:hover .splitter-line[_ngcontent-%COMP%]{background:#757575;width:3px}.journal-sidebar[_ngcontent-%COMP%]{flex-shrink:0;overflow:hidden;padding:24px 24px 24px 8px}.error-card[_ngcontent-%COMP%], .empty-card[_ngcontent-%COMP%]{margin-top:32px;max-width:600px;margin-left:auto;margin-right:auto}[_nghost-%COMP%] mat-card-content{padding-top:10px!important;padding-bottom:10px!important}app-services[_ngcontent-%COMP%]{display:block;margin-top:24px}"]})}}return i})();tl(bp,nm).catch(i=>console.error(i));
5584
+ `)}),At(()=>{if(!this.servicesLoaded())return;let e=this.selectedService();e!==null&&!this.services().some(t=>t.name===e)&&this.selectedServiceService.select(null)}),At(()=>{if(!this.servicesLoaded())return;this.selectedService()?(this.journalLines.set([]),this.journalError.set(null),this.restartPolling()):(this.stopPolling(),this.journalLines.set([]))}),this.serviceList.refresh()}ngAfterViewInit(){this.scrollToBottom()}ngOnDestroy(){this.stopPolling()}onServiceChange(e){this.selectedServiceService.select(e)}restartPolling(){this.stopPolling(),this.fetchJournal(),this.journalSub=Ia(0,1e3).subscribe(()=>this.fetchJournal())}stopPolling(){this.journalSub&&(this.journalSub.unsubscribe(),this.journalSub=void 0)}fetchJournal(){let e=this.selectedService();e&&(this.isTextSelected()||(this.journalLoading.set(!0),this.serviceService.fetchJournal(e,100).subscribe({next:t=>{let n=this.isScrolledToBottom();this.journalLines.set(t),this.journalError.set(null),this.journalLoading.set(!1),this.cdr.markForCheck(),requestAnimationFrame(()=>{n&&this.scrollToBottom()})},error:t=>{this.journalError.set(t.message),this.journalLoading.set(!1),this.cdr.markForCheck()}})))}get scrollContainer(){return this.journalBody?.nativeElement??null}isTextSelected(){let e=typeof window<"u"?window:null;if(!e)return!1;let t=e.getSelection();if(!t||t.isCollapsed||!t.rangeCount)return!1;let n=this.scrollContainer;return n?n.contains(t.anchorNode):!1}isScrolledToBottom(){let e=this.scrollContainer;return e?e.scrollHeight-e.scrollTop-e.clientHeight<=E0:!0}scrollToBottom(){let e=this.scrollContainer;e&&(e.scrollTop=e.scrollHeight)}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-journal-panel"]],viewQuery:function(t,n){if(t&1&&we(b0,5),t&2){let a;T(a=R())&&(n.journalBody=a.first)}},decls:9,vars:3,consts:[["journalBody",""],[1,"journal-card"],[1,"journal-header"],[1,"journal-error"],[1,"journal-body"],[1,"journal-body","journal-empty"],["disableOptionCentering","",1,"service-select",3,"ngModelChange","ngModel"],[3,"value"],["mat-flat-button","","color","primary","aria-label","Disable word wrap"],["mat-stroked-button","","aria-label","Enable word wrap"],["mat-flat-button","","color","primary","aria-label","Disable word wrap",3,"click"],["mat-stroked-button","","aria-label","Enable word wrap",3,"click"]],template:function(t,n){t&1&&(l(0,"mat-card",1)(1,"mat-card-content")(2,"div",2)(3,"h2"),u(4,"Journal"),c(),S(5,w0,7,3),c(),S(6,D0,2,1,"div",3),S(7,k0,4,3,"div",4)(8,S0,3,0,"div",5),c()()),t&2&&(d(5),E(n.servicesLoaded()&&n.services().length>0?5:-1),d(),E(n.error()?6:-1),d(),E(n.selectedService()?7:8))},dependencies:[$e,Hi,zi,ji,fs,ps,Mt,dt,ht,Kt,qt,Vi,ao,Xi,Vl],styles:[".journal-card[_ngcontent-%COMP%]{height:100%;display:flex;flex-direction:column;overflow:hidden}.journal-card[_ngcontent-%COMP%] mat-card-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;padding-bottom:8px}.journal-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-shrink:0}.journal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:20px;font-weight:500}.service-select[_ngcontent-%COMP%]{flex:1;min-width:150px}.journal-error[_ngcontent-%COMP%]{color:#f44336;font-size:13px;margin-bottom:8px;flex-shrink:0}.journal-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;background:#1e1e1e;border-radius:4px;padding:8px;min-height:0}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:#2d2d2d;border-radius:4px}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:#555;border-radius:4px}.journal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:#777}.journal-body[_ngcontent-%COMP%]{scrollbar-width:thin;scrollbar-color:#555 #2d2d2d}.journal-body[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:0;font-family:Courier New,Courier,monospace;font-size:12px;line-height:1.6;color:#d4d4d4;white-space:pre}.journal-body[_ngcontent-%COMP%] pre.wrap-on[_ngcontent-%COMP%]{white-space:pre-wrap}.journal-empty[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center}.journal-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:#888;font-size:14px}[_nghost-%COMP%] .mdc-button{min-width:32px}[_nghost-%COMP%] .mat-mdc-unelevated-button>.mat-icon, [_nghost-%COMP%] .mat-mdc-outlined-button>.mat-icon{margin-right:0}"]})}}return i})();var vs=(()=>{class i{constructor(){this.http=s(jt),this.baseUrl="/api/system"}reboot(){return Ce(this,null,function*(){yield je(this.http.post(`${this.baseUrl}/reboot`,null))})}shutdown(){return Ce(this,null,function*(){yield je(this.http.post(`${this.baseUrl}/shutdown`,null))})}getSystemInfo(){return Ce(this,null,function*(){return je(this.http.get(`${this.baseUrl}/info`))})}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275prov=ae({token:i,factory:i.\u0275fac,providedIn:"root"})}}return i})();var M0=(i,o)=>o.device,A0=(i,o)=>o.path;function I0(i,o){i&1&&v(0,"mat-progress-bar",2)}function T0(i,o){if(i&1&&(l(0,"p",3),u(1),c()),i&2){let e=C();d(),Z(e.error())}}function R0(i,o){if(i&1&&(l(0,"span",11),u(1),c()),i&2){let e=C(2);d(),Z(e.info().uptime)}}function O0(i,o){if(i&1&&(l(0,"div",12)(1,"span",13),u(2,"Version"),c(),l(3,"span",14),u(4),c()()),i&2){let e=C(2);d(4),Z(e.info().os.version)}}function F0(i,o){if(i&1&&(l(0,"div",16)(1,"div",18)(2,"span",19),u(3),c(),l(4,"span",20),u(5),c()(),l(6,"div",21),v(7,"div",22),c(),l(8,"div",23)(9,"span"),u(10),c(),l(11,"span"),u(12),c()()()),i&2){let e=o.$implicit,t=C(2);d(3),Z(e.device),d(2),Z(e.mountPoint),d(2),Ne("width",e.usePercent,"%")("background",e.usePercent>90?"#f44336":e.usePercent>75?"#ff9800":"#4caf50"),d(3),mn("",t.formatBytes(e.available)," free of ",t.formatBytes(e.total)),d(2),ye("",e.usePercent,"% used")}}function P0(i,o){if(i&1&&(l(0,"div",27)(1,"span",31),u(2,"Last"),c(),l(3,"span",32),u(4),Mo(5,"date"),c()()),i&2){let e=C(3);d(4),Z(Ao(5,1,e.info().timeshift.lastSnapshot,"medium"))}}function N0(i,o){if(i&1&&(l(0,"mat-chip",33),u(1),c()),i&2){let e=o.$implicit;d(),Z(e)}}function L0(i,o){if(i&1&&(l(0,"mat-chip-set"),Le(1,N0,2,1,"mat-chip",33,wi),c()),i&2){let e=C(3);d(),Be(e.info().timeshift.schedules)}}function B0(i,o){if(i&1&&(l(0,"div",6)(1,"h3"),u(2,"Timeshift Backup"),c(),l(3,"div",7)(4,"div",8)(5,"mat-chip-set")(6,"mat-chip",24),u(7),c(),l(8,"mat-chip",25),u(9),c()(),l(10,"span",26),u(11),c()(),S(12,P0,6,4,"div",27),l(13,"div",28),v(14,"div",29),c(),l(15,"div",30)(16,"span"),u(17),c(),S(18,L0,3,0,"mat-chip-set"),c()()(),v(19,"mat-divider",15)),i&2){let e=C(2);d(7),Z(e.info().timeshift.mode),d(2),Z(e.info().timeshift.device),d(2),ye("",e.info().timeshift.snapshots," snapshots"),d(),E(e.info().timeshift.lastSnapshot?12:-1),d(2),Ne("width",e.info().timeshift.totalSpace>0?(e.info().timeshift.totalSpace-e.info().timeshift.freeSpace)/e.info().timeshift.totalSpace*100:0,"%")("background",e.info().timeshift.totalSpace>0&&(e.info().timeshift.totalSpace-e.info().timeshift.freeSpace)/e.info().timeshift.totalSpace>.9?"#f44336":e.info().timeshift.totalSpace>0&&(e.info().timeshift.totalSpace-e.info().timeshift.freeSpace)/e.info().timeshift.totalSpace>.75?"#ff9800":"#4caf50"),d(3),mn("",e.formatBytes(e.info().timeshift.freeSpace)," free of ",e.formatBytes(e.info().timeshift.totalSpace)),d(),E(e.info().timeshift.schedules.length>0?18:-1)}}function V0(i,o){if(i&1&&u(0),i&2){let e=C().$implicit,t=C(2);ye(" ",t.formatBytes(e.size)," ")}}function z0(i,o){i&1&&u(0," \u2014 ")}function j0(i,o){if(i&1&&(l(0,"div",17)(1,"span",34),u(2),c(),l(3,"span",35),S(4,V0,1,1)(5,z0,1,0),c()()),i&2){let e=o.$implicit;d(2),Z(e.path),d(2),E(e.exists?4:5)}}function H0(i,o){if(i&1&&(l(0,"div",6)(1,"h3"),u(2,"Operating System"),c(),l(3,"div",7)(4,"div",8)(5,"mat-chip-set")(6,"mat-chip",9),u(7),c(),l(8,"mat-chip",10),u(9),c()(),S(10,R0,2,1,"span",11),c(),S(11,O0,5,1,"div",12),l(12,"div",12)(13,"span",13),u(14,"Kernel"),c(),l(15,"span",14),u(16),c()()()(),v(17,"mat-divider",15),l(18,"div",6)(19,"h3"),u(20,"Disks"),c(),Le(21,F0,13,9,"div",16,M0),c(),v(23,"mat-divider",15),S(24,B0,20,11),l(25,"div",6)(26,"h3"),u(27,"System Logs"),c(),Le(28,j0,6,2,"div",17,A0),c()),i&2){let e=C();d(7),Z(e.info().hostname),d(2),Z(e.info().os.name),d(),E(e.info().uptime?10:-1),d(),E(e.info().os.version?11:-1),d(5),Z(e.info().kernel),d(5),Be(e.info().disks),d(3),E(e.info().timeshift?24:-1),d(4),Be(e.info().logs)}}var pp=(()=>{class i{constructor(){this.systemService=s(vs),this.dialogRef=s(Xt),this.loading=N(!0),this.info=N(null),this.error=N(null)}ngOnInit(){return Ce(this,null,function*(){try{let e=yield this.systemService.getSystemInfo();this.info.set(e)}catch(e){this.error.set(e instanceof Error?e.message:"Failed to load system info")}finally{this.loading.set(!1)}})}formatBytes(e){return e===0?"0 B":`${(e/(1024*1024*1024)).toFixed(1)} GB`}close(){this.dialogRef.close()}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-system-info-dialog"]],decls:12,vars:1,consts:[[1,"dialog-container"],["mat-dialog-title",""],["mode","indeterminate"],[1,"dialog-error"],["align","end"],["mat-raised-button","","color","primary",3,"click"],[1,"info-section"],[1,"info-card"],[1,"info-card-header"],[1,"hostname-chip"],[1,"distro-chip"],[1,"os-uptime"],[1,"info-row"],[1,"info-label"],[1,"info-value"],[1,"section-divider"],[1,"disk-row"],[1,"log-row"],[1,"disk-header"],[1,"disk-device"],[1,"disk-mount"],[1,"disk-bar-bg"],[1,"disk-bar-fill"],[1,"disk-details"],[1,"mode-chip"],[1,"device-chip"],[1,"timeshift-snapshots"],[1,"timeshift-row"],[1,"timeshift-disk-bar-bg"],[1,"timeshift-disk-bar-fill"],[1,"timeshift-disk-details"],[1,"timeshift-label"],[1,"timeshift-value"],[1,"schedule-chip"],[1,"log-path"],[1,"log-size"]],template:function(t,n){t&1&&(l(0,"div",0)(1,"h2",1)(2,"mat-icon"),u(3,"info"),c(),u(4," System Info "),c(),l(5,"mat-dialog-content"),S(6,I0,1,0,"mat-progress-bar",2)(7,T0,2,1,"p",3)(8,H0,30,6),c(),l(9,"mat-dialog-actions",4)(10,"button",5),I("click",function(){return n.close()}),u(11,"OK"),c()()()),t&2&&(d(6),E(n.loading()?6:n.error()?7:n.info()?8:-1))},dependencies:[$e,dt,ht,Ci,nn,an,on,Vi,qn,hs,yc,Kt,qt,po,ha,dh,Ws],styles:[".dialog-container[_ngcontent-%COMP%]{min-width:480px}.dialog-error[_ngcontent-%COMP%]{color:#f44336;padding:8px 0}.info-section[_ngcontent-%COMP%]{margin-bottom:8px}.info-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:14px;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.5px}.info-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:4px 0}.info-row[_ngcontent-%COMP%] .info-label[_ngcontent-%COMP%]{color:#666;font-size:14px}.info-row[_ngcontent-%COMP%] .info-value[_ngcontent-%COMP%]{font-family:monospace;font-size:13px;color:#333}.section-divider[_ngcontent-%COMP%]{margin:12px 0}.disk-row[_ngcontent-%COMP%]{margin-bottom:12px}.disk-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;margin-bottom:4px}.disk-header[_ngcontent-%COMP%] .disk-device[_ngcontent-%COMP%]{font-family:monospace;font-size:13px}.disk-header[_ngcontent-%COMP%] .disk-mount[_ngcontent-%COMP%]{font-size:13px;color:#666}.disk-bar-bg[_ngcontent-%COMP%]{height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden;margin-bottom:2px}.disk-bar-fill[_ngcontent-%COMP%]{height:100%;border-radius:3px}.disk-details[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-size:12px;color:#666}.info-card[_ngcontent-%COMP%]{background:#f5f5f5;border-radius:8px;padding:12px}.info-card-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.info-card-header[_ngcontent-%COMP%] .hostname-chip[_ngcontent-%COMP%]{font-family:monospace;background:#e8eaf6!important;color:#303f9f!important}.info-card-header[_ngcontent-%COMP%] .distro-chip[_ngcontent-%COMP%], .info-card-header[_ngcontent-%COMP%] .mode-chip[_ngcontent-%COMP%]{font-weight:600;background:#e3f2fd!important;color:#1976d2!important}.info-card-header[_ngcontent-%COMP%] .device-chip[_ngcontent-%COMP%]{font-family:monospace;background:#e8eaf6!important;color:#303f9f!important}.os-uptime[_ngcontent-%COMP%], .timeshift-snapshots[_ngcontent-%COMP%]{font-size:13px;color:#666;white-space:nowrap}.timeshift-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:4px 0;margin-bottom:6px}.timeshift-row[_ngcontent-%COMP%] .timeshift-label[_ngcontent-%COMP%]{color:#666;font-size:13px}.timeshift-row[_ngcontent-%COMP%] .timeshift-value[_ngcontent-%COMP%]{font-size:13px;color:#333}.timeshift-disk-bar-bg[_ngcontent-%COMP%]{height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden;margin-bottom:4px}.timeshift-disk-bar-fill[_ngcontent-%COMP%]{height:100%;border-radius:3px}.timeshift-disk-details[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:#666}.timeshift-disk-details[_ngcontent-%COMP%] .schedule-chip[_ngcontent-%COMP%]{font-size:11px;background:#fff3e0!important;color:#e65100!important}.log-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:4px 0}.log-row[_ngcontent-%COMP%] .log-path[_ngcontent-%COMP%]{font-family:monospace;font-size:13px}.log-row[_ngcontent-%COMP%] .log-size[_ngcontent-%COMP%]{font-family:monospace;font-size:13px;color:#333}"]})}}return i})();var fp=(()=>{class i{constructor(){this.systemInfo=jn.required(),this.systemService=s(vs),this.dialog=s(bo)}openSystemInfo(){this.dialog.open(pp,{disableClose:!1})}reboot(){return Ce(this,null,function*(){confirm("Reboot the server?")&&(yield this.systemService.reboot())})}shutdown(){return Ce(this,null,function*(){confirm("Shutdown the server?")&&(yield this.systemService.shutdown())})}formatBytes(e){let t=e/1073741824;return`${Math.ceil(t)} GB`}ceilCpu(e){return Math.ceil(e)}colorForUsage(e){return e<40?"#4caf50":e<75?"#ff9800":"#f44336"}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-system-bar"]],inputs:{systemInfo:[1,"systemInfo"]},decls:48,vars:16,consts:[["menu","matMenu"],[1,"system-bar"],[1,"system-panel"],[1,"panel-body"],[1,"panel-icon"],[1,"panel-content"],[1,"panel-header"],[1,"panel-label"],[1,"panel-value"],[1,"bar-bg"],[1,"bar-fill"],[1,"server-controls"],["mat-icon-button","","color","warn","title","Server actions",3,"matMenuTriggerFor"],["yPosition","below"],["mat-menu-item","",3,"click"]],template:function(t,n){if(t&1&&(l(0,"div",1)(1,"mat-card",2)(2,"mat-card-content")(3,"div",3)(4,"mat-icon",4),u(5,"dynamic_feed"),c(),l(6,"div",5)(7,"div",6)(8,"span",7),u(9,"CPU"),c(),l(10,"span",8),u(11),c()(),l(12,"div",9),v(13,"div",10),c()()()()(),l(14,"mat-card",2)(15,"mat-card-content")(16,"div",3)(17,"mat-icon",4),u(18,"memory"),c(),l(19,"div",5)(20,"div",6)(21,"span",7),u(22,"RAM"),c(),l(23,"span",8),u(24),c()(),l(25,"div",9),v(26,"div",10),c()()()()(),l(27,"div",11)(28,"button",12)(29,"mat-icon"),u(30,"more_vert"),c()(),l(31,"mat-menu",13,0)(33,"button",14),I("click",function(){return n.openSystemInfo()}),l(34,"mat-icon"),u(35,"info"),c(),l(36,"span"),u(37,"System info"),c()(),l(38,"button",14),I("click",function(){return n.reboot()}),l(39,"mat-icon"),u(40,"restart_alt"),c(),l(41,"span"),u(42,"Reboot server"),c()(),l(43,"button",14),I("click",function(){return n.shutdown()}),l(44,"mat-icon"),u(45,"power_settings_new"),c(),l(46,"span"),u(47,"Shutdown server"),c()()()()()),t&2){let a=Ye(32);d(10),Ne("color",n.colorForUsage(n.systemInfo().cpuUsage)),d(),ye(" ",n.ceilCpu(n.systemInfo().cpuUsage),"% "),d(2),Ne("width",n.systemInfo().cpuUsage,"%")("background",n.colorForUsage(n.systemInfo().cpuUsage)),d(10),Ne("color",n.colorForUsage(n.systemInfo().memoryPercent)),d(),mn(" ",n.formatBytes(n.systemInfo().memoryUsed)," / ",n.formatBytes(n.systemInfo().memoryTotal)," "),d(2),Ne("width",n.systemInfo().memoryPercent,"%")("background",n.colorForUsage(n.systemInfo().memoryPercent)),d(2),w("matMenuTriggerFor",a)}},dependencies:[$e,Hi,zi,ji,Kt,qt,dt,Mn,as,rn,In,os,Ci],styles:[".system-bar[_ngcontent-%COMP%]{display:flex;gap:16px;margin-bottom:16px;align-items:stretch}.system-panel[_ngcontent-%COMP%]{flex:1}.server-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px}.panel-body[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.panel-icon[_ngcontent-%COMP%]{color:#757575;font-size:24px;width:24px;height:24px}.panel-content[_ngcontent-%COMP%]{flex:1;min-width:0}.panel-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.panel-label[_ngcontent-%COMP%]{font-weight:500;font-size:.85rem;color:#555;text-transform:uppercase;letter-spacing:.5px}.panel-value[_ngcontent-%COMP%]{font-weight:500;font-size:.9rem;white-space:nowrap}.bar-bg[_ngcontent-%COMP%]{height:6px;background:#e0e0e0;border-radius:3px;overflow:hidden}.bar-fill[_ngcontent-%COMP%]{height:100%;border-radius:3px;transition:width .4s ease,background .4s ease}"]})}}return i})();function U0(i,o){if(i&1&&(l(0,"div",8)(1,"mat-icon",10),u(2,"warning"),c(),u(3),c()),i&2){let e=C(2);d(3),ye(" ",e.loginError()," ")}}function G0(i,o){if(i&1){let e=Ve();l(0,"div",0)(1,"mat-card",1)(2,"mat-card-content")(3,"div",2)(4,"mat-icon",3),u(5,"lock"),c(),l(6,"h2"),u(7,"Authentication Required"),c(),l(8,"p",4),u(9,"Enter your system password to continue"),c()(),l(10,"form",5),I("submit",function(n){return pe(e),C().onLogin(),fe(n.preventDefault())}),l(11,"mat-form-field",6)(12,"mat-label"),u(13,"Password"),c(),l(14,"input",7),I("input",function(n){pe(e);let a=C();return fe(a.loginPassword.set(n.target.value))}),c()(),S(15,U0,4,1,"div",8),l(16,"button",9),u(17,"Sign In"),c()()()()()}if(i&2){let e=C();d(14),w("value",e.loginPassword()),d(),E(e.loginError()?15:-1)}}function $0(i,o){i&1&&v(0,"mat-progress-bar",11)}function W0(i,o){if(i&1&&(l(0,"mat-card",14)(1,"mat-card-content")(2,"mat-icon",18),u(3," error_outline "),c(),l(4,"p"),u(5),c(),l(6,"p",4),u(7,"Make sure the backend is running on port 4242."),c()()()),i&2){let e=C(2);d(5),Z(e.error())}}function q0(i,o){i&1&&(l(0,"mat-card",19)(1,"mat-card-content")(2,"p"),u(3,"No GPUs detected."),c(),l(4,"p",4),u(5,"Ensure nvidia-smi or rocm-smi is available on this system."),c()()())}function K0(i,o){if(i&1){let e=Ve();v(0,"app-system-bar",20),l(1,"app-gpu-table",21),I("gpuLabelChange",function(n){pe(e);let a=C(3);return fe(a.onGpuLabelChange(n))}),c()}if(i&2){let e=C(3);w("systemInfo",e.systemInfo()),d(),w("gpus",e.gpus())}}function Y0(i,o){if(i&1&&(S(0,q0,6,0,"mat-card",19)(1,K0,2,2),v(2,"app-services")),i&2){let e=C(2);E(e.hasGpus()?1:0)}}function X0(i,o){if(i&1){let e=Ve();S(0,$0,1,0,"mat-progress-bar",11),l(1,"div",12)(2,"div",13),S(3,W0,8,1,"mat-card",14)(4,Y0,3,1),c(),l(5,"div",15),I("mousedown",function(n){pe(e);let a=C();return fe(a.startDrag(n))}),v(6,"span",16),c(),l(7,"div",17),v(8,"app-journal-panel"),c()()}if(i&2){let e=C();E(e.loading()?0:-1),d(),f("dragging",e.isDragging()),d(2),E(e.error()?3:4),d(4),Ne("width",e.sidebarWidth(),"px")}}var gp=100,_p=1600,bp=(()=>{class i{ngOnInit(){this.authService.authState.subscribe(t=>{this.isAuthenticated.set(t),t&&(this.loginError.set(null),this.loginPassword.set(""))});let e=localStorage.getItem("journal-sidebar-width");if(e){let t=parseInt(e,10);t>=gp&&t<=_p&&this.sidebarWidth.set(t)}}ngOnDestroy(){}onLogin(){return Ce(this,null,function*(){this.loginError.set(null),(yield this.authService.login(this.loginPassword()))?(this.loading.set(!0),this.initGpus()):this.loginError.set("Invalid password")})}startDrag(e){e.preventDefault(),this.dragOffsetX=e.clientX,this.dragStartWidth=this.sidebarWidth(),this.isDragging.set(!0)}onDrag(e){if(!this.isDragging())return;let t=this.dragOffsetX-e.clientX,n=this.dragStartWidth+t;n=Math.max(gp,Math.min(_p,n)),this.sidebarWidth.set(n)}onDragEnd(){this.isDragging()&&(localStorage.setItem("journal-sidebar-width",String(this.sidebarWidth())),this.isDragging.set(!1))}constructor(){this.gpuService=s(Hu),this.authService=s(cr),this.gpus=N([]),this.systemInfo=N({cpuUsage:0,memoryTotal:0,memoryUsed:0,memoryPercent:0}),this.loading=N(!0),this.error=N(null),this.hasGpus=K(()=>this.gpus().length>0),this.isAuthenticated=N(this.authService.isAuthenticated()),this.loginPassword=N(""),this.loginError=N(null),this.sidebarWidth=N(420),this.isDragging=N(!1),this.dragOffsetX=0,this.dragStartWidth=420,this.isAuthenticated()&&this.initGpus()}initGpus(e=0){this.gpuService.fetchGpus().subscribe({next:t=>{if(t.length===0){e<3?setTimeout(()=>this.initGpus(e+1),5e3):this.loading.set(!1);return}let n=t.map(a=>Se(L({},a),{key:a.pciBusId,usage:0,temperature:0,vramUsed:0}));this.gpus.set(n),this.loading.set(!1),this.error.set(null),this.gpuService.watchStatus(3e3).subscribe({next:a=>{this.systemInfo.set(a.system),this.mergeUsage(a.gpus)},error:a=>{console.error("[AppComponent] status poll error:",a)}})},error:t=>{console.error("[AppComponent] static fetch error:",t),this.error.set(`Failed to fetch GPU data: ${t.message}`),this.loading.set(!1)}})}mergeUsage(e){let t=new Map;for(let n of e)t.set(n.key,n);this.gpus.update(n=>n.map(a=>{let r=t.get(a.pciBusId);return Se(L({},a),{key:a.pciBusId,usage:r?.usage??0,temperature:r?.temperature??0,vramUsed:r?.vramUsed??0})}))}onGpuLabelChange(e){this.gpus.update(t=>t.map(n=>n.pciBusId===e.pciBusId?Se(L({},n),{gpuLabel:e.gpuLabel}):n)),this.gpuService.saveGpuLabel(e.pciBusId,e.gpuLabel).subscribe({error:t=>console.error("[AppComponent] GPU label save error:",t)})}static{this.\u0275fac=function(t){return new(t||i)}}static{this.\u0275cmp=A({type:i,selectors:[["app-root"]],hostBindings:function(t,n){t&1&&I("mousemove",function(r){return n.onDrag(r)},Ms)("mouseup",function(){return n.onDragEnd()},Ms)},decls:2,vars:1,consts:[[1,"login-container"],[1,"login-card"],[1,"login-header"],[1,"login-icon"],[1,"mat-body-2",2,"color","#999"],[1,"login-form",3,"submit"],["appearance","outline",1,"full-width"],["matInput","","type","password","autofocus","",3,"input","value"],[1,"login-error"],["mat-raised-button","","color","primary","type","submit",1,"login-btn"],[2,"font-size","20px","vertical-align","middle"],["mode","query","color","primary"],[1,"layout"],[1,"main-content"],[1,"error-card"],[1,"splitter",3,"mousedown"],[1,"splitter-line"],[1,"journal-sidebar"],[2,"color","#f44336","font-size","48px","float","left","margin-right","16px"],[1,"empty-card"],[3,"systemInfo"],[3,"gpuLabelChange","gpus"]],template:function(t,n){t&1&&S(0,G0,18,2,"div",0)(1,X0,9,6),t&2&&E(n.isAuthenticated()?1:0)},dependencies:[$e,Vi,qn,Hi,zi,ji,$t,Gt,yt,Ut,Ct,dt,ht,Kt,qt,uh,up,hp,fp],styles:[".spacer[_ngcontent-%COMP%]{flex:1 1 auto}.login-container[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 56px);padding:24px;background:#f5f5f5}.login-card[_ngcontent-%COMP%]{width:100%;max-width:400px}.login-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:24px}.login-header[_ngcontent-%COMP%] .login-icon[_ngcontent-%COMP%]{font-size:48px;width:48px;height:48px;line-height:48px;background:#e3f2fd;border-radius:50%;padding:8px;color:#1976d2}.login-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:16px 0 4px;font-size:22px;font-weight:500}.login-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.login-error[_ngcontent-%COMP%]{color:#d32f2f;font-size:14px;text-align:center;padding:8px;background:#ffebee;border-radius:4px}.login-btn[_ngcontent-%COMP%]{width:100%;margin-top:8px}.full-width[_ngcontent-%COMP%]{width:100%}.layout[_ngcontent-%COMP%]{display:flex;height:100%;overflow:hidden}.layout.dragging[_ngcontent-%COMP%]{user-select:none;-webkit-user-select:none}.main-content[_ngcontent-%COMP%]{flex:1;min-width:0;overflow-y:auto;padding:24px 8px 24px 24px;max-width:100%}.splitter[_ngcontent-%COMP%]{width:8px;flex-shrink:0;cursor:col-resize;display:flex;align-items:center;justify-content:center;background:transparent;transition:background .15s}.splitter[_ngcontent-%COMP%]:hover{background:#0000000a}.splitter[_ngcontent-%COMP%] .splitter-line[_ngcontent-%COMP%]{width:2px;height:32px;border-radius:1px;background:#bdbdbd;transition:background .15s,width .15s}.splitter[_ngcontent-%COMP%]:hover .splitter-line[_ngcontent-%COMP%]{background:#757575;width:3px}.journal-sidebar[_ngcontent-%COMP%]{flex-shrink:0;overflow:hidden;padding:24px 24px 24px 8px}.error-card[_ngcontent-%COMP%], .empty-card[_ngcontent-%COMP%]{margin-top:32px;max-width:600px;margin-left:auto;margin-right:auto}[_nghost-%COMP%] mat-card-content{padding-top:10px!important;padding-bottom:10px!important}app-services[_ngcontent-%COMP%]{display:block;margin-top:24px}"]})}}return i})();tl(bp,nm).catch(i=>console.error(i));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiservermanager",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "GPU server monitoring and AI service manager web dashboard",
5
5
  "main": "backend/dist/index.js",
6
6
  "bin": {