166 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import * as colors from './00colors.js';
 | |
| import * as plugins from './00plugins.js';
 | |
| 
 | |
| import { demoFunc } from './dees-dataview-statusobject.demo.js';
 | |
| import {
 | |
|   DeesElement,
 | |
|   html,
 | |
|   customElement,
 | |
|   type TemplateResult,
 | |
|   property,
 | |
|   state,
 | |
|   cssManager,
 | |
|   css,
 | |
|   type CSSResult,
 | |
| } from '@design.estate/dees-element';
 | |
| 
 | |
| import * as tsclass from '@tsclass/tsclass';
 | |
| 
 | |
| declare global {
 | |
|   interface HTMLElementTagNameMap {
 | |
|     'dees-dataview-statusobject': DeesDataviewStatusobject;
 | |
|   }
 | |
| }
 | |
| 
 | |
| @customElement('dees-dataview-statusobject')
 | |
| export class DeesDataviewStatusobject extends DeesElement {
 | |
|   public static demo = demoFunc;
 | |
| 
 | |
|   @property({ type: Object }) statusObject: tsclass.code.IStatusObject;
 | |
| 
 | |
|   public static styles = [
 | |
|     cssManager.defaultStyles,
 | |
|     css`
 | |
|       .mainbox {
 | |
|         border-radius: 8px;
 | |
|         background: ${cssManager.bdTheme('#fff', '#1b1b1b')};
 | |
|         box-shadow: 0px 1px 3px #00000030;
 | |
|         min-height: 48px;
 | |
|         color: ${cssManager.bdTheme('#000', '#fff')};
 | |
|         border-top: ${cssManager.bdTheme('none', '1px solid #ffffff10')};
 | |
|         cursor: default;
 | |
|       }
 | |
| 
 | |
|       .heading {
 | |
|         display: grid;
 | |
|         align-items: center;
 | |
|         grid-template-columns: 40px auto 120px;
 | |
|       }
 | |
| 
 | |
|       h1 {
 | |
|         display: block;
 | |
|         margin: 0px;
 | |
|         padding: 0px;
 | |
|         height: 48px;
 | |
|         text-transform: uppercase;
 | |
|         font-size: 12px;
 | |
|         line-height: 48px;
 | |
|       }
 | |
| 
 | |
|       .statusdot {
 | |
|         height: 8px;
 | |
|         width: 8px;
 | |
|         border-radius: 6px;
 | |
|         background: grey;
 | |
|         margin: auto;
 | |
|       }
 | |
| 
 | |
|       .copyMain {
 | |
|         font-size: 10px;
 | |
|         font-weight: 600;
 | |
|         text-transform: uppercase;
 | |
|         border: 1px solid ${cssManager.bdTheme('#e0e0e0', '#444')};
 | |
|         text-align: center;
 | |
|         padding: 4px;
 | |
|         border-radius: 3px;
 | |
|         margin-right: 16px;
 | |
|         color: ${cssManager.bdTheme('#333', '#ffffff80')};
 | |
|         user-select: none;
 | |
|       }
 | |
| 
 | |
|       .copyMain:hover {
 | |
|         background: ${cssManager.bdTheme(colors.bright.blue, colors.dark.blue)};
 | |
|         border: 1px solid ${cssManager.bdTheme(colors.bright.blue, colors.dark.blue)};
 | |
|         color: #fff;
 | |
|       }
 | |
| 
 | |
|       .copyMain:active {
 | |
|         background: ${cssManager.bdTheme(colors.bright.blueActive, colors.dark.blueActive)};
 | |
|         border: 1px solid ${cssManager.bdTheme(colors.bright.blueActive, colors.dark.blueActive)};
 | |
|         color: #fff;
 | |
|       }
 | |
| 
 | |
|       .statusdot.ok {
 | |
|         background: green;
 | |
|       }
 | |
| 
 | |
|       .statusdot.not_ok{
 | |
|         background: red;
 | |
|       }
 | |
| 
 | |
|       .statusdot.partly_ok {
 | |
|         background: orange;
 | |
|       }
 | |
| 
 | |
|       .detail {
 | |
|         min-height: 60px;
 | |
|         align-items: center;
 | |
|         display: grid;
 | |
|         grid-template-columns: 40px auto;
 | |
|         border-top: 1px dotted ${cssManager.bdTheme('#e0e0e0', '#282828')};
 | |
|         transition: all 0.2s;
 | |
|       }
 | |
| 
 | |
|       .detail:hover {
 | |
|         background: #ffffff05;
 | |
|       }
 | |
| 
 | |
|       .detail:active {
 | |
|         background: #ffffff10;
 | |
|       }
 | |
| 
 | |
|       .detail .detailsText {
 | |
|         padding-top: 8px;
 | |
|         padding-bottom: 8px;
 | |
|         padding-right: 8px;
 | |
|         word-break: break-all;
 | |
|       }
 | |
| 
 | |
|       .detail .detailsText .label {
 | |
|         font-size: 12px;
 | |
|         color: #ffffff80
 | |
|       }
 | |
| 
 | |
|       .detail .detailsText .value {
 | |
|         font-size: 14px;
 | |
|         font-family: 'Intel One Mono', 'Geist Mono';
 | |
|       }
 | |
|     `,
 | |
|   ];
 | |
| 
 | |
|   render(): TemplateResult {
 | |
|     return html`
 | |
|       <div class="mainbox">
 | |
|         <div class="heading">
 | |
|           <div class="statusdot ${this.statusObject?.combinedStatus}"></div>
 | |
|           <h1>${this.statusObject?.name || 'no status object assigned'}</h1>
 | |
|           <div class="copyMain">Copy as JSON</div>
 | |
|         </div>
 | |
|         ${this.statusObject?.details?.map((detailArg) => {
 | |
|           return html`
 | |
|             <div class="detail">
 | |
|               <div class="statusdot ${detailArg.status}"></div>
 | |
|               <div class="detailsText">
 | |
|                 <div class="label">${detailArg.name}</div>
 | |
|                 <div class="value">${detailArg.value}</div>
 | |
|               </div>
 | |
|             </div>
 | |
|           `;
 | |
|         })}
 | |
|       </div>
 | |
|     `;
 | |
|   }
 | |
| 
 | |
|   async firstUpdated() {}
 | |
| }
 |