@openremote/or-services 1.9.0-snapshot.20250922103504

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.
package/lib/index.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ import { LitElement, TemplateResult } from "lit";
2
+ import { ExternalService } from "@openremote/model";
3
+ import "@openremote/or-components/or-iframe";
4
+ import "@openremote/or-icon";
5
+ import "./or-service-tree";
6
+ import { OrServiceSelectedEvent } from "./types";
7
+ export declare class OrServices extends LitElement {
8
+ static get styles(): import("lit").CSSResult[];
9
+ realmName: string;
10
+ services: ExternalService[];
11
+ selectedService: ExternalService | null;
12
+ loading: boolean;
13
+ protected showServiceTree: boolean;
14
+ connectedCallback(): void;
15
+ disconnectedCallback(): void;
16
+ refreshIframe(): void;
17
+ protected _selectService(service: ExternalService): void;
18
+ protected _toggleServiceTree(): void;
19
+ protected _getSidebarClass(): string;
20
+ protected _onServiceSelected(e: OrServiceSelectedEvent): void;
21
+ protected _getServiceUrlPath(service: ExternalService): string;
22
+ protected _getServiceContentTemplate(): TemplateResult;
23
+ protected render(): TemplateResult;
24
+ }
package/lib/index.js ADDED
@@ -0,0 +1,161 @@
1
+ var __decorate=this&&this.__decorate||function(e,r,i,t){var o,s=arguments.length,c=s<3?r:null===t?t=Object.getOwnPropertyDescriptor(r,i):t;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,r,i,t);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(c=(s<3?o(c):s>3?o(r,i,c):o(r,i))||c);return s>3&&c&&Object.defineProperty(r,i,c),c};import{css as e,html as r,LitElement as i}from"lit";import{customElement as t,property as o,state as s}from"lit/decorators.js";import{manager as c}from"@openremote/core";import{i18next as l}from"@openremote/or-translate";import"@openremote/or-components/or-iframe";import"@openremote/or-icon";import"./or-service-tree";import{getServiceUrlPath as a}from"./utils";import{OrServiceSelectedEvent as d}from"./types";let serviceStyles=e`
2
+ :host {
3
+ flex: 1;
4
+ width: 100%;
5
+ }
6
+
7
+ .wrapper {
8
+ display: flex;
9
+ flex-direction: row;
10
+ height: 100%;
11
+ }
12
+
13
+ or-iframe {
14
+ margin: 0 10px;
15
+ width: calc(100% - 20px);
16
+ transition: opacity 0.3s ease-in-out;
17
+ }
18
+
19
+ .sidebar {
20
+ background: #fff;
21
+ width: 300px;
22
+ min-width: 300px;
23
+ box-shadow: rgba(0, 0, 0, 0.21) 0px 1px 3px 0px;
24
+ z-index: 2;
25
+ display: flex;
26
+ flex-direction: column;
27
+ }
28
+
29
+ .msg {
30
+ display: flex;
31
+ justify-content: center;
32
+ align-items: center;
33
+ height: 100%;
34
+ width: 100%;
35
+ background-color: #f9f9f9;
36
+ transition: opacity 0.3s ease-in-out;
37
+ }
38
+
39
+ #fullscreen-header-wrapper {
40
+ min-height: 36px;
41
+ padding: 20px 30px 15px;
42
+ display: flex;
43
+ flex-direction: row;
44
+ align-items: center;
45
+ }
46
+
47
+ #fullscreen-header-title {
48
+ font-size: 18px;
49
+ font-weight: bold;
50
+ color: var(--or-app-color3, #424242);
51
+ display: flex;
52
+ align-items: center;
53
+ }
54
+
55
+ #fullscreen-header-title > or-icon {
56
+ margin-right: 10px;
57
+ cursor: pointer;
58
+ }
59
+
60
+ /* Mobile responsive styles */
61
+ @media only screen and (max-width: 640px) {
62
+ .hideMobile {
63
+ display: none !important;
64
+ }
65
+
66
+ .sidebar {
67
+ width: 100%;
68
+ min-width: 100%;
69
+ flex: 1;
70
+ }
71
+
72
+ .sidebar.hidden {
73
+ display: none !important;
74
+ }
75
+
76
+ .wrapper {
77
+ flex-direction: column;
78
+ }
79
+
80
+ or-iframe {
81
+ flex: 1;
82
+ min-height: 400px;
83
+ }
84
+
85
+ #fullscreen-header-wrapper {
86
+ padding: 11px !important;
87
+ }
88
+ }
89
+
90
+ @media only screen and (min-width: 641px) {
91
+ .showMobile {
92
+ display: none !important;
93
+ }
94
+
95
+ .sidebar {
96
+ width: 300px;
97
+ min-width: 300px;
98
+ }
99
+
100
+ .wrapper {
101
+ flex-direction: row;
102
+ }
103
+ }
104
+
105
+ /* Desktop layout */
106
+ @media only screen and (min-width: 768px) {
107
+ .sidebar {
108
+ width: 300px;
109
+ min-width: 300px;
110
+ box-shadow: rgba(0, 0, 0, 0.21) 0px 1px 3px 0px;
111
+ }
112
+
113
+ or-iframe {
114
+ flex: 1;
115
+ max-width: calc(100vw - 300px);
116
+ }
117
+ }
118
+ `,OrServices=class extends i{constructor(){super(...arguments),this.realmName=c.displayRealm,this.services=[],this.selectedService=null,this.loading=!1,this.showServiceTree=!0}static get styles(){return[serviceStyles]}connectedCallback(){super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback()}refreshIframe(){var e;let r=null==(e=this.shadowRoot)?void 0:e.querySelector("#service-iframe");r&&"function"==typeof r.reload?(console.log("Reloading iframe"),r.reload()):console.warn("Unable to reload iframe: iframe not found or reload method not available")}_selectService(e){this.selectedService=e;let r=new d(e);this.dispatchEvent(r),window.matchMedia("(max-width: 600px)").matches&&(this.showServiceTree=!1)}_toggleServiceTree(){this.showServiceTree=!this.showServiceTree}_getSidebarClass(){return this.selectedService?"hideMobile":""}_onServiceSelected(e){let r=e.detail;r&&this._selectService(r)}_getServiceUrlPath(e){let r=c.isSuperUser();return a(e,this.realmName,r)}_getServiceContentTemplate(){return this.loading?r``:0===this.services.length?r`<div class="msg">
119
+ <or-translate value="services.noServices"></or-translate>
120
+ </div>`:this.selectedService?r`<or-iframe id="service-iframe" .src="${this._getServiceUrlPath(this.selectedService)}">
121
+ <span slot="onerror">${l.t("services.iframeLoadError")}</span>
122
+ </or-iframe>`:r`<div class="msg">
123
+ <or-translate value="services.noServiceSelected"></or-translate>
124
+ </div>`}render(){var e;return r`
125
+ <div class="wrapper">
126
+ ${this.showServiceTree?r`
127
+ <div class="sidebar ${this._getSidebarClass()}">
128
+ <or-service-tree
129
+ .services="${this.services}"
130
+ .selectedService="${this.selectedService}"
131
+ @or-service-selected="${this._onServiceSelected}"
132
+ ></or-service-tree>
133
+ </div>
134
+ `:void 0}
135
+ <div
136
+ class="${null==this.selectedService?"hideMobile":void 0}"
137
+ style="flex: 1; display: flex; flex-direction: column;"
138
+ >
139
+ ${this.selectedService?r`
140
+ <div id="fullscreen-header">
141
+ <div id="fullscreen-header-wrapper">
142
+ <div id="fullscreen-header-title">
143
+ <or-icon
144
+ class="showMobile"
145
+ icon="chevron-left"
146
+ @click="${()=>{this.selectedService=null,this.showServiceTree=!0}}"
147
+ ></or-icon>
148
+ <or-icon
149
+ class="hideMobile"
150
+ icon="${null!=(e=this.selectedService.icon)?e:"puzzle"}"
151
+ title="${l.t("services.services")}"
152
+ ></or-icon>
153
+ <span>${this.selectedService.label||this.selectedService.serviceId}</span>
154
+ </div>
155
+ </div>
156
+ </div>
157
+ `:void 0}
158
+ <div style="flex: 1;">${this._getServiceContentTemplate()}</div>
159
+ </div>
160
+ </div>
161
+ `}};__decorate([o({type:String})],OrServices.prototype,"realmName",void 0),__decorate([o({type:Array})],OrServices.prototype,"services",void 0),__decorate([o({type:Object})],OrServices.prototype,"selectedService",void 0),__decorate([o({type:Boolean})],OrServices.prototype,"loading",void 0),__decorate([s()],OrServices.prototype,"showServiceTree",void 0),OrServices=__decorate([t("or-services")],OrServices);export{OrServices};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { TemplateResult, PropertyValues } from "lit";
2
+ import { OrTreeMenu, TreeMenuSelection, TreeMenuSorting } from "@openremote/or-tree-menu";
3
+ import { ExternalService } from "@openremote/model";
4
+ import { ServiceTreeNode } from "./types";
5
+ export declare enum ServiceTreeSorting {
6
+ NAME = "name",
7
+ STATUS = "status"
8
+ }
9
+ /**
10
+ * @event {OrServiceSelectedEvent} or-service-selected - Triggers upon selecting a service, and dispatches the selected service.
11
+ */
12
+ export declare class OrServiceTree extends OrTreeMenu {
13
+ static get styles(): any[];
14
+ services?: ExternalService[];
15
+ selectedService?: ExternalService;
16
+ readonly: boolean;
17
+ nodes: ServiceTreeNode[];
18
+ selection: TreeMenuSelection;
19
+ menuTitle: string;
20
+ sortBy: any;
21
+ sortOptions: any[];
22
+ protected willUpdate(changedProps: PropertyValues): void;
23
+ protected _dispatchSelectEvent(nodes?: ServiceTreeNode[]): boolean;
24
+ protected _getServiceNodes(services: ExternalService[]): ServiceTreeNode[];
25
+ protected _getSingleNodeSlotTemplate(node: ServiceTreeNode): TemplateResult;
26
+ protected _getHeaderTemplate(): TemplateResult;
27
+ protected _getSortFunction(sortBy?: TreeMenuSorting): (a: ServiceTreeNode, b: ServiceTreeNode) => number;
28
+ }
@@ -0,0 +1,30 @@
1
+ var __decorate=this&&this.__decorate||function(e,t,r,i){var s,o=arguments.length,c=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,i);else for(var l=e.length-1;l>=0;l--)(s=e[l])&&(c=(o<3?s(c):o>3?s(t,r,c):s(t,r))||c);return o>3&&c&&Object.defineProperty(t,r,c),c};import{css as e,html as t,unsafeCSS as r}from"lit";import{customElement as i,property as s}from"lit/decorators.js";import{DefaultColor3 as o,DefaultColor5 as c,DefaultColor6 as l,Util as n}from"@openremote/core";import{OrTreeMenu as a,TreeMenuSelection as d}from"@openremote/or-tree-menu";import{ExternalServiceStatusIcon as v,ExternalServiceStatusColor as p,OrServiceSelectedEvent as S}from"./types";export var ServiceTreeSorting;!function(e){e.NAME="name",e.STATUS="status"}(ServiceTreeSorting||(ServiceTreeSorting={}));let treeStyles=e`
2
+ .iconfill-gray {
3
+ --or-icon-fill: var(--or-app-color5, ${r(c)});
4
+ }
5
+
6
+ .iconfill-red {
7
+ --or-icon-fill: var(--or-app-color6, ${r(l)});
8
+ }
9
+
10
+ .service-icon {
11
+ --or-icon-fill: var(--or-app-color3, ${r(o)});
12
+ }
13
+
14
+ or-tree-node {
15
+ padding-left: 10px;
16
+ }
17
+ `,OrServiceTree=class extends a{constructor(){super(...arguments),this.readonly=!1,this.nodes=[],this.selection=d.SINGLE,this.menuTitle="services",this.sortBy=ServiceTreeSorting.NAME,this.sortOptions=[ServiceTreeSorting.NAME,ServiceTreeSorting.STATUS]}static get styles(){return[...super.styles,treeStyles]}willUpdate(e){if(e.has("services")&&this.services&&(this.nodes=this._getServiceNodes(this.services),this.selectedService)){let e=this.nodes.find(e=>{var t;return e.id===(null==(t=this.selectedService)?void 0:t.serviceId)});e&&this._selectNode(e)}if(e.has("selectedService"))if(this.selectedService){let e=this.nodes.find(e=>{var t;return e.id===(null==(t=this.selectedService)?void 0:t.serviceId)});e&&this._selectNode(e)}else this.deselectAllNodes();super.willUpdate(e)}_dispatchSelectEvent(e){let t=!e||e.length>1?void 0:e[0];if(null==t?void 0:t.service){let e=new S(t.service);this.dispatchEvent(e)}return super._dispatchSelectEvent(e)}_getServiceNodes(e){return e.map(e=>({id:e.serviceId||"",label:e.label||"",service:e,disabled:"UNAVAILABLE"===e.status}))}_getSingleNodeSlotTemplate(e){var r,i;let s=e.service,o=s.status&&v[s.status]?v[s.status]:v.UNAVAILABLE,c=s.status&&p[s.status]?p[s.status]:p.UNAVAILABLE;return t`
18
+ <or-icon class="service-icon" slot="prefix" icon="${null!=(i=null==(r=e.service)?void 0:r.icon)?i:"puzzle"}"></or-icon>
19
+ <span>${e.label}</span>
20
+ <or-icon slot="suffix" icon="${o}" class="${c}"> </or-icon>
21
+ `}_getHeaderTemplate(){return t`
22
+ <div id="tree-header">
23
+ <h3 id="tree-header-title">
24
+ <or-translate value="services.title"></or-translate>
25
+ </h3>
26
+ <div id="tree-header-actions">
27
+ ${this._getSortActionTemplate(this.sortBy,this.sortOptions)}
28
+ </div>
29
+ </div>
30
+ `}_getSortFunction(e){switch(e){case ServiceTreeSorting.STATUS:return n.sortByString(e=>{var t;return(null==(t=e.service)?void 0:t.status)||""});case ServiceTreeSorting.NAME:default:return super._getSortFunction(e)}}};__decorate([s({type:Array})],OrServiceTree.prototype,"services",void 0),__decorate([s({type:Object})],OrServiceTree.prototype,"selectedService",void 0),__decorate([s({type:Boolean})],OrServiceTree.prototype,"readonly",void 0),OrServiceTree=__decorate([i("or-service-tree")],OrServiceTree);export{OrServiceTree};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"or-service-tree.js","sourceRoot":"","sources":["../src/or-service-tree.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAkC,MAAM,KAAK,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAG,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAA+B,MAAM,0BAA0B,CAAC;AAEtG,OAAO,EAEH,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,GACzB,MAAM,SAAS,CAAC;AAGjB,MAAM,CAAN,IAAY,kBAEX;AAFD,WAAY,kBAAkB;IAC1B,mCAAa,CAAA;IAAE,uCAAiB,CAAA;AACpC,CAAC,EAFW,kBAAkB,KAAlB,kBAAkB,QAE7B;AAED,MAAM,UAAU,GAAG,GAAG,CAAA;;+CAEyB,SAAS,CAAC,aAAa,CAAC;;;;+CAIxB,SAAS,CAAC,aAAa,CAAC;;;;+CAIxB,SAAS,CAAC,aAAa,CAAC;;;;;;CAMtE,CAAC;AAIF;;GAEG;AAEI,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,UAAU;IAAtC;;QAYI,aAAQ,GAAG,KAAK,CAAC;QAExB,UAAK,GAAsB,EAAE,CAAC;QAC9B,cAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC;QACrC,cAAS,GAAG,UAAU,CAAC;QACvB,WAAM,GAAQ,kBAAkB,CAAC,IAAI,CAAC;QACtC,gBAAW,GAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAmG9E,CAAC;IApHG,MAAM,KAAK,MAAM;QACb,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACzC,CAAC;IAiBS,UAAU,CAAC,YAA4B;QAC7C,IAAI,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAElD,uCAAuC;gBACvC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,IAAI,CAAC,EAAE,MAAK,MAAA,IAAI,CAAC,eAAe,0CAAE,SAAS,CAAA,CAAA,EAAA,CAAC,CAAC;oBAC5F,IAAI,YAAY,EAAE,CAAC;wBACf,IAAI,CAAC,WAAW,CAAC,YAAqC,CAAC,CAAC;oBAC5D,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,mCAAmC;QACnC,IAAI,YAAY,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,WAAC,OAAA,IAAI,CAAC,EAAE,MAAK,MAAA,IAAI,CAAC,eAAe,0CAAE,SAAS,CAAA,CAAA,EAAA,CAAC,CAAC;gBAC5F,IAAI,YAAY,EAAE,CAAC;oBACf,IAAI,CAAC,WAAW,CAAC,YAAqC,CAAC,CAAC;gBAC5D,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAES,oBAAoB,CAAC,KAAyB;QACpD,iCAAiC;QACjC,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,EAAE,CAAC;YACvB,sDAAsD;YACtD,MAAM,KAAK,GAAG,IAAI,sBAAsB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAC9D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAES,gBAAgB,CAAC,QAA2B;QAClD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;YAC3B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;YAC1B,OAAO;YACP,QAAQ,EAAE,OAAO,CAAC,MAAM,0DAAsC;SACjE,CAAC,CAAC,CAAC;IACR,CAAC;IAES,0BAA0B,CAAC,IAAqB;;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAQ,CAAC;QAC9B,MAAM,UAAU,GACZ,OAAO,CAAC,MAAM,IAAI,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC;YACvD,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC;YAC3C,CAAC,CAAC,yBAAyB,CAAC,WAAW,CAAC;QAChD,MAAM,WAAW,GACb,OAAO,CAAC,MAAM,IAAI,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC;YACxD,CAAC,CAAC,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,0BAA0B,CAAC,WAAW,CAAC;QAIjD,OAAO,IAAI,CAAA;gEAC6C,MAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,IAAI,mCAAI,QAAQ;oBAC1E,IAAI,CAAC,KAAK;2CACa,UAAU,YAAY,WAAW;SACnE,CAAC;IACN,CAAC;IAES,kBAAkB;QACxB,OAAO,IAAI,CAAA;;;;;;sBAMG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC;;;SAGvE,CAAC;IACN,CAAC;IAES,gBAAgB,CAAC,MAAwB;QAC/C,MAAM,OAAO,GAAG,MAAmD,CAAC;QACpE,QAAQ,OAAO,EAAE,CAAC;YACd,KAAK,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,CAAC,OAAO,0CAAE,MAAM,KAAI,EAAE,CAAA,EAAA,CAAC,CAAC;YACjE,CAAC;YACD,KAAK,kBAAkB,CAAC,IAAI,CAAC;YAC7B,OAAO,CAAC,CAAC,CAAC;gBACN,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;IACL,CAAC;CACJ,CAAA;AA/GU;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;+CACU;AAG7B;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sDACc;AAGlC;IADN,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;+CACJ;AAZf,aAAa;IADzB,aAAa,CAAC,iBAAiB,CAAC;GACpB,aAAa,CAqHzB"}
package/lib/types.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ import { TreeNode } from "@openremote/or-tree-menu";
2
+ import { ExternalService } from "@openremote/model";
3
+ export declare enum ExternalServiceStatusIcon {
4
+ AVAILABLE = "play",
5
+ UNAVAILABLE = "alert-octagon"
6
+ }
7
+ export declare enum ExternalServiceStatusColor {
8
+ AVAILABLE = "iconfill-gray",
9
+ UNAVAILABLE = "iconfill-red"
10
+ }
11
+ export interface ServiceTreeNode extends TreeNode {
12
+ service?: ExternalService;
13
+ }
14
+ /**
15
+ * Model for the SERVICE-SELECTED event that {@link OrServiceTree} can dispatch.
16
+ * Once a service is selected, the selected service will be shared with the consumer elements.
17
+ */
18
+ export declare class OrServiceSelectedEvent extends CustomEvent<ExternalService> {
19
+ static readonly NAME = "or-service-selected";
20
+ constructor(service: ExternalService);
21
+ }
package/lib/types.js ADDED
@@ -0,0 +1 @@
1
+ export var ExternalServiceStatusIcon;!function(e){e.AVAILABLE="play",e.UNAVAILABLE="alert-octagon"}(ExternalServiceStatusIcon||(ExternalServiceStatusIcon={}));export var ExternalServiceStatusColor;!function(e){e.AVAILABLE="iconfill-gray",e.UNAVAILABLE="iconfill-red"}(ExternalServiceStatusColor||(ExternalServiceStatusColor={}));export class OrServiceSelectedEvent extends CustomEvent{constructor(e){super(OrServiceSelectedEvent.NAME,{bubbles:!0,composed:!0,detail:e})}}OrServiceSelectedEvent.NAME="or-service-selected";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAY,yBAGX;AAHD,WAAY,yBAAyB;IACjC,+CAAkB,CAAA;IAClB,0DAA6B,CAAA;AACjC,CAAC,EAHW,yBAAyB,KAAzB,yBAAyB,QAGpC;AAED,MAAM,CAAN,IAAY,0BAGX;AAHD,WAAY,0BAA0B;IAClC,yDAA2B,CAAA;IAC3B,0DAA4B,CAAA;AAChC,CAAC,EAHW,0BAA0B,KAA1B,0BAA0B,QAGrC;AAMD;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAA4B;IAGpE,YAAY,OAAwB;QAChC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE;YAC/B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,OAAO;SAClB,CAAC,CAAC;IACP,CAAC;;AARsB,2BAAI,GAAG,qBAAqB,CAAC"}
package/lib/utils.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { ExternalService } from "@openremote/model";
2
+ /**
3
+ * Get the iframe src path for a given service
4
+ * @param service - The service to get the iframe src path for
5
+ * @param realmName - The realm name
6
+ * @param isSuperUser - Whether the user is a super user
7
+ * @returns The iframe src path
8
+ */
9
+ export declare function getServiceUrlPath(service: ExternalService, realmName: string, isSuperUser: boolean): string;
package/lib/utils.js ADDED
@@ -0,0 +1 @@
1
+ export function getServiceUrlPath(e,r,a){return(e.homepageUrl||"").replace("{realm}",a?r:`?realm=${r}`)}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAuBA;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB,EAAE,SAAiB,EAAE,WAAoB;IAC/F,wEAAwE;IACxE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAC9C,OAAO,WAAW,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,SAAS,EAAE,CAAC,CAAC;AAC3F,CAAC"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@openremote/or-services",
3
+ "version": "1.9.0-snapshot.20250922103504",
4
+ "description": "OpenRemote services related UI components",
5
+ "customElements": "custom-elements.json",
6
+ "main": "dist/umd/index.bundle.js",
7
+ "module": "lib/index.js",
8
+ "exports": {
9
+ ".": "./lib/index.js",
10
+ "./*": "./lib/*.js"
11
+ },
12
+ "types": "lib/index.d.ts",
13
+ "scripts": {
14
+ "analyze": "npx cem analyze --config ../custom-elements-manifest.config.mjs",
15
+ "test": "echo \"No tests\" && exit 0",
16
+ "prepack": "npx rspack"
17
+ },
18
+ "author": "OpenRemote",
19
+ "license": "AGPL-3.0-or-later",
20
+ "dependencies": {
21
+ "@openremote/core": "1.9.0-snapshot.20250922103504",
22
+ "@openremote/model": "1.9.0-snapshot.20250922103504",
23
+ "@openremote/or-components": "1.9.0-snapshot.20250922103504",
24
+ "@openremote/or-icon": "1.9.0-snapshot.20250922103504",
25
+ "@openremote/or-mwc-components": "1.9.0-snapshot.20250922103504",
26
+ "@openremote/or-translate": "1.9.0-snapshot.20250922103504",
27
+ "@openremote/or-tree-menu": "1.9.0-snapshot.20250922103504",
28
+ "@openremote/rest": "1.9.0-snapshot.20250922103504"
29
+ },
30
+ "devDependencies": {
31
+ "@openremote/util": "1.9.0-snapshot.20250922103504"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ }
36
+ }