@konomi-app/ui 5.1.0 → 5.2.1
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/dist/index.cjs +223 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +223 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -291,6 +291,7 @@ updateItemStatus_fn = function(key, itemKey, status) {
|
|
|
291
291
|
// src/overlay-dialog.ts
|
|
292
292
|
var import_lit2 = require("lit");
|
|
293
293
|
var import_decorators = require("lit/decorators.js");
|
|
294
|
+
var import_keyed = require("lit/directives/keyed.js");
|
|
294
295
|
var import_unsafe_html = require("lit/directives/unsafe-html.js");
|
|
295
296
|
|
|
296
297
|
// src/styles.ts
|
|
@@ -307,7 +308,7 @@ var overlayStyles = import_lit.css`
|
|
|
307
308
|
--dialog-z-index: 1000;
|
|
308
309
|
--dialog-backdrop-color: rgb(255 255 255 / 0.73);
|
|
309
310
|
--dialog-backdrop-blur: 4px;
|
|
310
|
-
--dialog-transition-duration:
|
|
311
|
+
--dialog-transition-duration: 280ms;
|
|
311
312
|
|
|
312
313
|
/* Card */
|
|
313
314
|
--dialog-card-bg: #fff;
|
|
@@ -397,7 +398,6 @@ var overlayStyles = import_lit.css`
|
|
|
397
398
|
min-height: var(--dialog-card-min-height);
|
|
398
399
|
position: relative;
|
|
399
400
|
overflow: hidden;
|
|
400
|
-
transition: all var(--dialog-transition-duration) ease;
|
|
401
401
|
}
|
|
402
402
|
|
|
403
403
|
@media (min-width: 640px) {
|
|
@@ -409,22 +409,101 @@ var overlayStyles = import_lit.css`
|
|
|
409
409
|
}
|
|
410
410
|
}
|
|
411
411
|
|
|
412
|
+
/* ─── Card Open / Close Animations ─── */
|
|
413
|
+
|
|
414
|
+
@keyframes card-enter {
|
|
415
|
+
from {
|
|
416
|
+
opacity: 0;
|
|
417
|
+
transform: translateY(28px) scale(0.96);
|
|
418
|
+
filter: blur(6px);
|
|
419
|
+
}
|
|
420
|
+
to {
|
|
421
|
+
opacity: 1;
|
|
422
|
+
transform: translateY(0) scale(1);
|
|
423
|
+
filter: blur(0);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
@keyframes card-exit {
|
|
428
|
+
from {
|
|
429
|
+
opacity: 1;
|
|
430
|
+
transform: translateY(0) scale(1);
|
|
431
|
+
filter: blur(0);
|
|
432
|
+
}
|
|
433
|
+
to {
|
|
434
|
+
opacity: 0;
|
|
435
|
+
transform: translateY(14px) scale(0.97);
|
|
436
|
+
filter: blur(4px);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
.backdrop[data-open] .card {
|
|
441
|
+
animation: card-enter 420ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.card[data-closing] {
|
|
445
|
+
animation: card-exit 300ms cubic-bezier(0.4, 0, 1, 1) both;
|
|
446
|
+
pointer-events: none;
|
|
447
|
+
}
|
|
448
|
+
|
|
412
449
|
/* ─── Card Body ─── */
|
|
413
450
|
|
|
414
451
|
.card-body {
|
|
415
452
|
flex: 1;
|
|
416
453
|
display: flex;
|
|
417
454
|
flex-direction: column;
|
|
418
|
-
align-items:
|
|
455
|
+
align-items: stretch;
|
|
419
456
|
justify-content: center;
|
|
457
|
+
width: 100%;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/* ─── Body Inner (animated content wrapper) ─── */
|
|
461
|
+
|
|
462
|
+
@keyframes body-enter {
|
|
463
|
+
from {
|
|
464
|
+
opacity: 0;
|
|
465
|
+
transform: translateY(10px);
|
|
466
|
+
filter: blur(3px);
|
|
467
|
+
}
|
|
468
|
+
to {
|
|
469
|
+
opacity: 1;
|
|
470
|
+
transform: translateY(0);
|
|
471
|
+
filter: blur(0);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.body-inner {
|
|
476
|
+
display: flex;
|
|
477
|
+
flex-direction: column;
|
|
478
|
+
align-items: center;
|
|
420
479
|
gap: 16px;
|
|
421
480
|
width: 100%;
|
|
481
|
+
animation: body-enter 380ms 60ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
422
482
|
}
|
|
423
483
|
|
|
424
484
|
/* ─── Spinner ─── */
|
|
425
485
|
|
|
426
|
-
|
|
486
|
+
@keyframes spinner-enter {
|
|
487
|
+
from {
|
|
488
|
+
opacity: 0;
|
|
489
|
+
transform: scale(0.5);
|
|
490
|
+
}
|
|
491
|
+
to {
|
|
492
|
+
opacity: 1;
|
|
493
|
+
transform: scale(1);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/* spin と spinner-enter は同じ transform を書き換えるため衝突する。
|
|
498
|
+
ラッパーでスケール/フェードを担い、.spinner は回転専用にする。 */
|
|
499
|
+
.spinner-wrap {
|
|
427
500
|
font-size: var(--dialog-spinner-size);
|
|
501
|
+
width: 1em;
|
|
502
|
+
height: 1em;
|
|
503
|
+
animation: spinner-enter 450ms cubic-bezier(0.34, 1.56, 0.64, 1) both;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
.spinner {
|
|
428
507
|
width: 1em;
|
|
429
508
|
height: 1em;
|
|
430
509
|
border-radius: 50%;
|
|
@@ -465,6 +544,19 @@ var overlayStyles = import_lit.css`
|
|
|
465
544
|
|
|
466
545
|
/* ─── Icon ─── */
|
|
467
546
|
|
|
547
|
+
@keyframes icon-enter {
|
|
548
|
+
from {
|
|
549
|
+
opacity: 0;
|
|
550
|
+
transform: scale(0.4) rotate(-12deg);
|
|
551
|
+
filter: blur(4px);
|
|
552
|
+
}
|
|
553
|
+
to {
|
|
554
|
+
opacity: 1;
|
|
555
|
+
transform: scale(1) rotate(0deg);
|
|
556
|
+
filter: blur(0);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
468
560
|
.icon-container {
|
|
469
561
|
width: 64px;
|
|
470
562
|
height: 64px;
|
|
@@ -473,6 +565,7 @@ var overlayStyles = import_lit.css`
|
|
|
473
565
|
align-items: center;
|
|
474
566
|
justify-content: center;
|
|
475
567
|
flex-shrink: 0;
|
|
568
|
+
animation: icon-enter 500ms cubic-bezier(0.34, 1.56, 0.64, 1) both;
|
|
476
569
|
}
|
|
477
570
|
|
|
478
571
|
.icon-container svg {
|
|
@@ -598,6 +691,7 @@ var overlayStyles = import_lit.css`
|
|
|
598
691
|
gap: 8px;
|
|
599
692
|
width: 100%;
|
|
600
693
|
margin-top: 8px;
|
|
694
|
+
animation: body-enter 320ms 160ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
601
695
|
}
|
|
602
696
|
|
|
603
697
|
@media (min-width: 640px) {
|
|
@@ -617,7 +711,8 @@ var overlayStyles = import_lit.css`
|
|
|
617
711
|
font-weight: 500;
|
|
618
712
|
transition:
|
|
619
713
|
background-color 150ms ease,
|
|
620
|
-
transform 80ms ease
|
|
714
|
+
transform 80ms ease,
|
|
715
|
+
box-shadow 150ms ease;
|
|
621
716
|
min-width: 100px;
|
|
622
717
|
text-align: center;
|
|
623
718
|
}
|
|
@@ -633,6 +728,7 @@ var overlayStyles = import_lit.css`
|
|
|
633
728
|
|
|
634
729
|
.btn-confirm:hover {
|
|
635
730
|
background-color: var(--dialog-primary-hover);
|
|
731
|
+
box-shadow: 0 4px 12px rgb(59 130 246 / 0.35);
|
|
636
732
|
}
|
|
637
733
|
|
|
638
734
|
.btn-cancel {
|
|
@@ -656,11 +752,48 @@ var overlayStyles = import_lit.css`
|
|
|
656
752
|
list-style: none;
|
|
657
753
|
}
|
|
658
754
|
|
|
755
|
+
@keyframes task-item-enter {
|
|
756
|
+
from {
|
|
757
|
+
opacity: 0;
|
|
758
|
+
transform: translateX(-8px);
|
|
759
|
+
}
|
|
760
|
+
to {
|
|
761
|
+
opacity: 1;
|
|
762
|
+
transform: translateX(0);
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
|
|
659
766
|
.task-item {
|
|
660
767
|
display: flex;
|
|
661
768
|
align-items: center;
|
|
662
769
|
gap: 12px;
|
|
663
770
|
font-size: 14px;
|
|
771
|
+
animation: task-item-enter 300ms cubic-bezier(0.16, 1, 0.3, 1) both;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.task-item:nth-child(1) {
|
|
775
|
+
animation-delay: 40ms;
|
|
776
|
+
}
|
|
777
|
+
.task-item:nth-child(2) {
|
|
778
|
+
animation-delay: 80ms;
|
|
779
|
+
}
|
|
780
|
+
.task-item:nth-child(3) {
|
|
781
|
+
animation-delay: 120ms;
|
|
782
|
+
}
|
|
783
|
+
.task-item:nth-child(4) {
|
|
784
|
+
animation-delay: 160ms;
|
|
785
|
+
}
|
|
786
|
+
.task-item:nth-child(5) {
|
|
787
|
+
animation-delay: 200ms;
|
|
788
|
+
}
|
|
789
|
+
.task-item:nth-child(6) {
|
|
790
|
+
animation-delay: 240ms;
|
|
791
|
+
}
|
|
792
|
+
.task-item:nth-child(7) {
|
|
793
|
+
animation-delay: 280ms;
|
|
794
|
+
}
|
|
795
|
+
.task-item:nth-child(8) {
|
|
796
|
+
animation-delay: 320ms;
|
|
664
797
|
}
|
|
665
798
|
|
|
666
799
|
.task-icon {
|
|
@@ -710,6 +843,7 @@ var overlayStyles = import_lit.css`
|
|
|
710
843
|
|
|
711
844
|
.task-label {
|
|
712
845
|
color: #6b7280;
|
|
846
|
+
transition: color 250ms ease;
|
|
713
847
|
}
|
|
714
848
|
|
|
715
849
|
.task-label[data-status='active'] {
|
|
@@ -717,8 +851,21 @@ var overlayStyles = import_lit.css`
|
|
|
717
851
|
font-weight: 500;
|
|
718
852
|
}
|
|
719
853
|
|
|
854
|
+
@keyframes task-done-flash {
|
|
855
|
+
0% {
|
|
856
|
+
transform: translateX(0);
|
|
857
|
+
}
|
|
858
|
+
30% {
|
|
859
|
+
transform: translateX(4px);
|
|
860
|
+
}
|
|
861
|
+
100% {
|
|
862
|
+
transform: translateX(0);
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
|
|
720
866
|
.task-label[data-status='done'] {
|
|
721
867
|
color: var(--dialog-success);
|
|
868
|
+
animation: task-done-flash 350ms cubic-bezier(0.34, 1.56, 0.64, 1) both;
|
|
722
869
|
}
|
|
723
870
|
|
|
724
871
|
.task-label[data-status='error'] {
|
|
@@ -727,7 +874,6 @@ var overlayStyles = import_lit.css`
|
|
|
727
874
|
|
|
728
875
|
.task-label[data-status='skipped'] {
|
|
729
876
|
color: #9ca3af;
|
|
730
|
-
text-decoration: line-through;
|
|
731
877
|
}
|
|
732
878
|
|
|
733
879
|
/* ─── Queue ellipsis ─── */
|
|
@@ -763,17 +909,54 @@ var overlayStyles = import_lit.css`
|
|
|
763
909
|
margin-bottom: 8px;
|
|
764
910
|
}
|
|
765
911
|
|
|
912
|
+
@keyframes step-dot-enter {
|
|
913
|
+
from {
|
|
914
|
+
opacity: 0;
|
|
915
|
+
transform: scale(0.4);
|
|
916
|
+
}
|
|
917
|
+
to {
|
|
918
|
+
opacity: 1;
|
|
919
|
+
transform: scale(1);
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
@keyframes step-pulse {
|
|
924
|
+
0% {
|
|
925
|
+
box-shadow:
|
|
926
|
+
0 0 0 0 rgb(59 130 246 / 0.5),
|
|
927
|
+
0 0 0 3px rgb(59 130 246 / 0.2);
|
|
928
|
+
}
|
|
929
|
+
70% {
|
|
930
|
+
box-shadow:
|
|
931
|
+
0 0 0 7px rgb(59 130 246 / 0),
|
|
932
|
+
0 0 0 3px rgb(59 130 246 / 0.2);
|
|
933
|
+
}
|
|
934
|
+
100% {
|
|
935
|
+
box-shadow:
|
|
936
|
+
0 0 0 0 rgb(59 130 246 / 0),
|
|
937
|
+
0 0 0 3px rgb(59 130 246 / 0.2);
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
|
|
766
941
|
.step-dot {
|
|
767
942
|
width: 8px;
|
|
768
943
|
height: 8px;
|
|
769
944
|
border-radius: 50%;
|
|
770
945
|
background-color: #d1d5db;
|
|
771
|
-
transition:
|
|
946
|
+
transition:
|
|
947
|
+
background-color 250ms ease,
|
|
948
|
+
transform 250ms cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
949
|
+
width 250ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
950
|
+
animation: step-dot-enter 400ms cubic-bezier(0.34, 1.56, 0.64, 1) both;
|
|
772
951
|
}
|
|
773
952
|
|
|
774
953
|
.step-dot[data-status='active'] {
|
|
775
954
|
background-color: var(--dialog-primary);
|
|
776
|
-
|
|
955
|
+
width: 20px;
|
|
956
|
+
border-radius: 4px;
|
|
957
|
+
animation:
|
|
958
|
+
step-dot-enter 400ms cubic-bezier(0.34, 1.56, 0.64, 1) both,
|
|
959
|
+
step-pulse 2s 400ms infinite;
|
|
777
960
|
}
|
|
778
961
|
|
|
779
962
|
.step-dot[data-status='done'] {
|
|
@@ -793,6 +976,7 @@ var overlayStyles = import_lit.css`
|
|
|
793
976
|
max-width: 24px;
|
|
794
977
|
height: 2px;
|
|
795
978
|
background-color: #e5e7eb;
|
|
979
|
+
transition: background-color 400ms ease;
|
|
796
980
|
}
|
|
797
981
|
`;
|
|
798
982
|
|
|
@@ -801,6 +985,8 @@ var OverlayDialog = class extends import_lit2.LitElement {
|
|
|
801
985
|
constructor() {
|
|
802
986
|
super(...arguments);
|
|
803
987
|
this._state = createInitialState();
|
|
988
|
+
this._bodyKey = 0;
|
|
989
|
+
this._isClosing = false;
|
|
804
990
|
this._beforeUnloadHandler = (e) => e.preventDefault();
|
|
805
991
|
this._onKeyDown = (e) => {
|
|
806
992
|
if (e.key === "Escape" && this._state.open) {
|
|
@@ -814,13 +1000,24 @@ var OverlayDialog = class extends import_lit2.LitElement {
|
|
|
814
1000
|
this._state = { ...this.controller.state };
|
|
815
1001
|
this._unsubscribe = this.controller.subscribe((s) => {
|
|
816
1002
|
const wasOpen = this._state.open;
|
|
817
|
-
this._state
|
|
818
|
-
this._syncBodyScroll(s.open);
|
|
1003
|
+
const prevDialogType = this._state.dialogType;
|
|
819
1004
|
if (s.open && !wasOpen) {
|
|
1005
|
+
this._isClosing = false;
|
|
1006
|
+
clearTimeout(this._closeTimer);
|
|
820
1007
|
window.addEventListener("beforeunload", this._beforeUnloadHandler);
|
|
821
1008
|
} else if (!s.open && wasOpen) {
|
|
1009
|
+
this._isClosing = true;
|
|
1010
|
+
clearTimeout(this._closeTimer);
|
|
1011
|
+
this._closeTimer = setTimeout(() => {
|
|
1012
|
+
this._isClosing = false;
|
|
1013
|
+
}, 320);
|
|
822
1014
|
window.removeEventListener("beforeunload", this._beforeUnloadHandler);
|
|
823
1015
|
}
|
|
1016
|
+
if (s.open && s.dialogType !== prevDialogType) {
|
|
1017
|
+
this._bodyKey++;
|
|
1018
|
+
}
|
|
1019
|
+
this._state = s;
|
|
1020
|
+
this._syncBodyScroll(s.open);
|
|
824
1021
|
});
|
|
825
1022
|
}
|
|
826
1023
|
window.addEventListener("keydown", this._onKeyDown);
|
|
@@ -829,6 +1026,7 @@ var OverlayDialog = class extends import_lit2.LitElement {
|
|
|
829
1026
|
super.disconnectedCallback();
|
|
830
1027
|
this._unsubscribe?.();
|
|
831
1028
|
this._syncBodyScroll(false);
|
|
1029
|
+
clearTimeout(this._closeTimer);
|
|
832
1030
|
window.removeEventListener("beforeunload", this._beforeUnloadHandler);
|
|
833
1031
|
window.removeEventListener("keydown", this._onKeyDown);
|
|
834
1032
|
}
|
|
@@ -904,9 +1102,11 @@ var OverlayDialog = class extends import_lit2.LitElement {
|
|
|
904
1102
|
}
|
|
905
1103
|
_renderSpinner() {
|
|
906
1104
|
return import_lit2.html`
|
|
907
|
-
<div class="spinner">
|
|
908
|
-
<div class="spinner
|
|
909
|
-
<div class="spinner-
|
|
1105
|
+
<div class="spinner-wrap">
|
|
1106
|
+
<div class="spinner">
|
|
1107
|
+
<div class="spinner-half">
|
|
1108
|
+
<div class="spinner-inner"></div>
|
|
1109
|
+
</div>
|
|
910
1110
|
</div>
|
|
911
1111
|
</div>
|
|
912
1112
|
`;
|
|
@@ -1093,9 +1293,11 @@ var OverlayDialog = class extends import_lit2.LitElement {
|
|
|
1093
1293
|
const showHeaderTitle = s.title && s.dialogType !== "alert" && s.dialogType !== "confirm";
|
|
1094
1294
|
return import_lit2.html`
|
|
1095
1295
|
<div class="backdrop" ?data-open=${s.open} @click=${this._onBackdropClick}>
|
|
1096
|
-
<div class="card">
|
|
1296
|
+
<div class="card" ?data-closing=${this._isClosing}>
|
|
1097
1297
|
${showHeaderTitle ? import_lit2.html`<p class="dialog-title">${s.title}</p>` : import_lit2.nothing}
|
|
1098
|
-
<div class="card-body"
|
|
1298
|
+
<div class="card-body">
|
|
1299
|
+
${(0, import_keyed.keyed)(this._bodyKey, import_lit2.html`<div class="body-inner">${this._renderBody()}</div>`)}
|
|
1300
|
+
</div>
|
|
1099
1301
|
<div
|
|
1100
1302
|
class="progress-bar"
|
|
1101
1303
|
style="width:${s.progress ?? 0}%;opacity:${s.progress !== null ? 1 : 0}"
|
|
@@ -1112,6 +1314,12 @@ __decorateClass([
|
|
|
1112
1314
|
__decorateClass([
|
|
1113
1315
|
(0, import_decorators.state)()
|
|
1114
1316
|
], OverlayDialog.prototype, "_state", 2);
|
|
1317
|
+
__decorateClass([
|
|
1318
|
+
(0, import_decorators.state)()
|
|
1319
|
+
], OverlayDialog.prototype, "_bodyKey", 2);
|
|
1320
|
+
__decorateClass([
|
|
1321
|
+
(0, import_decorators.state)()
|
|
1322
|
+
], OverlayDialog.prototype, "_isClosing", 2);
|
|
1115
1323
|
OverlayDialog = __decorateClass([
|
|
1116
1324
|
(0, import_decorators.customElement)("overlay-dialog")
|
|
1117
1325
|
], OverlayDialog);
|