web_plsql 1.3.2 → 1.5.0

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.
@@ -0,0 +1 @@
1
+ :root{--accent-rgb:59, 130, 246;--bg-main:#f8fafc;--bg-side:#fff;--bg-card:#fff;--bg-hover:#f1f5f9;--text-main:#475569;--text-bright:#0f172a;--accent:#3b82f6;--border:#e2e8f0;--success:#10b981;--warning:#f59e0b;--danger:#ef4444;--shadow:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--terminal-bg:#1e293b;--config-key:#3b82f6}body.dark{--bg-main:#0f172a;--bg-side:#1e293b;--bg-card:#1e293b;--bg-hover:#334155;--text-main:#94a3b8;--text-bright:#f8fafc;--accent:#3b82f6;--border:#334155;--success:#10b981;--warning:#f59e0b;--danger:#ef4444;--shadow:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--terminal-bg:#000;--config-key:#60a5fa}body{background-color:var(--bg-main);color:var(--text-main);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;transition:background-color .3s,color .3s}.app-container{height:100vh;display:flex}.sidebar{background-color:var(--bg-side);border-right:1px solid var(--border);z-index:10;flex-direction:column;width:240px;display:flex}.logo{color:var(--text-bright);align-items:center;gap:12px;padding:24px;font-size:1.25rem;font-weight:700;display:flex}.logo .material-symbols-rounded{color:var(--accent);font-size:28px}nav{flex:1;padding:12px}.status-indicator{border-top:1px solid var(--border);align-items:center;padding:20px;font-size:.85rem;font-weight:500;display:flex}.dot{background-color:#64748b;border-radius:50%;width:8px;height:8px;margin-right:12px;display:inline-block;box-shadow:0 0 0 4px #64748b1a}.dot.running{background-color:var(--success);box-shadow:0 0 0 4px #10b98133}.dot.paused{background-color:var(--warning);box-shadow:0 0 0 4px #f59e0b33}.content{flex-direction:column;flex:1;display:flex;overflow:hidden}.main-header{background-color:var(--bg-main);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:20px 32px;display:flex}.main-header h1{color:var(--text-bright);align-items:center;gap:12px;margin:0;font-size:1.5rem;font-weight:600;display:flex}.main-header h1 .material-symbols-rounded{color:var(--accent);font-size:28px}.header-toolbar{align-items:center;gap:24px;display:flex}.auto-refresh-group{background:var(--bg-side);border:1px solid var(--border);border-radius:6px;align-items:center;gap:12px;padding:6px 12px;font-size:.875rem;display:flex}.auto-refresh-group select{color:var(--text-bright);cursor:pointer;background:0 0;border:none;font-weight:500}.view{flex:1;padding:32px;overflow-y:auto}.metrics-grid,.pools-grid,.cache-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;margin-bottom:32px;display:grid}.card{background-color:var(--bg-card);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;padding:24px}.card-header{align-items:center;gap:12px;margin-bottom:16px;display:flex}.card-header .material-symbols-rounded{color:var(--accent)}.card h3{text-transform:uppercase;letter-spacing:.05em;color:var(--text-main);margin:0;font-size:.875rem}.card p{color:var(--text-bright);margin:0;font-size:2rem;font-weight:700}.card small{color:var(--text-main);margin-top:8px;font-size:.875rem;display:block}.card.warning{border-left:4px solid var(--warning)}.table-container{background:var(--bg-card);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;overflow:hidden}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--border);padding:16px 24px}th{background-color:var(--bg-hover);color:var(--text-main);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem;font-weight:600}td{color:var(--text-bright);font-size:.9375rem}tr:last-child td{border-bottom:none}.terminal-container,.config-container{background-color:var(--bg-side);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;overflow:hidden}.terminal{background-color:var(--terminal-bg);color:#10b981;white-space:pre;margin:0;padding:24px;font-family:JetBrains Mono,Fira Code,monospace;font-size:.875rem;line-height:1.6;overflow-x:auto}.config-view-content{max-width:900px;margin:0 auto;padding:0}.config-table{border-collapse:collapse;width:100%}.config-table tr{border-bottom:1px solid var(--border)}.config-table tr:last-child{border-bottom:none}.config-table td{vertical-align:top;padding:16px 24px}.config-label{color:var(--text-main);background-color:var(--bg-main);width:240px;font-size:.875rem;font-weight:600}.config-value{color:var(--text-bright);word-break:break-all;font-family:JetBrains Mono,monospace;font-size:.875rem}.config-section-header{background-color:var(--bg-hover);text-transform:uppercase;color:var(--accent);letter-spacing:.05em;border-bottom:1px solid var(--border);padding:12px 24px;font-size:.75rem;font-weight:700}.inner-config-table{border-collapse:collapse;width:100%;font-size:.8125rem}.inner-config-table td{border:none;padding:4px 8px}.cache-card .badge{align-self:center}.card-header h4{color:var(--accent)}.stat-row-label{white-space:nowrap;text-overflow:ellipsis;flex:0 0 180px;overflow:hidden}.stat-row-value{text-align:right;flex:1}@media (width<=640px){.stat-row{flex-direction:column;align-items:flex-start;gap:4px}.stat-row-label{opacity:.7;text-align:left;flex:none;font-size:.75rem}.stat-row-value{text-align:left;width:100%}}.view-system-compact{padding:20px 32px}.view-system-compact .metrics-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start;gap:16px;margin-bottom:24px;display:grid}.view-system-compact .card{padding:16px}.view-system-compact .stat-row{padding:4px 0}.view-system-compact .card-header{margin-bottom:12px}.resource-card{flex-direction:column;min-height:350px;display:flex}.resource-card .chart-container-mini{margin-top:auto}.chart-container-mini{border:none;border-radius:4px;width:100%;height:100px;position:relative;overflow:hidden}.chart-container{height:300px;margin-bottom:32px;position:relative}.btn,.icon-btn{cursor:pointer;background-color:var(--bg-hover);color:var(--text-bright);border:none;border-radius:8px;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:.875rem;font-weight:600;transition:all .2s;display:inline-flex}.btn .material-symbols-rounded,.icon-btn .material-symbols-rounded{font-size:18px}.btn:hover,.icon-btn:hover{background-color:var(--border)}.btn-primary{background-color:var(--accent);color:#fff}.btn-primary:hover{opacity:.9;background-color:var(--accent)}.btn-success{background-color:var(--success);color:#fff}.btn-success:hover{opacity:.9}.btn-warning{background-color:var(--warning);color:#000}.btn-warning:hover{opacity:.9}.btn-danger{background-color:var(--danger);color:#fff}.btn-danger:hover{opacity:.9}.btn-outline{border:1px solid var(--border);color:var(--accent);background:0 0}.btn-outline:hover{background-color:var(--bg-hover)}.btn-full{width:100%}.btn-sm{padding:6px 12px;font-size:.8125rem}.btn-sm .material-symbols-rounded{font-size:16px}.btn-lg{padding:14px 28px;font-size:1rem}.btn-lg .material-symbols-rounded{font-size:22px}nav button{text-align:left;width:100%;color:var(--text-main);cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:12px;margin-bottom:4px;padding:12px 16px;font-size:.95rem;transition:all .2s;display:flex}nav button:hover{background-color:var(--bg-hover);color:var(--text-bright)}nav button.active{background-color:var(--accent);color:#fff}nav button .material-symbols-rounded{font-size:20px}.icon-btn{min-width:40px;min-height:40px;padding:10px}.icon-btn.icon-sm{min-width:32px;min-height:32px;padding:6px}.icon-btn.icon-sm .material-symbols-rounded{font-size:20px}.control-group{flex-wrap:wrap;gap:16px;margin-top:24px;display:flex}.control-group .btn{flex:1;min-width:140px}.gap-1{gap:4px}.mt-1{margin-top:4px}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mt-6{margin-top:24px}.mb-1{margin-bottom:4px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.mb-4{margin-bottom:16px}.mb-6{margin-bottom:24px}.p-2{padding:8px}.p-3{padding:12px}.p-4{padding:16px}.p-6{padding:24px}.mx-auto{margin-left:auto;margin-right:auto}.flex{display:flex}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.self-center{align-self:center}.self-end{align-self:flex-end}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.text-center{text-align:center}.text-right{text-align:right}.text-main{color:var(--text-main)}.text-bright{color:var(--text-bright)}.text-accent{color:var(--accent)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-danger{color:var(--danger)}.bg-main{background-color:var(--bg-main)}.bg-card{background-color:var(--bg-card)}.bg-hover{background-color:var(--bg-hover)}.bg-success{background-color:var(--success)}.bg-warning{background-color:var(--warning)}.bg-danger{background-color:var(--danger)}.border{border:1px solid var(--border)}.border-b{border-bottom:1px solid var(--border)}.border-none{border:none}.border-t{border-top:1px solid var(--border)}.border-l{border-left:1px solid var(--border)}.border-r{border-right:1px solid var(--border)}.rounded{border-radius:4px}.rounded-md{border-radius:6px}.rounded-lg{border-radius:8px}.rounded-xl{border-radius:12px}.rounded-full{border-radius:9999px}.shadow-sm{box-shadow:var(--shadow)}.shadow-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.w-full{width:100%}.w-auto{width:auto}.max-w-xs{max-width:120px}.max-w-sm{max-width:200px}.max-w-md{max-width:280px}.overflow-hidden{overflow:hidden}.overflow-auto{overflow:auto}.overflow-x-auto{overflow-x:auto}.cursor-pointer{cursor:pointer}.transition{transition:all .2s}.transition-colors{transition:background-color .2s,color .2s,border-color .2s}.transition-all{transition:all .2s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.hover-bg:hover{background-color:var(--bg-hover)}.hover-border:hover{border-color:var(--accent)}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.leading-tight{line-height:1.25}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,1fr)}.grid-cols-3{grid-template-columns:repeat(3,1fr)}.grid-cols-auto{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:24px}.stat-card{background-color:var(--bg-card);border:1px solid var(--border);text-align:center;border-radius:8px;padding:16px}.stat-card-value{color:var(--text-bright);font-size:1.75rem;font-weight:700;line-height:1.2}.stat-card-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-main);margin-top:4px;font-size:.75rem}.progress-bar{background:var(--bg-main);border-radius:3px;height:6px;overflow:hidden}.progress-bar-fill{border-radius:3px;height:100%;transition:width .3s}.progress-bar-sm{height:4px}.progress-bar-lg{height:8px}.badge{border-radius:9999px;align-items:center;gap:4px;padding:4px 8px;font-size:.75rem;font-weight:600;display:inline-flex}.badge-success{color:var(--success);background-color:#10b98126}.badge-warning{color:var(--warning);background-color:#f59e0b26}.badge-danger{color:var(--danger);background-color:#ef444426}.badge-info{color:var(--accent);background-color:#3b82f626}.status-dot{align-items:center;gap:6px;font-size:.875rem;font-weight:500;display:inline-flex}.status-dot .dot{flex-shrink:0;margin:0}.table-row-hover tbody tr{transition:background-color .15s}.table-row-hover tbody tr:hover{background-color:var(--bg-hover)}.table-cell{text-align:left;border-bottom:1px solid var(--border);padding:12px 16px}.table-cell-sm{padding:8px 12px;font-size:.8125rem}.table-header{background-color:var(--bg-hover);color:var(--text-main);text-transform:uppercase;letter-spacing:.05em;text-align:left;padding:12px 16px;font-size:.75rem;font-weight:600}.dense-table th,.dense-table td{padding:6px 12px;font-size:.8125rem}.table-layout-auto{table-layout:auto}.table-layout-fixed{table-layout:fixed}.code{background-color:var(--bg-main);color:var(--accent);border-radius:4px;padding:2px 6px;font-family:JetBrains Mono,Fira Code,monospace;font-size:.875rem}.code-sm{padding:1px 4px;font-size:.75rem}.description{color:var(--text-main);font-size:.75rem;font-weight:400}.stat-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:8px 0;display:flex}.stat-row:last-child{border-bottom:none}.stat-row-label{color:var(--text-main);font-size:.875rem}.stat-row-value{color:var(--text-bright);font-family:monospace;font-weight:600}.card-section{margin-bottom:24px}.card-section:last-child{margin-bottom:0}.card-clickable{cursor:pointer;transition:all .2s}.card-clickable:hover{border-color:var(--accent);box-shadow:0 4px 12px #3b82f626}.icon-xs{font-size:14px}.icon-sm{font-size:18px}.icon-md{font-size:20px}.icon-lg{font-size:24px}.icon-xl{font-size:28px}.modal{z-index:1000;background-color:#000000b3;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-content{background-color:var(--bg-card);width:100%;max-width:900px;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;max-height:90vh;display:flex}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 24px;display:flex}.modal-header h3{color:var(--text-bright);margin:0;font-size:1.125rem}.modal-body{padding:24px;overflow-y:auto}.stat-values-inline{align-items:center;gap:8px;display:flex}.stat-values{flex-direction:column;align-items:flex-end;display:flex}.min-max{opacity:.7;margin-top:2px;font-size:.7rem}.search-group{align-items:center;display:flex;position:relative}.input-sm{background-color:var(--bg-side);border:1px solid var(--border);color:var(--text-bright);border-radius:6px;padding:6px 12px;font-size:.875rem}.input-sm:focus{border-color:var(--accent);outline:none}.errors-table-row{cursor:pointer;transition:background-color .2s}.errors-table-row:hover{background-color:rgba(var(--accent-rgb), .08)}.server-status{background-color:var(--bg-card);border:1px solid var(--border);border-radius:8px;align-items:center;gap:8px;padding:8px 12px;display:flex}.server-status-indicator{align-items:center;gap:8px;display:flex}.server-status-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.server-status-dot.running{background-color:var(--success);box-shadow:0 0 8px #10b98166}.server-status-dot.paused{background-color:var(--warning);box-shadow:0 0 8px #f59e0b66}.server-status-dot.stopped{background-color:var(--danger);box-shadow:0 0 8px #ef444466}.server-status-text{text-transform:uppercase;letter-spacing:.025em;font-size:.875rem;font-weight:500}.danger-zone{border:1px solid var(--warning);background-color:#f59e0b08;border-left-width:4px}.danger-zone-title{color:var(--warning);margin-bottom:8px;font-weight:600}.empty-state{text-align:center;color:var(--text-main);padding:48px 24px}.empty-state-icon{color:var(--text-main);opacity:.5;margin-bottom:16px;font-size:48px}.empty-state-text{font-size:.875rem}.skeleton{background:linear-gradient(90deg, var(--bg-main) 25%, var(--bg-hover) 50%, var(--bg-main) 75%);background-size:200% 100%;border-radius:4px;animation:1.5s infinite skeleton-loading}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-main)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-main);opacity:.5}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}select{accent-color:var(--accent);cursor:pointer}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin;display:inline-block}.btn.loading{pointer-events:none;opacity:.8}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-bold:700;--tracking-wider:.05em;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-success:#10b981;--color-warning:#f59e0b;--color-danger:#ef4444}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.fixed{position:fixed}.relative{position:relative}.static{position:static}.start{inset-inline-start:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.table{display:table}.w-full{width:100%}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-\[800px\]{max-width:800px}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.border-white\/5{border-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.bg-success{background-color:var(--color-success)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-black{color:var(--color-black)}.text-danger{color:var(--color-danger)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.opacity-30{opacity:.3}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}@media (hover:hover){.hover\:bg-success\/80:hover{background-color:#10b981cc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-success\/80:hover{background-color:color-mix(in oklab, var(--color-success) 80%, transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}}@media (width>=48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}body{-webkit-font-smoothing:antialiased;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}body.dark{--bg-main:#0f172a;--bg-side:#1e293b;--bg-card:#1e293b;--bg-hover:#334155;--text-main:#94a3b8;--text-bright:#f8fafc;--border:#334155}body:not(.dark){--bg-main:#f8fafc;--bg-side:#fff;--bg-card:#fff;--bg-hover:#f1f5f9;--text-main:#475569;--text-bright:#0f172a;--border:#e2e8f0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
@@ -6,8 +6,8 @@
6
6
  <title>web_plsql Admin Console</title>
7
7
  <link rel="icon" type="image/svg+xml" href="/admin/assets/favicon-mQAM4tVu.svg" />
8
8
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
9
- <script type="module" crossorigin src="/admin/assets/main-D2PlS0b8.js"></script>
10
- <link rel="stylesheet" crossorigin href="/admin/assets/main-bU4x_yEW.css">
9
+ <script type="module" crossorigin src="/admin/assets/main-B5q2ur8E.js"></script>
10
+ <link rel="stylesheet" crossorigin href="/admin/assets/main-CoERzZAr.css">
11
11
  </head>
12
12
  <body class="dark">
13
13
  <div class="app-container">
Binary file
Binary file
package/dist/index.d.mts CHANGED
@@ -2,7 +2,7 @@ import z$1, { z } from "zod";
2
2
  import oracledb, { BindParameter, BindParameters, BindParameters as BindParameters$1, Connection, Connection as Connection$1, DbType, ExecuteOptions, Lob, Pool, Pool as Pool$1, Result, Result as Result$1 } from "oracledb";
3
3
  import http from "node:http";
4
4
  import https from "node:https";
5
- import { Express, RequestHandler, Router } from "express";
5
+ import { Express, Request, RequestHandler, Router } from "express";
6
6
  import { Readable } from "node:stream";
7
7
 
8
8
  //#region src/backend/util/cache.d.ts
@@ -82,14 +82,20 @@ type transactionCallbackType = (connection: Connection, procedure: string) => vo
82
82
  * callback: custom function for manual handling
83
83
  */
84
84
  /**
85
- * Authentication callback signature.
85
+ * Basic authentication callback signature.
86
86
  * Returns the identity string on success, or null on failure.
87
87
  * @public
88
88
  */
89
- type AuthCallback = (connectionPool: Pool, credentials: {
89
+ type BasicAuthCallback = (credentials: {
90
90
  username: string;
91
91
  password?: string | undefined;
92
- }) => Promise<string | null>;
92
+ }, connectionPool: Pool) => Promise<string | null>;
93
+ /**
94
+ * Custom authentication callback signature.
95
+ * Returns the identity string on success, or null on failure.
96
+ * @public
97
+ */
98
+ type CustomAuthCallback = (req: Request, connectionPool: Pool) => Promise<string | null>;
93
99
  /**
94
100
  * PL/SQL handler behavior configuration
95
101
  */
@@ -106,11 +112,14 @@ declare const z$configPlSqlHandlerType: z$1.ZodObject<{
106
112
  debug: "debug";
107
113
  }>; /** Static CGI environment variables to be passed to the session */
108
114
  cgi: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodString>>; /** Authentication settings */
109
- auth: z$1.ZodOptional<z$1.ZodObject<{
115
+ auth: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodObject<{
110
116
  /** Authentication type */type: z$1.ZodLiteral<"basic">; /** Callback function to validate credentials */
111
- callback: z$1.ZodCustom<AuthCallback, AuthCallback>; /** Authentication realm */
117
+ callback: z$1.ZodCustom<BasicAuthCallback, BasicAuthCallback>; /** Authentication realm */
112
118
  realm: z$1.ZodOptional<z$1.ZodString>;
113
- }, z$1.core.$strict>>;
119
+ }, z$1.core.$strict>, z$1.ZodObject<{
120
+ /** Authentication type */type: z$1.ZodLiteral<"custom">; /** Callback function to validate request */
121
+ callback: z$1.ZodCustom<CustomAuthCallback, CustomAuthCallback>;
122
+ }, z$1.core.$strict>]>>;
114
123
  }, z$1.core.$strict>;
115
124
  type configPlSqlHandlerType = z$1.infer<typeof z$configPlSqlHandlerType>;
116
125
  /**
@@ -154,18 +163,22 @@ declare const z$configType: z$1.ZodObject<{
154
163
  debug: "debug";
155
164
  }>; /** Static CGI environment variables to be passed to the session */
156
165
  cgi: z$1.ZodOptional<z$1.ZodRecord<z$1.ZodString, z$1.ZodString>>; /** Authentication settings */
157
- auth: z$1.ZodOptional<z$1.ZodObject<{
166
+ auth: z$1.ZodOptional<z$1.ZodUnion<readonly [z$1.ZodObject<{
158
167
  /** Authentication type */type: z$1.ZodLiteral<"basic">; /** Callback function to validate credentials */
159
- callback: z$1.ZodCustom<AuthCallback, AuthCallback>; /** Authentication realm */
168
+ callback: z$1.ZodCustom<BasicAuthCallback, BasicAuthCallback>; /** Authentication realm */
160
169
  realm: z$1.ZodOptional<z$1.ZodString>;
161
- }, z$1.core.$strict>>;
170
+ }, z$1.core.$strict>, z$1.ZodObject<{
171
+ /** Authentication type */type: z$1.ZodLiteral<"custom">; /** Callback function to validate request */
172
+ callback: z$1.ZodCustom<CustomAuthCallback, CustomAuthCallback>;
173
+ }, z$1.core.$strict>]>>;
162
174
  }, z$1.core.$strict>>; /** Maximum allowed size for file uploads (bytes) */
163
175
  uploadFileSizeLimit: z$1.ZodOptional<z$1.ZodNumber>; /** Path to the log file */
164
176
  loggerFilename: z$1.ZodString; /** URL route prefix for the admin console */
165
177
  adminRoute: z$1.ZodOptional<z$1.ZodString>; /** Username for admin console authentication */
166
178
  adminUser: z$1.ZodOptional<z$1.ZodString>; /** Password for admin console authentication */
167
179
  adminPassword: z$1.ZodOptional<z$1.ZodString>; /** Developer mode (skips frontend build check, enables CORS) */
168
- devMode: z$1.ZodOptional<z$1.ZodBoolean>;
180
+ devMode: z$1.ZodOptional<z$1.ZodBoolean>; /** Callback function to setup custom Express extensions */
181
+ setupExtensions: z$1.ZodOptional<z$1.ZodCustom<(app: Express, pools: Pool[]) => void | Promise<void>, (app: Express, pools: Pool[]) => void | Promise<void>>>;
169
182
  }, z$1.core.$strict>;
170
183
  type configType = z$1.infer<typeof z$configType>;
171
184
  /**
@@ -280,7 +293,7 @@ declare global {
280
293
  }
281
294
  /**
282
295
  * Returns the current library version
283
- * @returns {string} - Version.
296
+ * @returns Version.
284
297
  */
285
298
  declare const getVersion: () => string;
286
299
  //#endregion