@konomi-app/ui 5.8.0 → 5.10.3

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);
841
+ }
842
+ }
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);
838
850
  }
839
851
  }
840
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
  }
@@ -1247,6 +1288,26 @@ var overlayStyles = import_lit.css`
1247
1288
  animation: spin 1.2s infinite linear;
1248
1289
  }
1249
1290
 
1291
+ .task-item[data-status='active'] .task-icon .mini-spinner {
1292
+ animation:
1293
+ spin 1.2s infinite linear,
1294
+ queue-spinner-pulse 2s infinite ease-in-out;
1295
+ }
1296
+
1297
+ @keyframes queue-spinner-pulse {
1298
+ 0%,
1299
+ 100% {
1300
+ box-shadow:
1301
+ inset 0 0 0 1px var(--dialog-spinner-track),
1302
+ 0 0 0 0 color-mix(in srgb, var(--dialog-accent, #3b82f6) 40%, transparent);
1303
+ }
1304
+ 50% {
1305
+ box-shadow:
1306
+ inset 0 0 0 1px var(--dialog-spinner-track),
1307
+ 0 0 0 4px color-mix(in srgb, var(--dialog-accent, #3b82f6) 0%, transparent);
1308
+ }
1309
+ }
1310
+
1250
1311
  .task-icon .mini-spinner-half {
1251
1312
  position: absolute;
1252
1313
  left: 50%;
@@ -1268,6 +1329,23 @@ var overlayStyles = import_lit.css`
1268
1329
  box-shadow: inset 0 0 0 1px var(--dialog-spinner-arc);
1269
1330
  }
1270
1331
 
1332
+ @keyframes task-icon-pop {
1333
+ from {
1334
+ transform: scale(0.4);
1335
+ opacity: 0;
1336
+ }
1337
+ to {
1338
+ transform: scale(1);
1339
+ opacity: 1;
1340
+ }
1341
+ }
1342
+
1343
+ .task-item[data-status='done'] .task-icon svg,
1344
+ .task-item[data-status='error'] .task-icon svg,
1345
+ .task-item[data-status='skipped'] .task-icon svg {
1346
+ animation: task-icon-pop 400ms cubic-bezier(0.34, 1.56, 0.64, 1) both;
1347
+ }
1348
+
1271
1349
  .task-label {
1272
1350
  color: #6b7280;
1273
1351
  transition: color 250ms ease;
@@ -1303,21 +1381,80 @@ var overlayStyles = import_lit.css`
1303
1381
  color: #9ca3af;
1304
1382
  }
1305
1383
 
1384
+ /* ─── Queue layout & progress ─── */
1385
+
1386
+ .queue-layout {
1387
+ display: flex;
1388
+ align-items: stretch;
1389
+ gap: 10px;
1390
+ width: 100%;
1391
+ }
1392
+
1393
+ .queue-layout .task-list {
1394
+ flex: 1;
1395
+ }
1396
+
1397
+ .queue-progress-v {
1398
+ display: flex;
1399
+ flex-direction: column;
1400
+ align-items: center;
1401
+ flex-shrink: 0;
1402
+ width: 14px;
1403
+ animation: task-item-enter 300ms cubic-bezier(0.16, 1, 0.3, 1) both;
1404
+ }
1405
+
1406
+ .queue-progress-track-v {
1407
+ flex: 1;
1408
+ width: 2px;
1409
+ background: rgba(156, 163, 175, 0.2);
1410
+ border-radius: 1px;
1411
+ position: relative;
1412
+ overflow: hidden;
1413
+ }
1414
+
1415
+ .queue-progress-fill-v {
1416
+ position: absolute;
1417
+ top: 0;
1418
+ left: 0;
1419
+ right: 0;
1420
+ background: var(--dialog-accent, #3b82f6);
1421
+ border-radius: 1px;
1422
+ transition: height 600ms cubic-bezier(0.4, 0, 0.2, 1);
1423
+ }
1424
+
1425
+ .queue-progress-count-v {
1426
+ font-size: 10px;
1427
+ font-weight: 500;
1428
+ color: #9ca3af;
1429
+ margin-top: 5px;
1430
+ writing-mode: vertical-rl;
1431
+ letter-spacing: 0.04em;
1432
+ font-variant-numeric: tabular-nums;
1433
+ line-height: 1;
1434
+ }
1435
+
1306
1436
  /* ─── Queue ellipsis ─── */
1307
1437
 
1308
1438
  .queue-ellipsis {
1439
+ display: flex;
1440
+ flex-direction: row;
1441
+ align-items: center;
1442
+ gap: 8px;
1443
+ list-style: none;
1444
+ }
1445
+
1446
+ .queue-ellipsis-dots {
1309
1447
  display: flex;
1310
1448
  flex-direction: column;
1311
1449
  align-items: center;
1450
+ justify-content: center;
1312
1451
  gap: 3px;
1452
+ width: 24px;
1313
1453
  padding: 4px 0;
1314
- /* アイコン列 (24px) の中央に配置: (24px - 4px dot) / 2 = 10px */
1315
- padding-left: 10px;
1316
- align-self: flex-start;
1317
- list-style: none;
1454
+ flex-shrink: 0;
1318
1455
  }
1319
1456
 
1320
- .queue-ellipsis span {
1457
+ .queue-ellipsis-dots span {
1321
1458
  display: block;
1322
1459
  width: 4px;
1323
1460
  height: 4px;
@@ -1325,6 +1462,16 @@ var overlayStyles = import_lit.css`
1325
1462
  background-color: #d1d5db;
1326
1463
  }
1327
1464
 
1465
+ .queue-ellipsis-badge {
1466
+ font-size: 11px;
1467
+ font-weight: 500;
1468
+ color: #9ca3af;
1469
+ background: rgba(156, 163, 175, 0.12);
1470
+ border-radius: 10px;
1471
+ padding: 2px 7px;
1472
+ letter-spacing: 0.01em;
1473
+ }
1474
+
1328
1475
  /* ─── Steps indicator ─── */
1329
1476
 
1330
1477
  .steps-header {
@@ -1490,13 +1637,13 @@ var overlayStyles = import_lit.css`
1490
1637
  }
1491
1638
 
1492
1639
  .form-error {
1493
- font-size: 12px;
1640
+ font-size: 13px;
1494
1641
  color: var(--dialog-form-error-color);
1495
1642
  min-height: 1em;
1496
1643
  }
1497
1644
 
1498
1645
  .form-hint {
1499
- font-size: 12px;
1646
+ font-size: 13px;
1500
1647
  color: var(--dialog-form-hint-color);
1501
1648
  }
1502
1649
 
@@ -1548,7 +1695,7 @@ var overlayStyles = import_lit.css`
1548
1695
  }
1549
1696
 
1550
1697
  .step-form-counter {
1551
- font-size: 12px;
1698
+ font-size: 13px;
1552
1699
  color: var(--dialog-form-hint-color);
1553
1700
  text-align: center;
1554
1701
  margin: 0 0 4px;
@@ -1581,7 +1728,9 @@ var overlayStyles = import_lit.css`
1581
1728
  border: 1px solid var(--dialog-form-input-border);
1582
1729
  background: transparent;
1583
1730
  color: var(--dialog-text-color);
1584
- transition: background-color 120ms ease, border-color 120ms ease;
1731
+ transition:
1732
+ background-color 120ms ease,
1733
+ border-color 120ms ease;
1585
1734
  }
1586
1735
 
1587
1736
  .btn-prev:hover {
@@ -1828,23 +1977,40 @@ var OverlayDialog = class extends import_lit2.LitElement {
1828
1977
  const total = items.length;
1829
1978
  const { start, end } = this._getQueueWindow(items);
1830
1979
  const visible = items.slice(start, end + 1);
1980
+ const finishedStatuses = /* @__PURE__ */ new Set(["done", "skipped", "error"]);
1981
+ const doneCount = items.filter((i) => finishedStatuses.has(i.status)).length;
1982
+ const pct = total > 0 ? Math.round(doneCount / total * 100) : 0;
1983
+ const topHidden = start;
1984
+ const bottomHidden = total - 1 - end;
1831
1985
  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(
1986
+ <div class="queue-layout">
1987
+ <div class="queue-progress-v">
1988
+ <div class="queue-progress-track-v">
1989
+ <div class="queue-progress-fill-v" style="height: ${pct}%"></div>
1990
+ </div>
1991
+ <span class="queue-progress-count-v">${doneCount}/${total}</span>
1992
+ </div>
1993
+ <ul class="task-list">
1994
+ ${topHidden > 0 ? import_lit2.html`<li class="queue-ellipsis" aria-hidden="true">
1995
+ <div class="queue-ellipsis-dots"><span></span><span></span><span></span></div>
1996
+ <span class="queue-ellipsis-badge">+${topHidden}</span>
1997
+ </li>` : import_lit2.nothing}
1998
+ ${(0, import_repeat.repeat)(
1999
+ visible,
2000
+ (item) => item.key,
1837
2001
  (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
- `
2002
+ <li class="task-item" data-status=${item.status}>
2003
+ <span class="task-icon">${this._renderTaskIcon(item.status)}</span>
2004
+ <span class="task-label" data-status=${item.status}>${item.label}</span>
2005
+ </li>
2006
+ `
1843
2007
  )}
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>
2008
+ ${bottomHidden > 0 ? import_lit2.html`<li class="queue-ellipsis" aria-hidden="true">
2009
+ <div class="queue-ellipsis-dots"><span></span><span></span><span></span></div>
2010
+ <span class="queue-ellipsis-badge">+${bottomHidden}</span>
2011
+ </li>` : import_lit2.nothing}
2012
+ </ul>
2013
+ </div>
1848
2014
  `;
1849
2015
  }
1850
2016
  _renderStepsHeader(items) {
@@ -2194,9 +2360,9 @@ __decorateClass([
2194
2360
  __decorateClass([
2195
2361
  (0, import_decorators.state)()
2196
2362
  ], OverlayDialog.prototype, "_isClosing", 2);
2197
- OverlayDialog = __decorateClass([
2198
- (0, import_decorators.customElement)("overlay-dialog")
2199
- ], OverlayDialog);
2363
+ if (!customElements.get("overlay-dialog")) {
2364
+ customElements.define("overlay-dialog", OverlayDialog);
2365
+ }
2200
2366
 
2201
2367
  // src/dialog.ts
2202
2368
  var _controller, _element, _DialogSingleton_instances, ensureElement_fn;
@@ -2546,7 +2712,7 @@ enforceMaxVisible_fn = function() {
2546
2712
  // src/toast/toast-container.ts
2547
2713
  var import_lit4 = require("lit");
2548
2714
  var import_decorators2 = require("lit/decorators.js");
2549
- var import_repeat = require("lit/directives/repeat.js");
2715
+ var import_repeat2 = require("lit/directives/repeat.js");
2550
2716
 
2551
2717
  // src/toast/styles.ts
2552
2718
  var import_lit3 = require("lit");
@@ -3184,7 +3350,7 @@ var ToastContainer = class extends import_lit4.LitElement {
3184
3350
  const s = this._state;
3185
3351
  return import_lit4.html`
3186
3352
  <div class="container" data-position=${s.position} role="region" aria-label="通知">
3187
- ${(0, import_repeat.repeat)(
3353
+ ${(0, import_repeat2.repeat)(
3188
3354
  s.items,
3189
3355
  (item) => item.id,
3190
3356
  (item) => this._renderToast(item)
@@ -3200,9 +3366,9 @@ __decorateClass([
3200
3366
  __decorateClass([
3201
3367
  (0, import_decorators2.state)()
3202
3368
  ], ToastContainer.prototype, "_state", 2);
3203
- ToastContainer = __decorateClass([
3204
- (0, import_decorators2.customElement)("toast-container")
3205
- ], ToastContainer);
3369
+ if (!customElements.get("toast-container")) {
3370
+ customElements.define("toast-container", ToastContainer);
3371
+ }
3206
3372
 
3207
3373
  // src/toast/toast.ts
3208
3374
  var _controller2, _element2, _ToastSingleton_instances, ensureElement_fn2;