@lemoncat7/dsh-partner 1.5.1 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAuC3E,eAAO,MAAM,MAAM,UAAkC,CAAA;AAErD,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAQ9C"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAwC3E,eAAO,MAAM,MAAM,UAAkC,CAAA;AAErD,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAQ9C"}
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
- --partner-canvas: var(--partner-solid-canvas);
1228
- --partner-surface: rgba(8, 10, 12, .19);
1229
- --partner-pane: rgba(8, 10, 12, .18);
1230
- --partner-raised: rgba(8, 10, 12, .42);
1231
- --partner-control: rgba(8, 10, 12, .3);
1232
- --partner-card-surface: rgba(7, 9, 11, .22);
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-canvas: #1c1c1e;
1235
- --partner-solid-panel: #2c2c2e;
1236
- --partner-solid-raised: #323235;
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: #f5f5f7;
1245
- --partner-text-secondary: #d1d1d6;
1246
- --partner-text-tertiary: #98989d;
1247
- --partner-accent: #aeaeb2;
1248
- --partner-accent-strong: #f5f5f7;
1249
- --partner-on-accent: #1d1d1f;
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: rgba(255, 255, 255, .105);
1255
- --partner-separator: rgba(255, 255, 255, .08);
1256
- --partner-hover: rgba(255, 255, 255, .075);
1257
- --partner-selected: rgba(255, 255, 255, .09);
1258
- --partner-focus-ring: rgba(255, 255, 255, .52);
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);
@@ -1677,7 +1675,7 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
1677
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; }
1678
1676
  .dsh-partner-avatar.is-small { width: 25px; height: 25px; border-radius: 8px; font-size: var(--partner-font-caption); }
1679
1677
 
1680
- .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: var(--partner-canvas); }
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; }
1681
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); }
1682
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)); }
1683
1681
  .dsh-partner-glass-surface.is-fallback { -webkit-backdrop-filter: var(--partner-glass-filter); backdrop-filter: var(--partner-glass-filter); }
@@ -2484,7 +2482,6 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
2484
2482
 
2485
2483
  @media (prefers-reduced-transparency: reduce) {
2486
2484
  :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
2487
- --partner-canvas: var(--partner-solid-canvas);
2488
2485
  --partner-surface: var(--partner-solid-panel);
2489
2486
  --partner-pane: var(--partner-solid-panel);
2490
2487
  --partner-raised: var(--partner-solid-raised);
@@ -2510,7 +2507,6 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
2510
2507
 
2511
2508
  @supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
2512
2509
  :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
2513
- --partner-canvas: var(--partner-solid-canvas);
2514
2510
  --partner-surface: var(--partner-solid-panel);
2515
2511
  --partner-pane: var(--partner-solid-panel);
2516
2512
  --partner-raised: var(--partner-solid-raised);
@@ -2609,6 +2605,262 @@ body[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {
2609
2605
  // src/ui/workspace-ui.css
2610
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';
2611
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
+
2612
2864
  // src/client-api.ts
2613
2865
  var PARTNER_API = "/partner-local/v1";
2614
2866
  async function api(path = "", init = {}) {
@@ -4488,7 +4740,8 @@ var import_jsx_runtime9 = require("react/jsx-runtime");
4488
4740
  var PLUGIN_ID = "@lemoncat7/dsh-partner";
4489
4741
  var STYLE_ID = `${PLUGIN_ID}/client`;
4490
4742
  var cssText = `${client_default}
4491
- ${workspace_ui_default}`;
4743
+ ${workspace_ui_default}
4744
+ ${responsive_ui_default}`;
4492
4745
  var WORKSPACE_PAGES = /* @__PURE__ */ new Set(["skills", "board", "schedules"]);
4493
4746
  var inject = ["slots", "layout", "sessions"];
4494
4747
  function apply(ctx) {
@@ -4607,7 +4860,7 @@ function PartnerWorkspace({ controller }) {
4607
4860
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("main", { className: "dsh-partner-workspace", children: [
4608
4861
  creatingCompanion && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(CompanionCreateDialog, { close: () => setCreatingCompanion(false), create }),
4609
4862
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("header", { className: "dsh-partner-topbar", children: [
4610
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { children: [
4863
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "dsh-partner-topbar-brand", children: [
4611
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 }) }),
4612
4865
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconAgentPresetOutline16, { size: 18 }),
4613
4866
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { children: [
@@ -4615,20 +4868,17 @@ function PartnerWorkspace({ controller }) {
4615
4868
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("small", { children: "\u957F\u671F\u8EAB\u4EFD\u4E0E\u5FAE\u4FE1\u6E20\u9053" })
4616
4869
  ] })
4617
4870
  ] }),
4618
- /* @__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: [
4619
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", className: view === "skills" ? "is-active" : "", "aria-label": "Skill \u5E02\u573A", onClick: () => setView("skills"), children: [
4620
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconBrowseOutline16, { size: 16 }),
4621
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "Skill" })
4622
- ] }),
4623
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", className: view === "board" ? "is-active" : "", "aria-label": "\u4EFB\u52A1\u770B\u677F", onClick: () => setView("board"), children: [
4624
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconListPenOutline16, { size: 16 }),
4625
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "\u770B\u677F" })
4626
- ] }),
4627
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("button", { type: "button", className: view === "schedules" ? "is-active" : "", "aria-label": "\u5B9A\u65F6\u4EFB\u52A1", onClick: () => setView("schedules"), children: [
4628
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_dsh_client_ui_primitives8.IconPlayOutline16, { size: 16 }),
4629
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "\u5B9A\u65F6" })
4630
- ] })
4631
- ] })
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
+ )
4632
4882
  ] }),
4633
4883
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "dsh-partner-grid", children: [
4634
4884
  /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("aside", { className: "dsh-partner-roster", children: [
@@ -4710,6 +4960,38 @@ function PartnerWorkspace({ controller }) {
4710
4960
  ] })
4711
4961
  ] });
4712
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
+ }
4713
4995
  function HomePanel({ companion, snapshot, navigate, openSession, startSession, renewSession }) {
4714
4996
  const channel = snapshot.channels.find((item) => item.companionId === companion.id);
4715
4997
  const sessions2 = snapshot.sessions.filter((item) => item.companionId === companion.id);