@konomi-app/ui 5.8.1 → 5.10.4

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 CHANGED
@@ -703,6 +703,7 @@ updateItemStatus_fn = function(key, itemKey, status) {
703
703
  var import_lit2 = require("lit");
704
704
  var import_decorators = require("lit/decorators.js");
705
705
  var import_keyed = require("lit/directives/keyed.js");
706
+ var import_repeat = require("lit/directives/repeat.js");
706
707
  var import_unsafe_html = require("lit/directives/unsafe-html.js");
707
708
 
708
709
  // src/styles.ts
@@ -714,8 +715,8 @@ var overlayStyles = import_lit.css`
714
715
  'Yu Gothic Medium', '游ゴシック', YuGothic, 'メイリオ', 'Hiragino Kaku Gothic ProN', Meiryo,
715
716
  sans-serif;
716
717
  --dialog-text-color: #356;
717
- --dialog-font-size: 14px;
718
- --dialog-font-size-desktop: 16px;
718
+ --dialog-font-size: 15px;
719
+ --dialog-font-size-desktop: 17px;
719
720
  --dialog-z-index: 1000;
720
721
  --dialog-backdrop-color: rgb(255 255 255 / 0.73);
721
722
  --dialog-backdrop-blur: 4px;
@@ -727,6 +728,7 @@ var overlayStyles = import_lit.css`
727
728
  --dialog-card-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
728
729
  --dialog-card-radius: 4px;
729
730
  --dialog-card-width: 400px;
731
+ --dialog-alert-width: 480px;
730
732
  --dialog-card-min-height: 200px;
731
733
  --dialog-card-padding: 24px;
732
734
  --dialog-card-padding-desktop: 32px;
@@ -747,7 +749,7 @@ var overlayStyles = import_lit.css`
747
749
  /* Button */
748
750
  --dialog-btn-radius: 6px;
749
751
  --dialog-btn-padding: 8px 24px;
750
- --dialog-btn-font-size: 14px;
752
+ --dialog-btn-font-size: 15px;
751
753
 
752
754
  /* Spinner */
753
755
  --dialog-spinner-size: 60px;
@@ -760,14 +762,14 @@ var overlayStyles = import_lit.css`
760
762
  --dialog-form-gap: 16px;
761
763
  --dialog-form-columns: 1;
762
764
  --dialog-form-label-color: #374151;
763
- --dialog-form-label-size: 13px;
765
+ --dialog-form-label-size: 14px;
764
766
  --dialog-form-label-weight: 500;
765
767
  --dialog-form-input-bg: #fff;
766
768
  --dialog-form-input-border: #d1d5db;
767
769
  --dialog-form-input-border-focus: var(--dialog-primary);
768
770
  --dialog-form-input-radius: 6px;
769
771
  --dialog-form-input-padding: 8px 12px;
770
- --dialog-form-input-font-size: 14px;
772
+ --dialog-form-input-font-size: 15px;
771
773
  --dialog-form-error-color: var(--dialog-error);
772
774
  --dialog-form-hint-color: #9ca3af;
773
775
  --dialog-form-required-color: var(--dialog-error);
@@ -835,9 +837,27 @@ var overlayStyles = import_lit.css`
835
837
  max-width: 90vw;
836
838
  border-radius: var(--dialog-card-radius);
837
839
  padding: var(--dialog-card-padding-desktop);
840
+ transition: width 360ms cubic-bezier(0.16, 1, 0.3, 1);
838
841
  }
839
842
  }
840
843
 
844
+ /* ─── Alert / Confirm specific sizing ─── */
845
+
846
+ @media (min-width: 640px) {
847
+ .card[data-type='alert'],
848
+ .card[data-type='confirm'] {
849
+ width: var(--dialog-alert-width);
850
+ }
851
+ }
852
+
853
+ .card[data-type='alert'] .label,
854
+ .card[data-type='confirm'] .label {
855
+ font-size: 22px;
856
+ font-weight: 700;
857
+ color: #0f172a;
858
+ letter-spacing: -0.01em;
859
+ }
860
+
841
861
  /* ─── Card Open / Close Animations ─── */
842
862
 
843
863
  @keyframes card-enter {
@@ -1060,9 +1080,9 @@ var overlayStyles = import_lit.css`
1060
1080
  /* ─── Text ─── */
1061
1081
 
1062
1082
  .dialog-title {
1063
- font-size: 18px;
1083
+ font-size: 20px;
1064
1084
  font-weight: 600;
1065
- color: #374151;
1085
+ color: #1f2937;
1066
1086
  text-align: center;
1067
1087
  margin: 0 0 16px;
1068
1088
  word-break: break-word;
@@ -1072,29 +1092,29 @@ var overlayStyles = import_lit.css`
1072
1092
  }
1073
1093
 
1074
1094
  .label {
1075
- font-size: 16px;
1076
- font-weight: 400;
1077
- color: #1f2937;
1095
+ font-size: 17px;
1096
+ font-weight: 500;
1097
+ color: #111827;
1078
1098
  text-align: center;
1079
1099
  margin: 0;
1080
1100
  word-break: break-word;
1081
1101
  }
1082
1102
 
1083
1103
  .description {
1084
- font-size: 14px;
1085
- color: #6b7280;
1104
+ font-size: 15px;
1105
+ color: #4b5563;
1086
1106
  text-align: center;
1087
1107
  margin: 0;
1088
1108
  word-break: break-word;
1089
- line-height: 1.6;
1109
+ line-height: 1.65;
1090
1110
  }
1091
1111
 
1092
1112
  .html-content {
1093
- font-size: 14px;
1094
- color: #6b7280;
1113
+ font-size: 15px;
1114
+ color: #4b5563;
1095
1115
  text-align: center;
1096
1116
  word-break: break-word;
1097
- line-height: 1.6;
1117
+ line-height: 1.65;
1098
1118
  width: 100%;
1099
1119
  }
1100
1120
 
@@ -1194,10 +1214,31 @@ var overlayStyles = import_lit.css`
1194
1214
  display: flex;
1195
1215
  align-items: center;
1196
1216
  gap: 12px;
1197
- font-size: 14px;
1217
+ font-size: 15px;
1218
+ border-radius: 6px;
1219
+ transition: background 200ms ease;
1198
1220
  animation: task-item-enter 300ms cubic-bezier(0.16, 1, 0.3, 1) both;
1199
1221
  }
1200
1222
 
1223
+ .task-item[data-status='active'] {
1224
+ }
1225
+
1226
+ @keyframes task-item-enter-below {
1227
+ from {
1228
+ opacity: 0;
1229
+ transform: translateY(8px);
1230
+ }
1231
+ to {
1232
+ opacity: 1;
1233
+ transform: translateY(0);
1234
+ }
1235
+ }
1236
+
1237
+ /* Queue items slide in from below (steps keep the left-slide default) */
1238
+ .task-item[data-status] {
1239
+ animation-name: task-item-enter-below;
1240
+ }
1241
+
1201
1242
  .task-item:nth-child(1) {
1202
1243
  animation-delay: 40ms;
1203
1244
  }
@@ -1268,6 +1309,23 @@ var overlayStyles = import_lit.css`
1268
1309
  box-shadow: inset 0 0 0 1px var(--dialog-spinner-arc);
1269
1310
  }
1270
1311
 
1312
+ @keyframes task-icon-pop {
1313
+ from {
1314
+ transform: scale(0.4);
1315
+ opacity: 0;
1316
+ }
1317
+ to {
1318
+ transform: scale(1);
1319
+ opacity: 1;
1320
+ }
1321
+ }
1322
+
1323
+ .task-item[data-status='done'] .task-icon svg,
1324
+ .task-item[data-status='error'] .task-icon svg,
1325
+ .task-item[data-status='skipped'] .task-icon svg {
1326
+ animation: task-icon-pop 400ms cubic-bezier(0.34, 1.56, 0.64, 1) both;
1327
+ }
1328
+
1271
1329
  .task-label {
1272
1330
  color: #6b7280;
1273
1331
  transition: color 250ms ease;
@@ -1303,21 +1361,80 @@ var overlayStyles = import_lit.css`
1303
1361
  color: #9ca3af;
1304
1362
  }
1305
1363
 
1364
+ /* ─── Queue layout & progress ─── */
1365
+
1366
+ .queue-layout {
1367
+ display: flex;
1368
+ align-items: stretch;
1369
+ gap: 10px;
1370
+ width: 100%;
1371
+ }
1372
+
1373
+ .queue-layout .task-list {
1374
+ flex: 1;
1375
+ }
1376
+
1377
+ .queue-progress-v {
1378
+ display: flex;
1379
+ flex-direction: column;
1380
+ align-items: center;
1381
+ flex-shrink: 0;
1382
+ width: 14px;
1383
+ animation: task-item-enter 300ms cubic-bezier(0.16, 1, 0.3, 1) both;
1384
+ }
1385
+
1386
+ .queue-progress-track-v {
1387
+ flex: 1;
1388
+ width: 2px;
1389
+ background: rgba(156, 163, 175, 0.2);
1390
+ border-radius: 1px;
1391
+ position: relative;
1392
+ overflow: hidden;
1393
+ }
1394
+
1395
+ .queue-progress-fill-v {
1396
+ position: absolute;
1397
+ top: 0;
1398
+ left: 0;
1399
+ right: 0;
1400
+ background: var(--dialog-accent, #3b82f6);
1401
+ border-radius: 1px;
1402
+ transition: height 600ms cubic-bezier(0.4, 0, 0.2, 1);
1403
+ }
1404
+
1405
+ .queue-progress-count-v {
1406
+ font-size: 10px;
1407
+ font-weight: 500;
1408
+ color: #9ca3af;
1409
+ margin-top: 5px;
1410
+ writing-mode: vertical-rl;
1411
+ letter-spacing: 0.04em;
1412
+ font-variant-numeric: tabular-nums;
1413
+ line-height: 1;
1414
+ }
1415
+
1306
1416
  /* ─── Queue ellipsis ─── */
1307
1417
 
1308
1418
  .queue-ellipsis {
1419
+ display: flex;
1420
+ flex-direction: row;
1421
+ align-items: center;
1422
+ gap: 8px;
1423
+ list-style: none;
1424
+ }
1425
+
1426
+ .queue-ellipsis-dots {
1309
1427
  display: flex;
1310
1428
  flex-direction: column;
1311
1429
  align-items: center;
1430
+ justify-content: center;
1312
1431
  gap: 3px;
1432
+ width: 24px;
1313
1433
  padding: 4px 0;
1314
- /* アイコン列 (24px) の中央に配置: (24px - 4px dot) / 2 = 10px */
1315
- padding-left: 10px;
1316
- align-self: flex-start;
1317
- list-style: none;
1434
+ flex-shrink: 0;
1318
1435
  }
1319
1436
 
1320
- .queue-ellipsis span {
1437
+ .queue-ellipsis-dots span {
1321
1438
  display: block;
1322
1439
  width: 4px;
1323
1440
  height: 4px;
@@ -1325,6 +1442,16 @@ var overlayStyles = import_lit.css`
1325
1442
  background-color: #d1d5db;
1326
1443
  }
1327
1444
 
1445
+ .queue-ellipsis-badge {
1446
+ font-size: 11px;
1447
+ font-weight: 500;
1448
+ color: #9ca3af;
1449
+ background: rgba(156, 163, 175, 0.12);
1450
+ border-radius: 10px;
1451
+ padding: 2px 7px;
1452
+ letter-spacing: 0.01em;
1453
+ }
1454
+
1328
1455
  /* ─── Steps indicator ─── */
1329
1456
 
1330
1457
  .steps-header {
@@ -1490,13 +1617,13 @@ var overlayStyles = import_lit.css`
1490
1617
  }
1491
1618
 
1492
1619
  .form-error {
1493
- font-size: 12px;
1620
+ font-size: 13px;
1494
1621
  color: var(--dialog-form-error-color);
1495
1622
  min-height: 1em;
1496
1623
  }
1497
1624
 
1498
1625
  .form-hint {
1499
- font-size: 12px;
1626
+ font-size: 13px;
1500
1627
  color: var(--dialog-form-hint-color);
1501
1628
  }
1502
1629
 
@@ -1548,7 +1675,7 @@ var overlayStyles = import_lit.css`
1548
1675
  }
1549
1676
 
1550
1677
  .step-form-counter {
1551
- font-size: 12px;
1678
+ font-size: 13px;
1552
1679
  color: var(--dialog-form-hint-color);
1553
1680
  text-align: center;
1554
1681
  margin: 0 0 4px;
@@ -1581,7 +1708,9 @@ var overlayStyles = import_lit.css`
1581
1708
  border: 1px solid var(--dialog-form-input-border);
1582
1709
  background: transparent;
1583
1710
  color: var(--dialog-text-color);
1584
- transition: background-color 120ms ease, border-color 120ms ease;
1711
+ transition:
1712
+ background-color 120ms ease,
1713
+ border-color 120ms ease;
1585
1714
  }
1586
1715
 
1587
1716
  .btn-prev:hover {
@@ -1828,23 +1957,40 @@ var OverlayDialog = class extends import_lit2.LitElement {
1828
1957
  const total = items.length;
1829
1958
  const { start, end } = this._getQueueWindow(items);
1830
1959
  const visible = items.slice(start, end + 1);
1960
+ const finishedStatuses = /* @__PURE__ */ new Set(["done", "skipped", "error"]);
1961
+ const doneCount = items.filter((i) => finishedStatuses.has(i.status)).length;
1962
+ const pct = total > 0 ? Math.round(doneCount / total * 100) : 0;
1963
+ const topHidden = start;
1964
+ const bottomHidden = total - 1 - end;
1831
1965
  return import_lit2.html`
1832
- <ul class="task-list">
1833
- ${start > 0 ? import_lit2.html`<li class="queue-ellipsis" aria-hidden="true">
1834
- <span></span><span></span><span></span>
1835
- </li>` : import_lit2.nothing}
1836
- ${visible.map(
1966
+ <div class="queue-layout">
1967
+ <div class="queue-progress-v">
1968
+ <div class="queue-progress-track-v">
1969
+ <div class="queue-progress-fill-v" style="height: ${pct}%"></div>
1970
+ </div>
1971
+ <span class="queue-progress-count-v">${doneCount}/${total}</span>
1972
+ </div>
1973
+ <ul class="task-list">
1974
+ ${topHidden > 0 ? import_lit2.html`<li class="queue-ellipsis" aria-hidden="true">
1975
+ <div class="queue-ellipsis-dots"><span></span><span></span><span></span></div>
1976
+ <span class="queue-ellipsis-badge">+${topHidden}</span>
1977
+ </li>` : import_lit2.nothing}
1978
+ ${(0, import_repeat.repeat)(
1979
+ visible,
1980
+ (item) => item.key,
1837
1981
  (item) => import_lit2.html`
1838
- <li class="task-item">
1839
- <span class="task-icon">${this._renderTaskIcon(item.status)}</span>
1840
- <span class="task-label" data-status=${item.status}>${item.label}</span>
1841
- </li>
1842
- `
1982
+ <li class="task-item" data-status=${item.status}>
1983
+ <span class="task-icon">${this._renderTaskIcon(item.status)}</span>
1984
+ <span class="task-label" data-status=${item.status}>${item.label}</span>
1985
+ </li>
1986
+ `
1843
1987
  )}
1844
- ${end < total - 1 ? import_lit2.html`<li class="queue-ellipsis" aria-hidden="true">
1845
- <span></span><span></span><span></span>
1846
- </li>` : import_lit2.nothing}
1847
- </ul>
1988
+ ${bottomHidden > 0 ? import_lit2.html`<li class="queue-ellipsis" aria-hidden="true">
1989
+ <div class="queue-ellipsis-dots"><span></span><span></span><span></span></div>
1990
+ <span class="queue-ellipsis-badge">+${bottomHidden}</span>
1991
+ </li>` : import_lit2.nothing}
1992
+ </ul>
1993
+ </div>
1848
1994
  `;
1849
1995
  }
1850
1996
  _renderStepsHeader(items) {
@@ -2546,7 +2692,7 @@ enforceMaxVisible_fn = function() {
2546
2692
  // src/toast/toast-container.ts
2547
2693
  var import_lit4 = require("lit");
2548
2694
  var import_decorators2 = require("lit/decorators.js");
2549
- var import_repeat = require("lit/directives/repeat.js");
2695
+ var import_repeat2 = require("lit/directives/repeat.js");
2550
2696
 
2551
2697
  // src/toast/styles.ts
2552
2698
  var import_lit3 = require("lit");
@@ -3184,7 +3330,7 @@ var ToastContainer = class extends import_lit4.LitElement {
3184
3330
  const s = this._state;
3185
3331
  return import_lit4.html`
3186
3332
  <div class="container" data-position=${s.position} role="region" aria-label="通知">
3187
- ${(0, import_repeat.repeat)(
3333
+ ${(0, import_repeat2.repeat)(
3188
3334
  s.items,
3189
3335
  (item) => item.id,
3190
3336
  (item) => this._renderToast(item)