@konomi-app/ui 1.6.3 → 1.7.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,22 @@
1
+ import { Overlay } from './overlay';
2
+ type Label = string | string[];
3
+ type ConstructorProps = Readonly<Partial<{
4
+ label: Label;
5
+ progress: number;
6
+ }>>;
7
+ export declare class LoadingOverlay extends Overlay {
8
+ #private;
9
+ protected readonly _iconElement: HTMLDivElement;
10
+ protected readonly _progressElement: HTMLDivElement;
11
+ protected readonly _contentElement: HTMLDivElement;
12
+ constructor(props?: ConstructorProps);
13
+ hide(): void;
14
+ set label(label: Label);
15
+ set html(html: string);
16
+ set progress(progress: number);
17
+ render(): void;
18
+ private containerStyle;
19
+ private loaderStyle;
20
+ private progressStyle;
21
+ }
22
+ export {};
@@ -0,0 +1,128 @@
1
+ import { css } from '@emotion/css';
2
+ import { Overlay } from './overlay';
3
+ export class LoadingOverlay extends Overlay {
4
+ #label;
5
+ #html;
6
+ #progress;
7
+ _iconElement;
8
+ _progressElement;
9
+ _contentElement;
10
+ constructor(props = {}) {
11
+ super();
12
+ this.#label = props.label ?? '';
13
+ this.#html = '';
14
+ this.#progress = props.progress ?? null;
15
+ const container = document.createElement('div');
16
+ container.classList.add(this.containerStyle);
17
+ this._root.append(container);
18
+ const iconElement = document.createElement('div');
19
+ iconElement.innerHTML = '<div><div></div></div>';
20
+ iconElement.classList.add(this.loaderStyle);
21
+ this._iconElement = iconElement;
22
+ container.append(iconElement);
23
+ const progressElement = document.createElement('div');
24
+ progressElement.classList.add(this.progressStyle);
25
+ this._progressElement = progressElement;
26
+ container.append(progressElement);
27
+ const contentElement = document.createElement('div');
28
+ this._contentElement = contentElement;
29
+ container.append(contentElement);
30
+ this.render();
31
+ }
32
+ hide() {
33
+ this.#progress = 0;
34
+ this.#html = '';
35
+ this.#label = '';
36
+ super.hide();
37
+ }
38
+ set label(label) {
39
+ this.#label = label;
40
+ this.render();
41
+ }
42
+ set html(html) {
43
+ this.#html = html;
44
+ this.render();
45
+ }
46
+ set progress(progress) {
47
+ this.#progress = progress;
48
+ this.render();
49
+ }
50
+ render() {
51
+ super.render();
52
+ this._progressElement.style.width = `${this.#progress}%`;
53
+ if (this.#html) {
54
+ this._contentElement.innerHTML = this.#html;
55
+ }
56
+ else {
57
+ if (this.#label instanceof Array) {
58
+ this._contentElement.innerHTML = `<div>${this.#label.join('</div><div>')}</div>`;
59
+ }
60
+ else {
61
+ this._contentElement.innerText = this.#label;
62
+ }
63
+ }
64
+ }
65
+ containerStyle = css `
66
+ display: flex;
67
+ flex-direction: column;
68
+ align-items: center;
69
+ justify-content: center;
70
+ gap: 32px;
71
+ padding: 32px 64px;
72
+ background-color: #fffc;
73
+ border-radius: 8px;
74
+ box-shadow: 0 5px 24px -6px #0002;
75
+ width: 300px;
76
+ max-width: 90vw;
77
+ min-height: 200px;
78
+ position: relative;
79
+ overflow: hidden;
80
+ transition: all 250ms ease;
81
+ `;
82
+ loaderStyle = css `
83
+ font-size: 60px;
84
+ width: 1em;
85
+ height: 1em;
86
+ border-radius: 50%;
87
+ box-shadow: inset 0 0 0 1px #3b82f633;
88
+ position: relative;
89
+ > div {
90
+ position: absolute;
91
+ left: 50%;
92
+ top: 50%;
93
+ width: 0.5em;
94
+ height: 1em;
95
+ margin-left: -0.5em;
96
+ margin-top: -0.5em;
97
+ overflow: hidden;
98
+ transform-origin: 0.5em 0.5em;
99
+ mask-image: linear-gradient(top, #000f, #0000);
100
+ -webkit-mask-image: -webkit-linear-gradient(top, #000f, #0000);
101
+
102
+ > div {
103
+ width: 1em;
104
+ height: 1em;
105
+ border-radius: 50%;
106
+ box-shadow: inset 0 0 0 1px #3b82f6;
107
+ }
108
+ }
109
+ @keyframes rotate {
110
+ 0% {
111
+ transform: rotate(0deg);
112
+ }
113
+ 100% {
114
+ transform: rotate(360deg);
115
+ }
116
+ }
117
+ `;
118
+ progressStyle = css `
119
+ position: absolute;
120
+ bottom: 0px;
121
+ left: 0;
122
+ width: 0%;
123
+ height: 2px;
124
+ background-color: #2563eb;
125
+ transition: all 350ms ease;
126
+ `;
127
+ }
128
+ //# sourceMappingURL=dialog-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-overlay.js","sourceRoot":"","sources":["../src/dialog-overlay.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export * from './loading-overlay';
2
+ export * from './task-list-overlay';
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './loading-overlay';
2
+ export * from './task-list-overlay';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC"}
@@ -79,27 +79,6 @@ export class LoadingOverlay extends Overlay {
79
79
  position: relative;
80
80
  overflow: hidden;
81
81
  transition: all 250ms ease;
82
-
83
- @keyframes spin {
84
- 0% {
85
- transform: rotate(0deg);
86
- border-radius: 1em;
87
- }
88
- 20% {
89
- transform: rotate(0deg);
90
- }
91
- 30%,
92
- 60% {
93
- border-radius: 0.25em;
94
- }
95
- 70% {
96
- transform: rotate(180deg);
97
- }
98
- 100% {
99
- transform: rotate(180deg);
100
- border-radius: 1em;
101
- }
102
- }
103
82
  `;
104
83
  loaderStyle = css `
105
84
  font-size: 60px;
@@ -1 +1 @@
1
- {"version":3,"file":"loading-overlay.js","sourceRoot":"","sources":["../src/loading-overlay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loading-overlay.js","sourceRoot":"","sources":["../src/loading-overlay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { Overlay } from './overlay';
2
+ type Label = string | string[];
3
+ type TaskStatus = 'new' | 'in-progress' | 'done' | 'error';
4
+ type Task = {
5
+ key: string;
6
+ label: Label;
7
+ status: TaskStatus;
8
+ };
9
+ type ConstructorProps = Readonly<Partial<{
10
+ taskList: Task[];
11
+ }>>;
12
+ export declare class TaskListOverlay extends Overlay {
13
+ #private;
14
+ protected readonly _contentElement: HTMLDivElement;
15
+ constructor(props?: ConstructorProps);
16
+ hide(): void;
17
+ done(key: string): void;
18
+ error(key: string): void;
19
+ inProgress(key: string): void;
20
+ addTask(...tasks: {
21
+ key: string;
22
+ label: Label;
23
+ }[]): void;
24
+ render(): void;
25
+ private renderTask;
26
+ private getTaskStatusElement;
27
+ private containerStyle;
28
+ private contentStyle;
29
+ private taskListContainerStyle;
30
+ private taskContainerStyle;
31
+ private taskLabelStyle;
32
+ private taskStatusStyle;
33
+ }
34
+ export {};
@@ -0,0 +1,176 @@
1
+ import { css } from '@emotion/css';
2
+ import { Overlay } from './overlay';
3
+ export class TaskListOverlay extends Overlay {
4
+ #taskList;
5
+ _contentElement;
6
+ constructor(props = {}) {
7
+ super();
8
+ this.#taskList = props.taskList ?? [];
9
+ const container = document.createElement('div');
10
+ container.classList.add(this.containerStyle);
11
+ this._root.append(container);
12
+ const contentElement = document.createElement('div');
13
+ this._contentElement = contentElement;
14
+ contentElement.classList.add(this.contentStyle);
15
+ container.append(contentElement);
16
+ this.render();
17
+ }
18
+ hide() {
19
+ this.#taskList = [];
20
+ super.hide();
21
+ }
22
+ done(key) {
23
+ const task = this.#taskList.find((t) => t.key === key);
24
+ if (task) {
25
+ task.status = 'done';
26
+ this.render();
27
+ }
28
+ }
29
+ error(key) {
30
+ const task = this.#taskList.find((t) => t.key === key);
31
+ if (task) {
32
+ task.status = 'error';
33
+ this.render();
34
+ }
35
+ }
36
+ inProgress(key) {
37
+ const task = this.#taskList.find((t) => t.key === key);
38
+ if (task) {
39
+ task.status = 'in-progress';
40
+ this.render();
41
+ }
42
+ }
43
+ addTask(...tasks) {
44
+ this.#taskList.push(...tasks.map(({ key, label }) => ({ key, label, status: 'new' })));
45
+ this.render();
46
+ }
47
+ render() {
48
+ super.render();
49
+ this._contentElement.innerHTML = `
50
+ <div class="${this.taskListContainerStyle}">
51
+ ${this.#taskList.map((task) => this.renderTask(task)).join('')}
52
+ </div>
53
+ `;
54
+ }
55
+ renderTask(task) {
56
+ const label = Array.isArray(task.label) ? task.label.join(' ') : task.label;
57
+ const status = task.status;
58
+ return `
59
+ <div class="${this.taskContainerStyle}">
60
+ <div class="${this.taskStatusStyle} status-${status}">${this.getTaskStatusElement(task.status)}</div>
61
+ <div class="${this.taskLabelStyle}">${label}</div>
62
+ </div>
63
+ `;
64
+ }
65
+ getTaskStatusElement(status) {
66
+ switch (status) {
67
+ case 'new':
68
+ return `<div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ddd" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-minus-circle"><circle cx="12" cy="12" r="10"></circle><line x1="8" y1="12" x2="16" y2="12"></line></svg></div>`;
69
+ case 'in-progress':
70
+ return `<div><div></div></div>`;
71
+ case 'done':
72
+ return `<div><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#80beaf" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check-circle"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg></div>`;
73
+ default:
74
+ return ``;
75
+ }
76
+ }
77
+ containerStyle = css `
78
+ display: flex;
79
+ flex-direction: column;
80
+ align-items: center;
81
+ justify-content: center;
82
+ gap: 32px;
83
+ padding: 32px 64px;
84
+ background-color: #fffc;
85
+ border-radius: 8px;
86
+ box-shadow: 0 5px 24px -6px #0002;
87
+ width: 300px;
88
+ max-width: 90vw;
89
+ min-height: 200px;
90
+ position: relative;
91
+ overflow: hidden;
92
+ transition: all 250ms ease;
93
+
94
+ @keyframes spin {
95
+ 0% {
96
+ transform: rotate(0deg);
97
+ border-radius: 1em;
98
+ }
99
+ 20% {
100
+ transform: rotate(0deg);
101
+ }
102
+ 30%,
103
+ 60% {
104
+ border-radius: 0.25em;
105
+ }
106
+ 70% {
107
+ transform: rotate(180deg);
108
+ }
109
+ 100% {
110
+ transform: rotate(180deg);
111
+ border-radius: 1em;
112
+ }
113
+ }
114
+ `;
115
+ contentStyle = css `
116
+ width: 100%;
117
+ `;
118
+ taskListContainerStyle = css `
119
+ display: flex;
120
+ flex-direction: column;
121
+ gap: 8px;
122
+ width: 100%;
123
+ `;
124
+ taskContainerStyle = css `
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 1em;
128
+ `;
129
+ taskLabelStyle = css ``;
130
+ taskStatusStyle = css `
131
+ width: 24px;
132
+ height: 24px;
133
+
134
+ &.status-new {
135
+ }
136
+
137
+ &.status-in-progress {
138
+ font-size: 24px;
139
+ width: 1em;
140
+ height: 1em;
141
+ border-radius: 50%;
142
+ box-shadow: inset 0 0 0 1px #3b82f633;
143
+ position: relative;
144
+ animation: rotate 1.2s infinite linear;
145
+ > div {
146
+ position: absolute;
147
+ left: 50%;
148
+ top: 50%;
149
+ width: 0.5em;
150
+ height: 1em;
151
+ margin-left: -0.5em;
152
+ margin-top: -0.5em;
153
+ overflow: hidden;
154
+ transform-origin: 0.5em 0.5em;
155
+ mask-image: linear-gradient(top, #000f, #0000);
156
+ -webkit-mask-image: -webkit-linear-gradient(top, #000f, #0000);
157
+
158
+ > div {
159
+ width: 1em;
160
+ height: 1em;
161
+ border-radius: 50%;
162
+ box-shadow: inset 0 0 0 1px #3b82f6;
163
+ }
164
+ }
165
+ @keyframes rotate {
166
+ 0% {
167
+ transform: rotate(0deg);
168
+ }
169
+ 100% {
170
+ transform: rotate(360deg);
171
+ }
172
+ }
173
+ }
174
+ `;
175
+ }
176
+ //# sourceMappingURL=task-list-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-list-overlay.js","sourceRoot":"","sources":["../src/task-list-overlay.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@konomi-app/ui",
3
- "version": "1.6.3",
3
+ "version": "1.7.0",
4
4
  "types": "dist/index.d.ts",
5
5
  "main": "dist/index.js",
6
6
  "author": "adachi",
7
7
  "license": "MIT",
8
8
  "scripts": {
9
- "build": "tsc",
9
+ "build": "rmdir dist /s /q && tsc",
10
10
  "prepare": "yarn run build"
11
11
  },
12
12
  "dependencies": {
package/dist/index.css DELETED
@@ -1,15 +0,0 @@
1
- /* esbuild-plugin-sass:C:\Users\Ribbit\Documents\github\ui-modules\vanilla\src\dialog\theme.scss */
2
- @keyframes swal2-show {
3
- 0% {
4
- opacity: 0;
5
- }
6
- 100% {
7
- opacity: 1;
8
- }
9
- }
10
- @keyframes swal2-hide {
11
- 100% {
12
- opacity: 0;
13
- }
14
- }
15
- /*# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiZXNidWlsZC1wbHVnaW4tc2FzczpDOlxcVXNlcnNcXFJpYmJpdFxcRG9jdW1lbnRzXFxnaXRodWJcXHVpLW1vZHVsZXNcXHZhbmlsbGFcXHNyY1xcZGlhbG9nXFx0aGVtZS5zY3NzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJAa2V5ZnJhbWVzIHN3YWwyLXNob3cge1xuICAwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5Aa2V5ZnJhbWVzIHN3YWwyLWhpZGUge1xuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59Il0sCiAgIm1hcHBpbmdzIjogIjtBQUFBO0FBQUE7QUFFSTtBQUFBO0FBQUE7QUFHQTtBQUFBO0FBQUE7QUFHSjtBQUFBO0FBRUk7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo= */