@linxin666/dsh-client-ui-task-board 0.3.24 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/icon.svg +3 -0
- package/lib/client.js +154 -115
- package/lib/client.js.map +1 -1
- package/lib/index.js +109 -898
- package/lib/types/client/PluginSettingsCard.d.ts +4 -0
- package/lib/types/client/TaskBoardSettingsCard.d.ts +5 -5
- package/lib/types/client/index.d.ts +43 -10
- package/lib/types/client/main-session.d.ts +32 -0
- package/lib/types/client/plugin-card-seat.d.ts +23 -16
- package/lib/types/client/settings-form.d.ts +17 -17
- package/lib/types/client/sidebar-entry-core.d.ts +0 -32
- package/lib/types/core/controller.d.ts +10 -8
- package/lib/types/http.d.ts +18 -1
- package/lib/types/index.d.ts +72 -17
- package/package.json +30 -25
- package/src/client/PluginSettingsCard.tsx +7 -2
- package/src/client/TaskBoardSettingsCard.tsx +7 -5
- package/src/client/board.module.css +31 -12
- package/src/client/index.ts +112 -23
- package/src/client/main-session.ts +43 -0
- package/src/client/plugin-card-seat.ts +24 -17
- package/src/client/settings-form.ts +34 -31
- package/src/client/sidebar-entry-core.ts +10 -94
- package/src/client/sidebar-entry.ts +2 -2
- package/src/core/controller.ts +12 -8
- package/src/http.ts +23 -1
- package/src/index.ts +97 -52
package/icon.svg
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
|
2
|
+
<path fill="#4d6bfe" fill-rule="evenodd" d="M 67.5 120 L 70.5 120 L 72.5 121 L 80.5 129 L 81.5 129 L 84.5 132 L 85.5 132 L 90.5 136 L 93.5 137 L 95.5 139 L 101.5 142 L 103.5 142 L 106.5 144 L 111.5 145 L 112.5 146 L 115.5 146 L 119.5 148 Q 122.75 147.25 123.5 149 L 127.5 149 L 128.5 150 L 133.5 150 L 134.5 151 L 140.5 151 L 141.5 152 L 150.5 152 L 151.5 153 L 160.5 153 L 161.5 154 L 171.5 154 L 172.5 155 L 178.5 155 L 179.5 156 Q 183.5 155 184.5 157 L 189.5 157 Q 190.5 159 194.5 158 L 195.5 159 L 197.5 159 L 198.5 160 L 200.5 160 L 201.5 161 L 206.5 162 L 209.5 164 L 211.5 164 L 219.5 168 L 224.5 172 L 227.5 173 L 247 191.5 L 247 192.5 L 253 199.5 L 255.5 204 L 258 201.5 L 263 193.5 L 272.5 183 L 273.5 183 L 280.5 176 L 281.5 176 L 292.5 168 L 300.5 164 L 302.5 164 L 305.5 162 L 307.5 162 L 308.5 161 L 310.5 161 L 314.5 159 L 317.5 159 L 318.5 158 Q 321.75 158.75 322.5 157 L 326.5 157 L 327.5 156 L 331.5 156 L 332.5 155 L 337.5 155 L 338.5 154 L 348.5 154 L 349.5 153 L 358.5 153 L 359.5 152 L 368.5 152 L 369.5 151 L 376.5 151 L 377.5 150 L 383.5 150 L 384.5 149 L 388.5 149 L 389.5 148 L 392.5 148 L 393.5 147 L 396.5 147 L 397.5 146 L 399.5 146 L 400.5 145 L 405.5 144 L 423.5 135 L 426.5 132 L 431.5 129 L 439.5 121 L 441.5 120 L 444.5 120 L 448 123.5 L 448 140.5 L 447 141.5 L 447 149.5 L 446 150.5 L 446 154.5 L 445 155.5 Q 445.75 158.75 444 159.5 L 444 163.5 Q 442.25 164.25 443 167.5 L 440 173.5 L 439 178.5 L 435 185.5 L 435 187.5 L 432 193.5 L 430 195.5 L 429 198.5 L 427 200.5 L 425 204.5 L 419 211.5 L 419 212.5 L 402.5 229 L 401.5 229 L 394.5 235 L 393.5 235 L 388.5 239 L 385.5 240 L 383.5 242 L 371.5 248 L 369.5 248 L 364.5 251 L 362.5 251 L 361.5 252 L 359.5 252 L 358.5 253 L 356.5 253 L 355.5 254 L 353.5 254 L 349.5 256 L 342.5 257 L 338.5 259 L 335.5 259 L 334.5 260 L 327.5 261 L 326.5 262 L 324.5 262 L 323.5 263 L 321.5 263 L 320.5 264 L 318.5 264 L 317.5 265 L 312.5 266 L 309.5 268 L 307.5 268 L 295.5 275 L 288 282.5 Q 287.5 286 285 287.5 Q 285.5 290 284 290.5 L 284 293.5 L 283 294.5 L 283 311.5 L 284 312.5 L 284 318.5 L 285 319.5 L 285 323.5 L 286 324.5 L 286 328.5 Q 288 329.5 287 333.5 L 288 334.5 L 288 337.5 L 289 338.5 L 289 341.5 L 290 342.5 L 290 345.5 L 291 346.5 L 292 353.5 L 293 354.5 L 293 356.5 L 295 360.5 L 295 363.5 L 296 364.5 L 296 367.5 L 297 368.5 L 297 370.5 L 298 371.5 L 298 373.5 L 299 374.5 L 299 376.5 L 301 380.5 L 301 386.5 L 298.5 389 L 294.5 391 Q 292 390.5 291.5 392 L 286.5 392 L 285.5 393 L 272.5 393 L 271.5 394 L 240.5 394 L 239.5 393 L 227.5 393 L 226.5 392 L 221.5 392 Q 220.75 390.25 217.5 391 L 212 387.5 L 211 385.5 L 211 381.5 L 212 380.5 Q 211.5 378 213 377.5 L 213 374.5 L 214 373.5 L 214 371.5 L 216 367.5 L 216 364.5 L 217 363.5 L 217 361.5 L 219 357.5 L 219 354.5 L 221 350.5 L 221 347.5 L 222 346.5 L 222 343.5 L 223 342.5 L 223 339.5 L 224 338.5 L 224 335.5 L 225 334.5 Q 224.25 331.25 226 330.5 L 226 326.5 L 227 325.5 Q 226 321.5 228 320.5 L 228 315.5 L 229 314.5 L 229 292.5 L 228 291.5 L 227 286.5 L 225 284.5 L 223 280.5 L 219.5 277 L 218.5 277 L 212.5 272 L 202.5 267 L 200.5 267 L 197.5 265 L 194.5 265 L 193.5 264 L 191.5 264 L 190.5 263 L 188.5 263 L 184.5 261 L 181.5 261 L 180.5 260 L 173.5 259 L 172.5 258 L 170.5 258 L 166.5 256 L 159.5 255 L 158.5 254 L 156.5 254 L 155.5 253 L 150.5 252 L 147.5 250 L 145.5 250 L 142.5 248 L 140.5 248 L 128.5 242 L 123.5 238 L 120.5 237 L 109.5 228 L 108.5 228 L 95 214.5 L 95 213.5 L 87 204.5 L 84 198.5 L 82 196.5 L 80 191.5 L 77 187.5 L 77 185.5 L 72 175.5 L 72 173.5 L 71 172.5 L 71 170.5 L 69 166.5 L 69 163.5 L 68 162.5 Q 68.75 159.25 67 158.5 L 67 154.5 L 66 153.5 L 66 148.5 L 65 147.5 L 65 139.5 L 64 138.5 L 64 124.5 L 67.5 120 Z"/>
|
|
3
|
+
</svg>
|
package/lib/client.js
CHANGED
|
@@ -609,7 +609,7 @@ window.__ModuleLoader__.load({
|
|
|
609
609
|
//#endregion
|
|
610
610
|
//#region src/core/controller.ts
|
|
611
611
|
function currentOf(sessions) {
|
|
612
|
-
return sessions?.
|
|
612
|
+
return sessions?.current();
|
|
613
613
|
}
|
|
614
614
|
/** The selected task (resolved from the ledger), or undefined. */
|
|
615
615
|
function selectedTaskOf(snapshot) {
|
|
@@ -670,7 +670,7 @@ window.__ModuleLoader__.load({
|
|
|
670
670
|
this.notify();
|
|
671
671
|
}) : void 0;
|
|
672
672
|
if (unsubscribeExternal !== void 0) this.disposers.push(unsubscribeExternal);
|
|
673
|
-
this.disposers.push(this.deps.sessions.
|
|
673
|
+
this.disposers.push(this.deps.sessions.subscribe(() => {
|
|
674
674
|
this.onSessionsChanged();
|
|
675
675
|
}));
|
|
676
676
|
this.notify();
|
|
@@ -1100,6 +1100,21 @@ window.__ModuleLoader__.load({
|
|
|
1100
1100
|
for (const fn of [...this.listeners]) fn();
|
|
1101
1101
|
}
|
|
1102
1102
|
};
|
|
1103
|
+
//#endregion
|
|
1104
|
+
//#region src/client/main-session.ts
|
|
1105
|
+
/**
|
|
1106
|
+
* Resolve the Session the main view currently shows.
|
|
1107
|
+
*
|
|
1108
|
+
* Reads the catalog's rows rather than a per-id retain-info source: ownership
|
|
1109
|
+
* counts ride the list snapshot, so this neither allocates observers nor opens
|
|
1110
|
+
* history, and a subscription to the list still fires when the selection moves.
|
|
1111
|
+
* @param byId - the session catalog's rows (`SessionListState.byId`), when available.
|
|
1112
|
+
* @returns the main-view session id, or undefined when the main view shows none.
|
|
1113
|
+
*/
|
|
1114
|
+
function mainViewSessionId(byId) {
|
|
1115
|
+
if (byId === void 0 || byId === null) return void 0;
|
|
1116
|
+
for (const row of Object.values(byId)) if (row !== void 0 && (row.retainedBy?.mainView ?? 0) > 0) return row.id;
|
|
1117
|
+
}
|
|
1103
1118
|
/** Marker replacing every sensitive match. */
|
|
1104
1119
|
const REDACTED_MARKER = "[REDACTED]";
|
|
1105
1120
|
const BEGIN = "<<<FREEZE";
|
|
@@ -1982,7 +1997,7 @@ window.__ModuleLoader__.load({
|
|
|
1982
1997
|
}
|
|
1983
1998
|
//#endregion
|
|
1984
1999
|
//#region \0dsh-css:packages/dsh-task-board/src/client/board.module.css.mjs
|
|
1985
|
-
const css$1 = "[data-pane=conversation],[class*=centerCol]{position:relative}[data-dsh-taskboard-view]{z-index:60;background:var(--dsw-alias-bg-base);display:none;position:absolute;inset:0;container:_7D6uKa_task-board-view/inline-size}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-dsh-taskboard-view]{display:block}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-taskboard-view]),html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-taskboard-view]){display:none!important}._7D6uKa_entry{box-sizing:border-box;width:100%;height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:0 10px;font-size:13px;display:flex}._7D6uKa_entry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_entry[data-active]{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary);font-weight:600}._7D6uKa_entryIcon{flex:none;justify-content:center;align-items:center;width:24px;height:24px;display:inline-flex}._7D6uKa_entryIcon svg{width:18px;height:18px;display:block}._7D6uKa_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entry,[data-sidebar-collapsed] ._7D6uKa_entry{border-radius:50%;justify-content:center;width:36px;height:36px;margin:0 auto 12px;padding:0}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entryLabel,[data-sidebar-collapsed] ._7D6uKa_entryLabel{display:none}._7D6uKa_board{box-sizing:border-box;background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:12px;padding:14px 16px 16px;display:flex}._7D6uKa_boardHeader{flex:none;align-items:center;gap:10px;display:flex}._7D6uKa_boardTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}._7D6uKa_backButton{align-items:center;gap:4px;display:inline-flex}._7D6uKa_search{min-width:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:0 260px;padding:6px 10px;font-size:13px}._7D6uKa_search::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_columns{overscroll-behavior-inline:contain;scrollbar-color:var(--dsw-alias-border-l3) var(--dsw-alias-interactive-bg-hover);scrollbar-width:thin;flex:1;grid-auto-columns:minmax(220px,1fr);grid-auto-flow:column;gap:12px;min-height:0;padding-bottom:6px;display:grid;overflow:auto hidden}._7D6uKa_columns::-webkit-scrollbar{height:10px}._7D6uKa_columns::-webkit-scrollbar-track{background:var(--dsw-alias-interactive-bg-hover);border-radius:999px}._7D6uKa_columns::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l3);background-clip:content-box;border:2px solid #0000;border-radius:999px}._7D6uKa_columns::-webkit-scrollbar-thumb:hover{background:var(--dsw-alias-border-l4);background-clip:content-box}._7D6uKa_column{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden}._7D6uKa_columnHeader{flex:none;align-items:center;gap:6px;padding:10px 12px;display:flex}._7D6uKa_columnTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;margin:0;font-size:13px;font-weight:700;overflow:hidden}._7D6uKa_columnCount{min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:1px 8px;font-size:12px}._7D6uKa_statusDot{border-radius:50%;flex:none;width:8px;height:8px}._7D6uKa_statusDot[data-status=backlog]{background:var(--dsw-alias-label-tertiary)}._7D6uKa_statusDot[data-status=todo]{background:var(--dsw-alias-state-business-primary)}._7D6uKa_statusDot[data-status=running]{background:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusDot[data-status=done]{background:var(--dsw-alias-state-success-primary)}._7D6uKa_statusDot[data-status=failed]{background:var(--dsw-alias-state-error-primary)}._7D6uKa_cards{flex-direction:column;flex:1;gap:8px;min-height:0;padding:2px 8px 10px;display:flex;overflow-y:auto}._7D6uKa_columnEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:24px 8px;font-size:12px}._7D6uKa_card{text-align:left;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;color:var(--dsw-alias-label-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;font-family:inherit;transition:box-shadow .12s,border-color .12s,transform .12s;display:flex}._7D6uKa_card:hover{box-shadow:var(--dsw-shadow-lv2);border-color:var(--dsw-alias-border-l3);transform:translateY(-1px)}._7D6uKa_card[data-status=running]{border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_cardTitle{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}._7D6uKa_cardExcerpt{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}._7D6uKa_cardMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;font-size:11px;display:flex}._7D6uKa_cardTime{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._7D6uKa_cardSchedule{white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:2px 6px;font-size:12px;line-height:1}._7D6uKa_cardRun{flex:none}._7D6uKa_cardRun[data-result=failed]{color:var(--dsw-alias-state-error-primary)}._7D6uKa_cardRun[data-result=succeeded]{color:var(--dsw-alias-state-success-primary)}._7D6uKa_cardSession{color:var(--dsw-alias-state-business-primary);flex:none}._7D6uKa_cardRunningLabel{color:var(--dsw-alias-state-warn-primary);font-size:11px}._7D6uKa_cardSpinner{border:2px solid var(--dsw-alias-state-warn-primary);border-top-color:#0000;border-radius:50%;flex:none;width:10px;height:10px;animation:.8s linear infinite _7D6uKa_dshTbSpin}@keyframes _7D6uKa_dshTbSpin{to{transform:rotate(360deg)}}._7D6uKa_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._7D6uKa_primaryButton:disabled{opacity:.5;cursor:default}._7D6uKa_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}._7D6uKa_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7D6uKa_ghostButton:disabled{opacity:.45;cursor:default}._7D6uKa_dangerButton{color:#fff;background:var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_dangerButton:hover:not(:disabled){filter:brightness(1.08)}._7D6uKa_dangerButton:active:not(:disabled){filter:brightness(.94)}._7D6uKa_dangerButton:disabled{opacity:.5;cursor:default}._7D6uKa_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}._7D6uKa_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton{color:var(--dsw-alias-state-business-primary);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0;font-size:12px}._7D6uKa_linkButton:hover{text-decoration:underline}._7D6uKa_modalBackdrop{z-index:1300;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._7D6uKa_modal{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(520px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;gap:12px;padding:18px;display:flex;overflow-y:auto}._7D6uKa_modalTitle{margin:0;font-size:15px;font-weight:700}._7D6uKa_confirmMessage{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}._7D6uKa_modalFooter{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}._7D6uKa_field{flex-direction:column;gap:5px;display:flex}._7D6uKa_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}._7D6uKa_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_select{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;max-width:100%;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}._7D6uKa_detail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(640px,100vw - 48px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}._7D6uKa_detailHeader{border-bottom:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:14px 18px;display:flex}._7D6uKa_detailTitle{overflow-wrap:anywhere;flex:1;margin:0;font-size:15px;font-weight:700}._7D6uKa_statusBadge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:2px 10px;font-size:12px}._7D6uKa_statusBadge[data-status=running]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusBadge[data-status=done]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._7D6uKa_statusBadge[data-status=failed]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_detailBody{flex-direction:column;flex:1;gap:16px;padding:14px 18px;display:flex;overflow-y:auto}._7D6uKa_detailSection{flex-direction:column;gap:6px;display:flex}._7D6uKa_detailSection h4{color:var(--dsw-alias-label-tertiary);text-transform:none;margin:0;font-size:12px;font-weight:700}._7D6uKa_detailText{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.55}._7D6uKa_scheduleToggle{color:var(--dsw-alias-label-primary);cursor:pointer;user-select:none;align-items:center;gap:8px;font-size:13px;display:flex}._7D6uKa_scheduleToggle input{accent-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleRow{align-items:center;gap:8px;display:flex}._7D6uKa_scheduleInput{min-width:0;font-family:var(--dsw-font-markdown-code-block-small);flex:1;font-size:12.5px}._7D6uKa_scheduleInputInvalid,._7D6uKa_scheduleInputInvalid:focus{border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_schedulePreset{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:none;padding:7px 8px;font-size:12.5px}._7D6uKa_scheduleMeta{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px}._7D6uKa_promptBlock{font-size:12.5px;line-height:1.5;font-family:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border:1px solid var(--dsw-alias-border-l1);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;max-height:240px;margin:0;padding:10px 12px;overflow-y:auto}._7D6uKa_executionList{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}._7D6uKa_executionRow{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}._7D6uKa_executionBadge{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:600}._7D6uKa_executionBadge[data-result=succeeded]{color:var(--dsw-alias-state-success-primary);background:0 0}._7D6uKa_executionBadge[data-result=failed]{color:var(--dsw-alias-state-error-primary);background:0 0}._7D6uKa_executionBadge[data-result=cancelled]{color:var(--dsw-alias-label-tertiary);background:0 0}._7D6uKa_executionTimes{color:var(--dsw-alias-label-secondary);font-size:12px}._7D6uKa_executionError{width:100%;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;font-size:12px}._7D6uKa_moveRow{flex-wrap:wrap;gap:8px;display:flex}._7D6uKa_detailFooter{border-top:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:12px 18px;display:flex}._7D6uKa_detailMeta{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:11px}@container _7D6uKa_task-board-view (width<=768px){._7D6uKa_board{gap:10px;padding:10px}._7D6uKa_boardHeader{flex-wrap:wrap;align-items:center;gap:8px}._7D6uKa_backButton{flex:none;order:1}._7D6uKa_boardTitle{flex:auto;order:2}._7D6uKa_boardHeader>._7D6uKa_detailMeta{flex:1 0 100%;order:3;margin-left:0}._7D6uKa_search{flex:1 0 100%;order:4;min-width:0}._7D6uKa_boardHeader>button:not(._7D6uKa_backButton){flex:1 1 0;order:5;min-width:0}._7D6uKa_columns{scroll-snap-type:inline mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch;grid-auto-columns:86cqw;gap:10px;padding-inline:2px 14cqw;scroll-padding-inline:2px}._7D6uKa_columns::-webkit-scrollbar{display:none}._7D6uKa_column{scroll-snap-align:start;scroll-snap-stop:always}}@container _7D6uKa_task-board-view (width<=720px){._7D6uKa_boardHeader>._7D6uKa_detailMeta{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}@container _7D6uKa_task-board-view (width<=600px){._7D6uKa_board{padding-inline:8px}}@media (width<=768px){[data-dsh-taskboard-view]{height:100dvh}._7D6uKa_entry,._7D6uKa_card,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle{min-height:44px}._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset{box-sizing:border-box;font-size:16px}._7D6uKa_modalBackdrop{justify-content:stretch;align-items:stretch;width:100vw;height:100dvh}._7D6uKa_modal,._7D6uKa_detail{box-sizing:border-box;border:0;border-radius:0;width:100vw;height:100dvh;max-height:none}._7D6uKa_modal{padding-top:max(16px, env(safe-area-inset-top));padding-right:max(16px, env(safe-area-inset-right));padding-bottom:max(16px, env(safe-area-inset-bottom));padding-left:max(16px, env(safe-area-inset-left))}._7D6uKa_modalFooter{z-index:1;background:var(--dsw-alias-bg-base);flex-wrap:wrap;padding-top:8px;position:sticky;bottom:0}._7D6uKa_modalFooter>button{flex:120px}._7D6uKa_detailHeader{padding-top:max(12px, env(safe-area-inset-top));padding-right:max(14px, env(safe-area-inset-right));padding-left:max(14px, env(safe-area-inset-left));flex-wrap:wrap}._7D6uKa_detailTitle{min-width:0}._7D6uKa_detailBody{overscroll-behavior-y:contain;padding-right:max(14px, env(safe-area-inset-right));padding-left:max(14px, env(safe-area-inset-left))}._7D6uKa_detailFooter{padding-right:max(14px, env(safe-area-inset-right));padding-bottom:max(12px, env(safe-area-inset-bottom));padding-left:max(14px, env(safe-area-inset-left));flex-wrap:wrap}._7D6uKa_detailFooter>button{flex:96px}._7D6uKa_detailFooter>._7D6uKa_detailMeta{text-align:end;flex:1 0 100%;margin-left:0}._7D6uKa_scheduleRow{flex-direction:column;align-items:stretch}._7D6uKa_schedulePreset{width:100%}}._7D6uKa_entry:focus-visible,._7D6uKa_card:focus-visible,._7D6uKa_primaryButton:focus-visible,._7D6uKa_ghostButton:focus-visible,._7D6uKa_dangerButton:focus-visible,._7D6uKa_iconButton:focus-visible,._7D6uKa_linkButton:focus-visible,._7D6uKa_search:focus-visible,._7D6uKa_input:focus-visible,._7D6uKa_select:focus-visible,._7D6uKa_schedulePreset:focus-visible,._7D6uKa_scheduleToggle input:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}._7D6uKa_entry,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}._7D6uKa_card:active{box-shadow:var(--dsw-shadow-lv1);transform:translateY(0)}._7D6uKa_entry:active,._7D6uKa_primaryButton:active:not(:disabled),._7D6uKa_ghostButton:active:not(:disabled),._7D6uKa_dangerButton:active:not(:disabled),._7D6uKa_iconButton:active:not(:disabled),._7D6uKa_linkButton:active:not(:disabled){transform:translateY(1px)}._7D6uKa_entry[data-active]:hover{background:var(--dsw-specific-sidebar-nav-item-active)}._7D6uKa_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton:hover:not(:disabled){text-decoration:underline}._7D6uKa_iconButton:disabled,._7D6uKa_linkButton:disabled{opacity:.45;cursor:default}._7D6uKa_search:focus,._7D6uKa_select:focus,._7D6uKa_schedulePreset:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleToggle input{margin:0}@media (prefers-reduced-motion:reduce){._7D6uKa_entry,._7D6uKa_card,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:none}._7D6uKa_cardSpinner{animation:none}}._7D6uKa_cardTags{flex-wrap:wrap;gap:4px;display:flex}._7D6uKa_cardTag{border:1px solid var(--dsh-task-tag-border);background:var(--dsh-task-tag-fill);max-width:100%;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;padding:0 7px;font-size:10px;line-height:16px;overflow:hidden}._7D6uKa_tagFilter{flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 10px;display:flex}._7D6uKa_tagFilterLabel{color:var(--dsw-alias-label-tertiary);font-size:11px}._7D6uKa_tagChip{border:1px solid var(--dsh-task-tag-border);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:999px;padding:1px 9px;font-family:inherit;font-size:11px;line-height:18px}._7D6uKa_tagChip[data-active=true]{background:var(--dsh-task-tag-fill);color:var(--dsw-alias-label-primary)}._7D6uKa_cardTag[data-tag-tone=\"0\"],._7D6uKa_tagChip[data-tag-tone=\"0\"]{--dsh-task-tag-fill:#4e93e82e;--dsh-task-tag-border:#4e93e866}._7D6uKa_cardTag[data-tag-tone=\"1\"],._7D6uKa_tagChip[data-tag-tone=\"1\"]{--dsh-task-tag-fill:#2ea36a2e;--dsh-task-tag-border:#2ea36a66}._7D6uKa_cardTag[data-tag-tone=\"2\"],._7D6uKa_tagChip[data-tag-tone=\"2\"]{--dsh-task-tag-fill:#d08a2a2e;--dsh-task-tag-border:#d08a2a66}._7D6uKa_cardTag[data-tag-tone=\"3\"],._7D6uKa_tagChip[data-tag-tone=\"3\"]{--dsh-task-tag-fill:#b456c82e;--dsh-task-tag-border:#b456c866}._7D6uKa_cardTag[data-tag-tone=\"4\"],._7D6uKa_tagChip[data-tag-tone=\"4\"]{--dsh-task-tag-fill:#cf5f7a2e;--dsh-task-tag-border:#cf5f7a66}._7D6uKa_cardTag[data-tag-tone=\"5\"],._7D6uKa_tagChip[data-tag-tone=\"5\"]{--dsh-task-tag-fill:#4a9fb52e;--dsh-task-tag-border:#4a9fb566}._7D6uKa_fieldHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.4}._7D6uKa_tagRow{align-items:center;gap:6px;display:flex}._7D6uKa_tagRow ._7D6uKa_input{flex:1 1 0;min-width:0}._7D6uKa_tagRow ._7D6uKa_ghostButton{flex:none}._7D6uKa_tagAddButton{align-self:flex-start}._7D6uKa_projectFilter{flex:none;align-items:center;gap:6px;display:flex}._7D6uKa_projectFilterLabel{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}._7D6uKa_projectDialog{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;flex-direction:column;flex:none;gap:8px;margin-bottom:8px;padding:10px 12px;display:flex}._7D6uKa_projectDialogActions{justify-content:flex-end;gap:8px;display:flex}._7D6uKa_aiParse{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._7D6uKa_aiParseRow{align-items:center;gap:8px;display:flex}._7D6uKa_aiParseRow ._7D6uKa_select{flex:1 1 0;min-width:0}._7D6uKa_aiParseRow ._7D6uKa_ghostButton,._7D6uKa_aiParseRow ._7D6uKa_primaryButton{flex:none}";
|
|
2000
|
+
const css$1 = "[data-pane=conversation],[class*=centerCol]{position:relative}[data-dsh-taskboard-view]{z-index:60;background:var(--dsw-alias-bg-base);display:none;position:absolute;inset:0;container:_7D6uKa_task-board-view/inline-size}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-dsh-taskboard-view]{display:block}html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [data-pane=conversation]>:not([data-dsh-taskboard-view]),html[data-dsh-taskboard-active]:not([data-dsh-ssh-active]) [class*=centerCol]>:not([data-dsh-taskboard-view]){display:none!important}._7D6uKa_entry{box-sizing:border-box;min-height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;text-align:left;white-space:nowrap;background:0 0;border:none;border-radius:12px;align-items:center;gap:8px;margin:0 2px;padding:7px 8px;font-size:14px;line-height:22px;display:flex}._7D6uKa_entry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_entry[data-active]{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary);font-weight:600}._7D6uKa_entryIcon{flex:none;justify-content:center;align-items:center;width:16px;height:16px;display:inline-flex}._7D6uKa_entryIcon svg{width:16px;height:16px;display:block}._7D6uKa_entryLabel{text-overflow:ellipsis;overflow:hidden}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entry,[data-sidebar-collapsed] ._7D6uKa_entry{border-radius:12px;justify-content:center;width:36px;height:36px;margin:0 auto 12px;padding:0}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entryIcon,[data-sidebar-collapsed] ._7D6uKa_entryIcon,[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entryIcon svg,[data-sidebar-collapsed] ._7D6uKa_entryIcon svg{width:18px;height:18px}[data-dsh-frame][data-sidebar-collapsed] ._7D6uKa_entryLabel,[data-sidebar-collapsed] ._7D6uKa_entryLabel{display:none}._7D6uKa_board{box-sizing:border-box;background:var(--dsw-alias-bg-base);min-width:0;height:100%;min-height:0;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family);flex-direction:column;gap:12px;padding:14px 16px 16px;display:flex}._7D6uKa_boardHeader{flex:none;align-items:center;gap:10px;display:flex}._7D6uKa_boardTitle{color:var(--dsw-alias-label-primary);white-space:nowrap;margin:0;font-size:16px;font-weight:700}._7D6uKa_backButton{align-items:center;gap:4px;display:inline-flex}._7D6uKa_search{min-width:120px;color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:0 260px;padding:6px 10px;font-size:13px}._7D6uKa_search::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_columns{overscroll-behavior-inline:contain;scrollbar-color:var(--dsw-alias-border-l3) var(--dsw-alias-interactive-bg-hover);scrollbar-width:thin;flex:1;grid-auto-columns:minmax(220px,1fr);grid-auto-flow:column;gap:12px;min-height:0;padding-bottom:6px;display:grid;overflow:auto hidden}._7D6uKa_columns::-webkit-scrollbar{height:10px}._7D6uKa_columns::-webkit-scrollbar-track{background:var(--dsw-alias-interactive-bg-hover);border-radius:999px}._7D6uKa_columns::-webkit-scrollbar-thumb{background:var(--dsw-alias-border-l3);background-clip:content-box;border:2px solid #0000;border-radius:999px}._7D6uKa_columns::-webkit-scrollbar-thumb:hover{background:var(--dsw-alias-border-l4);background-clip:content-box}._7D6uKa_column{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;min-height:0;display:flex;overflow:hidden}._7D6uKa_columnHeader{flex:none;align-items:center;gap:6px;padding:10px 12px;display:flex}._7D6uKa_columnTitle{color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;margin:0;font-size:13px;font-weight:700;overflow:hidden}._7D6uKa_columnCount{min-width:0;color:var(--dsw-alias-label-tertiary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:1px 8px;font-size:12px}._7D6uKa_statusDot{border-radius:50%;flex:none;width:8px;height:8px}._7D6uKa_statusDot[data-status=backlog]{background:var(--dsw-alias-label-tertiary)}._7D6uKa_statusDot[data-status=todo]{background:var(--dsw-alias-state-business-primary)}._7D6uKa_statusDot[data-status=running]{background:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusDot[data-status=done]{background:var(--dsw-alias-state-success-primary)}._7D6uKa_statusDot[data-status=failed]{background:var(--dsw-alias-state-error-primary)}._7D6uKa_cards{flex-direction:column;flex:1;gap:8px;min-height:0;padding:2px 8px 10px;display:flex;overflow-y:auto}._7D6uKa_columnEmpty{text-align:center;color:var(--dsw-alias-label-tertiary);padding:24px 8px;font-size:12px}._7D6uKa_card{text-align:left;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;color:var(--dsw-alias-label-primary);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;font-family:inherit;transition:box-shadow .12s,border-color .12s,transform .12s;display:flex}._7D6uKa_card:hover{box-shadow:var(--dsw-shadow-lv2);border-color:var(--dsw-alias-border-l3);transform:translateY(-1px)}._7D6uKa_card[data-status=running]{border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_cardTitle{-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:13px;font-weight:600;line-height:1.35;display:-webkit-box;overflow:hidden}._7D6uKa_cardExcerpt{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.4;display:-webkit-box;overflow:hidden}._7D6uKa_cardMeta{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;font-size:11px;display:flex}._7D6uKa_cardTime{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}._7D6uKa_cardSchedule{white-space:nowrap;min-width:0;color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover);border-radius:999px;flex:none;padding:2px 6px;font-size:12px;line-height:1}._7D6uKa_cardRun{flex:none}._7D6uKa_cardRun[data-result=failed]{color:var(--dsw-alias-state-error-primary)}._7D6uKa_cardRun[data-result=succeeded]{color:var(--dsw-alias-state-success-primary)}._7D6uKa_cardSession{color:var(--dsw-alias-state-business-primary);flex:none}._7D6uKa_cardRunningLabel{color:var(--dsw-alias-state-warn-primary);font-size:11px}._7D6uKa_cardSpinner{border:2px solid var(--dsw-alias-state-warn-primary);border-top-color:#0000;border-radius:50%;flex:none;width:10px;height:10px;animation:.8s linear infinite _7D6uKa_dshTbSpin}@keyframes _7D6uKa_dshTbSpin{to{transform:rotate(360deg)}}._7D6uKa_primaryButton{color:var(--dsw-alias-label-primary-foreground);background:var(--dsw-alias-button-info-fill);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_primaryButton:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._7D6uKa_primaryButton:disabled{opacity:.5;cursor:default}._7D6uKa_ghostButton{color:var(--dsw-alias-label-primary);border:1px solid var(--dsw-alias-border-l2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:8px;padding:5px 12px;font-size:12px}._7D6uKa_ghostButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7D6uKa_ghostButton:disabled{opacity:.45;cursor:default}._7D6uKa_dangerButton{color:#fff;background:var(--dsw-alias-state-error-primary);cursor:pointer;white-space:nowrap;border:none;border-radius:8px;padding:6px 14px;font-size:13px;font-weight:600}._7D6uKa_dangerButton:hover:not(:disabled){filter:brightness(1.08)}._7D6uKa_dangerButton:active:not(:disabled){filter:brightness(.94)}._7D6uKa_dangerButton:disabled{opacity:.5;cursor:default}._7D6uKa_iconButton{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:0;font-size:13px;display:inline-flex}._7D6uKa_iconButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton{color:var(--dsw-alias-state-business-primary);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0;font-size:12px}._7D6uKa_linkButton:hover{text-decoration:underline}._7D6uKa_modalBackdrop{z-index:1300;background:var(--dsw-alias-bg-mask-1);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}._7D6uKa_modal{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(520px,100vw - 48px);max-height:calc(100vh - 96px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;gap:12px;padding:18px;display:flex;overflow-y:auto}._7D6uKa_modalTitle{margin:0;font-size:15px;font-weight:700}._7D6uKa_confirmMessage{color:var(--dsw-alias-label-secondary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.5}._7D6uKa_modalFooter{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}._7D6uKa_field{flex-direction:column;gap:5px;display:flex}._7D6uKa_fieldLabel{color:var(--dsw-alias-label-secondary);font-size:12px;font-weight:600}._7D6uKa_input{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);resize:vertical;border-radius:8px;outline:none;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_select{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;max-width:100%;padding:7px 10px;font-family:inherit;font-size:13px}._7D6uKa_input::placeholder{color:var(--dsw-alias-label-tertiary)}._7D6uKa_formError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:12px}._7D6uKa_detail{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l2);width:min(640px,100vw - 48px);max-height:calc(100vh - 80px);box-shadow:var(--dsw-shadow-lv3);color:var(--dsw-alias-label-primary);border-radius:14px;flex-direction:column;display:flex;overflow:hidden}._7D6uKa_detailHeader{border-bottom:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:14px 18px;display:flex}._7D6uKa_detailTitle{overflow-wrap:anywhere;flex:1;margin:0;font-size:15px;font-weight:700}._7D6uKa_statusBadge{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:2px 10px;font-size:12px}._7D6uKa_statusBadge[data-status=running]{color:var(--dsw-alias-state-warn-primary);border-color:var(--dsw-alias-state-warn-primary)}._7D6uKa_statusBadge[data-status=done]{color:var(--dsw-alias-state-success-primary);border-color:var(--dsw-alias-state-success-primary)}._7D6uKa_statusBadge[data-status=failed]{color:var(--dsw-alias-state-error-primary);border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_detailBody{flex-direction:column;flex:1;gap:16px;padding:14px 18px;display:flex;overflow-y:auto}._7D6uKa_detailSection{flex-direction:column;gap:6px;display:flex}._7D6uKa_detailSection h4{color:var(--dsw-alias-label-tertiary);text-transform:none;margin:0;font-size:12px;font-weight:700}._7D6uKa_detailText{color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font-size:13px;line-height:1.55}._7D6uKa_scheduleToggle{color:var(--dsw-alias-label-primary);cursor:pointer;user-select:none;align-items:center;gap:8px;font-size:13px;display:flex}._7D6uKa_scheduleToggle input{accent-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleRow{align-items:center;gap:8px;display:flex}._7D6uKa_scheduleInput{min-width:0;font-family:var(--dsw-font-markdown-code-block-small);flex:1;font-size:12.5px}._7D6uKa_scheduleInputInvalid,._7D6uKa_scheduleInputInvalid:focus{border-color:var(--dsw-alias-state-error-primary)}._7D6uKa_schedulePreset{color:var(--dsw-alias-label-primary);background:var(--dsw-specific-input-major);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;outline:none;flex:none;padding:7px 8px;font-size:12.5px}._7D6uKa_scheduleMeta{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0;font-size:12px}._7D6uKa_promptBlock{font-size:12.5px;line-height:1.5;font-family:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-markdown-code-block);border:1px solid var(--dsw-alias-border-l1);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;max-height:240px;margin:0;padding:10px 12px;overflow-y:auto}._7D6uKa_executionList{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}._7D6uKa_executionRow{border:1px solid var(--dsw-alias-border-l1);border-radius:8px;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 10px;display:flex}._7D6uKa_executionBadge{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:600}._7D6uKa_executionBadge[data-result=succeeded]{color:var(--dsw-alias-state-success-primary);background:0 0}._7D6uKa_executionBadge[data-result=failed]{color:var(--dsw-alias-state-error-primary);background:0 0}._7D6uKa_executionBadge[data-result=cancelled]{color:var(--dsw-alias-label-tertiary);background:0 0}._7D6uKa_executionTimes{color:var(--dsw-alias-label-secondary);font-size:12px}._7D6uKa_executionError{width:100%;color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;font-size:12px}._7D6uKa_moveRow{flex-wrap:wrap;gap:8px;display:flex}._7D6uKa_detailFooter{border-top:1px solid var(--dsw-alias-separator-primary);flex:none;align-items:center;gap:10px;padding:12px 18px;display:flex}._7D6uKa_detailMeta{color:var(--dsw-alias-label-tertiary);margin-left:auto;font-size:11px}@container _7D6uKa_task-board-view (width<=768px){._7D6uKa_board{gap:10px;padding:10px}._7D6uKa_boardHeader{flex-wrap:wrap;align-items:center;gap:8px}._7D6uKa_backButton{flex:none;order:1}._7D6uKa_boardTitle{flex:auto;order:2}._7D6uKa_boardHeader>._7D6uKa_detailMeta{flex:1 0 100%;order:3;margin-left:0}._7D6uKa_search{flex:1 0 100%;order:4;min-width:0}._7D6uKa_boardHeader>button:not(._7D6uKa_backButton){flex:1 1 0;order:5;min-width:0}._7D6uKa_columns{scroll-snap-type:inline mandatory;scrollbar-width:none;-webkit-overflow-scrolling:touch;grid-auto-columns:86cqw;gap:10px;padding-inline:2px 14cqw;scroll-padding-inline:2px}._7D6uKa_columns::-webkit-scrollbar{display:none}._7D6uKa_column{scroll-snap-align:start;scroll-snap-stop:always}}@container _7D6uKa_task-board-view (width<=720px){._7D6uKa_boardHeader>._7D6uKa_detailMeta{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}}@container _7D6uKa_task-board-view (width<=600px){._7D6uKa_board{padding-inline:8px}}@media (width<=768px){[data-dsh-taskboard-view]{height:100dvh}._7D6uKa_entry,._7D6uKa_card,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle{min-height:44px}._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset{box-sizing:border-box;font-size:16px}._7D6uKa_modalBackdrop{justify-content:stretch;align-items:stretch;width:100vw;height:100dvh}._7D6uKa_modal,._7D6uKa_detail{box-sizing:border-box;border:0;border-radius:0;width:100vw;height:100dvh;max-height:none}._7D6uKa_modal{padding-top:max(16px, env(safe-area-inset-top));padding-right:max(16px, env(safe-area-inset-right));padding-bottom:max(16px, env(safe-area-inset-bottom));padding-left:max(16px, env(safe-area-inset-left))}._7D6uKa_modalFooter{z-index:1;background:var(--dsw-alias-bg-base);flex-wrap:wrap;padding-top:8px;position:sticky;bottom:0}._7D6uKa_modalFooter>button{flex:120px}._7D6uKa_detailHeader{padding-top:max(12px, env(safe-area-inset-top));padding-right:max(14px, env(safe-area-inset-right));padding-left:max(14px, env(safe-area-inset-left));flex-wrap:wrap}._7D6uKa_detailTitle{min-width:0}._7D6uKa_detailBody{overscroll-behavior-y:contain;padding-right:max(14px, env(safe-area-inset-right));padding-left:max(14px, env(safe-area-inset-left))}._7D6uKa_detailFooter{padding-right:max(14px, env(safe-area-inset-right));padding-bottom:max(12px, env(safe-area-inset-bottom));padding-left:max(14px, env(safe-area-inset-left));flex-wrap:wrap}._7D6uKa_detailFooter>button{flex:96px}._7D6uKa_detailFooter>._7D6uKa_detailMeta{text-align:end;flex:1 0 100%;margin-left:0}._7D6uKa_scheduleRow{flex-direction:column;align-items:stretch}._7D6uKa_schedulePreset{width:100%}}._7D6uKa_entry:focus-visible,._7D6uKa_card:focus-visible,._7D6uKa_primaryButton:focus-visible,._7D6uKa_ghostButton:focus-visible,._7D6uKa_dangerButton:focus-visible,._7D6uKa_iconButton:focus-visible,._7D6uKa_linkButton:focus-visible,._7D6uKa_search:focus-visible,._7D6uKa_input:focus-visible,._7D6uKa_select:focus-visible,._7D6uKa_schedulePreset:focus-visible,._7D6uKa_scheduleToggle input:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary);outline-offset:2px}._7D6uKa_entry,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:background-color .12s,color .12s,border-color .12s,outline-color .12s,box-shadow .12s,transform .12s}._7D6uKa_card:active{box-shadow:var(--dsw-shadow-lv1);transform:translateY(0)}._7D6uKa_entry:active,._7D6uKa_primaryButton:active:not(:disabled),._7D6uKa_ghostButton:active:not(:disabled),._7D6uKa_dangerButton:active:not(:disabled),._7D6uKa_iconButton:active:not(:disabled),._7D6uKa_linkButton:active:not(:disabled){transform:translateY(1px)}._7D6uKa_entry[data-active]:hover{background:var(--dsw-specific-sidebar-nav-item-active)}._7D6uKa_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._7D6uKa_linkButton:hover:not(:disabled){text-decoration:underline}._7D6uKa_iconButton:disabled,._7D6uKa_linkButton:disabled{opacity:.45;cursor:default}._7D6uKa_search:focus,._7D6uKa_select:focus,._7D6uKa_schedulePreset:focus{border-color:var(--dsw-alias-state-business-primary)}._7D6uKa_scheduleToggle input{margin:0}@media (prefers-reduced-motion:reduce){._7D6uKa_entry,._7D6uKa_card,._7D6uKa_primaryButton,._7D6uKa_ghostButton,._7D6uKa_dangerButton,._7D6uKa_iconButton,._7D6uKa_linkButton,._7D6uKa_search,._7D6uKa_input,._7D6uKa_select,._7D6uKa_schedulePreset,._7D6uKa_scheduleToggle input{transition:none}._7D6uKa_cardSpinner{animation:none}}._7D6uKa_cardTags{flex-wrap:wrap;gap:4px;display:flex}._7D6uKa_cardTag{border:1px solid var(--dsh-task-tag-border);background:var(--dsh-task-tag-fill);max-width:100%;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;border-radius:999px;padding:0 7px;font-size:10px;line-height:16px;overflow:hidden}._7D6uKa_tagFilter{flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 10px;display:flex}._7D6uKa_tagFilterLabel{color:var(--dsw-alias-label-tertiary);font-size:11px}._7D6uKa_tagChip{border:1px solid var(--dsh-task-tag-border);color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:999px;padding:1px 9px;font-family:inherit;font-size:11px;line-height:18px}._7D6uKa_tagChip[data-active=true]{background:var(--dsh-task-tag-fill);color:var(--dsw-alias-label-primary)}._7D6uKa_cardTag[data-tag-tone=\"0\"],._7D6uKa_tagChip[data-tag-tone=\"0\"]{--dsh-task-tag-fill:#4e93e82e;--dsh-task-tag-border:#4e93e866}._7D6uKa_cardTag[data-tag-tone=\"1\"],._7D6uKa_tagChip[data-tag-tone=\"1\"]{--dsh-task-tag-fill:#2ea36a2e;--dsh-task-tag-border:#2ea36a66}._7D6uKa_cardTag[data-tag-tone=\"2\"],._7D6uKa_tagChip[data-tag-tone=\"2\"]{--dsh-task-tag-fill:#d08a2a2e;--dsh-task-tag-border:#d08a2a66}._7D6uKa_cardTag[data-tag-tone=\"3\"],._7D6uKa_tagChip[data-tag-tone=\"3\"]{--dsh-task-tag-fill:#b456c82e;--dsh-task-tag-border:#b456c866}._7D6uKa_cardTag[data-tag-tone=\"4\"],._7D6uKa_tagChip[data-tag-tone=\"4\"]{--dsh-task-tag-fill:#cf5f7a2e;--dsh-task-tag-border:#cf5f7a66}._7D6uKa_cardTag[data-tag-tone=\"5\"],._7D6uKa_tagChip[data-tag-tone=\"5\"]{--dsh-task-tag-fill:#4a9fb52e;--dsh-task-tag-border:#4a9fb566}._7D6uKa_fieldHint{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:1.4}._7D6uKa_tagRow{align-items:center;gap:6px;display:flex}._7D6uKa_tagRow ._7D6uKa_input{flex:1 1 0;min-width:0}._7D6uKa_tagRow ._7D6uKa_ghostButton{flex:none}._7D6uKa_tagAddButton{align-self:flex-start}._7D6uKa_projectFilter{flex:none;align-items:center;gap:6px;display:flex}._7D6uKa_projectFilterLabel{color:var(--dsw-alias-label-secondary);white-space:nowrap;font-size:12px}._7D6uKa_projectDialog{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;flex-direction:column;flex:none;gap:8px;margin-bottom:8px;padding:10px 12px;display:flex}._7D6uKa_projectDialogActions{justify-content:flex-end;gap:8px;display:flex}._7D6uKa_aiParse{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:10px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}._7D6uKa_aiParseRow{align-items:center;gap:8px;display:flex}._7D6uKa_aiParseRow ._7D6uKa_select{flex:1 1 0;min-width:0}._7D6uKa_aiParseRow ._7D6uKa_ghostButton,._7D6uKa_aiParseRow ._7D6uKa_primaryButton{flex:none}";
|
|
1986
2001
|
const tagId$1 = "@linxin666/dsh-client-ui-task-board/packages/dsh-task-board/src/client/board.module.css";
|
|
1987
2002
|
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
|
|
1988
2003
|
const tag = document.createElement("style");
|
|
@@ -4335,10 +4350,8 @@ window.__ModuleLoader__.load({
|
|
|
4335
4350
|
}
|
|
4336
4351
|
/** Build the entry row (detached; inserted once the shell is up). */
|
|
4337
4352
|
function createEntry(options) {
|
|
4338
|
-
const
|
|
4339
|
-
|
|
4340
|
-
const entry = document.createElement(composite ? "div" : "button");
|
|
4341
|
-
if (!composite) entry.type = "button";
|
|
4353
|
+
const entry = document.createElement("button");
|
|
4354
|
+
entry.type = "button";
|
|
4342
4355
|
entry.setAttribute(options.rowAttribute, "");
|
|
4343
4356
|
if (options.plugin !== void 0) {
|
|
4344
4357
|
entry.setAttribute("data-dsh-plugin", options.plugin);
|
|
@@ -4350,57 +4363,17 @@ window.__ModuleLoader__.load({
|
|
|
4350
4363
|
const iconSpan = document.createElement("span");
|
|
4351
4364
|
iconSpan.className = options.css["entryIcon"] ?? "";
|
|
4352
4365
|
iconSpan.innerHTML = options.icon;
|
|
4353
|
-
|
|
4354
|
-
if (composite) {
|
|
4355
|
-
main.type = "button";
|
|
4356
|
-
main.className = options.css["entryMain"] ?? "";
|
|
4357
|
-
main.append(iconSpan, labelSpan);
|
|
4358
|
-
entry.append(main);
|
|
4359
|
-
} else entry.append(iconSpan, labelSpan);
|
|
4360
|
-
const actionButtons = [];
|
|
4361
|
-
for (const action of actions) {
|
|
4362
|
-
const button = document.createElement("button");
|
|
4363
|
-
button.type = "button";
|
|
4364
|
-
button.className = options.css["entryAction"] ?? "";
|
|
4365
|
-
button.setAttribute("data-dsh-entry-action", action.id);
|
|
4366
|
-
button.innerHTML = action.icon;
|
|
4367
|
-
button.addEventListener("click", () => {
|
|
4368
|
-
action.onClick(button);
|
|
4369
|
-
});
|
|
4370
|
-
entry.append(button);
|
|
4371
|
-
actionButtons.push({
|
|
4372
|
-
action,
|
|
4373
|
-
button
|
|
4374
|
-
});
|
|
4375
|
-
}
|
|
4376
|
-
let open = false;
|
|
4377
|
-
const applyActions = () => {
|
|
4378
|
-
for (const { action, button } of actionButtons) {
|
|
4379
|
-
button.innerHTML = open || action.inactiveIcon === void 0 ? action.icon : action.inactiveIcon;
|
|
4380
|
-
const text = action.label(open);
|
|
4381
|
-
button.setAttribute("aria-label", text);
|
|
4382
|
-
button.setAttribute("title", text);
|
|
4383
|
-
if (action.inactiveIcon !== void 0) button.setAttribute("aria-expanded", String(open));
|
|
4384
|
-
}
|
|
4385
|
-
};
|
|
4366
|
+
entry.append(iconSpan, labelSpan);
|
|
4386
4367
|
const applyLabel = () => {
|
|
4387
|
-
|
|
4388
|
-
if (options.tooltip !== void 0)
|
|
4368
|
+
entry.setAttribute("aria-label", options.label());
|
|
4369
|
+
if (options.tooltip !== void 0) entry.setAttribute("title", options.tooltip());
|
|
4389
4370
|
labelSpan.textContent = options.label();
|
|
4390
|
-
applyActions();
|
|
4391
4371
|
};
|
|
4392
4372
|
applyLabel();
|
|
4393
|
-
|
|
4394
|
-
if (composite) entry.addEventListener("click", (event) => {
|
|
4395
|
-
if (event.target === entry) options.onToggle();
|
|
4396
|
-
});
|
|
4373
|
+
entry.addEventListener("click", options.onToggle);
|
|
4397
4374
|
return {
|
|
4398
4375
|
entry,
|
|
4399
|
-
applyLabel
|
|
4400
|
-
setOpen: (next) => {
|
|
4401
|
-
open = next;
|
|
4402
|
-
applyActions();
|
|
4403
|
-
}
|
|
4376
|
+
applyLabel
|
|
4404
4377
|
};
|
|
4405
4378
|
}
|
|
4406
4379
|
/** Re-insert the entry after the New Session row (before the browser region). */
|
|
@@ -4424,7 +4397,7 @@ window.__ModuleLoader__.load({
|
|
|
4424
4397
|
*/
|
|
4425
4398
|
function mountSidebarEntry$1(options) {
|
|
4426
4399
|
if (typeof document !== "undefined" && document.querySelector(options.rowSelector) !== null) return () => {};
|
|
4427
|
-
const { entry, applyLabel
|
|
4400
|
+
const { entry, applyLabel } = createEntry(options);
|
|
4428
4401
|
let root;
|
|
4429
4402
|
let placed = false;
|
|
4430
4403
|
let unsubscribeRefresh;
|
|
@@ -4464,10 +4437,8 @@ window.__ModuleLoader__.load({
|
|
|
4464
4437
|
});
|
|
4465
4438
|
const unsubscribeActive = options.active === void 0 ? void 0 : (() => {
|
|
4466
4439
|
const syncActive = () => {
|
|
4467
|
-
|
|
4468
|
-
if (open) entry.dataset.active = "true";
|
|
4440
|
+
if (options.active.isOpen()) entry.dataset.active = "true";
|
|
4469
4441
|
else delete entry.dataset.active;
|
|
4470
|
-
setOpen(open);
|
|
4471
4442
|
};
|
|
4472
4443
|
const unsubscribe = options.active.subscribe(syncActive);
|
|
4473
4444
|
syncActive();
|
|
@@ -4486,8 +4457,8 @@ window.__ModuleLoader__.load({
|
|
|
4486
4457
|
//#region src/client/sidebar-entry.ts
|
|
4487
4458
|
/** Stable data attribute identifying the injected entry row. */
|
|
4488
4459
|
const ENTRY_SELECTOR = "[data-dsh-taskboard-entry]";
|
|
4489
|
-
/** Inline icon normalized to the shell's
|
|
4490
|
-
const ICON = "<svg viewBox=\"0 0 16 16\" width=\"
|
|
4460
|
+
/** Inline icon normalized to the shell's 16px navigation glyph size. */
|
|
4461
|
+
const ICON = "<svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"2\" y=\"2.5\" width=\"12\" height=\"11\" rx=\"1.5\"/><path d=\"M2 6.5h12M6.5 6.5v7\"/></svg>";
|
|
4491
4462
|
/**
|
|
4492
4463
|
* Mount the sidebar entry, waiting for the shell to render and self-healing
|
|
4493
4464
|
* on later React re-renders.
|
|
@@ -4650,17 +4621,20 @@ window.__ModuleLoader__.load({
|
|
|
4650
4621
|
})
|
|
4651
4622
|
]
|
|
4652
4623
|
});
|
|
4653
|
-
if (!state.exposed
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
className:
|
|
4657
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("
|
|
4658
|
-
className: settings_card_module_css_default.
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4662
|
-
|
|
4663
|
-
|
|
4624
|
+
if (!state.exposed && props.renderChildrenWhenNotExposed !== true) {
|
|
4625
|
+
const showNotice = props.hideNotExposedNotice !== true;
|
|
4626
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
|
|
4627
|
+
className: cardClass,
|
|
4628
|
+
children: [header, expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
4629
|
+
className: settings_card_module_css_default.body,
|
|
4630
|
+
children: showNotice ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
4631
|
+
className: settings_card_module_css_default.notExposed,
|
|
4632
|
+
role: "status",
|
|
4633
|
+
children: props.t("settings.notExposed")
|
|
4634
|
+
}) : null
|
|
4635
|
+
}) : null]
|
|
4636
|
+
});
|
|
4637
|
+
}
|
|
4664
4638
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
|
|
4665
4639
|
className: cardClass,
|
|
4666
4640
|
children: [header, expanded ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -4969,31 +4943,31 @@ window.__ModuleLoader__.load({
|
|
|
4969
4943
|
specs;
|
|
4970
4944
|
staged = /* @__PURE__ */ new Map();
|
|
4971
4945
|
listeners = /* @__PURE__ */ new Set();
|
|
4972
|
-
/** The
|
|
4973
|
-
|
|
4946
|
+
/** The form subscription installed in the constructor; released by dispose(). */
|
|
4947
|
+
disposeForm;
|
|
4974
4948
|
disposed = false;
|
|
4975
4949
|
saving = false;
|
|
4976
4950
|
failed = false;
|
|
4977
4951
|
failedReason;
|
|
4978
|
-
/** @param scope - the bound
|
|
4952
|
+
/** @param scope - the bound configuration form for this card's namespace. */
|
|
4979
4953
|
constructor(scope, specs) {
|
|
4980
4954
|
this.scope = scope;
|
|
4981
4955
|
this.specs = new Map(specs.map((spec) => [spec.field, spec]));
|
|
4982
|
-
this.
|
|
4956
|
+
this.disposeForm = scope.subscribe(() => {
|
|
4983
4957
|
this.publish();
|
|
4984
4958
|
});
|
|
4985
4959
|
}
|
|
4986
4960
|
/**
|
|
4987
|
-
* Release the
|
|
4961
|
+
* Release the form subscription and every bound store listener. The card
|
|
4988
4962
|
* must call this on teardown; later calls are no-ops.
|
|
4989
4963
|
*/
|
|
4990
4964
|
dispose() {
|
|
4991
4965
|
if (this.disposed) return;
|
|
4992
4966
|
this.disposed = true;
|
|
4993
|
-
this.
|
|
4967
|
+
this.disposeForm();
|
|
4994
4968
|
this.listeners.clear();
|
|
4995
4969
|
}
|
|
4996
|
-
/** Publish a projection of this form, rebuilt whenever the
|
|
4970
|
+
/** Publish a projection of this form, rebuilt whenever the form or a draft changes. */
|
|
4997
4971
|
bind(project) {
|
|
4998
4972
|
const store = createSnapshotStore(project());
|
|
4999
4973
|
this.listeners.add(() => {
|
|
@@ -5060,19 +5034,19 @@ window.__ModuleLoader__.load({
|
|
|
5060
5034
|
};
|
|
5061
5035
|
}
|
|
5062
5036
|
/**
|
|
5063
|
-
* Write every staged edit in one atomic
|
|
5037
|
+
* Write every staged edit in one atomic form mutation, then re-seed from
|
|
5064
5038
|
* what the Host accepted.
|
|
5065
5039
|
*
|
|
5066
5040
|
* The whole batch rides one mutate, so cross-field validate hooks
|
|
5067
5041
|
* (baseURL+model) judge it as a unit: the Host either applies every write
|
|
5068
|
-
* or refuses the batch. The
|
|
5069
|
-
*
|
|
5070
|
-
*
|
|
5071
|
-
* settled snapshot back
|
|
5072
|
-
* fails the whole save. A
|
|
5073
|
-
*
|
|
5074
|
-
* message. A save that did not land keeps its drafts, so
|
|
5075
|
-
* correct them instead of retyping.
|
|
5042
|
+
* or refuses the batch. The form contract answers a refusal or a skipped
|
|
5043
|
+
* write with `false` (it recovers with a fresh Host view instead of
|
|
5044
|
+
* throwing), so the outcome is judged twice: the answer itself, and then the
|
|
5045
|
+
* settled snapshot read back one planned write at a time. One missed write
|
|
5046
|
+
* fails the whole save. A transport that rejects instead (the dsh-web bridge
|
|
5047
|
+
* controller on a dead connection) reports through the same failure path
|
|
5048
|
+
* with its rejection message. A save that did not land keeps its drafts, so
|
|
5049
|
+
* the user can correct them instead of retyping.
|
|
5076
5050
|
* @returns settlement after the mutation and the read-back.
|
|
5077
5051
|
*/
|
|
5078
5052
|
async save() {
|
|
@@ -5094,12 +5068,13 @@ window.__ModuleLoader__.load({
|
|
|
5094
5068
|
path: [item.field]
|
|
5095
5069
|
});
|
|
5096
5070
|
let failedReason;
|
|
5071
|
+
let accepted = false;
|
|
5097
5072
|
try {
|
|
5098
|
-
await this.scope.mutate(ops);
|
|
5073
|
+
accepted = await this.scope.mutate(ops);
|
|
5099
5074
|
} catch (error) {
|
|
5100
5075
|
failedReason = error instanceof Error ? error.message : String(error);
|
|
5101
5076
|
}
|
|
5102
|
-
const landed = failedReason === void 0 && valid.every((item) => item.judge());
|
|
5077
|
+
const landed = accepted && failedReason === void 0 && valid.every((item) => item.judge());
|
|
5103
5078
|
for (const [field, before] of pending) if (landed && this.staged.get(field) === before) this.staged.delete(field);
|
|
5104
5079
|
this.saving = false;
|
|
5105
5080
|
this.failed = !landed;
|
|
@@ -5206,11 +5181,11 @@ window.__ModuleLoader__.load({
|
|
|
5206
5181
|
};
|
|
5207
5182
|
//#endregion
|
|
5208
5183
|
//#region src/client/TaskBoardSettingsCard.tsx
|
|
5209
|
-
/** Bridges the `task-board`
|
|
5184
|
+
/** Bridges the `task-board` settings form onto the card's staged form. */
|
|
5210
5185
|
var TaskBoardSettingsCardController = class {
|
|
5211
5186
|
form;
|
|
5212
5187
|
store;
|
|
5213
|
-
/** @param scope - the bound
|
|
5188
|
+
/** @param scope - the bound configuration form for the `task-board` namespace. */
|
|
5214
5189
|
constructor(scope) {
|
|
5215
5190
|
this.form = new CardForm(scope, [
|
|
5216
5191
|
booleanField("enabled"),
|
|
@@ -5238,7 +5213,7 @@ window.__ModuleLoader__.load({
|
|
|
5238
5213
|
};
|
|
5239
5214
|
}
|
|
5240
5215
|
/**
|
|
5241
|
-
* Release the card's
|
|
5216
|
+
* Release the card's form subscription and bound stores; the slot
|
|
5242
5217
|
* disposer calls this on teardown.
|
|
5243
5218
|
*/
|
|
5244
5219
|
dispose() {
|
|
@@ -5281,6 +5256,8 @@ window.__ModuleLoader__.load({
|
|
|
5281
5256
|
descriptionKey: "settings.description",
|
|
5282
5257
|
defaultOpen: false,
|
|
5283
5258
|
state,
|
|
5259
|
+
renderChildrenWhenNotExposed: true,
|
|
5260
|
+
hideNotExposedNotice: true,
|
|
5284
5261
|
onSave: props.save,
|
|
5285
5262
|
onDiscard: props.discard,
|
|
5286
5263
|
children: [
|
|
@@ -5544,7 +5521,7 @@ window.__ModuleLoader__.load({
|
|
|
5544
5521
|
/** The building package's version, when the bundle carries it. */
|
|
5545
5522
|
function bakedVersion() {
|
|
5546
5523
|
try {
|
|
5547
|
-
return "0.
|
|
5524
|
+
return "0.4.0";
|
|
5548
5525
|
} catch {
|
|
5549
5526
|
return;
|
|
5550
5527
|
}
|
|
@@ -5616,22 +5593,24 @@ window.__ModuleLoader__.load({
|
|
|
5616
5593
|
*
|
|
5617
5594
|
* - `web-ui.plugin.item` — the list seat declared by the dsh-web-settings
|
|
5618
5595
|
* group section (this family's own first-level "Web UI plugins" section);
|
|
5619
|
-
* - `
|
|
5620
|
-
*
|
|
5596
|
+
* - `plugins.bundle.config` — the official keyed seat of the harness's plugin
|
|
5597
|
+
* manager page, keyed by the bundle's package name and rendered on that
|
|
5598
|
+
* bundle's page. alpha.2 removed the `settings.plugin.item` keyed seat of the
|
|
5599
|
+
* `ui-settings-plugins` tab that this helper used before, so a card keyed by
|
|
5600
|
+
* its settings namespace has no seat to land in any more.
|
|
5621
5601
|
*
|
|
5622
|
-
* SEAT SELECTION IS NOT A DECLARATION PROBE. The official
|
|
5623
|
-
*
|
|
5624
|
-
*
|
|
5625
|
-
*
|
|
5626
|
-
*
|
|
5627
|
-
*
|
|
5628
|
-
*
|
|
5629
|
-
* heading and zero cards.
|
|
5602
|
+
* SEAT SELECTION IS NOT A DECLARATION PROBE. The official plugin surface
|
|
5603
|
+
* belongs to the harness bundle and declares its seats before any external
|
|
5604
|
+
* plugin's `apply()` runs, so "is the official seat declared?" answers yes even
|
|
5605
|
+
* in the deployment whose whole point is the family group. Choosing on that
|
|
5606
|
+
* probe sends every family card to the official page and leaves the group's own
|
|
5607
|
+
* section permanently empty — the family of reports where the section renders
|
|
5608
|
+
* its heading and zero cards.
|
|
5630
5609
|
*
|
|
5631
5610
|
* The signal that actually distinguishes the two deployments is whether
|
|
5632
5611
|
* dsh-web-settings is loaded: it is the package that owns the group section and
|
|
5633
5612
|
* it publishes the `webUiSettings` service during `apply()`, which every
|
|
5634
|
-
* family plugin already reads for its settings
|
|
5613
|
+
* family plugin already reads for its settings form. Group loaded -> the family
|
|
5635
5614
|
* seat; group absent -> the official seat.
|
|
5636
5615
|
*
|
|
5637
5616
|
* The decision is re-evaluated on every `slots/changed` because the group may
|
|
@@ -5647,8 +5626,8 @@ window.__ModuleLoader__.load({
|
|
|
5647
5626
|
*/
|
|
5648
5627
|
/** The family list seat key. */
|
|
5649
5628
|
const FAMILY_PLUGIN_CARD_SEAT = "web-ui.plugin.item";
|
|
5650
|
-
/** The official keyed plugin-card seat key. */
|
|
5651
|
-
const OFFICIAL_PLUGIN_CARD_SEAT = "
|
|
5629
|
+
/** The official keyed plugin-card seat key (the alpha.2 bundle-configuration seat). */
|
|
5630
|
+
const OFFICIAL_PLUGIN_CARD_SEAT = "plugins.bundle.config";
|
|
5652
5631
|
/** The service dsh-web-settings publishes while it is loaded. */
|
|
5653
5632
|
const FAMILY_GROUP_SERVICE = "webUiSettings";
|
|
5654
5633
|
/**
|
|
@@ -5711,7 +5690,7 @@ window.__ModuleLoader__.load({
|
|
|
5711
5690
|
...seat.inject === void 0 ? {} : { inject }
|
|
5712
5691
|
} : {
|
|
5713
5692
|
name: OFFICIAL_PLUGIN_CARD_SEAT,
|
|
5714
|
-
key: seat.
|
|
5693
|
+
key: seat.bundle,
|
|
5715
5694
|
locale: seat.locale,
|
|
5716
5695
|
...seat.inject === void 0 ? {} : { inject }
|
|
5717
5696
|
}, component);
|
|
@@ -5733,9 +5712,27 @@ window.__ModuleLoader__.load({
|
|
|
5733
5712
|
//#region src/client/index.ts
|
|
5734
5713
|
/** Locale namespace this plugin owns. */
|
|
5735
5714
|
const NS = "task-board";
|
|
5736
|
-
/** Settings namespace
|
|
5715
|
+
/** Settings namespace this card edits (the family identity of the plugin's own settings form). */
|
|
5737
5716
|
const TASK_BOARD_NS = "task-board";
|
|
5738
5717
|
/**
|
|
5718
|
+
* Profile entry id the family aggregate's generated row carries — the
|
|
5719
|
+
* deployment shape nearly every user runs. Under 0.1.7 a settings form is
|
|
5720
|
+
* addressed by profile entry id, so the shared-forms fallback below has to
|
|
5721
|
+
* name it; the family binder resolves the family namespace instead.
|
|
5722
|
+
*/
|
|
5723
|
+
const AGGREGATE_ENTRY_ID = "web-ui-task-board";
|
|
5724
|
+
/**
|
|
5725
|
+
* Profile entry ids this package's two patch rows carry: the aggregate's
|
|
5726
|
+
* generated row and the standalone bundle patch's row (`ui-task-board`), plus
|
|
5727
|
+
* the bare namespace as the last resort for a Host whose descriptor is keyed
|
|
5728
|
+
* by the family namespace itself.
|
|
5729
|
+
*/
|
|
5730
|
+
const TASK_BOARD_ENTRY_IDS = [
|
|
5731
|
+
AGGREGATE_ENTRY_ID,
|
|
5732
|
+
"ui-task-board",
|
|
5733
|
+
TASK_BOARD_NS
|
|
5734
|
+
];
|
|
5735
|
+
/**
|
|
5739
5736
|
* Required services (fiber inject waiting — the runtime must be up first).
|
|
5740
5737
|
* The generated remote faces are probed at use time instead of injected:
|
|
5741
5738
|
* `remote.agentPresets` only registers on 0.1.2-alpha.2 hosts (the
|
|
@@ -5748,10 +5745,11 @@ window.__ModuleLoader__.load({
|
|
|
5748
5745
|
"sessions",
|
|
5749
5746
|
"workspaces",
|
|
5750
5747
|
"connection",
|
|
5751
|
-
"
|
|
5748
|
+
"configForms",
|
|
5752
5749
|
"locale",
|
|
5753
5750
|
"remote",
|
|
5754
|
-
"remote.session"
|
|
5751
|
+
"remote.session",
|
|
5752
|
+
"uiWorkspace"
|
|
5755
5753
|
];
|
|
5756
5754
|
/**
|
|
5757
5755
|
* Mount the task board.
|
|
@@ -5774,10 +5772,10 @@ window.__ModuleLoader__.load({
|
|
|
5774
5772
|
try {
|
|
5775
5773
|
setRuntimeTranslate(ctx.locale.bind(NS));
|
|
5776
5774
|
} catch {}
|
|
5777
|
-
const
|
|
5778
|
-
const settingsCard = new TaskBoardSettingsCardController(
|
|
5775
|
+
const settingsForm = bindSettingsForm(ctx);
|
|
5776
|
+
const settingsCard = new TaskBoardSettingsCardController(settingsForm);
|
|
5779
5777
|
installPluginCard(ctx, {
|
|
5780
|
-
|
|
5778
|
+
bundle: "@linxin666/dsh-client-ui-task-board",
|
|
5781
5779
|
id: "task-board",
|
|
5782
5780
|
order: 110,
|
|
5783
5781
|
locale: NS,
|
|
@@ -5797,8 +5795,9 @@ window.__ModuleLoader__.load({
|
|
|
5797
5795
|
store: new LocalStorageTaskStore(),
|
|
5798
5796
|
transport: new HttpTaskBoardHostTransport(),
|
|
5799
5797
|
sessions: {
|
|
5800
|
-
|
|
5801
|
-
open: (id) =>
|
|
5798
|
+
current: () => mainViewSessionId(sessions.list.getSnapshot().byId),
|
|
5799
|
+
open: (id) => ctx.uiWorkspace.openSession(id),
|
|
5800
|
+
subscribe: (fn) => sessions.list.subscribe(fn)
|
|
5802
5801
|
}
|
|
5803
5802
|
});
|
|
5804
5803
|
controller.start();
|
|
@@ -5887,15 +5886,55 @@ window.__ModuleLoader__.load({
|
|
|
5887
5886
|
};
|
|
5888
5887
|
};
|
|
5889
5888
|
const syncEnabled = () => {
|
|
5890
|
-
const snapshot =
|
|
5889
|
+
const snapshot = settingsForm.getSnapshot();
|
|
5891
5890
|
if (snapshot.status === "ready" ? snapshot.value?.enabled ?? true : snapshot.status === "unavailable") mountUi();
|
|
5892
5891
|
else uiDisposer?.();
|
|
5893
5892
|
};
|
|
5894
|
-
|
|
5893
|
+
settingsForm.subscribe(syncEnabled);
|
|
5895
5894
|
syncEnabled();
|
|
5896
5895
|
}
|
|
5896
|
+
/**
|
|
5897
|
+
* Bind the settings form this card stages over.
|
|
5898
|
+
*
|
|
5899
|
+
* The family binder (`ctx.get('webUiSettings')`, published by dsh-web-settings)
|
|
5900
|
+
* comes first: it is what traces this package's family namespace onto the
|
|
5901
|
+
* profile entry id the Host serves the form under, and it keeps the loopback
|
|
5902
|
+
* bridge as its own fallback. A page without that group falls back to the
|
|
5903
|
+
* shared configuration forms service bound directly at one of this package's
|
|
5904
|
+
* own profile entry ids.
|
|
5905
|
+
* @param ctx - client root context.
|
|
5906
|
+
* @returns the form the settings card reads and writes.
|
|
5907
|
+
*/
|
|
5908
|
+
function bindSettingsForm(ctx) {
|
|
5909
|
+
const binder = ctx.get("webUiSettings");
|
|
5910
|
+
if (binder !== void 0 && typeof binder.bind === "function") return binder.bind({ namespace: TASK_BOARD_NS });
|
|
5911
|
+
return ctx.configForms.get(servedEntryId(ctx.configForms));
|
|
5912
|
+
}
|
|
5913
|
+
/**
|
|
5914
|
+
* The profile entry id this package's own row carries.
|
|
5915
|
+
*
|
|
5916
|
+
* The shared describe mirror is the only local evidence of which row id this
|
|
5917
|
+
* profile actually serves, but it answers asynchronously: at plugin
|
|
5918
|
+
* activation it usually holds nothing yet. An unanswered mirror therefore
|
|
5919
|
+
* binds the aggregate row id rather than guessing among the candidates —
|
|
5920
|
+
* the form is bound once for the session, so a wrong guess would leave the
|
|
5921
|
+
* card reporting an unserved namespace even after the mirror settles.
|
|
5922
|
+
* @param forms - the shared configuration forms service.
|
|
5923
|
+
* @returns the entry id to bind.
|
|
5924
|
+
*/
|
|
5925
|
+
function servedEntryId(forms) {
|
|
5926
|
+
let served;
|
|
5927
|
+
try {
|
|
5928
|
+
served = forms.describe().getSnapshot().view?.namespaces.map((view) => view.ns);
|
|
5929
|
+
} catch {
|
|
5930
|
+
served = void 0;
|
|
5931
|
+
}
|
|
5932
|
+
if (served === void 0) return AGGREGATE_ENTRY_ID;
|
|
5933
|
+
return TASK_BOARD_ENTRY_IDS.find((id) => served.includes(id)) ?? TASK_BOARD_NS;
|
|
5934
|
+
}
|
|
5897
5935
|
//#endregion
|
|
5898
5936
|
exports.apply = apply;
|
|
5937
|
+
exports.bindSettingsForm = bindSettingsForm;
|
|
5899
5938
|
exports.inject = inject;
|
|
5900
5939
|
return module.exports;
|
|
5901
5940
|
}
|