@things-factory/system 6.2.42

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/client/bootstrap.ts +23 -0
  3. package/client/index.ts +1 -0
  4. package/client/pages/system-info.ts +172 -0
  5. package/client/route.ts +7 -0
  6. package/client/themes/system-theme.css +14 -0
  7. package/client/viewparts/license-info.ts +49 -0
  8. package/client/viewparts/opensource-license.ts +75 -0
  9. package/client/viewparts/release-note-notice.ts +53 -0
  10. package/client/viewparts/release-note-setting-let.ts +55 -0
  11. package/dist-client/bootstrap.d.ts +3 -0
  12. package/dist-client/bootstrap.js +21 -0
  13. package/dist-client/bootstrap.js.map +1 -0
  14. package/dist-client/index.d.ts +1 -0
  15. package/dist-client/index.js +2 -0
  16. package/dist-client/index.js.map +1 -0
  17. package/dist-client/pages/system-info.d.ts +23 -0
  18. package/dist-client/pages/system-info.js +161 -0
  19. package/dist-client/pages/system-info.js.map +1 -0
  20. package/dist-client/route.d.ts +1 -0
  21. package/dist-client/route.js +8 -0
  22. package/dist-client/route.js.map +1 -0
  23. package/dist-client/themes/system-theme.css +14 -0
  24. package/dist-client/tsconfig.tsbuildinfo +1 -0
  25. package/dist-client/viewparts/license-info.d.ts +9 -0
  26. package/dist-client/viewparts/license-info.js +58 -0
  27. package/dist-client/viewparts/license-info.js.map +1 -0
  28. package/dist-client/viewparts/opensource-license.d.ts +7 -0
  29. package/dist-client/viewparts/opensource-license.js +78 -0
  30. package/dist-client/viewparts/opensource-license.js.map +1 -0
  31. package/dist-client/viewparts/release-note-notice.d.ts +8 -0
  32. package/dist-client/viewparts/release-note-notice.js +52 -0
  33. package/dist-client/viewparts/release-note-notice.js.map +1 -0
  34. package/dist-client/viewparts/release-note-setting-let.d.ts +13 -0
  35. package/dist-client/viewparts/release-note-setting-let.js +55 -0
  36. package/dist-client/viewparts/release-note-setting-let.js.map +1 -0
  37. package/dist-server/index.js +1 -0
  38. package/dist-server/index.js.map +1 -0
  39. package/dist-server/tsconfig.tsbuildinfo +1 -0
  40. package/package.json +38 -0
  41. package/server/index.ts +0 -0
  42. package/things-factory.config.js +13 -0
  43. package/translations/en.json +10 -0
  44. package/translations/ja.json +10 -0
  45. package/translations/ko.json +10 -0
  46. package/translations/ms.json +10 -0
  47. package/translations/zh.json +10 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
+ and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
7
+
8
+ <!-- ## [Unreleased] -->
@@ -0,0 +1,23 @@
1
+ import '@material/mwc-icon'
2
+ import '@operato/i18n/ox-i18n.js'
3
+
4
+ import { html } from 'lit'
5
+
6
+ import { TOOL_POSITION } from '@operato/layout'
7
+ import { navigate, store } from '@operato/shell'
8
+ import { ADD_MORENDA } from '@things-factory/more-base'
9
+
10
+ export default function bootstrap() {
11
+ /* add user profile morenda */
12
+ store.dispatch({
13
+ type: ADD_MORENDA,
14
+ morenda: {
15
+ icon: html` <mwc-icon>info</mwc-icon> `,
16
+ name: html` <ox-i18n msgid="label.about-system"></ox-i18n> `,
17
+ position: TOOL_POSITION.REAR_END,
18
+ action: () => {
19
+ navigate('system')
20
+ }
21
+ }
22
+ })
23
+ }
@@ -0,0 +1 @@
1
+ export * from './viewparts/release-note-setting-let'
@@ -0,0 +1,172 @@
1
+ import '@material/mwc-button'
2
+ import '@operato/i18n/ox-i18n.js'
3
+ import '../viewparts/opensource-license'
4
+ import '../viewparts/license-info'
5
+
6
+ import { css, html } from 'lit'
7
+ import { customElement } from 'lit/decorators.js'
8
+
9
+ import { openHelp } from '@operato/help'
10
+ import { i18next, localize } from '@operato/i18n'
11
+ import { openPopup } from '@operato/layout'
12
+ import { PageView } from '@operato/shell'
13
+
14
+ const ENV = process.env
15
+
16
+ @customElement('system-info')
17
+ export class SystemInfo extends localize(i18next)(PageView) {
18
+ static styles = css`
19
+ :host {
20
+ display: block;
21
+ position: relative;
22
+ text-align: center;
23
+
24
+ background-color: var(--system-info-background-color);
25
+ padding: var(--system-info-content-padding);
26
+ color: var(--system-info-color);
27
+ font: var(--system-info-font);
28
+ }
29
+ :host * {
30
+ vertical-align: middle;
31
+ }
32
+ #refresh-button {
33
+ border-radius: var(--border-radius);
34
+ border: 1px solid rgba(0, 0, 0, 0.1);
35
+ }
36
+ div {
37
+ padding: 10px;
38
+ }
39
+ strong {
40
+ font: var(--system-info-appname-font);
41
+ color: var(--system-info-appname-color);
42
+ }
43
+ span {
44
+ display: block;
45
+ }
46
+ span.description {
47
+ padding: 3px 10px;
48
+ font: var(--system-info-description-font);
49
+ color: var(--system-info-description-color);
50
+ }
51
+ span.version {
52
+ display: inline-block;
53
+ border-radius: 5px;
54
+ opacity: 0.8;
55
+ background-color: var(--system-info-version-background-color);
56
+ padding: 3px 10px;
57
+ font: var(--system-info-version-font);
58
+ color: var(--system-info-version-color);
59
+ }
60
+ .poweredBy {
61
+ background-color: #efefef;
62
+ position: absolute;
63
+ border-top: 1px solid rgba(0, 0, 0, 0.1);
64
+ padding: 7px 0;
65
+ width: 100%;
66
+ bottom: 0;
67
+ text-align: center;
68
+ }
69
+ .poweredBy mwc-icon {
70
+ opacity: var(--help-icon-opacity, 0.4);
71
+ font-size: var(--help-icon-size, 18px);
72
+ color: var(--help-icon-color);
73
+ }
74
+ .poweredBy mwc-icon:hover {
75
+ cursor: help;
76
+ opacity: var(--help-icon-hover-opacity, 1);
77
+ color: var(--help-icon-hover-color);
78
+ }
79
+ `
80
+
81
+ private _applicationMeta?: { icon?: string; title: string; description: string; copyright: string }
82
+
83
+ get context() {
84
+ return {
85
+ title: i18next.t('label.about-system')
86
+ }
87
+ }
88
+
89
+ get applicationMeta() {
90
+ if (!this._applicationMeta) {
91
+ var iconLink = document.querySelector('link[rel="application-icon"]') as HTMLLinkElement
92
+ var titleMeta = document.querySelector('meta[name="application-name"]') as HTMLMetaElement
93
+ var descriptionMeta = document.querySelector('meta[name="application-description"]') as HTMLMetaElement
94
+ var copyrightMeta = document.querySelector('meta[name="application-copyright"]') as HTMLMetaElement
95
+
96
+ this._applicationMeta = {
97
+ icon: iconLink?.href,
98
+ title: titleMeta ? titleMeta.content : 'Things Factory',
99
+ description: descriptionMeta ? descriptionMeta.content : 'Reimagining Software',
100
+ copyright: copyrightMeta ? copyrightMeta.content : 'Copyright © hatiolab.com. All Rights Reserved." />'
101
+ }
102
+ }
103
+
104
+ return this._applicationMeta
105
+ }
106
+
107
+ render() {
108
+ var { icon, title, description, copyright } = this.applicationMeta
109
+
110
+ return html`
111
+ <img src=${icon!} alt="system logo" />
112
+
113
+ <div>
114
+ <strong>${title}</strong>
115
+ <span class="description">${description}</span>
116
+ <span class="version"
117
+ ><ox-i18n msgid="field.version"></ox-i18n> : ${ENV['APP-VERSION']}-${ENV['NODE-ENV']}</span
118
+ >
119
+ </div>
120
+
121
+ <div>
122
+ <mwc-button
123
+ id="refresh-button"
124
+ icon="refresh"
125
+ label=${String(i18next.t('label.system reload'))}
126
+ @click=${e => {
127
+ location.reload()
128
+ }}
129
+ ></mwc-button>
130
+ </div>
131
+
132
+ <div>
133
+ <span>${copyright}</span>
134
+
135
+ <span
136
+ >${title} is built on several
137
+ <a href="#" @click=${e => this.onClickOpenSourceLicense(e)}>open source software</a></span
138
+ >
139
+ <span>We are using the <a href="#" @click=${e => this.onClickLicenseInfo(e)}>license</a> as permitted. </span>
140
+ </div>
141
+
142
+ <div class="poweredBy">
143
+ <span
144
+ >Powered by &trade;Things Factory <ox-i18n msgid="field.version"></ox-i18n> ${ENV['SHELL-VERSION']}
145
+ <mwc-icon @click=${e => openHelp('about/things-factory')}>help</mwc-icon>
146
+ </span>
147
+ </div>
148
+ `
149
+ }
150
+
151
+ onClickOpenSourceLicense(e) {
152
+ e.preventDefault()
153
+ e.stopPropagation()
154
+
155
+ openPopup(html` <opensource-license></opensource-license> `, {
156
+ backdrop: true,
157
+ size: 'large',
158
+ title: 'Open Source Licenses'
159
+ })
160
+ }
161
+
162
+ onClickLicenseInfo(e) {
163
+ e.preventDefault()
164
+ e.stopPropagation()
165
+
166
+ openPopup(html` <license-info></license-info> `, {
167
+ backdrop: true,
168
+ size: 'large',
169
+ title: 'License Info'
170
+ })
171
+ }
172
+ }
@@ -0,0 +1,7 @@
1
+ export default function route(page) {
2
+ switch (page) {
3
+ case 'system':
4
+ import('./pages/system-info')
5
+ return page
6
+ }
7
+ }
@@ -0,0 +1,14 @@
1
+ body {
2
+ /* system info style */
3
+ --system-info-background-color: var(--main-section-background-color);
4
+ --system-info-content-padding: 40px 0 0 0;
5
+ --system-info-font: normal 14px/24px var(--theme-font);
6
+ --system-info-color: #666;
7
+ --system-info-appname-color: var(--secondary-color);
8
+ --system-info-appname-font: bold 20px/20px var(--theme-font);
9
+ --system-info-description-color: var(--primary-color);
10
+ --system-info-description-font: normal 15px/18px var(--theme-font);
11
+ --system-info-version-background-color: var(--secondary-color);
12
+ --system-info-version-color: #fff;
13
+ --system-info-version-font: normal 15px/15px var(--theme-font);
14
+ }
@@ -0,0 +1,49 @@
1
+ import { LitElement, html, css } from 'lit'
2
+ import { customElement, state } from 'lit/decorators.js'
3
+ import { ScrollbarStyles } from '@operato/styles'
4
+
5
+ @customElement('license-info')
6
+ export class LicenseInfo extends LitElement {
7
+ static styles = [
8
+ ScrollbarStyles,
9
+ css`
10
+ div {
11
+ font-family: Arial, sans-serif;
12
+ padding: 20px;
13
+ border: 1px solid #ccc;
14
+ border-radius: 5px;
15
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
16
+
17
+ background-color: white;
18
+ color: #333;
19
+ }
20
+ `
21
+ ]
22
+
23
+ @state() licenseInfo: { [key: string]: string } = {}
24
+
25
+ render() {
26
+ return html`
27
+ <div>
28
+ <h2>라이선스 정보</h2>
29
+ ${Object.entries(this.licenseInfo).map(([key, value]) => html` <p>${key} : ${value}</p> `)}
30
+ </div>
31
+ `
32
+ }
33
+
34
+ async firstUpdated() {
35
+ try {
36
+ const response = await fetch('/license-info', {
37
+ method: 'GET'
38
+ })
39
+
40
+ if (response.ok) {
41
+ this.licenseInfo = await response.json()
42
+ } else {
43
+ throw new Error(`Failed to fetch license-info. Status: ${response.status}`)
44
+ }
45
+ } catch (error) {
46
+ console.error('Error while fetching license-info:', error)
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,75 @@
1
+ import { LitElement, html, css } from 'lit'
2
+ import { customElement, state } from 'lit/decorators.js'
3
+ import { ScrollbarStyles } from '@operato/styles'
4
+
5
+ @customElement('opensource-license')
6
+ export class OpenSourceLicense extends LitElement {
7
+ static styles = [
8
+ ScrollbarStyles,
9
+ css`
10
+ :host {
11
+ display: flex;
12
+ flex-direction: row;
13
+
14
+ background-color: white;
15
+ padding: 12px 5px 12px 15px;
16
+
17
+ font-size: 13px;
18
+ color: #333;
19
+ }
20
+
21
+ [licenses] {
22
+ flex: 1;
23
+ overflow: auto;
24
+ margin: 0;
25
+ padding: 0;
26
+ }
27
+ li::before {
28
+ content: '- ';
29
+ }
30
+ li {
31
+ padding: 2px 0 1px 0;
32
+ }
33
+ a {
34
+ color: #22a6a7;
35
+ }
36
+ `
37
+ ]
38
+
39
+ @state() licenses?: Object
40
+
41
+ async firstUpdated() {
42
+ try {
43
+ const response = await fetch('/opensource-licenses', {
44
+ method: 'GET'
45
+ })
46
+
47
+ if (response.ok) {
48
+ this.licenses = await response.json()
49
+ } else {
50
+ throw new Error(`Failed to fetch licenses. Status: ${response.status}`)
51
+ }
52
+ } catch (error) {
53
+ console.error('Error while fetching licenses:', error)
54
+ }
55
+ }
56
+
57
+ render() {
58
+ var licenses = this.licenses || {}
59
+
60
+ return html`
61
+ <ul licenses>
62
+ ${Object.keys(licenses).map(name => {
63
+ var license = licenses[name]
64
+
65
+ return html`
66
+ <li>
67
+ <span>${name}</span>
68
+ <a href=${license.licenseUrl}>${license.licenses}</a>
69
+ </li>
70
+ `
71
+ })}
72
+ </ul>
73
+ `
74
+ }
75
+ }
@@ -0,0 +1,53 @@
1
+ import '@operato/markdown'
2
+
3
+ import { LitElement, css, html } from 'lit'
4
+ import { customElement } from 'lit/decorators.js'
5
+
6
+ const ENV = process.env
7
+ const version = ENV['APP-VERSION']
8
+ const key = `release-note.${version}`
9
+
10
+ @customElement('release-note-notice')
11
+ export class ReleaseNoteNotice extends LitElement {
12
+ static get seen() {
13
+ return !!localStorage.getItem(key)
14
+ }
15
+
16
+ static styles = [
17
+ css`
18
+ :host {
19
+ display: flex;
20
+ flex-direction: column;
21
+
22
+ background-color: white;
23
+ padding: 12px 5px 12px 15px;
24
+
25
+ font-size: 13px;
26
+ color: #333;
27
+ }
28
+
29
+ ox-markdown {
30
+ overflow-y: auto;
31
+ flex: 1;
32
+ }
33
+ `
34
+ ]
35
+
36
+ render() {
37
+ return html`
38
+ <ox-markdown src="/helps/release-note.md"></ox-markdown>
39
+ <label> <input type="checkbox" @change=${e => this.onchangeClose(e)} /> do not show again</label>
40
+ `
41
+ }
42
+
43
+ onchangeClose(e) {
44
+ const checked = e.target.checked
45
+
46
+ if (checked) {
47
+ localStorage.setItem(key, 'true')
48
+ history.back()
49
+ } else {
50
+ localStorage.removeItem(key)
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,55 @@
1
+ import '@things-factory/setting-base'
2
+ import './release-note-notice'
3
+ import '@material/mwc-formfield'
4
+ import '@material/mwc-button'
5
+ import '@operato/i18n/ox-i18n.js'
6
+
7
+ import { css, html, LitElement } from 'lit'
8
+ import { customElement } from 'lit/decorators.js'
9
+
10
+ import { i18next, localize } from '@operato/i18n'
11
+ import { openPopup } from '@operato/layout'
12
+
13
+ @customElement('release-note-setting-let')
14
+ export class ReleaseNoteSettingLet extends localize(i18next)(LitElement) {
15
+ static styles = [
16
+ css`
17
+ div[onoff] {
18
+ display: flex;
19
+ align-items: center;
20
+ border-bottom: var(--border-dark-color);
21
+ margin-bottom: var(--margin-default);
22
+ padding-bottom: var(--padding-default);
23
+ }
24
+
25
+ [test] {
26
+ margin-left: auto;
27
+ }
28
+ `
29
+ ]
30
+
31
+ render() {
32
+ return html`
33
+ <setting-let>
34
+ <ox-i18n slot="title" msgid="title.release note setting"></ox-i18n>
35
+
36
+ <div slot="content" onoff>
37
+ <mwc-button
38
+ outlined
39
+ icon="article"
40
+ label=${String(i18next.t('button.view_release_note'))}
41
+ @click=${e => this.openReleaseNote()}
42
+ ></mwc-button>
43
+ </div>
44
+ </setting-let>
45
+ `
46
+ }
47
+
48
+ openReleaseNote() {
49
+ openPopup(html` <release-note-notice></release-note-notice> `, {
50
+ backdrop: true,
51
+ size: 'large',
52
+ title: i18next.t('title.release-note')
53
+ })
54
+ }
55
+ }
@@ -0,0 +1,3 @@
1
+ import '@material/mwc-icon';
2
+ import '@operato/i18n/ox-i18n.js';
3
+ export default function bootstrap(): void;
@@ -0,0 +1,21 @@
1
+ import '@material/mwc-icon';
2
+ import '@operato/i18n/ox-i18n.js';
3
+ import { html } from 'lit';
4
+ import { TOOL_POSITION } from '@operato/layout';
5
+ import { navigate, store } from '@operato/shell';
6
+ import { ADD_MORENDA } from '@things-factory/more-base';
7
+ export default function bootstrap() {
8
+ /* add user profile morenda */
9
+ store.dispatch({
10
+ type: ADD_MORENDA,
11
+ morenda: {
12
+ icon: html ` <mwc-icon>info</mwc-icon> `,
13
+ name: html ` <ox-i18n msgid="label.about-system"></ox-i18n> `,
14
+ position: TOOL_POSITION.REAR_END,
15
+ action: () => {
16
+ navigate('system');
17
+ }
18
+ }
19
+ });
20
+ }
21
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../client/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAA;AAC3B,OAAO,0BAA0B,CAAA;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAA;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAEvD,MAAM,CAAC,OAAO,UAAU,SAAS;IAC/B,8BAA8B;IAC9B,KAAK,CAAC,QAAQ,CAAC;QACb,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE;YACP,IAAI,EAAE,IAAI,CAAA,6BAA6B;YACvC,IAAI,EAAE,IAAI,CAAA,kDAAkD;YAC5D,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,MAAM,EAAE,GAAG,EAAE;gBACX,QAAQ,CAAC,QAAQ,CAAC,CAAA;YACpB,CAAC;SACF;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import '@material/mwc-icon'\nimport '@operato/i18n/ox-i18n.js'\n\nimport { html } from 'lit'\n\nimport { TOOL_POSITION } from '@operato/layout'\nimport { navigate, store } from '@operato/shell'\nimport { ADD_MORENDA } from '@things-factory/more-base'\n\nexport default function bootstrap() {\n /* add user profile morenda */\n store.dispatch({\n type: ADD_MORENDA,\n morenda: {\n icon: html` <mwc-icon>info</mwc-icon> `,\n name: html` <ox-i18n msgid=\"label.about-system\"></ox-i18n> `,\n position: TOOL_POSITION.REAR_END,\n action: () => {\n navigate('system')\n }\n }\n })\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from './viewparts/release-note-setting-let';
@@ -0,0 +1,2 @@
1
+ export * from './viewparts/release-note-setting-let';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAA","sourcesContent":["export * from './viewparts/release-note-setting-let'\n"]}
@@ -0,0 +1,23 @@
1
+ import '@material/mwc-button';
2
+ import '@operato/i18n/ox-i18n.js';
3
+ import '../viewparts/opensource-license';
4
+ import '../viewparts/license-info';
5
+ import { PageView } from '@operato/shell';
6
+ declare const SystemInfo_base: (new (...args: any[]) => import("lit").LitElement) & typeof PageView;
7
+ export declare class SystemInfo extends SystemInfo_base {
8
+ static styles: import("lit").CSSResult;
9
+ private _applicationMeta?;
10
+ get context(): {
11
+ title: string;
12
+ };
13
+ get applicationMeta(): {
14
+ icon?: string | undefined;
15
+ title: string;
16
+ description: string;
17
+ copyright: string;
18
+ };
19
+ render(): import("lit-html").TemplateResult<1>;
20
+ onClickOpenSourceLicense(e: any): void;
21
+ onClickLicenseInfo(e: any): void;
22
+ }
23
+ export {};