@ash-qw/dsh-theme-prts 1.0.5 → 1.0.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ash-qw/dsh-theme-prts",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Unofficial Arknights P.R.T.S.-inspired UI theme for DeepSeek Harness Web",
@@ -12,6 +12,8 @@ function closestWithClassSuffix(node, suffix) {
12
12
  }
13
13
 
14
14
  function classify(button, operation) {
15
+ // The host's process disclosure owns its transparent, full-width hit area.
16
+ if (button.hasAttribute('data-turn-process')) return null
15
17
  if (button.tagName !== 'BUTTON' || !operation.contains(button)) return null
16
18
  if (hasClassSuffix(button, '_sessionLogButton')) return 'header'
17
19
  if (button.closest('[data-produced-files-row]') || hasClassSuffix(button, '_showFolder')) return 'utility'
@@ -96,7 +98,7 @@ export function createConversationControlAdapter({ document, window }) {
96
98
  subtree: true,
97
99
  childList: true,
98
100
  attributes: true,
99
- attributeFilter: ['class', 'data-approval-key'],
101
+ attributeFilter: ['class', 'data-approval-key', 'data-turn-process'],
100
102
  })
101
103
  },
102
104
  dispose() {
@@ -126,7 +126,9 @@ export function themeSettingsMarkup() {
126
126
  <button type="button" data-prts-settings-jump="particles">粒子效果</button>
127
127
  </nav>
128
128
  <div data-prts-theme-settings-scroll>
129
- <section data-prts-settings-presets data-prts-settings-section="appearance" tabindex="-1">
129
+ <section data-prts-settings-section="appearance" tabindex="-1">
130
+ <header data-prts-section-heading><strong>外观</strong><small>预设、界面材质与会话样式</small></header>
131
+ <section data-prts-settings-presets>
130
132
  <header><span><strong>视觉预设</strong></span></header>
131
133
  <div>${presetMarkup()}</div>
132
134
  </section>
@@ -138,14 +140,15 @@ export function themeSettingsMarkup() {
138
140
  ${settingButtons('conversationStyle', '会话主题', [['native', '原有'], ['deck-chat', '通讯链路']])}
139
141
  </div>
140
142
  </section>
143
+ </section>
141
144
  <section data-prts-settings-common data-prts-settings-section="interaction" tabindex="-1">
142
- <header><span><strong>交互</strong></span></header>
145
+ <header data-prts-section-heading><strong>交互</strong><small>光标、导航栏与动态反馈</small></header>
143
146
  <div data-prts-settings-common-grid>
144
147
  ${COMMON_CONTROLS.filter(([key]) => ['cursor', 'railDefaultHidden', 'motion'].includes(key)).map(([key, label, options]) => settingButtons(key, label, options)).join('')}
145
148
  </div>
146
149
  </section>
147
150
  <section data-prts-settings-common data-prts-settings-section="flow" tabindex="-1">
148
- <header><span><strong>会话流线</strong></span></header>
151
+ <header data-prts-section-heading><strong>会话流线</strong><small>当前会话的流线与辉光</small></header>
149
152
  <div data-prts-settings-common-grid>
150
153
  ${COMMON_CONTROLS.filter(([key]) => ['sessionFlow', 'sessionGlow', 'sessionFlowPalette'].includes(key)).map(([key, label, options]) => settingButtons(key, label, options)).join('')}
151
154
  ${sessionFlowColorMarkup()}
@@ -158,7 +161,7 @@ export function themeSettingsMarkup() {
158
161
  </section>
159
162
 
160
163
  <details data-prts-settings-advanced data-prts-settings-section="particles" tabindex="-1">
161
- <summary><span><strong>粒子效果</strong></span><output data-prts-advanced-summary>标准 / 1×</output></summary>
164
+ <summary data-prts-section-heading><span><strong>粒子效果</strong><small>徽记精度与跟随移动速度</small></span><output data-prts-advanced-summary>标准 / 1×</output></summary>
162
165
  <div data-prts-settings-advanced-content>
163
166
  <section data-prts-particle-detail>
164
167
  <header><strong>粒子精度</strong><span>同时调整会话与新会话徽记</span></header>
@@ -516,6 +519,22 @@ export function createThemeSettingsOverlay({
516
519
  }, 300)
517
520
  }
518
521
 
522
+ function syncSectionNavigation() {
523
+ const scroller = panel?.querySelector('[data-prts-theme-settings-scroll]')
524
+ if (!scroller || !scroller.clientHeight) return
525
+ const sections = [...panel.querySelectorAll('[data-prts-settings-section]')]
526
+ const top = scroller.getBoundingClientRect().top + 32
527
+ let current = sections[0]
528
+ for (const section of sections) {
529
+ if (section.getBoundingClientRect().top <= top) current = section
530
+ }
531
+ if (scroller.scrollTop > 0 && scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight - 2) current = sections.at(-1)
532
+ for (const button of panel.querySelectorAll('[data-prts-settings-jump]')) {
533
+ if (button.dataset.prtsSettingsJump === current?.dataset.prtsSettingsSection) button.setAttribute('aria-current', 'location')
534
+ else button.removeAttribute('aria-current')
535
+ }
536
+ }
537
+
519
538
  function onPanelClick(event) {
520
539
  if (event.target === panel) { setOpen(false); return }
521
540
  const target = event.target?.closest?.('button')
@@ -525,8 +544,9 @@ export function createThemeSettingsOverlay({
525
544
  const scroller = panel.querySelector('[data-prts-theme-settings-scroll]')
526
545
  if (section && scroller) {
527
546
  if (section.tagName === 'DETAILS') section.open = true
528
- scroller.scrollTo?.({ top: target.dataset.prtsSettingsJump === 'appearance' ? 0 : scroller.scrollTop + section.getBoundingClientRect().top - scroller.getBoundingClientRect().top, behavior: 'instant' })
547
+ scroller.scrollTo?.({ top: target.dataset.prtsSettingsJump === 'appearance' ? 0 : scroller.scrollTop + section.getBoundingClientRect().top - scroller.getBoundingClientRect().top - 16, behavior: 'instant' })
529
548
  section.focus?.({ preventScroll: true })
549
+ syncSectionNavigation()
530
550
  }
531
551
  return
532
552
  }
@@ -622,6 +642,8 @@ export function createThemeSettingsOverlay({
622
642
 
623
643
  trigger?.addEventListener('click', toggle)
624
644
  panel?.addEventListener('click', onPanelClick)
645
+ panel?.querySelector('[data-prts-theme-settings-scroll]')?.addEventListener('scroll', syncSectionNavigation, { passive: true })
646
+ panel?.querySelector('[data-prts-settings-jump]')?.setAttribute('aria-current', 'location')
625
647
  panel?.addEventListener('cancel', onCancel)
626
648
  panel?.addEventListener('input', onPanelInput)
627
649
  panel?.addEventListener('change', commitFromControl)
@@ -656,6 +678,7 @@ export function createThemeSettingsOverlay({
656
678
  trigger?.setAttribute('aria-expanded', 'false')
657
679
  trigger?.removeEventListener('click', toggle)
658
680
  panel?.removeEventListener('click', onPanelClick)
681
+ panel?.querySelector('[data-prts-theme-settings-scroll]')?.removeEventListener('scroll', syncSectionNavigation)
659
682
  panel?.removeEventListener('cancel', onCancel)
660
683
  panel?.removeEventListener('input', onPanelInput)
661
684
  panel?.removeEventListener('change', commitFromControl)
@@ -1120,14 +1120,15 @@ html[data-dsh-prts] [data-width-handle]:not([data-dragging]) {
1120
1120
  z-index: 3;
1121
1121
  }
1122
1122
 
1123
+ /* Local submission echoes precede the durable user node; style both on first paint. */
1123
1124
  html[data-dsh-prts][data-prts-conversation-style="native"] [data-message-role="user"],
1124
- html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind="user"] {
1125
+ html[data-dsh-prts][data-prts-conversation-style="native"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) {
1125
1126
  position: relative;
1126
1127
  color: var(--prts-ink);
1127
1128
  }
1128
1129
 
1129
1130
  html[data-dsh-prts][data-prts-conversation-style="native"] [data-message-role="user"],
1130
- html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind="user"] [class$="_bubble"] {
1131
+ html[data-dsh-prts][data-prts-conversation-style="native"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"] {
1131
1132
  border: 1px solid var(--prts-line-strong) !important;
1132
1133
  border-left: 4px solid var(--prts-yellow) !important;
1133
1134
  border-radius: var(--prts-radius-card) !important;
@@ -1138,23 +1139,23 @@ html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind=
1138
1139
  }
1139
1140
 
1140
1141
  html[data-dsh-prts][data-prts-conversation-style="native"] [data-message-role="user"] :is([data-markdown], [class*="markdown" i]),
1141
- html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind="user"] [class$="_bubble"] :is([data-markdown], [class*="markdown" i]) {
1142
+ html[data-dsh-prts][data-prts-conversation-style="native"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"] :is([data-markdown], [class*="markdown" i]) {
1142
1143
  background: transparent !important;
1143
1144
  }
1144
1145
 
1145
1146
  html[data-dsh-prts][data-prts-conversation-style="native"] [data-message-role="user"] :is(pre, table, blockquote),
1146
- html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind="user"] [class$="_bubble"] :is(pre, table, blockquote) {
1147
+ html[data-dsh-prts][data-prts-conversation-style="native"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"] :is(pre, table, blockquote) {
1147
1148
  border: 1px solid var(--prts-line);
1148
1149
  background: var(--prts-glass-dense);
1149
1150
  }
1150
1151
 
1151
1152
  html[data-dsh-prts][data-prts-conversation-style="native"] [data-message-role="user"] :is(pre, code),
1152
- html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind="user"] [class$="_bubble"] :is(pre, code) {
1153
+ html[data-dsh-prts][data-prts-conversation-style="native"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"] :is(pre, code) {
1153
1154
  font-family: var(--prts-mono) !important;
1154
1155
  }
1155
1156
 
1156
1157
  html[data-dsh-prts][data-prts-conversation-style="native"] [data-message-role="user"] pre,
1157
- html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind="user"] [class$="_bubble"] pre {
1158
+ html[data-dsh-prts][data-prts-conversation-style="native"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"] pre {
1158
1159
  max-width: 100%;
1159
1160
  overflow: auto;
1160
1161
  padding: 14px;
@@ -1163,7 +1164,7 @@ html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind=
1163
1164
  }
1164
1165
 
1165
1166
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is(
1166
- [data-chat-flow-kind="user"],
1167
+ :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])),
1167
1168
  [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])
1168
1169
  ) {
1169
1170
  position: relative;
@@ -1171,7 +1172,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is(
1171
1172
  overflow: visible;
1172
1173
  }
1173
1174
 
1174
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"] {
1175
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) {
1175
1176
  padding-inline-end: 54px;
1176
1177
  color: var(--prts-ink);
1177
1178
  }
@@ -1200,7 +1201,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role
1200
1201
  }
1201
1202
 
1202
1203
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])::before,
1203
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"]::after,
1204
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering]))::after,
1204
1205
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="assistant"]::before,
1205
1206
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="user"]::after {
1206
1207
  position: absolute;
@@ -1240,7 +1241,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role
1240
1241
  0 8px 20px var(--prts-chat-shadow);
1241
1242
  }
1242
1243
 
1243
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"]::after,
1244
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering]))::after,
1244
1245
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="user"]::after {
1245
1246
  content: "我";
1246
1247
  right: 0;
@@ -1252,7 +1253,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role
1252
1253
  font: 500 13px/1 var(--prts-mono);
1253
1254
  }
1254
1255
 
1255
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"] [class$="_bubble"],
1256
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"],
1256
1257
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="user"] {
1257
1258
  border: 1px solid var(--prts-chat-user-edge) !important;
1258
1259
  border-radius: 18px 6px 18px 18px !important;
@@ -1332,7 +1333,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is(
1332
1333
  [data-prts-ai-surface],
1333
1334
  [data-message-role="assistant"],
1334
1335
  [data-message-role="user"],
1335
- [data-chat-flow-kind="user"] [class$="_bubble"]
1336
+ :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"]
1336
1337
  ) :is([data-markdown], [class*="markdown" i]) {
1337
1338
  background: transparent !important;
1338
1339
  }
@@ -1341,7 +1342,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is(
1341
1342
  [data-prts-ai-surface],
1342
1343
  [data-message-role="assistant"],
1343
1344
  [data-message-role="user"],
1344
- [data-chat-flow-kind="user"] [class$="_bubble"]
1345
+ :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"]
1345
1346
  ) :is(pre, table, blockquote) {
1346
1347
  border: 1px solid color-mix(in srgb, var(--prts-cyan) 24%, var(--prts-line));
1347
1348
  background: color-mix(in srgb, var(--prts-canvas) 88%, transparent);
@@ -1351,7 +1352,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is(
1351
1352
  [data-prts-ai-surface],
1352
1353
  [data-message-role="assistant"],
1353
1354
  [data-message-role="user"],
1354
- [data-chat-flow-kind="user"] [class$="_bubble"]
1355
+ :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"]
1355
1356
  ) :is(pre, code) {
1356
1357
  font-family: var(--prts-mono) !important;
1357
1358
  }
@@ -1360,7 +1361,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is(
1360
1361
  [data-prts-ai-surface],
1361
1362
  [data-message-role="assistant"],
1362
1363
  [data-message-role="user"],
1363
- [data-chat-flow-kind="user"] [class$="_bubble"]
1364
+ :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"]
1364
1365
  ) pre {
1365
1366
  max-width: 100%;
1366
1367
  overflow: auto;
@@ -1785,7 +1786,7 @@ html[data-dsh-prts-settings] :is(.prts-plugin-settings button[role='switch'], [d
1785
1786
  }
1786
1787
 
1787
1788
  @media (max-width: 760px) {
1788
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"] {
1789
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) {
1789
1790
  padding-inline: 8px 50px;
1790
1791
  }
1791
1792
 
@@ -1802,7 +1803,7 @@ html[data-dsh-prts-settings] :is(.prts-plugin-settings button[role='switch'], [d
1802
1803
  border-radius: 11px 11px 13px 13px;
1803
1804
  }
1804
1805
 
1805
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"]::after,
1806
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering]))::after,
1806
1807
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="user"]::after {
1807
1808
  right: 8px;
1808
1809
  width: 34px;
@@ -1811,7 +1812,7 @@ html[data-dsh-prts-settings] :is(.prts-plugin-settings button[role='switch'], [d
1811
1812
  font-size: 11px;
1812
1813
  }
1813
1814
 
1814
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"] [class$="_bubble"],
1815
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is([data-chat-flow-kind="user"], [data-submission-echo]:not([data-pending-steering])) [class$="_bubble"],
1815
1816
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="user"] {
1816
1817
  padding: 11px 15px !important;
1817
1818
  border-radius: 16px 5px 16px 16px !important;
@@ -893,3 +893,71 @@ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-reset-zone] { padding:
893
893
  html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-common] [data-prts-setting-row] { grid-template-columns: minmax(0, 1fr); gap: 10px; }
894
894
  html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-common] [data-prts-setting-row]:has(> [data-prts-setting-switch]) { grid-template-columns: minmax(0, 1fr) auto; gap: 20px; }
895
895
  }
896
+
897
+ /* Four navigation destinations, each with one continuous settings surface. */
898
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-theme-settings-scroll] {
899
+ padding: 20px 24px 28px;
900
+ background: var(--prts-canvas);
901
+ }
902
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section] {
903
+ margin: 0 0 28px;
904
+ padding: 0 20px 8px;
905
+ border: 1px solid var(--prts-line);
906
+ border-radius: 6px;
907
+ background: var(--prts-panel);
908
+ scroll-margin-top: 16px;
909
+ }
910
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section] > [data-prts-section-heading] {
911
+ display: flex;
912
+ align-items: center;
913
+ justify-content: space-between;
914
+ gap: 12px;
915
+ min-height: 76px;
916
+ margin: 0 -20px 8px;
917
+ padding: 18px 20px;
918
+ border: 0;
919
+ border-bottom: 1px solid var(--prts-line);
920
+ border-radius: 5px 5px 0 0;
921
+ background: var(--prts-panel-raised);
922
+ }
923
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section] > [data-prts-section-heading] > span {
924
+ display: grid;
925
+ gap: 5px;
926
+ }
927
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section] > [data-prts-section-heading] strong {
928
+ font: 650 18px/1.4 var(--prts-body);
929
+ letter-spacing: 0;
930
+ }
931
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section] > [data-prts-section-heading] small {
932
+ color: var(--prts-muted);
933
+ font: 400 12px/1.5 var(--prts-body);
934
+ }
935
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section="appearance"] > section {
936
+ margin-bottom: 8px;
937
+ }
938
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section="appearance"] > section > header {
939
+ padding: 16px 0 10px;
940
+ }
941
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section="appearance"] > section > header strong {
942
+ font-size: 13px;
943
+ color: var(--prts-muted);
944
+ }
945
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-advanced]:not([open]) {
946
+ padding-bottom: 0;
947
+ }
948
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-advanced]:not([open]) > summary {
949
+ margin-bottom: 0;
950
+ border-bottom: 0;
951
+ border-radius: 5px;
952
+ }
953
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-jump][aria-current="location"] {
954
+ color: var(--prts-ink);
955
+ background: var(--prts-panel-raised);
956
+ box-shadow: inset 3px 0 var(--prts-yellow);
957
+ }
958
+ @media (max-width: 720px) {
959
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-theme-settings-scroll] { padding: 16px 12px 24px; }
960
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section] { padding-inline: 14px; margin-bottom: 24px; }
961
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-section] > [data-prts-section-heading] { margin-inline: -14px; padding-inline: 14px; flex-wrap: wrap; gap: 4px 12px; }
962
+ html[data-dsh-prts] [data-prts-theme-settings] [data-prts-settings-jump][aria-current="location"] { box-shadow: inset 0 -3px var(--prts-yellow); }
963
+ }