@lemoncat7/dsh-partner 1.5.0 → 1.5.2-next.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/lib/client.d.ts.map +1 -1
- package/lib/client.js +499 -92
- package/lib/client.js.map +3 -3
- package/lib/ui/task-board-panel.d.ts.map +1 -1
- package/lib/ui/task-board-panel.js +61 -10
- package/lib/ui/task-board-panel.js.map +1 -1
- package/package.json +1 -1
package/lib/client.js
CHANGED
|
@@ -1162,14 +1162,12 @@ QRCodeSVG.displayName = "QRCodeSVG";
|
|
|
1162
1162
|
var client_default = `.dsh-partner-sidebar,
|
|
1163
1163
|
.dsh-partner-workspace {
|
|
1164
1164
|
color-scheme: light;
|
|
1165
|
-
--partner-canvas: var(--partner-solid-canvas);
|
|
1166
1165
|
--partner-surface: rgba(246, 247, 250, .17);
|
|
1167
1166
|
--partner-pane: rgba(255, 255, 255, .16);
|
|
1168
1167
|
--partner-raised: rgba(255, 255, 255, .38);
|
|
1169
1168
|
--partner-control: rgba(255, 255, 255, .27);
|
|
1170
1169
|
--partner-card-surface: rgba(255, 255, 255, .16);
|
|
1171
1170
|
--partner-card-highlight: rgba(255, 255, 255, .58);
|
|
1172
|
-
--partner-solid-canvas: #ebebeb;
|
|
1173
1171
|
--partner-solid-panel: #f4f4f4;
|
|
1174
1172
|
--partner-solid-raised: #fafafa;
|
|
1175
1173
|
--partner-solid-control: #ffffff;
|
|
@@ -1224,38 +1222,38 @@ var client_default = `.dsh-partner-sidebar,
|
|
|
1224
1222
|
|
|
1225
1223
|
body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
1226
1224
|
color-scheme: dark;
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
--partner-
|
|
1230
|
-
--partner-
|
|
1231
|
-
--partner-
|
|
1232
|
-
--partner-
|
|
1225
|
+
/* Owned cool-charcoal glass: sufficiently opaque to resist host tint while
|
|
1226
|
+
preserving depth, blur and edge light across the workspace. */
|
|
1227
|
+
--partner-surface: rgb(16 23 25 / 92%);
|
|
1228
|
+
--partner-pane: rgb(25 33 35 / 90%);
|
|
1229
|
+
--partner-raised: rgb(32 41 43 / 94%);
|
|
1230
|
+
--partner-control: rgb(39 50 53 / 92%);
|
|
1231
|
+
--partner-card-surface: rgb(32 41 43 / 90%);
|
|
1233
1232
|
--partner-card-highlight: rgba(255, 255, 255, .11);
|
|
1234
|
-
--partner-solid-
|
|
1235
|
-
--partner-solid-
|
|
1236
|
-
--partner-solid-
|
|
1237
|
-
--partner-solid-control: #3a3a3c;
|
|
1233
|
+
--partner-solid-panel: #182022;
|
|
1234
|
+
--partner-solid-raised: #20292b;
|
|
1235
|
+
--partner-solid-control: #273235;
|
|
1238
1236
|
--partner-dialog-veil: transparent;
|
|
1239
1237
|
--partner-card-shadow:
|
|
1240
1238
|
inset 0 1px 0 var(--partner-card-highlight),
|
|
1241
1239
|
inset 0 -1px 0 rgba(0, 0, 0, .28),
|
|
1242
1240
|
0 12px 30px rgba(0, 0, 0, .28),
|
|
1243
1241
|
0 2px 7px rgba(0, 0, 0, .2);
|
|
1244
|
-
--partner-text: #
|
|
1245
|
-
--partner-text-secondary: #
|
|
1246
|
-
--partner-text-tertiary: #
|
|
1247
|
-
--partner-accent: #
|
|
1248
|
-
--partner-accent-strong: #
|
|
1249
|
-
--partner-on-accent: #
|
|
1242
|
+
--partner-text: #e3eaeb;
|
|
1243
|
+
--partner-text-secondary: #bbc9cc;
|
|
1244
|
+
--partner-text-tertiary: #95a7ab;
|
|
1245
|
+
--partner-accent: #69b6ba;
|
|
1246
|
+
--partner-accent-strong: #8aced0;
|
|
1247
|
+
--partner-on-accent: #101819;
|
|
1250
1248
|
--partner-success: #30d158;
|
|
1251
1249
|
--partner-weixin: #30c96b;
|
|
1252
1250
|
--partner-warning: #ff9f0a;
|
|
1253
1251
|
--partner-danger: #ff453a;
|
|
1254
|
-
--partner-border:
|
|
1255
|
-
--partner-separator:
|
|
1256
|
-
--partner-hover:
|
|
1257
|
-
--partner-selected:
|
|
1258
|
-
--partner-focus-ring:
|
|
1252
|
+
--partner-border: rgb(184 204 205 / 11%);
|
|
1253
|
+
--partner-separator: rgb(184 204 205 / 8%);
|
|
1254
|
+
--partner-hover: rgb(105 182 186 / 9%);
|
|
1255
|
+
--partner-selected: rgb(105 182 186 / 14%);
|
|
1256
|
+
--partner-focus-ring: rgb(105 182 186 / 72%);
|
|
1259
1257
|
--partner-glass-clear: rgba(0, 0, 0, .1);
|
|
1260
1258
|
--partner-glass-regular: rgba(0, 0, 0, .16);
|
|
1261
1259
|
--partner-glass-thick: rgba(0, 0, 0, .26);
|
|
@@ -1468,28 +1466,56 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
|
1468
1466
|
.dsh-partner-feature-form > p.is-success { color: var(--partner-success); background: color-mix(in srgb, var(--partner-success) 7%, transparent); }
|
|
1469
1467
|
.dsh-partner-board-live { display: inline-flex; min-height: 36px; align-items: center; gap: 7px; padding: 0 10px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }
|
|
1470
1468
|
.dsh-partner-board-live > i { width: 7px; height: 7px; border-radius: 50%; background: var(--partner-success); box-shadow: 0 0 0 4px color-mix(in srgb, var(--partner-success) 10%, transparent); }
|
|
1471
|
-
.dsh-partner-board { display: grid; grid-template-columns:
|
|
1472
|
-
.dsh-partner-board
|
|
1469
|
+
.dsh-partner-board-tools { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(140px, 180px) auto; align-items: center; gap: 8px; }
|
|
1470
|
+
.dsh-partner-board-search { position: relative; display: flex; min-width: 0; align-items: center; }
|
|
1471
|
+
.dsh-partner-board-search > span:not(.sr-only) { position: absolute; z-index: 1; left: 11px; display: grid; place-items: center; color: var(--partner-text-tertiary); pointer-events: none; }
|
|
1472
|
+
.dsh-partner-board-search > input,
|
|
1473
|
+
.dsh-partner-board-assignee > select { width: 100%; min-height: 38px; border: 1px solid var(--partner-border); border-radius: 10px; color: var(--partner-text); background-color: var(--partner-control); font: var(--partner-font-body)/1.4 var(--partner-font-family); transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease; }
|
|
1474
|
+
.dsh-partner-board-search > input { padding: 8px 38px 8px 34px; }
|
|
1475
|
+
.dsh-partner-board-search > input::placeholder { color: var(--partner-text-tertiary); }
|
|
1476
|
+
.dsh-partner-board-search > input:hover,
|
|
1477
|
+
.dsh-partner-board-assignee > select:hover { border-color: color-mix(in srgb, var(--partner-text) 24%, var(--partner-border)); background-color: var(--partner-hover); }
|
|
1478
|
+
.dsh-partner-board-search > input:focus-visible,
|
|
1479
|
+
.dsh-partner-board-assignee > select:focus-visible { outline: 0; border-color: var(--partner-focus-ring); background-color: var(--partner-raised); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-focus-ring) 16%, transparent); }
|
|
1480
|
+
.dsh-partner-board-search > button { position: absolute; z-index: 1; right: 4px; display: grid; width: 30px; min-height: 30px; place-items: center; padding: 0; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; box-shadow: none; }
|
|
1481
|
+
.dsh-partner-board-search > button:hover { color: var(--partner-text); background: var(--partner-hover); }
|
|
1482
|
+
.dsh-partner-board-assignee > select { min-width: 0; padding: 8px 30px 8px 10px; }
|
|
1483
|
+
.dsh-partner-board-tools > small { justify-self: end; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; white-space: nowrap; }
|
|
1484
|
+
.dsh-partner-board-statuses { display: flex; align-items: center; flex-wrap: wrap; gap: 6px; padding-bottom: 2px; }
|
|
1485
|
+
.dsh-partner-board-statuses > button { display: inline-flex; min-height: 32px; align-items: center; gap: 7px; padding: 0 9px; border: 1px solid transparent; border-radius: 9px; color: var(--partner-text-tertiary); background: transparent; box-shadow: none; font: var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; transition: border-color 140ms ease, color 140ms ease, background-color 140ms ease; }
|
|
1486
|
+
.dsh-partner-board-statuses > button:hover { border-color: var(--partner-border); color: var(--partner-text); background: var(--partner-hover); }
|
|
1487
|
+
.dsh-partner-board-statuses > button.is-active { border-color: color-mix(in srgb, var(--partner-text) 18%, var(--partner-border)); color: var(--partner-text); background: var(--partner-selected); }
|
|
1488
|
+
.dsh-partner-board-statuses b { min-width: 18px; color: inherit; font-size: inherit; font-variant-numeric: tabular-nums; font-weight: 650; text-align: center; }
|
|
1489
|
+
.dsh-partner-board { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr)); align-items: start; gap: 10px; min-width: 0; }
|
|
1490
|
+
.dsh-partner-board[data-focused="true"] { grid-template-columns: minmax(0, 1fr); }
|
|
1491
|
+
.dsh-partner-board > section { display: grid; height: clamp(220px, 27vh, 280px); min-width: 0; grid-template-rows: auto minmax(0, 1fr); align-content: start; gap: 9px; padding: 11px 9px 9px 11px; border: 1px solid var(--partner-border); border-radius: 14px; background: color-mix(in srgb, var(--partner-raised) 66%, transparent); }
|
|
1492
|
+
.dsh-partner-board > section[data-empty="true"] { height: 132px; }
|
|
1493
|
+
.dsh-partner-board[data-focused="true"] > section { height: clamp(340px, 54vh, 560px); }
|
|
1494
|
+
.dsh-partner-board[data-focused="true"] > section[data-empty="true"] { height: 240px; }
|
|
1473
1495
|
.dsh-partner-board > section > header { display: flex; min-height: 36px; align-items: center; justify-content: space-between; padding: 0 3px; }
|
|
1474
1496
|
.dsh-partner-board > section > header strong { font-size: var(--partner-font-label); font-weight: 620; }
|
|
1475
1497
|
.dsh-partner-board > section > header b { display: grid; min-width: 22px; height: 22px; place-items: center; padding: 0 5px; border-radius: 7px; color: var(--partner-text-tertiary); background: var(--partner-selected); font-size: var(--partner-font-caption); }
|
|
1476
|
-
.dsh-partner-board
|
|
1477
|
-
.dsh-partner-board > section > p { margin:
|
|
1478
|
-
.dsh-partner-task-card { position: relative; display: grid; overflow: hidden; border: 1px solid var(--partner-separator); border-radius: 11px; background: var(--partner-raised); box-shadow: var(--partner-shadow-sm); transition: border-color .16s ease, box-shadow .18s ease, transform .16s var(--partner-ease-out); }
|
|
1498
|
+
.dsh-partner-board-column-list { display: grid; min-height: 0; grid-auto-rows: max-content; align-content: start; gap: 7px; overflow-y: auto; padding: 1px 3px 6px 0; overscroll-behavior: contain; scrollbar-gutter: stable; scrollbar-width: thin; }
|
|
1499
|
+
.dsh-partner-board > section > p { align-self: center; margin: 0 0 22px; color: var(--partner-text-tertiary); font-size: var(--partner-font-body); text-align: center; }
|
|
1500
|
+
.dsh-partner-task-card { position: relative; display: grid; min-height: 82px; overflow: hidden; border: 1px solid var(--partner-separator); border-radius: 11px; background: var(--partner-raised); box-shadow: var(--partner-shadow-sm); transition: border-color .16s ease, box-shadow .18s ease, transform .16s var(--partner-ease-out); }
|
|
1479
1501
|
.dsh-partner-task-card:hover { border-color: color-mix(in srgb, var(--partner-text) 22%, var(--partner-border)); box-shadow: var(--partner-shadow-md); transform: translateY(-1px); }
|
|
1480
1502
|
.dsh-partner-task-card:focus-within { border-color: var(--partner-focus-ring); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-focus-ring) 18%, transparent), var(--partner-shadow-md); }
|
|
1481
1503
|
.dsh-partner-task-card[data-blocked="true"] { border-left-color: color-mix(in srgb, var(--partner-warning) 55%, var(--partner-border)); }
|
|
1482
|
-
.dsh-partner-task-summary { display: grid !important; min-height:
|
|
1504
|
+
.dsh-partner-task-summary { display: grid !important; min-height: 82px !important; grid-template-columns: minmax(0, 1fr) 16px; align-items: center !important; gap: 8px !important; padding: 10px 10px 10px 11px !important; border: 0 !important; border-radius: 0 !important; appearance: none; color: var(--partner-text) !important; background: transparent !important; box-shadow: none !important; font-family: var(--partner-font-family); text-align: left; cursor: pointer; }
|
|
1483
1505
|
.dsh-partner-task-summary:hover { background: var(--partner-hover) !important; }
|
|
1484
1506
|
.dsh-partner-task-summary:focus-visible { outline: 0; }
|
|
1485
|
-
.dsh-partner-task-summary > span { display: grid; min-width: 0; gap:
|
|
1486
|
-
.dsh-partner-task-
|
|
1487
|
-
.dsh-partner-task-
|
|
1507
|
+
.dsh-partner-task-summary > span { display: grid; min-width: 0; gap: 4px; }
|
|
1508
|
+
.dsh-partner-task-card-title { display: flex; min-width: 0; align-items: flex-start; justify-content: space-between; gap: 8px; }
|
|
1509
|
+
.dsh-partner-task-card-title > strong { display: -webkit-box; min-width: 0; overflow: hidden; color: var(--partner-text); font-size: var(--partner-font-body); font-weight: 620; line-height: 1.38; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
|
|
1510
|
+
.dsh-partner-task-card-title > em { flex: none; margin-top: 1px; padding: 2px 5px; border: 1px solid var(--partner-separator); border-radius: 6px; color: var(--partner-text-tertiary); background: var(--partner-control); font-size: 10px; font-style: normal; font-weight: 620; line-height: 1.25; }
|
|
1511
|
+
.dsh-partner-task-card[data-priority="high"] .dsh-partner-task-card-title > em { border-color: color-mix(in srgb, var(--partner-warning) 35%, var(--partner-separator)); color: var(--partner-warning); background: color-mix(in srgb, var(--partner-warning) 7%, var(--partner-control)); }
|
|
1512
|
+
.dsh-partner-task-card[data-priority="urgent"] .dsh-partner-task-card-title > em { border-color: color-mix(in srgb, var(--partner-danger) 34%, var(--partner-separator)); color: var(--partner-danger); background: color-mix(in srgb, var(--partner-danger) 7%, var(--partner-control)); }
|
|
1513
|
+
.dsh-partner-task-card-owner { overflow: hidden; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); text-overflow: ellipsis; white-space: nowrap; }
|
|
1514
|
+
.dsh-partner-task-relations { display: flex; min-width: 0; align-items: center; flex-wrap: wrap; gap: 4px; }
|
|
1515
|
+
.dsh-partner-task-relations > small { padding: 2px 6px; border-radius: 6px; color: var(--partner-text-secondary); background: var(--partner-selected); font-size: 10px; font-variant-numeric: tabular-nums; line-height: 1.3; }
|
|
1516
|
+
.dsh-partner-task-relations > small[data-blocked="true"] { color: var(--partner-warning); background: color-mix(in srgb, var(--partner-warning) 8%, var(--partner-selected)); }
|
|
1488
1517
|
.dsh-partner-task-summary > svg { color: var(--partner-text-tertiary); transition: transform .16s var(--partner-ease-out), color .16s ease; }
|
|
1489
1518
|
.dsh-partner-task-summary:hover > svg { color: var(--partner-text); transform: translateX(2px); }
|
|
1490
|
-
.dsh-partner-priority { position: absolute; top: 17px; right: 12px; width: 6px; height: 6px; border-radius: 50%; background: var(--partner-text-tertiary); }
|
|
1491
|
-
.dsh-partner-priority.is-high { background: var(--partner-warning); }
|
|
1492
|
-
.dsh-partner-priority.is-urgent { background: var(--partner-danger); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-danger) 12%, transparent); }
|
|
1493
1519
|
.dsh-partner-task-detail { display: grid; gap: 13px; }
|
|
1494
1520
|
.dsh-partner-task-description { display: grid; gap: 6px; padding: 12px; border: 1px solid var(--partner-separator); border-radius: 10px; background: color-mix(in srgb, var(--partner-raised) 78%, transparent); }
|
|
1495
1521
|
.dsh-partner-task-description strong { font-size: var(--partner-font-body); font-weight: 620; }
|
|
@@ -1587,6 +1613,8 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
|
1587
1613
|
@media (max-width: 820px) {
|
|
1588
1614
|
.dsh-partner-feature-hero { align-items: start; flex-direction: column; gap: 12px; }
|
|
1589
1615
|
.dsh-partner-feature-hero > div { width: 100%; flex-wrap: wrap; }
|
|
1616
|
+
.dsh-partner-board-tools { grid-template-columns: minmax(0, 1fr) minmax(130px, 168px); }
|
|
1617
|
+
.dsh-partner-board-tools > small { grid-column: 1 / -1; justify-self: start; }
|
|
1590
1618
|
.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form { grid-template-columns: 1fr 1fr; }
|
|
1591
1619
|
.dsh-partner-schedule-list > article { grid-template-columns: minmax(0, 1fr) auto 30px; }
|
|
1592
1620
|
.dsh-partner-schedule-list > article > button:not(.is-icon):not(.dsh-partner-feature-switch) { grid-column: 1 / -1; }
|
|
@@ -1605,6 +1633,12 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
|
1605
1633
|
.dsh-partner-skill-installed > article > .is-icon { grid-column: 3; }
|
|
1606
1634
|
.dsh-partner-feature-block > header { align-items: flex-start; flex-direction: column; }
|
|
1607
1635
|
.dsh-partner-feature-block > header > div { width: 100%; flex-wrap: wrap; justify-content: flex-start; }
|
|
1636
|
+
.dsh-partner-board-tools { grid-template-columns: 1fr; }
|
|
1637
|
+
.dsh-partner-board-assignee, .dsh-partner-board-tools > small { grid-column: 1; }
|
|
1638
|
+
.dsh-partner-board-assignee > select { min-height: 42px; }
|
|
1639
|
+
.dsh-partner-board-statuses { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
|
1640
|
+
.dsh-partner-board-statuses > button { min-width: 0; justify-content: center; padding-inline: 6px; }
|
|
1641
|
+
.dsh-partner-board > section, .dsh-partner-board[data-focused="true"] > section { height: min(430px, 58vh); }
|
|
1608
1642
|
.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form { grid-template-columns: 1fr; padding: 14px; }
|
|
1609
1643
|
:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) > label { grid-column: 1 !important; }
|
|
1610
1644
|
.dsh-partner-task-form-dependencies > div { grid-template-columns: 1fr; }
|
|
@@ -1641,7 +1675,7 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
|
1641
1675
|
.dsh-partner-avatar { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border: 1px solid var(--partner-border); border-radius: 12px; color: var(--partner-text); background: linear-gradient(145deg, var(--partner-glass-thick), var(--partner-control)); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-sm); font-size: var(--partner-font-label); font-weight: 650; }
|
|
1642
1676
|
.dsh-partner-avatar.is-small { width: 25px; height: 25px; border-radius: 8px; font-size: var(--partner-font-caption); }
|
|
1643
1677
|
|
|
1644
|
-
.dsh-partner-workspace { position: relative; isolation: isolate; display: grid; grid-template-rows: auto minmax(0, 1fr); width: 100%; height: 100%; min-width: 0; overflow: hidden; background:
|
|
1678
|
+
.dsh-partner-workspace { position: relative; isolation: isolate; display: grid; grid-template-rows: auto minmax(0, 1fr); width: 100%; height: 100%; min-width: 0; overflow: hidden; background: transparent; }
|
|
1645
1679
|
.dsh-partner-glass-surface { position: relative; isolation: isolate; transition: opacity 180ms ease-out, border-color 180ms ease, box-shadow 220ms var(--partner-ease-out), transform 220ms var(--partner-ease-out); }
|
|
1646
1680
|
.dsh-partner-glass-surface.is-svg { -webkit-backdrop-filter: var(--partner-glass-filter-id) saturate(var(--partner-glass-saturation)); backdrop-filter: var(--partner-glass-filter-id) saturate(var(--partner-glass-saturation)); }
|
|
1647
1681
|
.dsh-partner-glass-surface.is-fallback { -webkit-backdrop-filter: var(--partner-glass-filter); backdrop-filter: var(--partner-glass-filter); }
|
|
@@ -2448,7 +2482,6 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
|
2448
2482
|
|
|
2449
2483
|
@media (prefers-reduced-transparency: reduce) {
|
|
2450
2484
|
:is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
2451
|
-
--partner-canvas: var(--partner-solid-canvas);
|
|
2452
2485
|
--partner-surface: var(--partner-solid-panel);
|
|
2453
2486
|
--partner-pane: var(--partner-solid-panel);
|
|
2454
2487
|
--partner-raised: var(--partner-solid-raised);
|
|
@@ -2474,7 +2507,6 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
|
2474
2507
|
|
|
2475
2508
|
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
|
|
2476
2509
|
:is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
2477
|
-
--partner-canvas: var(--partner-solid-canvas);
|
|
2478
2510
|
--partner-surface: var(--partner-solid-panel);
|
|
2479
2511
|
--partner-pane: var(--partner-solid-panel);
|
|
2480
2512
|
--partner-raised: var(--partner-solid-raised);
|
|
@@ -2573,6 +2605,262 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
|
|
|
2573
2605
|
// src/ui/workspace-ui.css
|
|
2574
2606
|
var workspace_ui_default = '.dsh-partner-feature-hero-actions { display: flex; align-items: center; justify-content: flex-end; flex-wrap: wrap; gap: 8px; }\n.dsh-partner-feature-page { gap: 20px; }\n.dsh-partner-feature-hero { min-height: 92px; padding-bottom: 18px; }\n.dsh-partner-feature-hero p { max-width: 62ch; text-wrap: pretty; }\n.dsh-partner-feature-block { gap: 16px; padding: 20px; border-radius: 18px; box-shadow: inset 0 1px 0 var(--partner-card-highlight), 0 5px 16px color-mix(in srgb, var(--partner-text) 4%, transparent); }\n.dsh-partner-feature-block > header { min-height: 40px; }\n.dsh-partner-feature-block > header strong { font-size: var(--partner-font-label); letter-spacing: -.01em; }\n.dsh-partner-feature-block > header small { margin-top: 1px; }\n\n:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) :where(input, textarea, select) { outline: 0; }\n.dsh-partner-workspace select:not([multiple]) {\n appearance: none;\n padding-right: 32px;\n border-color: var(--partner-border);\n border-radius: 9px;\n color: var(--partner-text);\n background-color: var(--partner-control);\n background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%);\n background-position: calc(100% - 15px) calc(50% - 1px), calc(100% - 11px) calc(50% - 1px);\n background-repeat: no-repeat;\n background-size: 4px 4px, 4px 4px;\n box-shadow: inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 54%, transparent), inset 0 -1px 0 var(--partner-glass-rim-shadow);\n font-family: var(--partner-font-family);\n font-size: var(--partner-font-body);\n font-weight: 520;\n cursor: pointer;\n transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease;\n}\n.dsh-partner-workspace select:not([multiple]):hover:not(:disabled) { border-color: color-mix(in srgb, var(--partner-text) 24%, var(--partner-border)); background-color: var(--partner-hover); }\n.dsh-partner-workspace select:not([multiple]):focus-visible { border-color: var(--partner-focus-ring); background-color: var(--partner-raised); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-focus-ring) 16%, transparent), inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 66%, transparent); }\n.dsh-partner-workspace select:not([multiple]):disabled { cursor: not-allowed; }\n.dsh-partner-workspace select option { color: var(--partner-text); background: var(--partner-solid-control); font: inherit; }\n:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) > footer { align-items: center; margin-top: 4px; padding-top: 16px; border-top: 1px solid var(--partner-separator); }\n.dsh-partner-form-footer-spacer { flex: 1; }\n:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) > footer .is-primary { color: var(--partner-on-accent); border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }\n:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) > footer .is-primary:hover { color: var(--partner-on-accent); border-color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent-strong) 88%, #000); }\n:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) > .dsh-partner-workspace-notice { grid-column: 1 / -1; margin: 0; }\n.dsh-partner-feature-page button:disabled { cursor: not-allowed; opacity: .48; }\n.dsh-partner-identity-danger > div { display: flex; align-items: center; justify-content: flex-end; gap: 7px; }\n.dsh-partner-identity-danger[data-confirming="true"] { margin-inline: -12px; padding: 16px 12px 0; border-top-color: color-mix(in srgb, var(--partner-danger) 30%, var(--partner-border)); background: color-mix(in srgb, var(--partner-danger) 4%, transparent); }\n.dsh-partner-identity-danger button.is-secondary { border-color: var(--partner-border); color: var(--partner-text-secondary); background: var(--partner-control); }\n.dsh-partner-identity-danger button.is-danger { color: var(--partner-on-accent); border-color: var(--partner-danger); background: var(--partner-danger); }\n.dsh-partner-profile-entries article > header button.is-danger { color: var(--partner-danger); background: color-mix(in srgb, var(--partner-danger) 8%, transparent); }\n\n.dsh-partner-skill-installed > article,\n.dsh-partner-market-grid > article,\n.dsh-partner-schedule-list > article { transition: border-color 150ms ease, background-color 150ms ease, transform 180ms var(--partner-ease-out); }\n.dsh-partner-skill-installed > article:hover,\n.dsh-partner-schedule-list > article:hover { border-color: color-mix(in srgb, var(--partner-text) 20%, var(--partner-border)); background: color-mix(in srgb, var(--partner-hover) 60%, var(--partner-raised)); transform: translate3d(0, -1px, 0); }\n.dsh-partner-schedule-meta { display: flex !important; align-items: center; flex-wrap: wrap; gap: 5px 10px !important; margin-top: 2px; }\n.dsh-partner-schedule-meta > em { position: relative; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-style: normal; font-variant-numeric: tabular-nums; }\n.dsh-partner-schedule-meta > em + em::before { position: absolute; top: 50%; left: -6px; width: 2px; height: 2px; border-radius: 50%; background: var(--partner-text-tertiary); content: ""; }\n.dsh-partner-run-list > article { border-radius: 9px; transition: background-color 140ms ease; }\n.dsh-partner-run-list > article:hover { background: var(--partner-hover); }\n.dsh-partner-board > section { border-radius: 16px; }\n.dsh-partner-task-card { box-shadow: none; }\n.dsh-partner-task-card[data-expanded="true"] { box-shadow: 0 6px 18px color-mix(in srgb, var(--partner-text) 6%, transparent); }\n\n@media (hover: hover) {\n .dsh-partner-skill-installed .is-icon,\n .dsh-partner-schedule-list .is-icon { opacity: .34; transition: opacity 140ms ease, color 140ms ease, background-color 140ms ease; }\n .dsh-partner-skill-installed > article:hover .is-icon,\n .dsh-partner-schedule-list > article:hover .is-icon,\n .dsh-partner-skill-installed .is-icon:focus-visible,\n .dsh-partner-schedule-list .is-icon:focus-visible { opacity: 1; }\n}\n\n.dsh-partner-workspace-dialog-layer { position: absolute; z-index: 12; inset: 0; display: flex; align-items: center; justify-content: center; padding: clamp(16px, 3vw, 32px); background: var(--partner-dialog-veil); }\n.dsh-partner-workspace-dialog { position: relative; inset: auto; display: grid; grid-template-rows: auto minmax(0, 1fr); width: min(560px, 100%); max-width: none; height: auto; max-height: min(680px, 100%); margin: 0; padding: 0; overflow: hidden; border: 1px solid color-mix(in srgb, var(--partner-text) 18%, var(--partner-border)); border-radius: 16px; color: var(--partner-text); background: var(--partner-solid-panel); box-shadow: 0 22px 58px color-mix(in srgb, #000 18%, transparent), 0 4px 14px color-mix(in srgb, #000 8%, transparent), inset 0 1px 0 var(--partner-card-highlight); animation: dsh-partner-dialog-enter 200ms var(--partner-ease-out) both; }\n.dsh-partner-workspace-dialog.is-wide { width: min(680px, 100%); max-height: min(720px, 100%); }\n.dsh-partner-workspace-dialog > header { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 20px; padding: 22px 22px 18px; border-bottom: 1px solid var(--partner-separator); background: var(--partner-solid-raised); }\n.dsh-partner-workspace-dialog > header > span { display: grid; gap: 5px; min-width: 0; }\n.dsh-partner-workspace-dialog > header small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 680; letter-spacing: .09em; }\n.dsh-partner-workspace-dialog > header strong { font-size: var(--partner-font-title); line-height: 1.25; font-weight: 660; letter-spacing: -.025em; text-wrap: balance; }\n.dsh-partner-workspace-dialog > header p { max-width: 58ch; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.55; text-wrap: pretty; }\n.dsh-partner-workspace-dialog > header button { display: grid; place-items: center; width: 32px; min-height: 32px; padding: 0; border: 1px solid transparent; border-radius: 9px; color: var(--partner-text-tertiary); background: transparent; box-shadow: none; cursor: pointer; transition: color 140ms ease, border-color 140ms ease, background-color 140ms ease, transform 140ms var(--partner-ease-out); }\n.dsh-partner-workspace-dialog > header button:hover { border-color: var(--partner-border); color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-workspace-dialog > header button:active { transform: scale(.94); }\n.dsh-partner-workspace-dialog-body { min-width: 0; min-height: 0; overflow: auto; padding: 20px 22px 24px; overscroll-behavior: contain; scrollbar-gutter: stable; }\n.dsh-partner-workspace-dialog-body > :is(form, .dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) { margin: 0; padding: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; }\n.dsh-partner-workspace-dialog-body > :is(form, .dsh-partner-task-detail) > footer:last-child { position: sticky; z-index: 2; bottom: -24px; margin: 4px -22px -24px; padding: 14px 22px; border-top: 1px solid var(--partner-separator); background: var(--partner-solid-raised); box-shadow: 0 -10px 24px color-mix(in srgb, #000 5%, transparent); }\n\n.dsh-partner-workspace-notice { display: grid; grid-template-columns: 7px minmax(0, 1fr); align-items: start; gap: 10px; margin: 0 0 14px; padding: 11px 13px; border: 1px solid var(--partner-border); border-radius: 10px; color: var(--partner-text-secondary); background: var(--partner-control); font-size: var(--partner-font-body); line-height: 1.5; }\n.dsh-partner-workspace-notice > i { width: 7px; height: 7px; margin-top: .42em; border-radius: 50%; background: var(--partner-text-tertiary); }\n.dsh-partner-workspace-notice.is-error { border-color: color-mix(in srgb, var(--partner-danger) 30%, var(--partner-border)); color: var(--partner-danger); }\n.dsh-partner-workspace-notice.is-error > i { background: var(--partner-danger); }\n.dsh-partner-workspace-notice.is-warning > i { background: var(--partner-warning); }\n.dsh-partner-workspace-notice.is-success > i { background: var(--partner-success); }\n\n.dsh-partner-collection-empty { display: grid; justify-items: center; padding: 38px 24px 42px; color: var(--partner-text-secondary); text-align: center; }\n.dsh-partner-collection-empty > span { display: grid; place-items: center; width: 42px; height: 42px; margin-bottom: 12px; border: 1px solid var(--partner-border); border-radius: 13px; color: var(--partner-text-tertiary); background: var(--partner-control); }\n.dsh-partner-collection-empty > strong { color: var(--partner-text); font-size: var(--partner-font-label); font-weight: 620; }\n.dsh-partner-collection-empty > p { max-width: 46ch; margin: 6px 0 14px; color: var(--partner-text-tertiary); font-size: var(--partner-font-body); line-height: 1.55; text-wrap: pretty; }\n.dsh-partner-collection-empty > button { margin-top: 14px; }\n\n.dsh-partner-collection-skeleton { display: grid; gap: 8px; padding: 6px 0; }\n.dsh-partner-collection-skeleton > i { display: block; height: 68px; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 12px; background: linear-gradient(100deg, var(--partner-control) 20%, var(--partner-hover) 38%, var(--partner-control) 56%); background-size: 220% 100%; animation: dsh-partner-skeleton 1.4s ease-in-out infinite; }\n\n.dsh-partner-count-label { display: inline-flex; align-items: baseline; gap: 5px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }\n.dsh-partner-count-label > b { color: var(--partner-text); font-size: var(--partner-font-label); font-weight: 650; }\n\n@keyframes dsh-partner-dialog-enter { from { opacity: 0; transform: translate3d(0, 10px, 0) scale(.985); } to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); } }\n@keyframes dsh-partner-skeleton { 0% { background-position: 120% 0; } 100% { background-position: -120% 0; } }\n\n@media (max-width: 760px) {\n .dsh-partner-workspace-dialog-layer { align-items: stretch; padding: 0; }\n .dsh-partner-workspace-dialog, .dsh-partner-workspace-dialog.is-wide { width: 100%; height: 100%; max-height: none; border-width: 0; border-radius: 0; }\n .dsh-partner-workspace-dialog > header { padding: 18px 18px 15px; }\n .dsh-partner-workspace-dialog-body { padding: 18px 18px 26px; }\n .dsh-partner-workspace-dialog-body > :is(form, .dsh-partner-task-detail) > footer:last-child { bottom: -26px; margin: 4px -18px -26px; padding: 13px 18px max(13px, env(safe-area-inset-bottom)); }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .dsh-partner-workspace-dialog, .dsh-partner-collection-skeleton > i { animation: none; }\n}\n';
|
|
2575
2607
|
|
|
2608
|
+
// src/ui/responsive-ui.css
|
|
2609
|
+
var responsive_ui_default = `/* Mobile composition lives separately from the desktop visual system so each
|
|
2610
|
+
layout can evolve without selector-specificity patches. */
|
|
2611
|
+
.dsh-partner-mobile-controls { display: none; }
|
|
2612
|
+
|
|
2613
|
+
@media (max-width: 760px) {
|
|
2614
|
+
.dsh-partner-workspace {
|
|
2615
|
+
min-height: 0;
|
|
2616
|
+
height: 100%;
|
|
2617
|
+
max-height: 100dvh;
|
|
2618
|
+
overflow: hidden;
|
|
2619
|
+
font-size: 14px;
|
|
2620
|
+
}
|
|
2621
|
+
|
|
2622
|
+
.dsh-partner-topbar {
|
|
2623
|
+
min-width: 0;
|
|
2624
|
+
margin: max(6px, env(safe-area-inset-top)) 6px 0;
|
|
2625
|
+
padding: 7px 8px 8px;
|
|
2626
|
+
border-radius: 14px 14px 10px 10px;
|
|
2627
|
+
}
|
|
2628
|
+
|
|
2629
|
+
.dsh-partner-topbar > .dsh-partner-topbar-brand {
|
|
2630
|
+
display: flex;
|
|
2631
|
+
min-width: 0;
|
|
2632
|
+
min-height: 44px;
|
|
2633
|
+
gap: 9px;
|
|
2634
|
+
}
|
|
2635
|
+
|
|
2636
|
+
.dsh-partner-topbar-brand > span:last-child { min-width: 0; }
|
|
2637
|
+
.dsh-partner-topbar-brand strong,
|
|
2638
|
+
.dsh-partner-topbar-brand small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2639
|
+
.dsh-partner-topbar [data-xiaohei-workspace-close] { width: 44px; height: 44px; }
|
|
2640
|
+
|
|
2641
|
+
.dsh-partner-topbar > .dsh-partner-mobile-controls {
|
|
2642
|
+
display: grid;
|
|
2643
|
+
width: 100%;
|
|
2644
|
+
gap: 6px;
|
|
2645
|
+
}
|
|
2646
|
+
|
|
2647
|
+
.dsh-partner-mobile-companion-row { display: grid; min-width: 0; grid-template-columns: minmax(0, 1fr) 44px; gap: 6px; }
|
|
2648
|
+
.dsh-partner-mobile-companion-picker { position: relative; display: block; min-width: 0; }
|
|
2649
|
+
.dsh-partner-mobile-companion-picker::after {
|
|
2650
|
+
position: absolute;
|
|
2651
|
+
top: 50%;
|
|
2652
|
+
right: 16px;
|
|
2653
|
+
width: 7px;
|
|
2654
|
+
height: 7px;
|
|
2655
|
+
border-right: 1.5px solid currentColor;
|
|
2656
|
+
border-bottom: 1.5px solid currentColor;
|
|
2657
|
+
color: var(--partner-text-tertiary);
|
|
2658
|
+
content: '';
|
|
2659
|
+
transform: translateY(-70%) rotate(45deg);
|
|
2660
|
+
pointer-events: none;
|
|
2661
|
+
}
|
|
2662
|
+
.dsh-partner-mobile-companion-picker select {
|
|
2663
|
+
width: 100%;
|
|
2664
|
+
min-width: 0;
|
|
2665
|
+
min-height: 44px;
|
|
2666
|
+
padding: 0 38px 0 13px;
|
|
2667
|
+
overflow: hidden;
|
|
2668
|
+
border: 1px solid var(--partner-border);
|
|
2669
|
+
border-radius: 10px;
|
|
2670
|
+
color: var(--partner-text);
|
|
2671
|
+
background: var(--partner-control);
|
|
2672
|
+
background-image: none;
|
|
2673
|
+
box-shadow: inset 0 1px 0 var(--partner-glass-highlight);
|
|
2674
|
+
font: 560 16px/1.25 var(--partner-font-family);
|
|
2675
|
+
text-overflow: ellipsis;
|
|
2676
|
+
}
|
|
2677
|
+
.dsh-partner-mobile-create {
|
|
2678
|
+
display: grid;
|
|
2679
|
+
width: 44px;
|
|
2680
|
+
min-height: 44px;
|
|
2681
|
+
place-items: center;
|
|
2682
|
+
padding: 0;
|
|
2683
|
+
border: 1px solid var(--partner-border);
|
|
2684
|
+
border-radius: 10px;
|
|
2685
|
+
color: var(--partner-text-secondary);
|
|
2686
|
+
background: var(--partner-control);
|
|
2687
|
+
box-shadow: inset 0 1px 0 var(--partner-glass-highlight);
|
|
2688
|
+
}
|
|
2689
|
+
|
|
2690
|
+
.dsh-partner-mobile-workspace-nav { gap: 6px; }
|
|
2691
|
+
.dsh-partner-mobile-workspace-nav button {
|
|
2692
|
+
min-height: 44px;
|
|
2693
|
+
padding: 0 9px;
|
|
2694
|
+
border-radius: 10px;
|
|
2695
|
+
font-size: 13px;
|
|
2696
|
+
touch-action: manipulation;
|
|
2697
|
+
}
|
|
2698
|
+
|
|
2699
|
+
.dsh-partner-grid { min-width: 0; padding: 6px 6px max(6px, env(safe-area-inset-bottom)); }
|
|
2700
|
+
.dsh-partner-stage { min-width: 0; border-radius: 13px; }
|
|
2701
|
+
.dsh-partner-stage-scroll { padding: 18px 14px max(36px, calc(20px + env(safe-area-inset-bottom))); }
|
|
2702
|
+
|
|
2703
|
+
.dsh-partner-identity { min-width: 0; min-height: 76px; padding: 13px 14px 9px; }
|
|
2704
|
+
.dsh-partner-identity > span:nth-child(2) { overflow: hidden; }
|
|
2705
|
+
.dsh-partner-identity h1 { font-size: 20px; }
|
|
2706
|
+
.dsh-partner-identity .dsh-partner-status { max-width: 112px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2707
|
+
.dsh-partner-tabs { min-height: 45px; margin-inline: 8px; gap: 0; scrollbar-width: none; }
|
|
2708
|
+
.dsh-partner-tabs::-webkit-scrollbar { display: none; }
|
|
2709
|
+
.dsh-partner-tabs button { min-height: 44px; padding-inline: 11px; touch-action: manipulation; }
|
|
2710
|
+
|
|
2711
|
+
.dsh-partner-feature-page { width: 100%; gap: 14px; padding: 18px 12px max(34px, calc(18px + env(safe-area-inset-bottom))); }
|
|
2712
|
+
.dsh-partner-feature-hero { min-height: 0; gap: 13px; padding: 0 2px 14px 12px; }
|
|
2713
|
+
.dsh-partner-feature-hero h2 { font-size: 23px; }
|
|
2714
|
+
.dsh-partner-feature-hero p { font-size: 14px; line-height: 1.55; }
|
|
2715
|
+
.dsh-partner-feature-hero > div { align-items: center; }
|
|
2716
|
+
.dsh-partner-feature-block,
|
|
2717
|
+
.dsh-partner-capability-detail { gap: 13px; padding: 14px; border-radius: 14px; }
|
|
2718
|
+
|
|
2719
|
+
.dsh-partner-workspace :where(input:not([type="checkbox"]):not([type="radio"]), textarea, select) { font-size: 16px; }
|
|
2720
|
+
.dsh-partner-field :where(input, select),
|
|
2721
|
+
:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) :where(input, select),
|
|
2722
|
+
.dsh-partner-board-search > input,
|
|
2723
|
+
.dsh-partner-board-assignee > select,
|
|
2724
|
+
.dsh-partner-task-detail select { min-height: 44px; height: auto; }
|
|
2725
|
+
.dsh-partner-field textarea,
|
|
2726
|
+
:is(.dsh-partner-feature-form, .dsh-partner-task-form, .dsh-partner-schedule-form) textarea { min-height: 96px; }
|
|
2727
|
+
|
|
2728
|
+
.dsh-partner-workspace :where(button:not(.dsh-partner-feature-switch)) { touch-action: manipulation; }
|
|
2729
|
+
.dsh-partner-feature-page :where(button:not(.dsh-partner-feature-switch)),
|
|
2730
|
+
.dsh-partner-form-actions > button,
|
|
2731
|
+
.dsh-partner-state > button,
|
|
2732
|
+
.dsh-partner-weixin-connect > button,
|
|
2733
|
+
.dsh-partner-home-channel-actions button,
|
|
2734
|
+
.dsh-partner-home-details header button,
|
|
2735
|
+
.dsh-partner-identity-danger button,
|
|
2736
|
+
.dsh-partner-library-header nav button,
|
|
2737
|
+
.dsh-partner-graph-filters button,
|
|
2738
|
+
.dsh-partner-graph-pair > section button { min-height: 44px; }
|
|
2739
|
+
.dsh-partner-feature-page .is-icon { width: 44px; min-width: 44px; min-height: 44px; }
|
|
2740
|
+
.dsh-partner-check { min-height: 44px; }
|
|
2741
|
+
.dsh-partner-feature-switch,
|
|
2742
|
+
.dsh-partner-feature-switch[data-on="true"] {
|
|
2743
|
+
width: 44px;
|
|
2744
|
+
height: 44px;
|
|
2745
|
+
min-height: 44px !important;
|
|
2746
|
+
border-color: transparent !important;
|
|
2747
|
+
background: transparent !important;
|
|
2748
|
+
}
|
|
2749
|
+
.dsh-partner-feature-switch::before {
|
|
2750
|
+
position: absolute;
|
|
2751
|
+
top: 11px;
|
|
2752
|
+
left: 3px;
|
|
2753
|
+
width: 38px;
|
|
2754
|
+
height: 22px;
|
|
2755
|
+
border: 1px solid var(--partner-border);
|
|
2756
|
+
border-radius: 999px;
|
|
2757
|
+
background: color-mix(in srgb, var(--partner-text) 9%, transparent);
|
|
2758
|
+
content: '';
|
|
2759
|
+
}
|
|
2760
|
+
.dsh-partner-feature-switch[data-on="true"]::before { border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }
|
|
2761
|
+
.dsh-partner-feature-switch i { top: 15px; left: 6px; }
|
|
2762
|
+
|
|
2763
|
+
.dsh-partner-home-heading { margin-bottom: 16px; }
|
|
2764
|
+
.dsh-partner-home-channel { min-height: 0; border-radius: 16px; }
|
|
2765
|
+
.dsh-partner-home-route { min-height: 116px; padding: 20px; }
|
|
2766
|
+
.dsh-partner-home-channel-copy { padding: 12px 18px 20px; }
|
|
2767
|
+
.dsh-partner-home-channel-actions { align-items: stretch; flex-direction: column; gap: 8px; width: 100%; }
|
|
2768
|
+
.dsh-partner-home-channel-actions button { width: 100%; }
|
|
2769
|
+
.dsh-partner-home-details { gap: 10px; margin-top: 12px; }
|
|
2770
|
+
.dsh-partner-home-details > section { padding: 16px 14px 17px; }
|
|
2771
|
+
.dsh-partner-home-details header { grid-template-columns: 34px minmax(0, 1fr) auto; }
|
|
2772
|
+
.dsh-partner-home-profile blockquote,
|
|
2773
|
+
.dsh-partner-home-capability-list,
|
|
2774
|
+
.dsh-partner-home-capability-list small,
|
|
2775
|
+
.dsh-partner-home-continuity > p { margin-left: 0; }
|
|
2776
|
+
|
|
2777
|
+
.dsh-partner-form-actions,
|
|
2778
|
+
.dsh-partner-identity-danger { align-items: stretch; flex-direction: column; }
|
|
2779
|
+
.dsh-partner-form-actions > button,
|
|
2780
|
+
.dsh-partner-identity-danger > div,
|
|
2781
|
+
.dsh-partner-identity-danger button { width: 100%; }
|
|
2782
|
+
.dsh-partner-identity-danger > div { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
2783
|
+
|
|
2784
|
+
.dsh-partner-skill-search,
|
|
2785
|
+
.dsh-partner-skill-search.is-compact { min-height: 52px; grid-template-columns: 36px minmax(0, 1fr) 44px; gap: 6px; padding: 4px 5px 4px 8px; }
|
|
2786
|
+
.dsh-partner-skill-search input,
|
|
2787
|
+
.dsh-partner-skill-search.is-compact input { height: 44px; font-size: 16px; }
|
|
2788
|
+
.dsh-partner-skill-search .dsh-partner-skill-search-clear { width: 44px; min-height: 44px; }
|
|
2789
|
+
.dsh-partner-skill-search-count { grid-column: 2 / -1; min-width: 0; padding: 0 7px 3px 0; border-left: 0; line-height: 16px; text-align: left; }
|
|
2790
|
+
.dsh-partner-skill-search:not(:has(.dsh-partner-skill-search-clear)) { grid-template-columns: 36px minmax(0, 1fr); }
|
|
2791
|
+
.dsh-partner-market-sources > button { min-height: 44px; }
|
|
2792
|
+
.dsh-partner-market-grid { grid-template-columns: 1fr; }
|
|
2793
|
+
.dsh-partner-skill-installed > article,
|
|
2794
|
+
.dsh-partner-skill-installed.is-market > article { grid-template-columns: 36px minmax(0, 1fr) 44px; padding: 10px; }
|
|
2795
|
+
.dsh-partner-skill-installed.is-binding > article { min-height: 0; grid-template-columns: 36px minmax(0, 1fr); }
|
|
2796
|
+
.dsh-partner-skill-installed.is-binding .dsh-partner-skill-binding-action { grid-column: 1 / -1; width: 100%; }
|
|
2797
|
+
.dsh-partner-skill-picker-list { max-height: min(420px, 48dvh); grid-template-columns: 1fr; }
|
|
2798
|
+
.dsh-partner-skill-picker-list > article { min-height: 0; }
|
|
2799
|
+
.dsh-partner-skill-picker-list button { width: 100%; justify-self: stretch; }
|
|
2800
|
+
|
|
2801
|
+
.dsh-partner-board-tools { grid-template-columns: 1fr; }
|
|
2802
|
+
.dsh-partner-board-assignee,
|
|
2803
|
+
.dsh-partner-board-tools > small { grid-column: 1; }
|
|
2804
|
+
.dsh-partner-board-tools > small { justify-self: start; }
|
|
2805
|
+
.dsh-partner-board-search > button { right: 0; width: 44px; min-height: 44px; }
|
|
2806
|
+
.dsh-partner-board-statuses { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 5px; }
|
|
2807
|
+
.dsh-partner-board-statuses > button { min-width: 0; min-height: 44px; justify-content: center; gap: 4px; padding-inline: 5px; }
|
|
2808
|
+
.dsh-partner-board { grid-template-columns: 1fr; }
|
|
2809
|
+
.dsh-partner-board > section,
|
|
2810
|
+
.dsh-partner-board[data-focused="true"] > section { height: min(430px, 55dvh); }
|
|
2811
|
+
.dsh-partner-board > section[data-empty="true"],
|
|
2812
|
+
.dsh-partner-board[data-focused="true"] > section[data-empty="true"] { height: 112px; }
|
|
2813
|
+
.dsh-partner-task-fields label { grid-template-columns: 1fr; gap: 5px; }
|
|
2814
|
+
.dsh-partner-task-dependency > div > span { min-height: 44px; grid-template-columns: 18px minmax(0, 1fr) 52px; }
|
|
2815
|
+
.dsh-partner-task-dependency > div button { min-height: 44px; }
|
|
2816
|
+
.dsh-partner-task-actions > span { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
2817
|
+
.dsh-partner-task-actions button { width: 100%; }
|
|
2818
|
+
|
|
2819
|
+
.dsh-partner-schedule-time { grid-template-columns: 1fr; }
|
|
2820
|
+
.dsh-partner-schedule-list > article {
|
|
2821
|
+
min-height: 0;
|
|
2822
|
+
grid-template-columns: minmax(0, 1fr) 44px;
|
|
2823
|
+
align-items: center;
|
|
2824
|
+
gap: 8px;
|
|
2825
|
+
padding: 12px;
|
|
2826
|
+
}
|
|
2827
|
+
.dsh-partner-schedule-list > article > span:first-child { grid-column: 1 / -1; }
|
|
2828
|
+
.dsh-partner-schedule-list > article > .dsh-partner-feature-switch { grid-column: 1; justify-self: start; }
|
|
2829
|
+
.dsh-partner-schedule-list > article > button:not(.is-icon):not(.dsh-partner-feature-switch) { grid-column: 1; grid-row: 2; justify-self: end; }
|
|
2830
|
+
.dsh-partner-schedule-list > article > .is-icon { grid-column: 2; grid-row: 2; }
|
|
2831
|
+
.dsh-partner-schedule-list p,
|
|
2832
|
+
.dsh-partner-run-list p { white-space: normal; overflow-wrap: anywhere; }
|
|
2833
|
+
|
|
2834
|
+
.dsh-partner-workspace-dialog > header {
|
|
2835
|
+
padding: max(14px, env(safe-area-inset-top)) 14px 13px;
|
|
2836
|
+
}
|
|
2837
|
+
.dsh-partner-workspace-dialog > header button { width: 44px; min-height: 44px; }
|
|
2838
|
+
.dsh-partner-workspace-dialog-body { padding: 16px 14px max(24px, env(safe-area-inset-bottom)); }
|
|
2839
|
+
.dsh-partner-workspace-dialog-body > :is(form, .dsh-partner-task-detail) > footer:last-child {
|
|
2840
|
+
bottom: calc(-1 * max(24px, env(safe-area-inset-bottom)));
|
|
2841
|
+
margin: 4px -14px calc(-1 * max(24px, env(safe-area-inset-bottom)));
|
|
2842
|
+
padding: 12px 14px max(12px, env(safe-area-inset-bottom));
|
|
2843
|
+
}
|
|
2844
|
+
}
|
|
2845
|
+
|
|
2846
|
+
@media (max-width: 420px) {
|
|
2847
|
+
.dsh-partner-topbar-brand small { display: none; }
|
|
2848
|
+
.dsh-partner-feature-page { padding-inline: 10px; }
|
|
2849
|
+
.dsh-partner-feature-block,
|
|
2850
|
+
.dsh-partner-capability-detail { padding: 12px; }
|
|
2851
|
+
.dsh-partner-board-statuses { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
2852
|
+
.dsh-partner-profile-meta { grid-template-columns: 1fr; }
|
|
2853
|
+
.dsh-partner-profile-meta > span { padding-left: 0; border-left: 0; }
|
|
2854
|
+
}
|
|
2855
|
+
|
|
2856
|
+
@media (max-width: 760px) and (max-height: 520px) and (orientation: landscape) {
|
|
2857
|
+
.dsh-partner-topbar { grid-template-columns: minmax(150px, .72fr) minmax(0, 1.28fr); align-items: center; flex-direction: row; gap: 8px; }
|
|
2858
|
+
.dsh-partner-mobile-controls { grid-template-columns: minmax(0, 1fr) minmax(190px, 1fr); }
|
|
2859
|
+
.dsh-partner-stage-scroll { padding-bottom: 20px; }
|
|
2860
|
+
.dsh-partner-workspace-dialog > header { padding-top: 10px; padding-bottom: 10px; }
|
|
2861
|
+
}
|
|
2862
|
+
`;
|
|
2863
|
+
|
|
2576
2864
|
// src/client-api.ts
|
|
2577
2865
|
var PARTNER_API = "/partner-local/v1";
|
|
2578
2866
|
async function api(path = "", init = {}) {
|
|
@@ -3410,8 +3698,48 @@ function TaskBoardPanel() {
|
|
|
3410
3698
|
const [loading, setLoading] = (0, import_react6.useState)(true);
|
|
3411
3699
|
const [error, setError] = (0, import_react6.useState)();
|
|
3412
3700
|
const [syncedAt, setSyncedAt] = (0, import_react6.useState)();
|
|
3413
|
-
const
|
|
3701
|
+
const [query, setQuery] = (0, import_react6.useState)("");
|
|
3702
|
+
const [statusFilter, setStatusFilter] = (0, import_react6.useState)("all");
|
|
3703
|
+
const [assigneeFilter, setAssigneeFilter] = (0, import_react6.useState)("all");
|
|
3704
|
+
const deferredQuery = (0, import_react6.useDeferredValue)(query.trim().toLocaleLowerCase());
|
|
3414
3705
|
const tasksById = (0, import_react6.useMemo)(() => new Map(board.tasks.map((item) => [item.id, item])), [board.tasks]);
|
|
3706
|
+
const directoryById = (0, import_react6.useMemo)(() => new Map(directory.map((item) => [item.id, item])), [directory]);
|
|
3707
|
+
const activeDelegationByTaskId = (0, import_react6.useMemo)(() => {
|
|
3708
|
+
const result = /* @__PURE__ */ new Map();
|
|
3709
|
+
for (const delegation of delegations) {
|
|
3710
|
+
if ((delegation.status === "queued" || delegation.status === "running") && !result.has(delegation.taskId)) result.set(delegation.taskId, delegation);
|
|
3711
|
+
}
|
|
3712
|
+
return result;
|
|
3713
|
+
}, [delegations]);
|
|
3714
|
+
const selectedTask = selectedTaskId ? tasksById.get(selectedTaskId) : void 0;
|
|
3715
|
+
const dependentsById = (0, import_react6.useMemo)(() => {
|
|
3716
|
+
const result = /* @__PURE__ */ new Map();
|
|
3717
|
+
for (const task of board.tasks) for (const dependencyId of task.dependencyTaskIds) result.set(dependencyId, (result.get(dependencyId) ?? 0) + 1);
|
|
3718
|
+
return result;
|
|
3719
|
+
}, [board.tasks]);
|
|
3720
|
+
const scopedTasks = (0, import_react6.useMemo)(() => board.tasks.filter((task) => {
|
|
3721
|
+
if (assigneeFilter !== "all" && (task.assigneeCompanionId ?? "unassigned") !== assigneeFilter) return false;
|
|
3722
|
+
if (!deferredQuery) return true;
|
|
3723
|
+
const dependencies = task.dependencyTaskIds.map((id) => tasksById.get(id)?.title ?? "");
|
|
3724
|
+
return [task.title, task.description, task.resultAbstract, task.resultSummary, directoryById.get(task.assigneeCompanionId ?? "")?.name, ...dependencies].some((value) => value?.toLocaleLowerCase().includes(deferredQuery));
|
|
3725
|
+
}), [assigneeFilter, board.tasks, deferredQuery, directoryById, tasksById]);
|
|
3726
|
+
const statusCounts = (0, import_react6.useMemo)(() => {
|
|
3727
|
+
const result = new Map(COLUMNS.map((column) => [column.id, 0]));
|
|
3728
|
+
for (const task of scopedTasks) result.set(task.status, (result.get(task.status) ?? 0) + 1);
|
|
3729
|
+
return result;
|
|
3730
|
+
}, [scopedTasks]);
|
|
3731
|
+
const visibleColumns = statusFilter === "all" ? COLUMNS : COLUMNS.filter((column) => column.id === statusFilter);
|
|
3732
|
+
const tasksByStatus = (0, import_react6.useMemo)(() => {
|
|
3733
|
+
const priorityRank = { urgent: 3, high: 2, normal: 1, low: 0 };
|
|
3734
|
+
const result = new Map(COLUMNS.map((column) => [column.id, []]));
|
|
3735
|
+
for (const task of scopedTasks) {
|
|
3736
|
+
if (statusFilter !== "all" && task.status !== statusFilter) continue;
|
|
3737
|
+
result.get(task.status)?.push(task);
|
|
3738
|
+
}
|
|
3739
|
+
for (const tasks of result.values()) tasks.sort((left, right) => priorityRank[right.priority] - priorityRank[left.priority] || right.updatedAt - left.updatedAt);
|
|
3740
|
+
return result;
|
|
3741
|
+
}, [scopedTasks, statusFilter]);
|
|
3742
|
+
const visibleTaskCount = statusFilter === "all" ? scopedTasks.length : statusCounts.get(statusFilter) ?? 0;
|
|
3415
3743
|
const loadingRef = (0, import_react6.useRef)(false);
|
|
3416
3744
|
const load = (0, import_react6.useCallback)(async () => {
|
|
3417
3745
|
if (loadingRef.current) return;
|
|
@@ -3540,7 +3868,7 @@ function TaskBoardPanel() {
|
|
|
3540
3868
|
tasks: board.tasks,
|
|
3541
3869
|
activities: board.activities.filter((item) => item.taskId === selectedTask.id),
|
|
3542
3870
|
directory,
|
|
3543
|
-
execution:
|
|
3871
|
+
execution: activeDelegationByTaskId.get(selectedTask.id),
|
|
3544
3872
|
busy: busy === selectedTask.id,
|
|
3545
3873
|
update: (change) => {
|
|
3546
3874
|
void update(selectedTask, change);
|
|
@@ -3563,50 +3891,99 @@ function TaskBoardPanel() {
|
|
|
3563
3891
|
},
|
|
3564
3892
|
selectedTask.id
|
|
3565
3893
|
) }),
|
|
3566
|
-
loading ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CollectionSkeleton, { rows: 6 }) : /* @__PURE__ */ (0, import_jsx_runtime4.
|
|
3567
|
-
|
|
3568
|
-
|
|
3569
|
-
|
|
3570
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("
|
|
3571
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("
|
|
3894
|
+
loading ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CollectionSkeleton, { rows: 6 }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
3895
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dsh-partner-board-tools", children: [
|
|
3896
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "dsh-partner-board-search", children: [
|
|
3897
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "sr-only", children: "\u641C\u7D22\u4EFB\u52A1" }),
|
|
3898
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives3.IconSearchOutline16, { size: 16 }) }),
|
|
3899
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("input", { value: query, onChange: (event) => setQuery(event.target.value), placeholder: "\u641C\u7D22\u4EFB\u52A1\u3001\u8D1F\u8D23\u4EBA\u6216\u524D\u7F6E\u4EFB\u52A1" }),
|
|
3900
|
+
query && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", onClick: () => setQuery(""), "aria-label": "\u6E05\u9664\u4EFB\u52A1\u641C\u7D22", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives3.IconCloseOutline16, { size: 14 }) })
|
|
3572
3901
|
] }),
|
|
3573
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.
|
|
3574
|
-
|
|
3575
|
-
{
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
directory,
|
|
3579
|
-
|
|
3580
|
-
|
|
3581
|
-
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
|
|
3586
|
-
|
|
3902
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "dsh-partner-board-assignee", children: [
|
|
3903
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "sr-only", children: "\u6309\u8D1F\u8D23\u4EBA\u7B5B\u9009" }),
|
|
3904
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("select", { value: assigneeFilter, onChange: (event) => setAssigneeFilter(event.target.value), children: [
|
|
3905
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: "all", children: "\u5168\u90E8\u4F19\u4F34" }),
|
|
3906
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: "unassigned", children: "\u672A\u6307\u6D3E" }),
|
|
3907
|
+
directory.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("option", { value: item.id, children: [
|
|
3908
|
+
"@",
|
|
3909
|
+
item.name
|
|
3910
|
+
] }, item.id))
|
|
3911
|
+
] })
|
|
3912
|
+
] }),
|
|
3913
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("small", { "aria-live": "polite", children: [
|
|
3914
|
+
"\u663E\u793A ",
|
|
3915
|
+
visibleTaskCount,
|
|
3916
|
+
" / ",
|
|
3917
|
+
board.tasks.length
|
|
3918
|
+
] })
|
|
3919
|
+
] }),
|
|
3920
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("nav", { className: "dsh-partner-board-statuses", "aria-label": "\u6309\u4EFB\u52A1\u72B6\u6001\u7B5B\u9009", children: [
|
|
3921
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("button", { type: "button", className: statusFilter === "all" ? "is-active" : "", "aria-pressed": statusFilter === "all", onClick: () => setStatusFilter("all"), children: [
|
|
3922
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: "\u5168\u90E8" }),
|
|
3923
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("b", { children: scopedTasks.length })
|
|
3924
|
+
] }),
|
|
3925
|
+
COLUMNS.map((column) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("button", { type: "button", className: statusFilter === column.id ? "is-active" : "", "aria-pressed": statusFilter === column.id, onClick: () => setStatusFilter(column.id), children: [
|
|
3926
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: column.label }),
|
|
3927
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("b", { children: statusCounts.get(column.id) ?? 0 })
|
|
3928
|
+
] }, column.id))
|
|
3929
|
+
] }),
|
|
3930
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "dsh-partner-board", "data-focused": statusFilter !== "all", "aria-label": "\u4EFB\u52A1\u770B\u677F", children: visibleColumns.map((column) => {
|
|
3931
|
+
const tasks = tasksByStatus.get(column.id) ?? [];
|
|
3932
|
+
const columnTitleId = `dsh-partner-board-${column.id}`;
|
|
3933
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { "data-status": column.id, "data-empty": tasks.length === 0, "aria-labelledby": columnTitleId, children: [
|
|
3934
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { children: [
|
|
3935
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { id: columnTitleId, children: column.label }),
|
|
3936
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("b", { children: tasks.length })
|
|
3937
|
+
] }),
|
|
3938
|
+
tasks.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "dsh-partner-board-column-list", children: tasks.map((task) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
3939
|
+
TaskCard,
|
|
3940
|
+
{
|
|
3941
|
+
task,
|
|
3942
|
+
tasksById,
|
|
3943
|
+
directoryById,
|
|
3944
|
+
dependentCount: dependentsById.get(task.id) ?? 0,
|
|
3945
|
+
execution: activeDelegationByTaskId.get(task.id),
|
|
3946
|
+
open: () => setSelectedTaskId(task.id)
|
|
3947
|
+
},
|
|
3948
|
+
task.id
|
|
3949
|
+
)) }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: query || assigneeFilter !== "all" ? "\u6CA1\u6709\u5339\u914D\u4EFB\u52A1" : "\u6682\u65E0\u4EFB\u52A1" })
|
|
3950
|
+
] }, column.id);
|
|
3951
|
+
}) })
|
|
3952
|
+
] })
|
|
3587
3953
|
] });
|
|
3588
3954
|
}
|
|
3589
|
-
function TaskCard({ task, tasksById,
|
|
3955
|
+
function TaskCard({ task, tasksById, directoryById, dependentCount, execution, open }) {
|
|
3590
3956
|
const dependencies = task.dependencyTaskIds.map((id) => tasksById.get(id)).filter((item) => item !== void 0);
|
|
3591
3957
|
const blockers = dependencies.filter((item) => item.status !== "done");
|
|
3592
|
-
const
|
|
3958
|
+
const completedDependencies = dependencies.length - blockers.length;
|
|
3959
|
+
const assignee = directoryById.get(task.assigneeCompanionId ?? "");
|
|
3593
3960
|
const executionState = execution ? delegationState(execution) : void 0;
|
|
3594
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.
|
|
3595
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.
|
|
3596
|
-
|
|
3597
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { children: [
|
|
3961
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("article", { className: "dsh-partner-task-card", "data-blocked": blockers.length > 0, "data-priority": task.priority, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("button", { type: "button", className: "dsh-partner-task-summary", "aria-haspopup": "dialog", onClick: open, children: [
|
|
3962
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { children: [
|
|
3963
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "dsh-partner-task-card-title", children: [
|
|
3598
3964
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { title: task.title, children: task.title }),
|
|
3599
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.
|
|
3600
|
-
assignee ? `@${assignee.name}` : "\u672A\u6307\u6D3E",
|
|
3601
|
-
" \xB7 ",
|
|
3602
|
-
dependencies.length ? `${dependencies.length} \u9879\u524D\u7F6E${blockers.length ? `\uFF0C${blockers.length} \u9879\u672A\u5B8C\u6210` : "\u5747\u5DF2\u5B8C\u6210"}` : "\u65E0\u524D\u7F6E\u4F9D\u8D56",
|
|
3603
|
-
task.resultSummary ? " \xB7 \u5DF2\u6709\u7ED3\u679C" : "",
|
|
3604
|
-
executionState ? ` \xB7 ${executionState.label}` : ""
|
|
3605
|
-
] })
|
|
3965
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("em", { children: priorityLabel(task.priority) })
|
|
3606
3966
|
] }),
|
|
3607
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.
|
|
3608
|
-
|
|
3609
|
-
|
|
3967
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("small", { className: "dsh-partner-task-card-owner", children: [
|
|
3968
|
+
assignee ? `@${assignee.name}` : "\u672A\u6307\u6D3E",
|
|
3969
|
+
task.resultSummary ? " \xB7 \u5DF2\u6709\u7ED3\u679C" : "",
|
|
3970
|
+
executionState ? ` \xB7 ${executionState.label}` : ""
|
|
3971
|
+
] }),
|
|
3972
|
+
(dependencies.length > 0 || dependentCount > 0) && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "dsh-partner-task-relations", children: [
|
|
3973
|
+
dependencies.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("small", { "data-blocked": blockers.length > 0, children: [
|
|
3974
|
+
"\u524D\u7F6E ",
|
|
3975
|
+
completedDependencies,
|
|
3976
|
+
"/",
|
|
3977
|
+
dependencies.length
|
|
3978
|
+
] }),
|
|
3979
|
+
dependentCount > 0 && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("small", { children: [
|
|
3980
|
+
"\u5B8C\u6210\u540E\u89E3\u9501 ",
|
|
3981
|
+
dependentCount
|
|
3982
|
+
] })
|
|
3983
|
+
] })
|
|
3984
|
+
] }),
|
|
3985
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_dsh_client_ui_primitives3.IconChevronRightOutline14, { size: 14 })
|
|
3986
|
+
] }) });
|
|
3610
3987
|
}
|
|
3611
3988
|
function TaskDetail({ task, tasks, activities, directory, execution, busy, update, delegate, review, accept, reject, remove }) {
|
|
3612
3989
|
const [rejecting, setRejecting] = (0, import_react6.useState)(false);
|
|
@@ -4363,7 +4740,8 @@ var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
|
4363
4740
|
var PLUGIN_ID = "@lemoncat7/dsh-partner";
|
|
4364
4741
|
var STYLE_ID = `${PLUGIN_ID}/client`;
|
|
4365
4742
|
var cssText = `${client_default}
|
|
4366
|
-
${workspace_ui_default}
|
|
4743
|
+
${workspace_ui_default}
|
|
4744
|
+
${responsive_ui_default}`;
|
|
4367
4745
|
var WORKSPACE_PAGES = /* @__PURE__ */ new Set(["skills", "board", "schedules"]);
|
|
4368
4746
|
var inject = ["slots", "layout", "sessions"];
|
|
4369
4747
|
function apply(ctx) {
|
|
@@ -4482,7 +4860,7 @@ function PartnerWorkspace({ controller }) {
|
|
|
4482
4860
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("main", { className: "dsh-partner-workspace", children: [
|
|
4483
4861
|
creatingCompanion && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CompanionCreateDialog, { close: () => setCreatingCompanion(false), create }),
|
|
4484
4862
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("header", { className: "dsh-partner-topbar", children: [
|
|
4485
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { children: [
|
|
4863
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "dsh-partner-topbar-brand", children: [
|
|
4486
4864
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("button", { type: "button", "data-xiaohei-workspace-close": true, onClick: controller.close, "aria-label": "\u8FD4\u56DE\u4F1A\u8BDD", title: "\u8FD4\u56DE\u4F1A\u8BDD", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconChevronLeftOutline14, { size: 15 }) }),
|
|
4487
4865
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconAgentPresetOutline16, { size: 18 }),
|
|
4488
4866
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { children: [
|
|
@@ -4490,20 +4868,17 @@ function PartnerWorkspace({ controller }) {
|
|
|
4490
4868
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("small", { children: "\u957F\u671F\u8EAB\u4EFD\u4E0E\u5FAE\u4FE1\u6E20\u9053" })
|
|
4491
4869
|
] })
|
|
4492
4870
|
] }),
|
|
4493
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
|
|
4498
|
-
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "\u5B9A\u65F6" })
|
|
4505
|
-
] })
|
|
4506
|
-
] })
|
|
4871
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
4872
|
+
MobileWorkspaceControls,
|
|
4873
|
+
{
|
|
4874
|
+
companions: snapshot?.companions ?? [],
|
|
4875
|
+
selectedId,
|
|
4876
|
+
view,
|
|
4877
|
+
openCompanion,
|
|
4878
|
+
openPage: setView,
|
|
4879
|
+
createCompanion: () => setCreatingCompanion(true)
|
|
4880
|
+
}
|
|
4881
|
+
)
|
|
4507
4882
|
] }),
|
|
4508
4883
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "dsh-partner-grid", children: [
|
|
4509
4884
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("aside", { className: "dsh-partner-roster", children: [
|
|
@@ -4585,6 +4960,38 @@ function PartnerWorkspace({ controller }) {
|
|
|
4585
4960
|
] })
|
|
4586
4961
|
] });
|
|
4587
4962
|
}
|
|
4963
|
+
function MobileWorkspaceControls({ companions, selectedId, view, openCompanion, openPage, createCompanion }) {
|
|
4964
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "dsh-partner-mobile-controls", children: [
|
|
4965
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "dsh-partner-mobile-companion-row", children: [
|
|
4966
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("label", { className: "dsh-partner-mobile-companion-picker", children: [
|
|
4967
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "sr-only", children: "\u5F53\u524D\u4F19\u4F34" }),
|
|
4968
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("select", { value: selectedId ?? "", disabled: companions.length === 0, "aria-label": "\u5207\u6362\u5F53\u524D\u4F19\u4F34", onChange: (event) => openCompanion(event.target.value), children: [
|
|
4969
|
+
companions.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("option", { value: "", children: "\u8FD8\u6CA1\u6709\u4F19\u4F34" }),
|
|
4970
|
+
companions.map((companion) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("option", { value: companion.id, children: [
|
|
4971
|
+
companion.name,
|
|
4972
|
+
" \xB7 ",
|
|
4973
|
+
companion.role
|
|
4974
|
+
] }, companion.id))
|
|
4975
|
+
] })
|
|
4976
|
+
] }),
|
|
4977
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("button", { type: "button", className: "dsh-partner-mobile-create", onClick: createCompanion, "aria-label": "\u65B0\u5EFA\u4F19\u4F34", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconPlusOutline16, { size: 17 }) })
|
|
4978
|
+
] }),
|
|
4979
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("nav", { className: "dsh-partner-mobile-workspace-nav", "aria-label": "\u4F19\u4F34\u5DE5\u4F5C\u533A\u5FEB\u6377\u5165\u53E3", children: [
|
|
4980
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", className: view === "skills" ? "is-active" : "", "aria-pressed": view === "skills", onClick: () => openPage("skills"), children: [
|
|
4981
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconBrowseOutline16, { size: 16 }),
|
|
4982
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "Skill" })
|
|
4983
|
+
] }),
|
|
4984
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", className: view === "board" ? "is-active" : "", "aria-pressed": view === "board", onClick: () => openPage("board"), children: [
|
|
4985
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconListPenOutline16, { size: 16 }),
|
|
4986
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "\u770B\u677F" })
|
|
4987
|
+
] }),
|
|
4988
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", className: view === "schedules" ? "is-active" : "", "aria-pressed": view === "schedules", onClick: () => openPage("schedules"), children: [
|
|
4989
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconPlayOutline16, { size: 16 }),
|
|
4990
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "\u5B9A\u65F6" })
|
|
4991
|
+
] })
|
|
4992
|
+
] })
|
|
4993
|
+
] });
|
|
4994
|
+
}
|
|
4588
4995
|
function HomePanel({ companion, snapshot, navigate, openSession, startSession, renewSession }) {
|
|
4589
4996
|
const channel = snapshot.channels.find((item) => item.companionId === companion.id);
|
|
4590
4997
|
const sessions2 = snapshot.sessions.filter((item) => item.companionId === companion.id);
|