dsh-better-workspace 0.24.0 → 0.26.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/README.md +1 -1
- package/README_EN.md +1 -1
- package/dsh.plugin.json +1 -1
- package/package.json +1 -1
- package/src/client.js +256 -89
package/README.md
CHANGED
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
- **文件夹式收起**:点工作区行 = 收起/展开该工作区的全部会话(收起后行上保留会话数角标);会话分组同样可收起;搜索时自动全部展开。
|
|
72
72
|
- **拖拽还原原版能力**:工作区行可拖拽——拖到另一工作区行上/下半即调整顺序(写回宿主 registry 序),拖到分组行则移动进该分组(改写名称前缀);会话行可拖拽——同组内拖到另一会话上/下即调整顺序,拖到**别组的会话行**会把名字前缀改写到那个组(拖到根层的行 = 移出分组),拖到会话子分组行即移动进该分组,拖到**自己的工作区行**或**树里任何组外的地方**(含空白区域)同样移出分组 —— 拖拽期间工作区行整行高亮、树底部有一条淡虚线提示这个出口;带分组前缀的会话行右键还多一项「移出分组」。显示顺序 = 宿主手动序,拖拽结果立即生效。**磁盘层是文件系统事实,不随拖拽改变**:跨磁盘层的放置只重组名称分组(工作区落回自身磁盘层的末尾),同层放置才走锚点序。拖拽工作区期间,单链合并显示的行(如 工作/A)临时展开回文件夹树——路径里的每一级都是可投放的分组行,松手后自动合并回去。
|
|
73
73
|
- **不丢原生能力**:会话行(打开/重命名/分叉/归档)、每工作区「新会话」(点 + 总是先展开该工作区,让新会话立刻可见)、当前会话高亮、官方状态灯(蓝色运行环 / 琥珀待交互 / 绿色完成提醒)、**状态呼吸灯**(折叠藏起的状态灯向外冒泡:工作区/分组行图标按状态色呼吸发光——琥珀待交互/绿完成,自定义过发光的标题一起呼吸;运行中只在会话行本层蓝色呼吸,不外渗;可在设置关闭)、**活跃定时任务角标**(有活动 Schedule 的会话显示闹钟图标;v0.23.0 起直接渲染官方 `sidebar.session.row.leading` 座位的占用者,与官方行同源)、未分组会话兜底、界面文案跟随 DSH 的语言设置(内置 21 种语言,含简繁中文)。
|
|
74
|
-
- **新增项自动配色 + 图标(v0.
|
|
74
|
+
- **新增项自动配色 + 图标(v0.25.0,默认关闭)**:设置卡里一个开关,打开后**新创建的会话**自动分到一个内置色、**新工作区**再额外分到一个图标,懒得逐个设置的人直接开箱即用。颜色来自**定死的 13 个槽位**,每个槽位配**两色**——浅色主题用深色系、深色主题用亮色系——按「洗牌袋 + 近期回避窗口」抽取:一轮之内绝不重复,跨轮也不会立刻撞上刚出过的 3 个,连续新建几项肉眼可辨。**可读性是真达标**:每个色在**对应主题**背景下的对比度都 **≥4.5**,即 WCAG **正文级 AA**(对比度是脚本真算的,测试逐色断言;浅色主题按比纯白更暗的悬停面、深色主题按最亮的面这种保守取值)。行里存的是**槽位 id(`auto:3`)而不是色值**,所以**切换深浅主题时颜色自动换成同色系的另一套**,既不用重新设置,也不会失配。**只影响打开开关之后新建的项**:你手动设置过外观的行(存的是 hex)永不被覆盖,关闭开关也不回收已分配的样式,同一项不会被二次随机。图标从既有图标候选集里取、按宿主实际导出过滤;**图标只给工作区**——会话行的那个位置是官方状态灯与日程角标,没有图标位。
|
|
75
75
|
- **官方新语义与快捷键都接上(v0.23.0,对齐 dsh 0.1.7-rc.2)**:① 归档筛选是官方新版三态直选(**隐藏已归档** / **全部对话(显示已归档)** / **仅显示已归档**);选「仅显示已归档」时**没有归档会话的工作区整行隐藏**,空列表显示「暂无已归档会话」+「查看其他会话」一键回退;② 官方快捷键 **⌥⌘K 搜索 / ⌥⌘O 添加工作区 / ⌥⌘N 新会话**(桌面端为 ⌘K / ⌘O / ⌘N)在本插件的自绘侧栏里**真的生效**——搜索键打开并聚焦本插件的搜索框、添加键走同一个官方目录流(原生宿主弹系统选择器,browse 宿主弹应用内入口提示),按钮文案还会带上宿主当前的键位;③ 首次使用的工作区显示为本地化的「默认工作区」,不再露出磁盘目录名。
|
|
76
76
|
- **URL/斜杠标题不拆层**:宿主自动生成的会话标题落地时若含 `/`(如复述了 URL),整串自动包上 `“”` 原样显示,绝不解析成层级——只对本次启动后**新建的会话**生效,并等命名稳定(约 20 秒,让原生 AI 命名先落地)才处理;存量会话与你手动命名的 `/` 分组标题永不被改动。引号内(含手动添加)的 `/` 永不切分,孤立引号只当普通字符;无引号但含 URL 的旧标题也有平铺兜底。
|
|
77
77
|
- **新会话页的工作区选择器 = 侧栏那棵树(v0.22.0)**:会话空态页「工作区」按钮的弹层原本是官方的一层平铺标题列表(连磁盘目录嵌套都没有);本插件接管该座位后,弹层绘制与侧栏**同一棵**树——磁盘目录嵌套、「/」名称分组三态、单链合并全部读同一个视图 store,所以侧栏的视图选项一改,**这边立刻跟着变**;当前工作区带勾选标记,分组行可开合(选择器内本地记忆,默认全展开),标题按侧栏的层级叶子显示。底部「添加工作区」仍由**官方目录拾取占用者**承载(原生选择器 / 官方应用内浏览器),不是仿制品。
|
package/README_EN.md
CHANGED
|
@@ -71,7 +71,7 @@ Session titles nest on `/` too (e.g. `test1/plugin maintenance`). Session groups
|
|
|
71
71
|
- **Folder-style collapse**: clicking a workspace row collapses/expands all of its sessions (the row keeps a session counter when collapsed); session groups collapse too; search force-expands everything.
|
|
72
72
|
- **Native drag restored**: drag a workspace row above/below another to reorder (writes back the host registry order) or onto a folder row to move it into that group (rewrites the title prefix); drag session rows to reorder inside their group, onto a row of ANOTHER group to move into that group (onto a root-level row to leave the group), onto a session-group row to move into it, or onto their OWN workspace row / anywhere outside a group (empty space included) to leave it — the workspace row highlights and the tree shows a faint dashed hint while such a drag is in flight; a grouped session row also offers "Move out of group" in its context menu. Display order = host manual order, drag results are visible immediately. **The disk layer is a filesystem fact and never changes through dragging**: a cross-level drop only re-groups the name prefix (the workspace lands at the end of its own disk level), same-level drops take the anchor order. While dragging a workspace, merged single-chain rows (e.g. work/A) temporarily re-expand into folder rows — every level of the path becomes a drop target, and chains merge back when the drag ends.
|
|
73
73
|
- **Native capabilities kept**: open/rename/fork/archive sessions, per-workspace new-session (the + button always expands the workspace first so the new session is immediately visible), current-session highlight, official status dots (blue running ring / amber pending / green done), **status breathing lights** (dots hidden by collapse bubble outward: workspace/folder rows breathe on their icon in the status color — amber pending / green done, custom-glow labels breathe along; running breathes blue only on the session row itself and never relays; off-able in settings), **active-schedule badge** (alarm clock icon for sessions with active Schedule records; since v0.23.0 it renders the occupant of the shipped `sidebar.session.row.leading` seat, so it is the same mark the official row would show), ungrouped-session fallback, UI copy in 21 languages following the DSH language preference (Simplified and Traditional Chinese included).
|
|
74
|
-
- **Auto color + icon for new items (v0.
|
|
74
|
+
- **Auto color + icon for new items (v0.25.0, off by default)**: one switch in the plugin settings card. Turn it on and every newly created session gets a built-in color while every new workspace additionally gets an icon — for anyone who would rather not style rows one by one. Colors come from **13 fixed slots**, each shipping **two colors** — a darker one for the light theme, a lighter one for the dark theme — drawn with a shuffle bag plus a recent-draw window: nothing repeats inside a cycle, a refill never starts with the last three colors, and items added in a row look clearly different. **The readability claim is real**: every entry keeps contrast **≥ 4.5** on its own theme's background, i.e. WCAG **normal-text AA** (computed by script and asserted per color in the test suite, measured against conservative surfaces: a hovered row darker than pure white in the light theme, the brightest surface in the dark theme). A row stores the **slot id (`auto:3`), not a hex**, so **switching between light and dark repaints it with the matching sibling color** — nothing to reconfigure and no mismatch. **Only items created after you turn it on are touched**: rows you styled by hand (stored as hex) are never overwritten, turning it off does not undo assignments, and an item is never randomized twice. Icons come from the existing icon candidate set, filtered by what the host actually exports — and **workspaces only**: the session row's cell belongs to the official status dot and schedule mark, so it has no icon slot.
|
|
75
75
|
- **Official semantics and shortcuts wired up (v0.23.0, aligned with dsh 0.1.7-rc.2)**: ① the archived filter is the shipped three-way pick (**Hide archived** / **All conversations (show archived)** / **Archived only**); under "Archived only" a workspace without archived sessions disappears entirely, and an empty list offers "No archived sessions yet" + **View other sessions** as the way back. ② The shipped shortcuts **⌥⌘K search / ⌥⌘O add workspace / ⌥⌘N new session** (⌘K / ⌘O / ⌘N on desktop) really work in this plugin's own sidebar — the search key opens and focuses this sidebar's filter field, the add key runs the very same official directory flow (native chooser on a native host, the in-app pointer on a browse host), and the buttons show the host's current keybindings. ③ A first-use workspace reads as the localized "Default workspace" instead of the on-disk directory name.
|
|
76
76
|
- **Slash-bearing titles never nest from URLs**: when a host-generated session title lands containing `/` (e.g. echoing a pasted URL), it is auto-wrapped in `“”` and shown verbatim — only for sessions **created after this launch**, and only once the name stays stable for ~20s (letting the native AI naming land first); pre-existing sessions and your manually named `/` groupings are never touched. Quotes (manual ones too) never split on `/`, and a lone quote is just an ordinary character; unquoted URL tails still fall back flat.
|
|
77
77
|
- **The New Session workspace picker IS the sidebar tree (v0.22.0)**: the empty-state "Workspace" chip used to open the shipped one-level list of flat titles (no disk nesting at all). This plugin shadows that seat (lowest priority renders) and draws the **same** tree the sidebar draws — disk nesting, the tri-state "/" name layer, chain compression — all from the one view store, so changing a view option on the sidebar moves this popover immediately. The current workspace carries a check, folder rows fold (picker-local, fully expanded by default), and the pinned "Add workspace" action still renders the **shipped directory-picking occupant** (native chooser / official in-app browser) instead of a copy.
|
package/dsh.plugin.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "dsh-external/dsh-better-workspace",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"description": "侧边栏工作区树:按官方磁盘目录嵌套(官方 workspace-tree 语义),可选按名称中的 / 分组(默认关闭,设置里开启);新会话页的工作区选择器同树。Workspace tree for the DSH sidebar workspace list, nested by official disk folders with optional \"/\"-name grouping; the New Session workspace picker shows the same tree.",
|
|
6
6
|
"engines": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-better-workspace",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "侧边栏工作区树:按官方磁盘目录嵌套(官方 workspace-tree 语义),可选按名称中的 / 分组(默认关闭,设置里开启);新会话页的工作区选择器同树(同一份视图选项即时同步);添加工作区走官方目录流。Workspace tree for the DSH sidebar: disk-path nesting (official workspace-tree semantics), with optional \"/\"-name grouping (off by default), and the same tree in the New Session workspace picker; add-workspace rides the official directory flow.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
package/src/client.js
CHANGED
|
@@ -86,6 +86,9 @@ window.__ModuleLoader__.load({
|
|
|
86
86
|
'settings.desc': '工作区树的外观与折叠偏好',
|
|
87
87
|
'settings.expand': '展开',
|
|
88
88
|
'settings.collapse': '收起',
|
|
89
|
+
'settings.group.tree': '树与列表',
|
|
90
|
+
'settings.group.interaction': '会话交互',
|
|
91
|
+
'settings.group.appearance': '外观',
|
|
89
92
|
'settings.compactChains': '单链分组折叠显示',
|
|
90
93
|
'settings.compactChains.hint': '单层链合并为一行,出现多个子级时自动展开为树状;拖拽工作区期间单链临时展开回文件夹树,可放入任意一级;展开状态与自定义外观保存在当前浏览器。',
|
|
91
94
|
'settings.statusPulse': '状态呼吸灯',
|
|
@@ -100,7 +103,7 @@ window.__ModuleLoader__.load({
|
|
|
100
103
|
'settings.rowActions': "会话行悬停按钮",
|
|
101
104
|
'settings.rowActions.hint': "悬停会话行时在行尾显示置顶 / 归档快捷按钮,与官方行保持一致;关闭后这些动作只保留在菜单里。默认开启。",
|
|
102
105
|
'settings.autoStyle': '新增项自动配色',
|
|
103
|
-
'settings.autoStyle.hint': '开启后,新创建的会话会自动分到一个内置色,新工作区还会分到一个图标;颜色从固定的 13
|
|
106
|
+
'settings.autoStyle.hint': '开启后,新创建的会话会自动分到一个内置色,新工作区还会分到一个图标;颜色从固定的 13 个槽位按「洗牌 + 近期去重」抽取,连续新增不会撞色。每个槽位配了两色 —— 浅色主题用深色系、深色主题用亮色系 —— 每个色在**对应主题**背景下的对比度都 ≥4.5,达到 WCAG 正文级 AA;切换主题时同一个槽位会自动换成另一套色,不需要重新设置。只影响开启之后新建的项;你手动设置过外观的行永不被覆盖,关闭开关也不回收已分配的样式。默认关闭。',
|
|
104
107
|
'settings.appearance': '默认外观',
|
|
105
108
|
'settings.appearance.hint': '没有单独自定义过的行使用这套外观;字体描边默认开启——背景画面下不描边文字常常看不清。字体颜色留空即跟随主题。',
|
|
106
109
|
'settings.appearance.reset': '恢复默认外观',
|
|
@@ -236,6 +239,9 @@ window.__ModuleLoader__.load({
|
|
|
236
239
|
'settings.desc': 'Workspace tree appearance and folding preferences',
|
|
237
240
|
'settings.expand': 'Expand',
|
|
238
241
|
'settings.collapse': 'Collapse',
|
|
242
|
+
'settings.group.tree': 'Tree & list',
|
|
243
|
+
'settings.group.interaction': 'Session interaction',
|
|
244
|
+
'settings.group.appearance': 'Appearance',
|
|
239
245
|
'settings.compactChains': 'Merge single-child chains',
|
|
240
246
|
'settings.compactChains.hint': 'Single-child chains merge into one row; levels with multiple children expand as a tree. Chains re-expand into folder rows while you drag a workspace, so it can drop into any level. State and custom styling persist in this browser.',
|
|
241
247
|
'settings.statusPulse': 'Status breathing light',
|
|
@@ -250,7 +256,7 @@ window.__ModuleLoader__.load({
|
|
|
250
256
|
'settings.rowActions': "Session row hover buttons",
|
|
251
257
|
'settings.rowActions.hint': "Show pin / archive quick buttons at the end of a hovered session row, matching the official rows. Off: these actions stay in the menu only. On by default.",
|
|
252
258
|
'settings.autoStyle': 'Auto color & icon for new items',
|
|
253
|
-
'settings.autoStyle.hint':
|
|
259
|
+
'settings.autoStyle.hint': "When on, every newly created session gets a built-in color and every new workspace also gets an icon. Colors come from 13 fixed slots drawn with shuffle + recent-dedup, so consecutive items never look alike. Every slot ships two colors — a darker one for the light theme, a lighter one for the dark theme — and each clears WCAG normal-text AA (contrast ≥4.5) on its own theme's background; switching themes repaints the same slot automatically, with nothing to redo. Only items created after you turn it on are touched; rows you styled by hand are never overwritten, and turning it off does not undo what was already assigned. Off by default.",
|
|
254
260
|
'settings.appearance': 'Default appearance',
|
|
255
261
|
'settings.appearance.hint': 'Rows that were never customized use this appearance; the outline is on by default — text without it is often unreadable over a background image. Leave the color empty to follow the theme.',
|
|
256
262
|
'settings.appearance.reset': 'Reset to default',
|
|
@@ -394,6 +400,9 @@ window.__ModuleLoader__.load({
|
|
|
394
400
|
'settings.desc': 'مظهر شجرة مساحات العمل وتفضيلات الطيّ',
|
|
395
401
|
'settings.expand': 'توسيع',
|
|
396
402
|
'settings.collapse': 'طيّ',
|
|
403
|
+
'settings.group.tree': 'الشجرة والقائمة',
|
|
404
|
+
'settings.group.interaction': 'تفاعل الجلسات',
|
|
405
|
+
'settings.group.appearance': 'المظهر',
|
|
397
406
|
'settings.compactChains': 'دمج السلاسل ذات الفرع الواحد',
|
|
398
407
|
'settings.compactChains.hint': 'تُدمج المستويات ذات الفرع الواحد في سطر واحد، وتتوسع الشجرة تلقائياً عند وجود أكثر من فرع؛ أثناء سحب مساحة عمل تُفكّ السلاسل مؤقتاً إلى مجلدات ليصبح الإفلات ممكناً في أي مستوى؛ تُحفظ حالة التوسيع والمظهر المخصص في هذا المتصفح.',
|
|
399
408
|
'settings.statusPulse': 'مؤشر حالة نابض',
|
|
@@ -408,7 +417,7 @@ window.__ModuleLoader__.load({
|
|
|
408
417
|
'settings.rowActions': "أزرار تمرير سطر الجلسة",
|
|
409
418
|
'settings.rowActions.hint': "إظهار أزرار التثبيت / الأرشفة السريعة في نهاية سطر الجلسة عند تمرير المؤشر، مطابقة للأسطر الرسمية. عند الإيقاف: تبقى هذه الإجراءات في القائمة فقط. مفعّل افتراضياً.",
|
|
410
419
|
'settings.autoStyle': 'ألوان وأيقونات تلقائية للعناصر الجديدة',
|
|
411
|
-
'settings.autoStyle.hint': 'عند التفعيل يحصل كل جلسة جديدة على لون من لوحة مدمجة، ويحصل كل مساحة عمل جديدة أيضًا على أيقونة. تُسحب الألوان من 13
|
|
420
|
+
'settings.autoStyle.hint': 'عند التفعيل يحصل كل جلسة جديدة على لون من لوحة مدمجة، ويحصل كل مساحة عمل جديدة أيضًا على أيقونة. تُسحب الألوان من 13 خانة ثابتة بترتيب عشوائي مع تجنّب التكرار القريب. لكل خانة لونان — أغمق للسمة الفاتحة وأفتح للسمة الداكنة — وكل لون يبلغ تباين ≥4.5 (معيار AA للنص العادي) على خلفية سمته؛ وعند تبديل السمة تُرسم الخانة نفسها تلقائيًا دون أي إعداد. يؤثر فقط على العناصر المنشأة بعد التفعيل، ولا يُستبدل أي سطر نسّقته يدويًا، والإيقاف لا يلغي ما تم تعيينه. معطّل افتراضيًا.',
|
|
412
421
|
'settings.appearance': 'المظهر الافتراضي',
|
|
413
422
|
'settings.appearance.hint': 'تستخدم الأسطر غير المخصصة هذا المظهر؛ حدّ النص مفعّل افتراضياً — فبدونه يصعب قراءة النص فوق صورة خلفية. اترك اللون فارغاً لاتباع السمة.',
|
|
414
423
|
'settings.appearance.reset': 'استعادة المظهر الافتراضي',
|
|
@@ -544,6 +553,9 @@ window.__ModuleLoader__.load({
|
|
|
544
553
|
'settings.desc': 'Aussehen und Einklappverhalten des Arbeitsbereich-Baums',
|
|
545
554
|
'settings.expand': 'Ausklappen',
|
|
546
555
|
'settings.collapse': 'Einklappen',
|
|
556
|
+
'settings.group.tree': 'Baum & Liste',
|
|
557
|
+
'settings.group.interaction': 'Sitzungsinteraktion',
|
|
558
|
+
'settings.group.appearance': 'Aussehen',
|
|
547
559
|
'settings.compactChains': 'Einzelketten zusammenfassen',
|
|
548
560
|
'settings.compactChains.hint': 'Ebenen mit genau einem Kind werden zu einer Zeile zusammengefasst; bei mehreren Kindern klappt der Baum auf; beim Ziehen eines Arbeitsbereichs klappen die Ketten vorübergehend zum Ordnerbaum auf, sodass jede Ebene als Ziel dient; Klappzustand und eigenes Aussehen bleiben in diesem Browser gespeichert.',
|
|
549
561
|
'settings.statusPulse': 'Status-Pulslicht',
|
|
@@ -558,7 +570,7 @@ window.__ModuleLoader__.load({
|
|
|
558
570
|
'settings.rowActions': "Sitzungszeilen-Schnellknöpfe",
|
|
559
571
|
'settings.rowActions.hint': "Zeigt beim Daraufzeigen Schnellknöpfe zum Anheften / Archivieren am Zeilenende – wie die offiziellen Zeilen. Aus: diese Aktionen bleiben nur im Menü. Standardmäßig ein.",
|
|
560
572
|
'settings.autoStyle': 'Automatische Farbe & Symbol für neue Einträge',
|
|
561
|
-
'settings.autoStyle.hint': 'Wenn aktiviert, erhält jede neu erstellte Sitzung eine Farbe aus einer festen Palette und jeder neue Arbeitsbereich zusätzlich ein Symbol. Die 13
|
|
573
|
+
'settings.autoStyle.hint': 'Wenn aktiviert, erhält jede neu erstellte Sitzung eine Farbe aus einer festen Palette und jeder neue Arbeitsbereich zusätzlich ein Symbol. Die 13 festen Plätze werden gemischt mit Vermeidung der letzten Treffer gezogen. Jeder Platz hat zwei Farben — dunkler für das helle Thema, heller für das dunkle — und jede erreicht auf dem Hintergrund ihres eigenen Themas Kontrast ≥4.5 (AA für Fließtext); beim Themewechsel wird derselbe Platz automatisch neu eingefärbt. Nur danach erstellte Einträge werden erfasst; manuell gestaltete Zeilen werden nie überschrieben, und Ausschalten macht Zuweisungen nicht rückgängig. Standardmäßig aus.',
|
|
562
574
|
'settings.appearance': 'Standardaussehen',
|
|
563
575
|
'settings.appearance.hint': 'Zeilen ohne eigene Anpassung nutzen dieses Aussehen; die Textkontur ist standardmäßig an – ohne sie ist Text über einem Hintergrundbild oft kaum lesbar. Bleibt die Farbe leer, folgt sie dem Thema.',
|
|
564
576
|
'settings.appearance.reset': 'Standard wiederherstellen',
|
|
@@ -694,6 +706,9 @@ window.__ModuleLoader__.load({
|
|
|
694
706
|
'settings.desc': 'Apparence et repli de l\'arborescence des espaces de travail',
|
|
695
707
|
'settings.expand': 'Développer',
|
|
696
708
|
'settings.collapse': 'Réduire',
|
|
709
|
+
'settings.group.tree': 'Arborescence et liste',
|
|
710
|
+
'settings.group.interaction': 'Interactions de session',
|
|
711
|
+
'settings.group.appearance': 'Apparence',
|
|
697
712
|
'settings.compactChains': 'Fusionner les chaînes à un seul enfant',
|
|
698
713
|
'settings.compactChains.hint': 'Les niveaux à un seul enfant se fusionnent en une ligne; dès qu\'il y a plusieurs enfants, l\'arborescence se déploie; pendant le glisser-déposer d\'un espace de travail, les chaînes se déploient temporairement en dossiers pour permettre le dépôt à n\'importe quel niveau; l\'état déplié et l\'apparence personnalisée sont conservés dans ce navigateur.',
|
|
699
714
|
'settings.statusPulse': 'Voyant d\'état pulsant',
|
|
@@ -708,7 +723,7 @@ window.__ModuleLoader__.load({
|
|
|
708
723
|
'settings.rowActions': "Boutons de survol des sessions",
|
|
709
724
|
'settings.rowActions.hint': "Affiche des boutons rapides d’épinglage / d’archivage en fin de ligne au survol, comme les lignes officielles. Désactivé : ces actions restent dans le menu uniquement. Activé par défaut.",
|
|
710
725
|
'settings.autoStyle': 'Couleur et icône automatiques pour les nouveaux éléments',
|
|
711
|
-
'settings.autoStyle.hint': 'Activé, chaque nouvelle session reçoit une couleur de la palette intégrée et chaque nouvel espace de travail aussi une icône. Les 13
|
|
726
|
+
'settings.autoStyle.hint': 'Activé, chaque nouvelle session reçoit une couleur de la palette intégrée et chaque nouvel espace de travail aussi une icône. Les 13 emplacements fixes sont tirés par mélange avec évitement des derniers tirages. Chaque emplacement a deux couleurs — plus sombre pour le thème clair, plus claire pour le thème sombre — et chacune atteint un contraste ≥4,5 (AA pour le texte courant) sur le fond de son propre thème ; changer de thème recolore le même emplacement automatiquement. Seuls les éléments créés après l’activation sont traités ; les lignes personnalisées à la main ne sont jamais écrasées et désactiver n’annule pas les attributions. Désactivé par défaut.',
|
|
712
727
|
'settings.appearance': 'Apparence par défaut',
|
|
713
728
|
'settings.appearance.hint': 'Les lignes sans personnalisation utilisent cette apparence; le contour du texte est activé par défaut — sans lui, le texte reste souvent illisible sur une image de fond. Laissez la couleur vide pour suivre le thème.',
|
|
714
729
|
'settings.appearance.reset': 'Rétablir l\'apparence par défaut',
|
|
@@ -844,6 +859,9 @@ window.__ModuleLoader__.load({
|
|
|
844
859
|
'settings.desc': 'कार्यस्थान वृक्ष का रूप और समेटने की प्राथमिकताएँ',
|
|
845
860
|
'settings.expand': 'फैलाएँ',
|
|
846
861
|
'settings.collapse': 'समेटें',
|
|
862
|
+
'settings.group.tree': 'ट्री और सूची',
|
|
863
|
+
'settings.group.interaction': 'सेशन इंटरैक्शन',
|
|
864
|
+
'settings.group.appearance': 'उपस्थिति',
|
|
847
865
|
'settings.compactChains': 'एकल-संतान श्रृंखलाएँ मिलाएँ',
|
|
848
866
|
'settings.compactChains.hint': 'जिन स्तरों पर केवल एक संतान होती है वे एक पंक्ति में मिल जाते हैं; कई संतानें होने पर वृक्ष खुल जाता है; कार्यस्थान खींचते समय श्रृंखलाएँ अस्थायी रूप से फ़ोल्डरों में खुल जाती हैं ताकि किसी भी स्तर पर छोड़ा जा सके; खुलने की स्थिति और अनुकूलित रूप इसी ब्राउज़र में सहेजे जाते हैं।',
|
|
849
867
|
'settings.statusPulse': 'स्थिति की साँस लेती बत्ती',
|
|
@@ -858,7 +876,7 @@ window.__ModuleLoader__.load({
|
|
|
858
876
|
'settings.rowActions': "सेशन पंक्ति होवर बटन",
|
|
859
877
|
'settings.rowActions.hint': "होवर करने पर सेशन पंक्ति के अंत में पिन / आर्काइव क्विक बटन दिखाता है, आधिकारिक पंक्तियों जैसा। बंद: ये क्रियाएँ केवल मेनू में रहती हैं। डिफ़ॉल्ट रूप से चालू।",
|
|
860
878
|
'settings.autoStyle': 'नए आइटम के लिए स्वचालित रंग और आइकन',
|
|
861
|
-
'settings.autoStyle.hint': 'चालू होने पर हर नए सत्र को अंतर्निहित पैलेट से एक रंग मिलता है और हर नए कार्यस्थान को एक आइकन भी। 13
|
|
879
|
+
'settings.autoStyle.hint': 'चालू होने पर हर नए सत्र को अंतर्निहित पैलेट से एक रंग मिलता है और हर नए कार्यस्थान को एक आइकन भी। 13 स्थिर स्लॉट शफ़ल और हाल के दोहराव से बचाकर निकाले जाते हैं। हर स्लॉट में दो रंग हैं — हल्की थीम के लिए गहरा और गहरी थीम के लिए हल्का — और हर रंग अपनी थीम की पृष्ठभूमि पर ≥4.5 कंट्रास्ट (सामान्य पाठ के लिए AA) रखता है; थीम बदलने पर वही स्लॉट अपने आप रंग बदल लेता है। केवल चालू करने के बाद बने आइटम प्रभावित होते हैं; हाथ से सजाई गई पंक्तियाँ कभी नहीं बदली जातीं और बंद करने पर पहले दिए रंग हटते नहीं। डिफ़ॉल्ट रूप से बंद।',
|
|
862
880
|
'settings.appearance': 'डिफ़ॉल्ट रूप',
|
|
863
881
|
'settings.appearance.hint': 'जिन पंक्तियों को अलग से अनुकूलित नहीं किया गया वे यह रूप इस्तेमाल करती हैं; पाठ की रूपरेखा डिफ़ॉल्ट रूप से चालू है — पृष्ठभूमि छवि पर बिना रूपरेखा वाला पाठ अक्सर पढ़ा नहीं जाता। रंग खाली छोड़ने पर वह थीम का अनुसरण करता है।',
|
|
864
882
|
'settings.appearance.reset': 'डिफ़ॉल्ट रूप पर लौटें',
|
|
@@ -994,6 +1012,9 @@ window.__ModuleLoader__.load({
|
|
|
994
1012
|
'settings.desc': 'Tampilan dan pelipatan pohon ruang kerja',
|
|
995
1013
|
'settings.expand': 'Bentangkan',
|
|
996
1014
|
'settings.collapse': 'Ciutkan',
|
|
1015
|
+
'settings.group.tree': 'Pohon & daftar',
|
|
1016
|
+
'settings.group.interaction': 'Interaksi sesi',
|
|
1017
|
+
'settings.group.appearance': 'Tampilan',
|
|
997
1018
|
'settings.compactChains': 'Gabungkan rantai beranak tunggal',
|
|
998
1019
|
'settings.compactChains.hint': 'Tingkat yang hanya punya satu anak digabung jadi satu baris; bila anaknya banyak, pohon terbentang; saat menyeret ruang kerja, rantai sementara terbentang kembali jadi folder sehingga bisa dijatuhkan di tingkat mana pun; status terbentang dan tampilan khusus disimpan di browser ini.',
|
|
999
1020
|
'settings.statusPulse': 'Lampu status bernapas',
|
|
@@ -1008,7 +1029,7 @@ window.__ModuleLoader__.load({
|
|
|
1008
1029
|
'settings.rowActions': "Tombol hover baris sesi",
|
|
1009
1030
|
'settings.rowActions.hint': "Menampilkan tombol cepat pin / arsip di ujung baris sesi saat dihover, mengikuti baris resmi. Nonaktif: aksi ini hanya ada di menu. Aktif secara bawaan.",
|
|
1010
1031
|
'settings.autoStyle': 'Warna & ikon otomatis untuk item baru',
|
|
1011
|
-
'settings.autoStyle.hint': 'Saat aktif, setiap sesi baru mendapat warna dari palet bawaan dan setiap ruang kerja baru juga mendapat ikon. Tiga belas
|
|
1032
|
+
'settings.autoStyle.hint': 'Saat aktif, setiap sesi baru mendapat warna dari palet bawaan dan setiap ruang kerja baru juga mendapat ikon. Tiga belas slot tetap diambil dengan cara diacak sambil menghindari pengambilan terakhir. Setiap slot punya dua warna — lebih gelap untuk tema terang dan lebih terang untuk tema gelap — dan setiap warna mencapai kontras ≥4,5 (AA untuk teks biasa) pada latar temanya sendiri; mengganti tema otomatis mewarnai ulang slot yang sama. Hanya item yang dibuat setelah diaktifkan yang diproses; baris yang Anda atur sendiri tidak pernah ditimpa, dan menonaktifkannya tidak membatalkan yang sudah diberikan. Nonaktif secara bawaan.',
|
|
1012
1033
|
'settings.appearance': 'Tampilan bawaan',
|
|
1013
1034
|
'settings.appearance.hint': 'Baris yang belum disesuaikan memakai tampilan ini; garis luar teks aktif secara bawaan — tanpa itu teks sering tak terbaca di atas gambar latar. Biarkan warna kosong agar mengikuti tema.',
|
|
1014
1035
|
'settings.appearance.reset': 'Kembalikan tampilan bawaan',
|
|
@@ -1144,6 +1165,9 @@ window.__ModuleLoader__.load({
|
|
|
1144
1165
|
'settings.desc': 'Aspetto e compressione dell\'albero delle aree di lavoro',
|
|
1145
1166
|
'settings.expand': 'Espandi',
|
|
1146
1167
|
'settings.collapse': 'Comprimi',
|
|
1168
|
+
'settings.group.tree': 'Albero ed elenco',
|
|
1169
|
+
'settings.group.interaction': 'Interazione sessioni',
|
|
1170
|
+
'settings.group.appearance': 'Aspetto',
|
|
1147
1171
|
'settings.compactChains': 'Unisci le catene a figlio unico',
|
|
1148
1172
|
'settings.compactChains.hint': 'I livelli con un solo figlio si fondono in una riga; con più figli l\'albero si espande; durante il trascinamento di un\'area di lavoro le catene si riespandono temporaneamente in cartelle, così puoi rilasciare su qualsiasi livello; stato di espansione e aspetto personalizzato restano in questo browser.',
|
|
1149
1173
|
'settings.statusPulse': 'Spia di stato pulsante',
|
|
@@ -1158,7 +1182,7 @@ window.__ModuleLoader__.load({
|
|
|
1158
1182
|
'settings.rowActions': "Pulsanti al passaggio della sessione",
|
|
1159
1183
|
'settings.rowActions.hint': "Mostra pulsanti rapidi di pin / archiviazione in fondo alla riga al passaggio, come le righe ufficiali. Disattivo: queste azioni restano solo nel menu. Attivo per impostazione predefinita.",
|
|
1160
1184
|
'settings.autoStyle': 'Colore e icona automatici per i nuovi elementi',
|
|
1161
|
-
'settings.autoStyle.hint': 'Se attivo, ogni nuova sessione riceve un colore dalla palette integrata e ogni nuovo spazio di lavoro anche un’icona. I 13
|
|
1185
|
+
'settings.autoStyle.hint': 'Se attivo, ogni nuova sessione riceve un colore dalla palette integrata e ogni nuovo spazio di lavoro anche un’icona. I 13 slot fissi vengono estratti con mescolamento ed evitando gli ultimi estratti. Ogni slot ha due colori — più scuro per il tema chiaro, più chiaro per il tema scuro — e ognuno raggiunge un contrasto ≥4,5 (AA per il testo normale) sullo sfondo del proprio tema; cambiando tema lo stesso slot viene ricolorato automaticamente. Sono interessati solo gli elementi creati dopo l’attivazione; le righe personalizzate a mano non vengono mai sovrascritte e disattivare non annulla quanto assegnato. Disattivo per impostazione predefinita.',
|
|
1162
1186
|
'settings.appearance': 'Aspetto predefinito',
|
|
1163
1187
|
'settings.appearance.hint': 'Le righe mai personalizzate usano questo aspetto; il contorno del testo è attivo per impostazione predefinita — senza di esso il testo è spesso illeggibile sopra un\'immagine di sfondo. Lascia il colore vuoto per seguire il tema.',
|
|
1164
1188
|
'settings.appearance.reset': 'Ripristina l\'aspetto predefinito',
|
|
@@ -1294,6 +1318,9 @@ window.__ModuleLoader__.load({
|
|
|
1294
1318
|
'settings.desc': 'ワークスペースツリーの外観と折りたたみ設定',
|
|
1295
1319
|
'settings.expand': '展開',
|
|
1296
1320
|
'settings.collapse': '折りたたむ',
|
|
1321
|
+
'settings.group.tree': 'ツリーとリスト',
|
|
1322
|
+
'settings.group.interaction': 'セッション操作',
|
|
1323
|
+
'settings.group.appearance': '外観',
|
|
1297
1324
|
'settings.compactChains': '一本鎖の階層を 1 行にまとめる',
|
|
1298
1325
|
'settings.compactChains.hint': '子が 1 つだけの階層は 1 行にまとまり,複数の子がある階層はツリーとして展開されます;ワークスペースのドラッグ中は一時的にフォルダーツリーへ戻り,どの階層にもドロップできます;展開状態とカスタム外観はこのブラウザーに保存されます。',
|
|
1299
1326
|
'settings.statusPulse': 'ステータス表示灯',
|
|
@@ -1308,7 +1335,7 @@ window.__ModuleLoader__.load({
|
|
|
1308
1335
|
'settings.rowActions': "セッション行のホバーボタン",
|
|
1309
1336
|
'settings.rowActions.hint': "セッション行にカーソルを合わせると行末にピン / アーカイブのクイックボタンを表示し、公式の行と揃えます。オフ:これらの操作はメニュー内のみ。既定はオン。",
|
|
1310
1337
|
'settings.autoStyle': '新規項目の色とアイコンを自動割り当て',
|
|
1311
|
-
'settings.autoStyle.hint': 'オンにすると、新しく作られたセッションには内蔵パレットから色が、新しいワークスペースにはさらにアイコンが割り当てられます。13
|
|
1338
|
+
'settings.autoStyle.hint': 'オンにすると、新しく作られたセッションには内蔵パレットから色が、新しいワークスペースにはさらにアイコンが割り当てられます。13 の固定スロットをシャッフルと直近の重複回避で抽選します。各スロットは 2 色(ライトテーマ用の濃い色とダークテーマ用の明るい色)を持ち、どちらも自分のテーマの背景でコントラスト 4.5 以上(本文の AA)を満たします。テーマを切り替えると、同じスロットが自動的に塗り替えられます。オンにした後に作成された項目だけが対象で、手動で設定した行は上書きされず、オフにしても割り当て済みの色は元に戻りません。既定はオフです。',
|
|
1312
1339
|
'settings.appearance': '既定の外観',
|
|
1313
1340
|
'settings.appearance.hint': '個別にカスタマイズしていない行に適用される外観です;文字の縁取りは既定でオンです——背景画像の上では縁取りのない文字が読みにくいためです。色を空にするとテーマに従います。',
|
|
1314
1341
|
'settings.appearance.reset': '既定の外観に戻す',
|
|
@@ -1444,6 +1471,9 @@ window.__ModuleLoader__.load({
|
|
|
1444
1471
|
'settings.desc': '워크스페이스 트리의 모양과 접기 설정',
|
|
1445
1472
|
'settings.expand': '펼치기',
|
|
1446
1473
|
'settings.collapse': '접기',
|
|
1474
|
+
'settings.group.tree': '트리와 목록',
|
|
1475
|
+
'settings.group.interaction': '세션 상호작용',
|
|
1476
|
+
'settings.group.appearance': '모양',
|
|
1447
1477
|
'settings.compactChains': '단일 체인을 한 줄로 접기',
|
|
1448
1478
|
'settings.compactChains.hint': '자식이 하나뿐인 단계는 한 줄로 합쳐지고, 자식이 여러 개면 트리로 펼쳐집니다; 워크스페이스를 끌어 놓는 동안에는 체인이 잠시 폴더 트리로 펼쳐져 어느 단계에나 놓을 수 있습니다; 펼침 상태와 사용자 지정 모양은 이 브라우저에 저장됩니다.',
|
|
1449
1479
|
'settings.statusPulse': '상태 표시등',
|
|
@@ -1458,7 +1488,7 @@ window.__ModuleLoader__.load({
|
|
|
1458
1488
|
'settings.rowActions': "세션 행 호버 버튼",
|
|
1459
1489
|
'settings.rowActions.hint': "세션 행에 마우스를 올리면 행 끝에 고정 / 보관 빠른 버튼을 표시하여 공식 행과 일치시킵니다. 끔: 이 작업들은 메뉴에만 남습니다. 기본값은 켬.",
|
|
1460
1490
|
'settings.autoStyle': '새 항목 자동 색상 및 아이콘',
|
|
1461
|
-
'settings.autoStyle.hint': '켜면 새로 만든 세션에 내장 팔레트의 색이, 새 워크스페이스에는 아이콘까지 자동으로 지정됩니다. 13
|
|
1491
|
+
'settings.autoStyle.hint': '켜면 새로 만든 세션에 내장 팔레트의 색이, 새 워크스페이스에는 아이콘까지 자동으로 지정됩니다. 13개의 고정 슬롯을 섞기와 최근 중복 회피로 뽑습니다. 슬롯마다 두 가지 색(밝은 테마용 진한 색, 어두운 테마용 밝은 색)이 있고, 각각 자기 테마 배경에서 대비 4.5 이상(본문 AA)을 만족합니다. 테마를 바꾸면 같은 슬롯이 자동으로 다시 칠해집니다. 켠 뒤에 만든 항목에만 적용되며, 직접 꾸민 행은 절대 덮어쓰지 않고, 끄더라도 이미 지정된 색은 되돌리지 않습니다. 기본값은 꺼짐입니다.',
|
|
1462
1492
|
'settings.appearance': '기본 모양',
|
|
1463
1493
|
'settings.appearance.hint': '따로 지정하지 않은 행에 적용되는 모양입니다; 글자 외곽선은 기본으로 켜져 있습니다——배경 이미지 위에서는 외곽선 없는 글자가 잘 보이지 않기 때문입니다. 색을 비우면 테마를 따릅니다.',
|
|
1464
1494
|
'settings.appearance.reset': '기본 모양으로 되돌리기',
|
|
@@ -1594,6 +1624,9 @@ window.__ModuleLoader__.load({
|
|
|
1594
1624
|
'settings.desc': 'Uiterlijk en inklapgedrag van de werkruimteboom',
|
|
1595
1625
|
'settings.expand': 'Uitklappen',
|
|
1596
1626
|
'settings.collapse': 'Inklappen',
|
|
1627
|
+
'settings.group.tree': 'Boom en lijst',
|
|
1628
|
+
'settings.group.interaction': 'Sessie-interactie',
|
|
1629
|
+
'settings.group.appearance': 'Uiterlijk',
|
|
1597
1630
|
'settings.compactChains': 'Enkelvoudige ketens samenvoegen',
|
|
1598
1631
|
'settings.compactChains.hint': 'Niveaus met één kind worden tot één regel samengevoegd; bij meerdere kinderen klapt de boom open; tijdens het slepen van een werkruimte klappen de ketens tijdelijk terug naar mappen, zodat je op elk niveau kunt neerzetten; de uitgeklapte staat en het eigen uiterlijk blijven in deze browser bewaard.',
|
|
1599
1632
|
'settings.statusPulse': 'Pulserend statuslampje',
|
|
@@ -1608,7 +1641,7 @@ window.__ModuleLoader__.load({
|
|
|
1608
1641
|
'settings.rowActions': "Sessierij-snelknoppen",
|
|
1609
1642
|
'settings.rowActions.hint': "Toont snelknoppen voor vastmaken / archiveren aan het einde van een aangewezen sessierij, gelijk aan de officiële rijen. Uit: deze acties blijven alleen in het menu. Standaard aan.",
|
|
1610
1643
|
'settings.autoStyle': 'Automatische kleur en pictogram voor nieuwe items',
|
|
1611
|
-
'settings.autoStyle.hint': 'Als dit aanstaat krijgt elke nieuwe sessie een kleur uit het ingebouwde palet en elke nieuwe werkruimte ook een pictogram. De dertien
|
|
1644
|
+
'settings.autoStyle.hint': 'Als dit aanstaat krijgt elke nieuwe sessie een kleur uit het ingebouwde palet en elke nieuwe werkruimte ook een pictogram. De dertien vaste sleuven worden geschud en de laatst gebruikte worden vermeden. Elke sleuf heeft twee kleuren — donkerder voor het lichte thema, lichter voor het donkere — en elk haalt op de achtergrond van zijn eigen thema contrast ≥4,5 (AA voor normale tekst); bij een themawissel wordt dezelfde sleuf automatisch opnieuw gekleurd. Alleen items die daarna worden gemaakt worden aangepast; rijen die u zelf hebt opgemaakt worden nooit overschreven en uitzetten draait eerdere toewijzingen niet terug. Standaard uit.',
|
|
1612
1645
|
'settings.appearance': 'Standaarduiterlijk',
|
|
1613
1646
|
'settings.appearance.hint': 'Regels zonder eigen aanpassing gebruiken dit uiterlijk; de tekstomtrek staat standaard aan — zonder omtrek is tekst op een achtergrondafbeelding vaak slecht leesbaar. Laat de kleur leeg om het thema te volgen.',
|
|
1614
1647
|
'settings.appearance.reset': 'Standaarduiterlijk herstellen',
|
|
@@ -1744,6 +1777,9 @@ window.__ModuleLoader__.load({
|
|
|
1744
1777
|
'settings.desc': 'Wygląd i zwijanie drzewa obszarów roboczych',
|
|
1745
1778
|
'settings.expand': 'Rozwiń',
|
|
1746
1779
|
'settings.collapse': 'Zwiń',
|
|
1780
|
+
'settings.group.tree': 'Drzewo i lista',
|
|
1781
|
+
'settings.group.interaction': 'Interakcje sesji',
|
|
1782
|
+
'settings.group.appearance': 'Wygląd',
|
|
1747
1783
|
'settings.compactChains': 'Scal łańcuchy z jednym dzieckiem',
|
|
1748
1784
|
'settings.compactChains.hint': 'Poziomy z jednym dzieckiem scalają się w jeden wiersz; przy większej liczbie dzieci drzewo się rozwija; podczas przeciągania obszaru roboczego łańcuchy tymczasowo rozwijają się do folderów, więc upuszczenie działa na każdym poziomie; stan rozwinięcia i własny wygląd są zapisywane w tej przeglądarce.',
|
|
1749
1785
|
'settings.statusPulse': 'Pulsująca lampka stanu',
|
|
@@ -1758,7 +1794,7 @@ window.__ModuleLoader__.load({
|
|
|
1758
1794
|
'settings.rowActions': "Przyciski najechania wiersza sesji",
|
|
1759
1795
|
'settings.rowActions.hint': "Pokazuje szybkie przyciski przypnij / archiwizuj na końcu najechanego wiersza sesji, jak w oficjalnych wierszach. Wyłączone: te akcje zostają tylko w menu. Domyślnie włączone.",
|
|
1760
1796
|
'settings.autoStyle': 'Automatyczny kolor i ikona dla nowych elementów',
|
|
1761
|
-
'settings.autoStyle.hint': 'Po włączeniu każda nowa sesja otrzymuje kolor z wbudowanej palety, a każda nowa przestrzeń robocza także ikonę. Trzynaście
|
|
1797
|
+
'settings.autoStyle.hint': 'Po włączeniu każda nowa sesja otrzymuje kolor z wbudowanej palety, a każda nowa przestrzeń robocza także ikonę. Trzynaście stałych slotów losuje się tasowaniem z unikaniem ostatnich trafień. Każdy slot ma dwa kolory — ciemniejszy dla jasnego motywu, jaśniejszy dla ciemnego — i każdy osiąga na tle swojego motywu kontrast ≥4,5 (AA dla zwykłego tekstu); zmiana motywu automatycznie przemalowuje ten sam slot. Dotyczy tylko elementów utworzonych po włączeniu; ręcznie ostylowane wiersze nigdy nie są nadpisywane, a wyłączenie nie cofa przypisań. Domyślnie wyłączone.',
|
|
1762
1798
|
'settings.appearance': 'Domyślny wygląd',
|
|
1763
1799
|
'settings.appearance.hint': 'Wiersze bez własnych ustawień używają tego wyglądu; obrys tekstu jest domyślnie włączony — bez niego tekst na obrazie tła bywa nieczytelny. Puste pole koloru oznacza podążanie za motywem.',
|
|
1764
1800
|
'settings.appearance.reset': 'Przywróć domyślny wygląd',
|
|
@@ -1894,6 +1930,9 @@ window.__ModuleLoader__.load({
|
|
|
1894
1930
|
'settings.desc': 'Aparência e recolhimento da árvore de espaços de trabalho',
|
|
1895
1931
|
'settings.expand': 'Expandir',
|
|
1896
1932
|
'settings.collapse': 'Recolher',
|
|
1933
|
+
'settings.group.tree': 'Árvore e lista',
|
|
1934
|
+
'settings.group.interaction': 'Interação de sessões',
|
|
1935
|
+
'settings.group.appearance': 'Aparência',
|
|
1897
1936
|
'settings.compactChains': 'Mesclar cadeias de filho único',
|
|
1898
1937
|
'settings.compactChains.hint': 'Níveis com um único filho viram uma linha; com vários filhos a árvore se expande; ao arrastar um espaço de trabalho, as cadeias voltam temporariamente a pastas, permitindo soltar em qualquer nível; o estado de expansão e o estilo personalizado ficam neste navegador.',
|
|
1899
1938
|
'settings.statusPulse': 'Luz de status pulsante',
|
|
@@ -1908,7 +1947,7 @@ window.__ModuleLoader__.load({
|
|
|
1908
1947
|
'settings.rowActions': "Botões de passagem da sessão",
|
|
1909
1948
|
'settings.rowActions.hint': "Mostra botões rápidos de fixar / arquivar no fim da linha ao passar o cursor, como nas linhas oficiais. Desligado: essas ações ficam apenas no menu. Ligado por predefinição.",
|
|
1910
1949
|
'settings.autoStyle': 'Cor e ícone automáticos para novos itens',
|
|
1911
|
-
'settings.autoStyle.hint': 'Quando ligado, cada nova sessão recebe uma cor da paleta embutida e cada novo espaço de trabalho também um ícone.
|
|
1950
|
+
'settings.autoStyle.hint': 'Quando ligado, cada nova sessão recebe uma cor da paleta embutida e cada novo espaço de trabalho também um ícone. Os 13 slots fixos são sorteados com embaralhamento e evitando as últimas escolhas. Cada slot tem duas cores — mais escura para o tema claro, mais clara para o tema escuro — e cada uma atinge no fundo do seu próprio tema contraste ≥4,5 (AA para texto normal); trocar de tema recolore o mesmo slot automaticamente. Só os itens criados depois de ligar são afetados; linhas que você estilizou à mão nunca são sobrescritas e desligar não desfaz o que já foi atribuído. Desligado por padrão.',
|
|
1912
1951
|
'settings.appearance': 'Aparência padrão',
|
|
1913
1952
|
'settings.appearance.hint': 'Linhas sem personalização usam esta aparência; o contorno do texto vem ativado por padrão — sem ele, o texto costuma ficar ilegível sobre uma imagem de fundo. Deixe a cor vazia para seguir o tema.',
|
|
1914
1953
|
'settings.appearance.reset': 'Restaurar aparência padrão',
|
|
@@ -2044,6 +2083,9 @@ window.__ModuleLoader__.load({
|
|
|
2044
2083
|
'settings.desc': 'Внешний вид и сворачивание дерева рабочих областей',
|
|
2045
2084
|
'settings.expand': 'Развернуть',
|
|
2046
2085
|
'settings.collapse': 'Свернуть',
|
|
2086
|
+
'settings.group.tree': 'Дерево и список',
|
|
2087
|
+
'settings.group.interaction': 'Взаимодействие с сессиями',
|
|
2088
|
+
'settings.group.appearance': 'Внешний вид',
|
|
2047
2089
|
'settings.compactChains': 'Объединять цепочки с одним потомком',
|
|
2048
2090
|
'settings.compactChains.hint': 'Уровни с единственным потомком сливаются в одну строку; при нескольких потомках дерево разворачивается; во время перетаскивания рабочей области цепочки временно разворачиваются в папки, чтобы можно было положить элемент на любой уровень; состояние сворачивания и оформление хранятся в этом браузере.',
|
|
2049
2091
|
'settings.statusPulse': 'Пульсирующий индикатор состояния',
|
|
@@ -2058,7 +2100,7 @@ window.__ModuleLoader__.load({
|
|
|
2058
2100
|
'settings.rowActions': "Кнопки наведения строки сессии",
|
|
2059
2101
|
'settings.rowActions.hint': "Показывает быстрые кнопки закрепить / архивировать в конце строки при наведении, как в официальных строках. Выкл: эти действия остаются только в меню. Включено по умолчанию.",
|
|
2060
2102
|
'settings.autoStyle': 'Автоцвет и значок для новых элементов',
|
|
2061
|
-
'settings.autoStyle.hint': 'Когда включено, каждый новый сеанс получает цвет из встроенной палитры, а новая рабочая область — ещё и значок. Тринадцать
|
|
2103
|
+
'settings.autoStyle.hint': 'Когда включено, каждый новый сеанс получает цвет из встроенной палитры, а новая рабочая область — ещё и значок. Тринадцать фиксированных слотов вытягиваются перемешиванием с избеганием недавних. У каждого слота два цвета — темнее для светлой темы, светлее для тёмной, — и каждый даёт на фоне своей темы контраст ≥4,5 (AA для обычного текста); при смене темы тот же слот перекрашивается автоматически. Затрагиваются только элементы, созданные после включения; строки, оформленные вручную, никогда не перезаписываются, а выключение не отменяет уже назначенное. По умолчанию выключено.',
|
|
2062
2104
|
'settings.appearance': 'Оформление по умолчанию',
|
|
2063
2105
|
'settings.appearance.hint': 'Строки без своей настройки используют это оформление; обводка текста включена по умолчанию — без неё текст на фоновом изображении часто нечитаем. Пустой цвет означает следование теме.',
|
|
2064
2106
|
'settings.appearance.reset': 'Вернуть оформление по умолчанию',
|
|
@@ -2194,6 +2236,9 @@ window.__ModuleLoader__.load({
|
|
|
2194
2236
|
'settings.desc': 'Utseende och ihopfällning för arbetsyteträdet',
|
|
2195
2237
|
'settings.expand': 'Fäll ut',
|
|
2196
2238
|
'settings.collapse': 'Fäll ihop',
|
|
2239
|
+
'settings.group.tree': 'Träd och lista',
|
|
2240
|
+
'settings.group.interaction': 'Sessionsinteraktion',
|
|
2241
|
+
'settings.group.appearance': 'Utseende',
|
|
2197
2242
|
'settings.compactChains': 'Slå ihop enkelkedjor',
|
|
2198
2243
|
'settings.compactChains.hint': 'Nivåer med ett enda barn slås ihop till en rad; med flera barn fälls trädet ut; medan du drar en arbetsyta fälls kedjorna tillfälligt ut till mappar så att du kan släppa på vilken nivå som helst; utfällt läge och eget utseende sparas i den här webbläsaren.',
|
|
2199
2244
|
'settings.statusPulse': 'Pulserande statuslampa',
|
|
@@ -2208,7 +2253,7 @@ window.__ModuleLoader__.load({
|
|
|
2208
2253
|
'settings.rowActions': "Hovringsknappar för sessionsraden",
|
|
2209
2254
|
'settings.rowActions.hint': "Visar snabbknappar för fäst / arkivera i radens slut vid hovring, som de officiella raderna. Av: åtgärderna finns bara i menyn. På som standard.",
|
|
2210
2255
|
'settings.autoStyle': 'Automatisk färg och ikon för nya objekt',
|
|
2211
|
-
'settings.autoStyle.hint': 'När den är på får varje ny session en färg från den inbyggda paletten och varje ny arbetsyta även en ikon. De tretton
|
|
2256
|
+
'settings.autoStyle.hint': 'När den är på får varje ny session en färg från den inbyggda paletten och varje ny arbetsyta även en ikon. De tretton fasta platserna dras med blandning och undvikande av de senaste. Varje plats har två färger — mörkare för ljust tema, ljusare för mörkt — och båda når mot sin egen temas bakgrund kontrast ≥4,5 (AA för normal text); vid temabyte färgas samma plats om automatiskt. Endast objekt som skapas efter att du slagit på påverkas; rader du stilt själv skrivs aldrig över och att stänga av ångrar inte det som tilldelats. Av som standard.',
|
|
2212
2257
|
'settings.appearance': 'Standardutseende',
|
|
2213
2258
|
'settings.appearance.hint': 'Rader utan egen anpassning använder detta utseende; textkonturen är på som standard — utan den är texten ofta oläslig ovanpå en bakgrundsbild. Lämna färgen tom för att följa temat.',
|
|
2214
2259
|
'settings.appearance.reset': 'Återställ standardutseende',
|
|
@@ -2344,6 +2389,9 @@ window.__ModuleLoader__.load({
|
|
|
2344
2389
|
'settings.desc': 'รูปลักษณ์และการย่อของต้นไม้พื้นที่ทำงาน',
|
|
2345
2390
|
'settings.expand': 'ขยาย',
|
|
2346
2391
|
'settings.collapse': 'ย่อ',
|
|
2392
|
+
'settings.group.tree': 'ต้นไม้และรายการ',
|
|
2393
|
+
'settings.group.interaction': 'การโต้ตอบของเซสชัน',
|
|
2394
|
+
'settings.group.appearance': 'ลักษณะที่ปรากฏ',
|
|
2347
2395
|
'settings.compactChains': 'รวมสายที่มีลูกเดียว',
|
|
2348
2396
|
'settings.compactChains.hint': 'ระดับที่มีลูกเพียงหนึ่งจะถูกรวมเป็นบรรทัดเดียว เมื่อมีลูกหลายตัวต้นไม้จะขยายออก ขณะลากพื้นที่ทำงาน สายจะขยายกลับเป็นโฟลเดอร์ชั่วคราวเพื่อให้วางได้ทุกระดับ สถานะการขยายและรูปลักษณ์ที่กำหนดเองจะถูกเก็บไว้ในเบราว์เซอร์นี้',
|
|
2349
2397
|
'settings.statusPulse': 'ไฟสถานะหายใจ',
|
|
@@ -2358,7 +2406,7 @@ window.__ModuleLoader__.load({
|
|
|
2358
2406
|
'settings.rowActions': "ปุ่มเมื่อชี้แถวเซสชัน",
|
|
2359
2407
|
'settings.rowActions.hint': "แสดงปุ่มด่วนปักหมุด / เก็บถาวรท้ายแถวเมื่อชี้ ให้ตรงกับแถวทางการ ปิด: การกระทำเหล่านี้มีเฉพาะในเมนู เปิดตามค่าเริ่มต้น",
|
|
2360
2408
|
'settings.autoStyle': 'สีและไอคอนอัตโนมัติสำหรับรายการใหม่',
|
|
2361
|
-
'settings.autoStyle.hint': 'เมื่อเปิด ทุกเซสชันที่สร้างใหม่จะได้สีจากชุดสีในตัว และพื้นที่ทำงานใหม่จะได้ไอคอนด้วย
|
|
2409
|
+
'settings.autoStyle.hint': 'เมื่อเปิด ทุกเซสชันที่สร้างใหม่จะได้สีจากชุดสีในตัว และพื้นที่ทำงานใหม่จะได้ไอคอนด้วย สล็อตคงที่ 13 ช่องจะถูกสุ่มแบบสลับพร้อมหลีกเลี่ยงสีที่เพิ่งใช้ แต่ละช่องมีสองสี — สีเข้มสำหรับธีมสว่างและสีอ่อนสำหรับธีมมืด — และทุกสีมีคอนทราสต์ ≥4.5 (AA สำหรับข้อความทั่วไป) บนพื้นของธีมนั้น เมื่อสลับธีมช่องเดิมจะถูกระบายสีใหม่ให้อัตโนมัติ มีผลเฉพาะรายการที่สร้างหลังเปิดใช้ แถวที่คุณตั้งค่าเองจะไม่ถูกเขียนทับ และการปิดจะไม่เรียกคืนสิ่งที่แจกไปแล้ว ค่าเริ่มต้นคือปิด',
|
|
2362
2410
|
'settings.appearance': 'รูปลักษณ์เริ่มต้น',
|
|
2363
2411
|
'settings.appearance.hint': 'แถวที่ยังไม่ได้กำหนดเองจะใช้รูปลักษณ์นี้ เส้นขอบตัวอักษรเปิดไว้เป็นค่าเริ่มต้น — บนภาพพื้นหลัง ตัวอักษรที่ไม่มีเส้นขอบมักอ่านยาก เว้นสีว่างไว้เพื่อตามธีม',
|
|
2364
2412
|
'settings.appearance.reset': 'คืนค่ารูปลักษณ์เริ่มต้น',
|
|
@@ -2494,6 +2542,9 @@ window.__ModuleLoader__.load({
|
|
|
2494
2542
|
'settings.desc': 'Çalışma alanı ağacının görünümü ve daraltma tercihleri',
|
|
2495
2543
|
'settings.expand': 'Genişlet',
|
|
2496
2544
|
'settings.collapse': 'Daralt',
|
|
2545
|
+
'settings.group.tree': 'Ağaç ve liste',
|
|
2546
|
+
'settings.group.interaction': 'Oturum etkileşimi',
|
|
2547
|
+
'settings.group.appearance': 'Görünüm',
|
|
2497
2548
|
'settings.compactChains': 'Tek çocuklu zincirleri birleştir',
|
|
2498
2549
|
'settings.compactChains.hint': 'Tek çocuklu düzeyler tek satırda birleşir; birden çok çocuk olduğunda ağaç açılır; bir çalışma alanını sürüklerken zincirler geçici olarak klasörlere açılır, böylece her düzeye bırakabilirsiniz; açılma durumu ve özel görünüm bu tarayıcıda saklanır.',
|
|
2499
2550
|
'settings.statusPulse': 'Nefes alan durum ışığı',
|
|
@@ -2508,7 +2559,7 @@ window.__ModuleLoader__.load({
|
|
|
2508
2559
|
'settings.rowActions': "Oturum satırı düğmeleri",
|
|
2509
2560
|
'settings.rowActions.hint': "Üzerine gelince satır sonunda sabitle / arşivle hızlı düğmelerini gösterir, resmî satırlarla aynı. Kapalı: bu eylemler yalnızca menüde kalır. Varsayılan açık.",
|
|
2510
2561
|
'settings.autoStyle': 'Yeni öğeler için otomatik renk ve simge',
|
|
2511
|
-
'settings.autoStyle.hint': 'Açıkken yeni oluşturulan her oturuma yerleşik paletten bir renk, her yeni çalışma alanına ayrıca bir simge atanır. On üç
|
|
2562
|
+
'settings.autoStyle.hint': 'Açıkken yeni oluşturulan her oturuma yerleşik paletten bir renk, her yeni çalışma alanına ayrıca bir simge atanır. On üç sabit yuva karıştırma ve son kullanılanları atlama yöntemiyle çekilir. Her yuvanın iki rengi vardır — açık tema için daha koyu, koyu tema için daha açık — ve her biri kendi temasının zemininde ≥4,5 kontrast (normal metin için AA) sağlar; tema değiştiğinde aynı yuva otomatik olarak yeniden renklendirilir. Yalnızca açtıktan sonra oluşturulan öğeler etkilenir; elle biçimlendirdiğiniz satırlar hiçbir zaman üzerine yazılmaz ve kapatmak verilmiş stilleri geri almaz. Varsayılan olarak kapalı.',
|
|
2512
2563
|
'settings.appearance': 'Varsayılan görünüm',
|
|
2513
2564
|
'settings.appearance.hint': 'Özel olarak uyarlanmamış satırlar bu görünümü kullanır; metin konturu varsayılan olarak açıktır — arka plan görseli üzerinde kontursuz metin çoğu zaman okunmaz. Rengi boş bırakırsanız temayı izler.',
|
|
2514
2565
|
'settings.appearance.reset': 'Varsayılan görünüme dön',
|
|
@@ -2644,6 +2695,9 @@ window.__ModuleLoader__.load({
|
|
|
2644
2695
|
'settings.desc': 'Giao diện và cách thu gọn của cây không gian làm việc',
|
|
2645
2696
|
'settings.expand': 'Mở rộng',
|
|
2646
2697
|
'settings.collapse': 'Thu gọn',
|
|
2698
|
+
'settings.group.tree': 'Cây và danh sách',
|
|
2699
|
+
'settings.group.interaction': 'Tương tác phiên',
|
|
2700
|
+
'settings.group.appearance': 'Diện mạo',
|
|
2647
2701
|
'settings.compactChains': 'Gộp chuỗi một nhánh',
|
|
2648
2702
|
'settings.compactChains.hint': 'Các tầng chỉ có một nhánh con được gộp thành một dòng; khi có nhiều nhánh con, cây tự mở ra; khi kéo không gian làm việc, chuỗi tạm mở lại thành thư mục để có thể thả vào bất kỳ tầng nào; trạng thái mở và giao diện tùy chỉnh được lưu trong trình duyệt này.',
|
|
2649
2703
|
'settings.statusPulse': 'Đèn trạng thái nhấp nháy',
|
|
@@ -2658,7 +2712,7 @@ window.__ModuleLoader__.load({
|
|
|
2658
2712
|
'settings.rowActions': "Nút hover dòng phiên",
|
|
2659
2713
|
'settings.rowActions.hint': "Hiện nút nhanh ghim / lưu trữ ở cuối dòng khi di chuột, giống các dòng chính thức. Tắt: các thao tác này chỉ còn trong menu. Bật theo mặc định.",
|
|
2660
2714
|
'settings.autoStyle': 'Tự động tô màu và biểu tượng cho mục mới',
|
|
2661
|
-
'settings.autoStyle.hint': 'Khi bật, mỗi phiên mới nhận một màu từ bảng màu tích hợp và mỗi không gian làm việc mới còn nhận thêm biểu tượng. Mười ba
|
|
2715
|
+
'settings.autoStyle.hint': 'Khi bật, mỗi phiên mới nhận một màu từ bảng màu tích hợp và mỗi không gian làm việc mới còn nhận thêm biểu tượng. Mười ba ô cố định được rút theo cách xáo trộn và tránh các màu vừa dùng. Mỗi ô có hai màu — đậm hơn cho giao diện sáng và nhạt hơn cho giao diện tối — và mỗi màu đạt độ tương phản ≥4,5 (AA cho chữ thường) trên nền của giao diện tương ứng; khi đổi giao diện, chính ô đó được tô lại tự động. Chỉ những mục tạo sau khi bật mới bị ảnh hưởng; hàng bạn tự tô màu không bao giờ bị ghi đè, và tắt đi không thu hồi những gì đã gán. Mặc định tắt.',
|
|
2662
2716
|
'settings.appearance': 'Giao diện mặc định',
|
|
2663
2717
|
'settings.appearance.hint': 'Những hàng chưa tùy chỉnh riêng dùng giao diện này; viền chữ mặc định bật — trên ảnh nền, chữ không viền thường khó đọc. Để trống màu để theo chủ đề.',
|
|
2664
2718
|
'settings.appearance.reset': 'Khôi phục giao diện mặc định',
|
|
@@ -2794,6 +2848,9 @@ window.__ModuleLoader__.load({
|
|
|
2794
2848
|
'settings.desc': '工作區樹嘅外觀同收起偏好',
|
|
2795
2849
|
'settings.expand': '展開',
|
|
2796
2850
|
'settings.collapse': '收起',
|
|
2851
|
+
'settings.group.tree': '樹與列表',
|
|
2852
|
+
'settings.group.interaction': '會話互動',
|
|
2853
|
+
'settings.group.appearance': '外觀',
|
|
2797
2854
|
'settings.compactChains': '單鏈分組摺疊顯示',
|
|
2798
2855
|
'settings.compactChains.hint': '單層鏈會合併成一行,出現多個子級就會自動展開成樹狀;拖拽工作區期間單鏈會臨時展開返做文件夾樹,可以放入任何一級;展開狀態同自訂外觀會喺呢個瀏覽器保存。',
|
|
2799
2856
|
'settings.statusPulse': '狀態呼吸燈',
|
|
@@ -2808,7 +2865,7 @@ window.__ModuleLoader__.load({
|
|
|
2808
2865
|
'settings.rowActions': "會話行懸停按鈕",
|
|
2809
2866
|
'settings.rowActions.hint': "懸停會話行時在行尾顯示置頂 / 封存快捷按鈕,與官方行保持一致;關閉後這些動作只保留在選單裡。預設開啟。",
|
|
2810
2867
|
'settings.autoStyle': '新增項目自動配色',
|
|
2811
|
-
'settings.autoStyle.hint': '
|
|
2868
|
+
'settings.autoStyle.hint': '開啟後,新開嘅會話會自動分到一個內置色,新工作區仲會分到一個圖示;顏色由 13 個固定槽位以「洗牌 + 近期去重」抽出,連續新增唔會撞色。每個槽位有兩隻色 —— 淺色主題用深色系、深色主題用亮色系 —— 兩隻喺各自主題嘅背景上對比度都 ≥4.5,達到 WCAG 正文級 AA;換主題會自動為同一個槽位換色,唔使重新設定。只影響開啟之後新開嘅項;你手動設定過外觀嘅行永不被覆蓋,熄咗開關亦唔會回收已分配嘅樣式。預設關閉。',
|
|
2812
2869
|
'settings.appearance': '預設外觀',
|
|
2813
2870
|
'settings.appearance.hint': '未單獨自訂過嘅行會用呢套外觀;字體描邊預設開啟——有背景圖嗰陣唔描邊嘅字經常睇唔清。字體顏色留空就會跟主題。',
|
|
2814
2871
|
'settings.appearance.reset': '還原預設外觀',
|
|
@@ -2944,6 +3001,9 @@ window.__ModuleLoader__.load({
|
|
|
2944
3001
|
'settings.desc': '工作區樹嘅外觀同收起偏好',
|
|
2945
3002
|
'settings.expand': '展開',
|
|
2946
3003
|
'settings.collapse': '收起',
|
|
3004
|
+
'settings.group.tree': '樹與列表',
|
|
3005
|
+
'settings.group.interaction': '會話互動',
|
|
3006
|
+
'settings.group.appearance': '外觀',
|
|
2947
3007
|
'settings.compactChains': '單鏈分組摺疊顯示',
|
|
2948
3008
|
'settings.compactChains.hint': '單層鏈會合併成一行,出現多個子級就會自動展開成樹狀;拖拽工作區期間單鏈會臨時展開返做文件夾樹,可以放入任何一級;展開狀態同自訂外觀會喺呢個瀏覽器保存。',
|
|
2949
3009
|
'settings.statusPulse': '狀態呼吸燈',
|
|
@@ -2958,7 +3018,7 @@ window.__ModuleLoader__.load({
|
|
|
2958
3018
|
'settings.rowActions': "會話行懸停按鈕",
|
|
2959
3019
|
'settings.rowActions.hint': "懸停會話行時在行尾顯示置頂 / 歸檔快捷按鈕,與官方行保持一致;關閉後這些動作只保留在選單裡。預設開啟。",
|
|
2960
3020
|
'settings.autoStyle': '新增項目自動配色',
|
|
2961
|
-
'settings.autoStyle.hint': '
|
|
3021
|
+
'settings.autoStyle.hint': '開啟後,新開嘅會話會自動分到一個內置色,新工作區仲會分到一個圖示;顏色由 13 個固定槽位以「洗牌 + 近期去重」抽出,連續新增唔會撞色。每個槽位有兩隻色 —— 淺色主題用深色系、深色主題用亮色系 —— 兩隻喺各自主題嘅背景上對比度都 ≥4.5,達到 WCAG 正文級 AA;換主題會自動為同一個槽位換色,唔使重新設定。只影響開啟之後新開嘅項;你手動設定過外觀嘅行永不被覆蓋,熄咗開關亦唔會回收已分配嘅樣式。預設關閉。',
|
|
2962
3022
|
'settings.appearance': '預設外觀',
|
|
2963
3023
|
'settings.appearance.hint': '未單獨自訂過嘅行會用呢套外觀;字體描邊預設開啟——有背景圖嗰陣唔描邊嘅字經常睇唔清。字體顏色留空就會跟主題。',
|
|
2964
3024
|
'settings.appearance.reset': '還原預設外觀',
|
|
@@ -3094,6 +3154,9 @@ window.__ModuleLoader__.load({
|
|
|
3094
3154
|
'settings.desc': '工作區樹的外觀與收合偏好',
|
|
3095
3155
|
'settings.expand': '展開',
|
|
3096
3156
|
'settings.collapse': '收合',
|
|
3157
|
+
'settings.group.tree': '樹與清單',
|
|
3158
|
+
'settings.group.interaction': '會話互動',
|
|
3159
|
+
'settings.group.appearance': '外觀',
|
|
3097
3160
|
'settings.compactChains': '單鏈群組合併顯示',
|
|
3098
3161
|
'settings.compactChains.hint': '單層鏈會合併成一行,出現多個子層級時自動展開為樹狀;拖曳工作區期間單鏈會暫時展開回資料夾樹,可放入任一層級;展開狀態與自訂外觀會保存在本瀏覽器。',
|
|
3099
3162
|
'settings.statusPulse': '狀態呼吸燈',
|
|
@@ -3108,7 +3171,7 @@ window.__ModuleLoader__.load({
|
|
|
3108
3171
|
'settings.rowActions': "會話列懸停按鈕",
|
|
3109
3172
|
'settings.rowActions.hint': "懸停會話列時在列尾顯示釘選 / 封存快捷按鈕,與官方列保持一致;關閉後這些動作只保留在選單裡。預設開啟。",
|
|
3110
3173
|
'settings.autoStyle': '新增項目自動配色與圖示',
|
|
3111
|
-
'settings.autoStyle.hint': '
|
|
3174
|
+
'settings.autoStyle.hint': '開啟後,新建立的工作階段會自動分到一個內建色,新工作區還會分到一個圖示;顏色從 13 個固定槽位以「洗牌 + 近期去重」抽出,連續新增不會撞色。每個槽位各有兩色 —— 淺色主題用深色系、深色主題用亮色系 —— 兩色在各自主題背景下對比度都 ≥4.5,達到 WCAG 正文級 AA;切換主題時同一個槽位會自動換色,不需重新設定。只影響開啟之後新建的項目;你手動設定過外觀的列永遠不會被覆蓋,關閉開關也不會回收已分配的樣式。預設關閉。',
|
|
3112
3175
|
'settings.appearance': '預設外觀',
|
|
3113
3176
|
'settings.appearance.hint': '未個別自訂過的列會使用這套外觀;字型外框預設開啟——在背景圖片上沒有外框的文字常常看不清楚。字型顏色留空即跟隨佈景主題。',
|
|
3114
3177
|
'settings.appearance.reset': '還原預設外觀',
|
|
@@ -4102,6 +4165,7 @@ window.__ModuleLoader__.load({
|
|
|
4102
4165
|
'.bw-plugin-body{border-top:1px solid var(--dsw-alias-border-l2,rgba(127,127,127,.18));margin:0 16px;padding:12px 0 16px}',
|
|
4103
4166
|
'.bw-setting-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;font-size:13px;line-height:1.5;color:var(--dsw-alias-label-secondary,#b8b8b8)}',
|
|
4104
4167
|
'.bw-setting-label{flex:1;min-width:0;font-size:13px;line-height:1.5;color:var(--dsw-alias-label-secondary,#b8b8b8)}',
|
|
4168
|
+
'.bw-settings-group-title{margin-top:14px;font-size:13px;font-weight:600;color:var(--dsw-alias-label-primary,#e6e6e6)}',
|
|
4105
4169
|
'.bw-switch{box-sizing:border-box;position:relative;flex:0 0 auto;width:36px;height:20px;padding:2px;border:0;border-radius:10px;background:var(--dsw-alias-border-l3,rgba(127,127,127,.3));cursor:pointer;transition:background 120ms ease}',
|
|
4106
4170
|
'.bw-switch:hover{background:var(--dsw-alias-label-dimmed,#7a7a7a)}',
|
|
4107
4171
|
'.bw-switch-on{background:var(--dsw-alias-brand-primary,#5b8def)}',
|
|
@@ -4869,6 +4933,70 @@ window.__ModuleLoader__.load({
|
|
|
4869
4933
|
.map(n => Math.max(0, Math.min(255, Math.round(n))).toString(16).padStart(2, '0'))
|
|
4870
4934
|
.join('')
|
|
4871
4935
|
|
|
4936
|
+
/* ---------- auto palette slots + theme resolution (v0.25.0, pure) ---------- */
|
|
4937
|
+
/**
|
|
4938
|
+
* Two palettes, one slot table — the "auto color" of a row is stored as the
|
|
4939
|
+
* SLOT TOKEN (`auto:3`), never as a hex. Rendering resolves it against the
|
|
4940
|
+
* live theme, so a theme flip re-colours every auto-assigned row with no
|
|
4941
|
+
* migration, no rewrite of stored data and no cross-device mismatch (the
|
|
4942
|
+
* host settings copy carries the token, and each device paints its own
|
|
4943
|
+
* theme). Manual colours stay plain hex and are never touched.
|
|
4944
|
+
*
|
|
4945
|
+
* APPEND-ONLY, like ICON_CHOICES / ICON_ALIASES: a stored token must keep
|
|
4946
|
+
* resolving forever, so never reorder or delete a slot (an out-of-range index
|
|
4947
|
+
* clamps to slot 0 rather than rendering nothing).
|
|
4948
|
+
*
|
|
4949
|
+
* Contrast rule: each slot's LIGHT colour clears WCAG **4.5 (normal-text AA)**
|
|
4950
|
+
* against the measured light row surface, and each slot's DARK colour clears
|
|
4951
|
+
* 4.5 against the measured dark row surface. Backgrounds are not guesses —
|
|
4952
|
+
* they were read off a live instance (see CHANGELOG v0.25.0): light
|
|
4953
|
+
* `--dsw-alias-bg-base` #ffffff with a hover/current overlay around #f7f8fa,
|
|
4954
|
+
* dark base #151517 with tokens up to #2c2c2e. The pairs below are computed
|
|
4955
|
+
* against the CONSERVATIVE ends (#ebedf0 light, #2c2c2e dark), which is why
|
|
4956
|
+
* the numbers in the comments sit above 5.0 — on the real surfaces they are
|
|
4957
|
+
* higher still. Change a hex ⇒ re-run the contrast test in tests/smoke.mjs.
|
|
4958
|
+
*/
|
|
4959
|
+
const AUTO_COLOR_SLOTS = [
|
|
4960
|
+
{ name: 'red', light: '#c40d00', dark: '#ff7369' }, // h=4 5.26 / 5.25
|
|
4961
|
+
{ name: 'amber', light: '#965000', dark: '#f08000' }, // h=32 5.20 / 5.17
|
|
4962
|
+
{ name: 'lime', light: '#496e00', dark: '#74ad00' }, // h=80 5.10 / 5.12
|
|
4963
|
+
{ name: 'green', light: '#007330', dark: '#00b54b' }, // h=145 5.12 / 5.12
|
|
4964
|
+
{ name: 'teal', light: '#006e65', dark: '#00b0a1' }, // h=175 5.24 / 5.13
|
|
4965
|
+
{ name: 'cyan', light: '#006a85', dark: '#00abd6' }, // h=192 5.27 / 5.17
|
|
4966
|
+
{ name: 'sky', light: '#0065ad', dark: '#24a4ff' }, // h=205 5.17 / 5.20
|
|
4967
|
+
{ name: 'blue', light: '#0055e8', dark: '#669eff' }, // h=218 5.17 / 5.24
|
|
4968
|
+
{ name: 'indigo', light: '#5938ff', dark: '#a28fff' }, // h=250 5.21 / 5.25
|
|
4969
|
+
{ name: 'violet', light: '#8700fc', dark: '#c480ff' }, // h=272 5.21 / 5.23
|
|
4970
|
+
{ name: 'magenta', light: '#b50097', dark: '#ff59e3' }, // h=310 5.25 / 5.17
|
|
4971
|
+
{ name: 'pink', light: '#c40052', dark: '#ff69a7' }, // h=335 5.16 / 5.20
|
|
4972
|
+
{ name: 'grey', light: '#5e6268', dark: '#9b9ea4' }, // h=220 5.23 / 5.19
|
|
4973
|
+
]
|
|
4974
|
+
/** The values the shuffle bag draws — slot tokens, not colours. */
|
|
4975
|
+
const AUTO_COLOR_TOKENS = AUTO_COLOR_SLOTS.map((slot, index) => 'auto:' + index)
|
|
4976
|
+
const AUTO_TOKEN_RE = /^auto:(\d+)$/
|
|
4977
|
+
const isAutoColorToken = (value) => typeof value === 'string' && AUTO_TOKEN_RE.test(value)
|
|
4978
|
+
/**
|
|
4979
|
+
* Token → hex for one theme. `dark` is explicit so the same function serves
|
|
4980
|
+
* rendering (live flag), tests (both themes) and the pickers (preview).
|
|
4981
|
+
*/
|
|
4982
|
+
const resolveAutoColor = (token, dark) => {
|
|
4983
|
+
const match = AUTO_TOKEN_RE.exec(typeof token === 'string' ? token : '')
|
|
4984
|
+
if (!match) return ''
|
|
4985
|
+
const index = Number(match[1])
|
|
4986
|
+
// Append-only table: an unknown index clamps to slot 0 instead of painting
|
|
4987
|
+
// an invalid CSS colour (a row must never end up colourless by accident).
|
|
4988
|
+
const slot = AUTO_COLOR_SLOTS[index] || AUTO_COLOR_SLOTS[0]
|
|
4989
|
+
if (!slot) return ''
|
|
4990
|
+
return dark === true ? slot.dark : slot.light
|
|
4991
|
+
}
|
|
4992
|
+
/** Any stored colour value → the hex to paint: tokens resolve, hexes pass. */
|
|
4993
|
+
const resolveColorValue = (value, dark) => {
|
|
4994
|
+
if (typeof value !== 'string' || value === '') return ''
|
|
4995
|
+
return isAutoColorToken(value) ? resolveAutoColor(value, dark === undefined ? autoThemeDarkNow() : dark) : value
|
|
4996
|
+
}
|
|
4997
|
+
/* ---------- end of the auto palette slot block ---------- */
|
|
4998
|
+
|
|
4999
|
+
|
|
4872
5000
|
/* ------------------- appearance: defaults + outline ------------------- */
|
|
4873
5001
|
|
|
4874
5002
|
// Text outline. Width and color are DERIVED, never hand-picked: an outline
|
|
@@ -4950,7 +5078,8 @@ window.__ModuleLoader__.load({
|
|
|
4950
5078
|
? appearance.strokeColor
|
|
4951
5079
|
: DEFAULT_APPEARANCE.strokeColor
|
|
4952
5080
|
if (picked === STROKE_AUTO) {
|
|
4953
|
-
const
|
|
5081
|
+
const fontColor = resolveColorValue(appearance.color)
|
|
5082
|
+
const rgb = fontColor ? colorToRgb(fontColor) : null
|
|
4954
5083
|
return rgb ? contrastStrokeColor(rgb) : STROKE_FALLBACK
|
|
4955
5084
|
}
|
|
4956
5085
|
return colorToRgb(picked) ? picked : DEFAULT_APPEARANCE.strokeColor
|
|
@@ -5367,47 +5496,55 @@ window.__ModuleLoader__.load({
|
|
|
5367
5496
|
})
|
|
5368
5497
|
})()
|
|
5369
5498
|
|
|
5370
|
-
/*
|
|
5499
|
+
/* ========= theme-aware auto appearance for NEW items (v0.25.0) ========= */
|
|
5371
5500
|
|
|
5372
5501
|
/**
|
|
5373
|
-
*
|
|
5374
|
-
*
|
|
5375
|
-
* (
|
|
5376
|
-
*
|
|
5377
|
-
*
|
|
5378
|
-
*
|
|
5379
|
-
* Rule: WCAG contrast ≥ 3.0 against #ffffff AND against #1c1c1e — the
|
|
5380
|
-
* graphics / large-text threshold, which is the usable bar in both themes.
|
|
5381
|
-
* Normal-text AA (4.5) is NOT reached by any entry on both backgrounds, and
|
|
5382
|
-
* cannot be: a single fixed hex has to clear both pure white and near black,
|
|
5383
|
-
* and those two demands pull luminance in opposite directions. This pool is
|
|
5384
|
-
* therefore the same tier as the shipped manual swatches (four of them are
|
|
5385
|
-
* in it verbatim, and the five that were weaker than 3.0 on white are
|
|
5386
|
-
* excluded), not an AA-grade text palette. Copy must say ≥3.0, never "AA".
|
|
5502
|
+
* Live light/dark signal. The shipped theme runtime toggles the BOOLEAN
|
|
5503
|
+
* attribute `data-ds-dark-theme` on <body>
|
|
5504
|
+
* (packages/client/ui-theme/src/boot-theme.ts), so that attribute — not a
|
|
5505
|
+
* luminance guess and not `prefers-color-scheme` (the host resolves `system`
|
|
5506
|
+
* itself and may disagree with the OS) — is the authority.
|
|
5387
5507
|
*
|
|
5388
|
-
*
|
|
5389
|
-
*
|
|
5390
|
-
*
|
|
5391
|
-
* #ec6cb9) are represented by their same-hue, one-step-darker siblings
|
|
5392
|
-
* (#46a758 / #d97706 / #0891b2 and the pink/violet neighbours), so the
|
|
5393
|
-
* palette keeps the shipped style while lifting every entry over 3.0 on both
|
|
5394
|
-
* backgrounds. One dozen-plus distinct hues, fixed in code — never generated.
|
|
5508
|
+
* A module-level store lets every row re-render on a flip without threading a
|
|
5509
|
+
* prop through the tree, and it keeps the pure resolvers below testable:
|
|
5510
|
+
* they take the flag as an argument.
|
|
5395
5511
|
*/
|
|
5396
|
-
|
|
5397
|
-
|
|
5398
|
-
|
|
5399
|
-
|
|
5400
|
-
'
|
|
5401
|
-
|
|
5402
|
-
|
|
5403
|
-
|
|
5404
|
-
|
|
5405
|
-
|
|
5406
|
-
|
|
5407
|
-
|
|
5408
|
-
|
|
5409
|
-
|
|
5410
|
-
|
|
5512
|
+
let autoThemeDark = false
|
|
5513
|
+
const autoThemeListeners = new Set()
|
|
5514
|
+
let autoThemeObserver = null
|
|
5515
|
+
const readThemeDark = () => {
|
|
5516
|
+
try { return document.body.hasAttribute('data-ds-dark-theme') === true } catch (error) { return false }
|
|
5517
|
+
}
|
|
5518
|
+
// getSnapshot must stay cheap and stable: a boolean read per render.
|
|
5519
|
+
const autoThemeDarkNow = () => {
|
|
5520
|
+
const next = readThemeDark()
|
|
5521
|
+
if (next !== autoThemeDark) autoThemeDark = next
|
|
5522
|
+
return autoThemeDark
|
|
5523
|
+
}
|
|
5524
|
+
const subscribeAutoTheme = (listener) => {
|
|
5525
|
+
autoThemeListeners.add(listener)
|
|
5526
|
+
if (autoThemeObserver === null) {
|
|
5527
|
+
autoThemeDarkNow()
|
|
5528
|
+
try {
|
|
5529
|
+
autoThemeObserver = new MutationObserver(() => {
|
|
5530
|
+
const next = readThemeDark()
|
|
5531
|
+
if (next === autoThemeDark) return
|
|
5532
|
+
autoThemeDark = next
|
|
5533
|
+
for (const fn of [...autoThemeListeners]) {
|
|
5534
|
+
try { fn() } catch (error) { /* a listener must never break the flip */ }
|
|
5535
|
+
}
|
|
5536
|
+
})
|
|
5537
|
+
autoThemeObserver.observe(document.body, { attributes: true, attributeFilter: ['data-ds-dark-theme'] })
|
|
5538
|
+
} catch (error) { autoThemeObserver = undefined }
|
|
5539
|
+
}
|
|
5540
|
+
return () => { autoThemeListeners.delete(listener) }
|
|
5541
|
+
}
|
|
5542
|
+
/** Subscribe a component to the theme flip (rows repaint with the other pool). */
|
|
5543
|
+
const useAutoThemeDark = () => {
|
|
5544
|
+
if (typeof React.useSyncExternalStore !== 'function') return autoThemeDarkNow()
|
|
5545
|
+
return React.useSyncExternalStore(subscribeAutoTheme, autoThemeDarkNow, autoThemeDarkNow)
|
|
5546
|
+
}
|
|
5547
|
+
|
|
5411
5548
|
|
|
5412
5549
|
/**
|
|
5413
5550
|
* Icon pool of the same toggle: names from the EXISTING candidate list
|
|
@@ -5475,7 +5612,9 @@ window.__ModuleLoader__.load({
|
|
|
5475
5612
|
|
|
5476
5613
|
/** What this host can actually render, resolved once (the icon set is fixed per page). */
|
|
5477
5614
|
const AUTO_ICON_CHOICES = AUTO_ICON_POOL.filter((name) => resolveIconName(name) !== '')
|
|
5478
|
-
|
|
5615
|
+
// The bag draws SLOT TOKENS (not colours): the same draw stays valid in both
|
|
5616
|
+
// themes, so a theme flip never invalidates the recent-draw window.
|
|
5617
|
+
const autoStyler = createAutoStyler(AUTO_COLOR_TOKENS, AUTO_ICON_CHOICES)
|
|
5479
5618
|
|
|
5480
5619
|
/**
|
|
5481
5620
|
* Appearance controls shared by the per-row dialog and the settings card's
|
|
@@ -5488,7 +5627,13 @@ window.__ModuleLoader__.load({
|
|
|
5488
5627
|
*/
|
|
5489
5628
|
function AppearanceControls({ value, onChange, allowIcon, t }) {
|
|
5490
5629
|
const appearance = readAppearance(value)
|
|
5491
|
-
|
|
5630
|
+
// Subscribe to the theme flip: a row may carry an `auto:N` token, and the
|
|
5631
|
+
// controls must show/preview the colour that token paints right now.
|
|
5632
|
+
useAutoThemeDark()
|
|
5633
|
+
// Displayed/every control below uses the RESOLVED hex; the raw value stays
|
|
5634
|
+
// in the draft, so committing without touching the colour keeps the token
|
|
5635
|
+
// (and with it the theme-following behaviour).
|
|
5636
|
+
const color = resolveColorValue(appearance.color || '')
|
|
5492
5637
|
const glow = appearance.glow
|
|
5493
5638
|
const weight = appearance.weight
|
|
5494
5639
|
const shadow = appearance.shadow
|
|
@@ -5817,6 +5962,7 @@ window.__ModuleLoader__.load({
|
|
|
5817
5962
|
}, label)
|
|
5818
5963
|
return E('div', { className: 'bw-settings' },
|
|
5819
5964
|
StyleNode(),
|
|
5965
|
+
E('div', { className: 'bw-settings-group-title' }, t('settings.group.tree')),
|
|
5820
5966
|
E('div', { className: 'bw-setting-row' },
|
|
5821
5967
|
E('div', { className: 'bw-setting-label' }, t('settings.compactChains')),
|
|
5822
5968
|
E('button', {
|
|
@@ -5850,19 +5996,21 @@ window.__ModuleLoader__.load({
|
|
|
5850
5996
|
),
|
|
5851
5997
|
),
|
|
5852
5998
|
E('div', { className: 'bw-hint' }, t('settings.workspaceGroup.hint')),
|
|
5853
|
-
E('div', { className: 'bw-setting-row'
|
|
5854
|
-
E('div', { className: 'bw-setting-label' }, t('settings.
|
|
5855
|
-
E('
|
|
5856
|
-
|
|
5857
|
-
|
|
5858
|
-
|
|
5859
|
-
|
|
5860
|
-
|
|
5861
|
-
|
|
5862
|
-
|
|
5999
|
+
E('div', { className: 'bw-setting-row' },
|
|
6000
|
+
E('div', { className: 'bw-setting-label' }, t('settings.sessionLimit')),
|
|
6001
|
+
E('div', { className: 'bw-seg' },
|
|
6002
|
+
[[0, t('settings.sessionLimit.all')], [5, '5'], [10, '10'], [25, '25']].map(([value, label]) =>
|
|
6003
|
+
E('button', {
|
|
6004
|
+
type: 'button',
|
|
6005
|
+
key: String(value),
|
|
6006
|
+
className: cls('bw-seg-btn', sessionLimit === value && 'bw-seg-btn-active'),
|
|
6007
|
+
onClick: () => { setPref('sessionLimit', value) },
|
|
6008
|
+
}, label)),
|
|
6009
|
+
),
|
|
5863
6010
|
),
|
|
5864
|
-
E('div', { className: 'bw-hint' }, t('settings.
|
|
5865
|
-
E('div', { className: 'bw-
|
|
6011
|
+
E('div', { className: 'bw-hint' }, t('settings.sessionLimit.hint')),
|
|
6012
|
+
E('div', { className: 'bw-settings-group-title' }, t('settings.group.interaction')),
|
|
6013
|
+
E('div', { className: 'bw-setting-row' },
|
|
5866
6014
|
E('div', { className: 'bw-setting-label' }, t('settings.sessionMenu')),
|
|
5867
6015
|
E('button', {
|
|
5868
6016
|
type: 'button',
|
|
@@ -5886,7 +6034,20 @@ window.__ModuleLoader__.load({
|
|
|
5886
6034
|
}, E('span', { className: 'bw-switch-thumb' })),
|
|
5887
6035
|
),
|
|
5888
6036
|
E('div', { className: 'bw-hint' }, t('settings.rowActions.hint')),
|
|
5889
|
-
E('div', { className: 'bw-
|
|
6037
|
+
E('div', { className: 'bw-settings-group-title' }, t('settings.group.appearance')),
|
|
6038
|
+
E('div', { className: 'bw-setting-row' },
|
|
6039
|
+
E('div', { className: 'bw-setting-label' }, t('settings.statusPulse')),
|
|
6040
|
+
E('button', {
|
|
6041
|
+
type: 'button',
|
|
6042
|
+
role: 'switch',
|
|
6043
|
+
'aria-checked': statusPulse,
|
|
6044
|
+
'aria-label': t('settings.statusPulse'),
|
|
6045
|
+
className: cls('bw-switch', statusPulse && 'bw-switch-on'),
|
|
6046
|
+
onClick: () => { setPref('statusPulse', !statusPulse) },
|
|
6047
|
+
}, E('span', { className: 'bw-switch-thumb' })),
|
|
6048
|
+
),
|
|
6049
|
+
E('div', { className: 'bw-hint' }, t('settings.statusPulse.hint')),
|
|
6050
|
+
E('div', { className: 'bw-setting-row' },
|
|
5890
6051
|
E('div', { className: 'bw-setting-label' }, t('settings.autoStyle')),
|
|
5891
6052
|
E('button', {
|
|
5892
6053
|
type: 'button',
|
|
@@ -5898,20 +6059,7 @@ window.__ModuleLoader__.load({
|
|
|
5898
6059
|
}, E('span', { className: 'bw-switch-thumb' })),
|
|
5899
6060
|
),
|
|
5900
6061
|
E('div', { className: 'bw-hint' }, t('settings.autoStyle.hint')),
|
|
5901
|
-
E('div', { className: 'bw-setting-
|
|
5902
|
-
E('div', { className: 'bw-setting-label' }, t('settings.sessionLimit')),
|
|
5903
|
-
E('div', { className: 'bw-seg' },
|
|
5904
|
-
[[0, t('settings.sessionLimit.all')], [5, '5'], [10, '10'], [25, '25']].map(([value, label]) =>
|
|
5905
|
-
E('button', {
|
|
5906
|
-
type: 'button',
|
|
5907
|
-
key: String(value),
|
|
5908
|
-
className: cls('bw-seg-btn', sessionLimit === value && 'bw-seg-btn-active'),
|
|
5909
|
-
onClick: () => { setPref('sessionLimit', value) },
|
|
5910
|
-
}, label)),
|
|
5911
|
-
),
|
|
5912
|
-
),
|
|
5913
|
-
E('div', { className: 'bw-hint' }, t('settings.sessionLimit.hint')),
|
|
5914
|
-
E('div', { className: 'bw-setting-label', style: { marginTop: 16 } }, t('settings.appearance')),
|
|
6062
|
+
E('div', { className: 'bw-setting-label' }, t('settings.appearance')),
|
|
5915
6063
|
E('div', { className: 'bw-hint' }, t('settings.appearance.hint')),
|
|
5916
6064
|
E('div', { className: 'bw-appearance-box' },
|
|
5917
6065
|
E(AppearanceControls, {
|
|
@@ -6337,6 +6485,21 @@ window.__ModuleLoader__.load({
|
|
|
6337
6485
|
// Auto color + icon for new items (v0.24.0). Default OFF: absent key =
|
|
6338
6486
|
// off, so every existing snapshot keeps its behavior untouched.
|
|
6339
6487
|
const autoStyle = prefsMap.autoStyle === true
|
|
6488
|
+
// Subscribe the ROW renderer to the theme flip (v0.25.0 P1): resolving a
|
|
6489
|
+
// stored `auto:N` token reads the live theme, but a read alone never
|
|
6490
|
+
// repaints — without this subscription the rows kept the light pool after
|
|
6491
|
+
// the Host switched to dark, so normal-text AA was broken on the switch
|
|
6492
|
+
// path (measured 2.49). The value is passed explicitly into the resolver
|
|
6493
|
+
// below so the colour and the outline pole come from one snapshot.
|
|
6494
|
+
//
|
|
6495
|
+
// Placement: this sits before every OTHER hook, so the hook order is fixed
|
|
6496
|
+
// for a mount. The one branch above it is the injected-hook shape gate
|
|
6497
|
+
// (`typeof useWorkspaces !== 'function' → return null`), which is constant
|
|
6498
|
+
// for the lifetime of a mount — the hook count therefore never varies, and
|
|
6499
|
+
// that branch renders no rows at all. If anyone ever turns that gate into a
|
|
6500
|
+
// condition that can CHANGE mid-mount, this subscription must move above it
|
|
6501
|
+
// first, or React sees a varying hook count.
|
|
6502
|
+
const autoDarkTheme = useAutoThemeDark()
|
|
6340
6503
|
// Workspace stream state: a `ready` phase with a settled stream is the
|
|
6341
6504
|
// first authoritative inventory — the point where "everything seen so
|
|
6342
6505
|
// far is pre-existing" can be recorded once (older hosts without the
|
|
@@ -6734,7 +6897,11 @@ window.__ModuleLoader__.load({
|
|
|
6734
6897
|
const appearanceOf = (key) => mergeAppearance(defaultAppearance, styleEntry(key))
|
|
6735
6898
|
const rowStyleOf = (key) => {
|
|
6736
6899
|
const appearance = appearanceOf(key)
|
|
6737
|
-
|
|
6900
|
+
// `auto:N` tokens resolve against the LIVE theme here, which is what makes
|
|
6901
|
+
// a theme flip re-colour every auto-assigned row. `autoDarkTheme` is the
|
|
6902
|
+
// subscribed snapshot, passed explicitly: reading the DOM would give the
|
|
6903
|
+
// same value, but only the subscription guarantees the repaint.
|
|
6904
|
+
const color = resolveColorValue(appearance.color || '', autoDarkTheme)
|
|
6738
6905
|
const glow = Number(appearance.glow) || 0
|
|
6739
6906
|
const weight = Number(appearance.weight) || 0
|
|
6740
6907
|
const shadow = appearance.shadow === true
|