pygpt-net 2.6.42__py3-none-any.whl → 2.6.44__py3-none-any.whl

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.
Files changed (43) hide show
  1. pygpt_net/CHANGELOG.txt +13 -0
  2. pygpt_net/__init__.py +3 -3
  3. pygpt_net/controller/__init__.py +2 -0
  4. pygpt_net/controller/debug/debug.py +7 -19
  5. pygpt_net/controller/debug/fixtures.py +103 -0
  6. pygpt_net/controller/launcher/launcher.py +2 -2
  7. pygpt_net/controller/presets/presets.py +10 -0
  8. pygpt_net/core/debug/debug.py +2 -2
  9. pygpt_net/core/fixtures/stream/__init__.py +0 -0
  10. pygpt_net/{provider/api/fake → core/fixtures/stream}/generator.py +1 -1
  11. pygpt_net/core/models/models.py +11 -1
  12. pygpt_net/core/render/web/body.py +5 -1
  13. pygpt_net/core/updater/updater.py +18 -7
  14. pygpt_net/data/config/config.json +10 -6
  15. pygpt_net/data/config/models.json +4 -10
  16. pygpt_net/data/config/settings.json +59 -19
  17. pygpt_net/data/css/web-blocks.css +4 -0
  18. pygpt_net/data/css/web-chatgpt.css +4 -0
  19. pygpt_net/data/css/web-chatgpt_wide.css +4 -0
  20. pygpt_net/data/js/app.js +727 -361
  21. pygpt_net/data/locale/locale.en.ini +8 -1
  22. pygpt_net/js_rc.py +11506 -10502
  23. pygpt_net/provider/api/openai/__init__.py +4 -12
  24. pygpt_net/provider/core/config/patch.py +26 -2457
  25. pygpt_net/provider/core/config/patches/__init__.py +0 -0
  26. pygpt_net/provider/core/config/patches/patch_before_2_6_42.py +2510 -0
  27. pygpt_net/provider/core/model/patch.py +12 -764
  28. pygpt_net/provider/core/model/patches/__init__.py +0 -0
  29. pygpt_net/provider/core/model/patches/patch_before_2_6_42.py +813 -0
  30. pygpt_net/provider/core/preset/patch.py +12 -221
  31. pygpt_net/provider/core/preset/patches/__init__.py +0 -0
  32. pygpt_net/provider/core/preset/patches/patch_before_2_6_42.py +272 -0
  33. pygpt_net/ui/base/context_menu.py +3 -2
  34. pygpt_net/ui/dialog/settings.py +5 -4
  35. pygpt_net/ui/layout/ctx/ctx_list.py +3 -3
  36. pygpt_net/ui/menu/debug.py +36 -23
  37. pygpt_net/ui/widget/lists/context.py +233 -51
  38. {pygpt_net-2.6.42.dist-info → pygpt_net-2.6.44.dist-info}/METADATA +18 -129
  39. {pygpt_net-2.6.42.dist-info → pygpt_net-2.6.44.dist-info}/RECORD +43 -35
  40. /pygpt_net/{provider/api/fake/__init__.py → core/fixtures/__init__} +0 -0
  41. {pygpt_net-2.6.42.dist-info → pygpt_net-2.6.44.dist-info}/LICENSE +0 -0
  42. {pygpt_net-2.6.42.dist-info → pygpt_net-2.6.44.dist-info}/WHEEL +0 -0
  43. {pygpt_net-2.6.42.dist-info → pygpt_net-2.6.44.dist-info}/entry_points.txt +0 -0
pygpt_net/CHANGELOG.txt CHANGED
@@ -1,3 +1,16 @@
1
+ 2.6.44 (2025-09-12)
2
+
3
+ - Added: Auto-collapse for large user input blocks.
4
+ - Added: Configuration for syntax highlighting intervals.
5
+ - Improved: Visibility of label icons.
6
+ - Improved: Scrolling of code blocks.
7
+ - Fixed: Parsing of quotes in custom markdown blocks.
8
+
9
+ 2.6.43 (2025-09-12)
10
+
11
+ - Fixed: preset restoration when switching profiles.
12
+ - Improved: faster application launch and exit.
13
+
1
14
  2.6.42 (2025-09-11)
2
15
 
3
16
  - Fixed: Save/load zoom factor in the chat window when switched via Ctrl + mouse wheel.
pygpt_net/__init__.py CHANGED
@@ -6,15 +6,15 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.09.11 00:00:00 #
9
+ # Updated Date: 2025.09.12 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  __author__ = "Marcin Szczygliński"
13
13
  __copyright__ = "Copyright 2025, Marcin Szczygliński"
14
14
  __credits__ = ["Marcin Szczygliński"]
15
15
  __license__ = "MIT"
16
- __version__ = "2.6.42"
17
- __build__ = "2025-09-11"
16
+ __version__ = "2.6.44"
17
+ __build__ = "2025-09-12"
18
18
  __maintainer__ = "Marcin Szczygliński"
19
19
  __github__ = "https://github.com/szczyglis-dev/py-gpt"
20
20
  __report__ = "https://github.com/szczyglis-dev/py-gpt/issues"
@@ -150,6 +150,7 @@ class Controller:
150
150
  def reload(self):
151
151
  """Reload components"""
152
152
  self.reloading = True # lock
153
+ self.presets.lock()
153
154
 
154
155
  print(trans("status.reloading.profile.begin"))
155
156
 
@@ -185,5 +186,6 @@ class Controller:
185
186
  self.theme.reload_all(prev_theme=prev_theme) # do not reload theme if no change
186
187
 
187
188
  self.reloading = False # unlock
189
+ self.presets.unlock()
188
190
 
189
191
  print(trans("status.reloading.profile.end"))
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.09.05 18:00:00 #
9
+ # Updated Date: 2025.09.12 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from datetime import datetime
@@ -18,6 +18,8 @@ from PySide6.QtGui import QTextCursor
18
18
 
19
19
  from pygpt_net.core.events import RenderEvent
20
20
 
21
+ from .fixtures import Fixtures
22
+
21
23
 
22
24
  class Debug(QObject):
23
25
  def __init__(self, window=None):
@@ -28,6 +30,7 @@ class Debug(QObject):
28
30
  """
29
31
  super(Debug, self).__init__()
30
32
  self.window = window
33
+ self.fixtures = Fixtures(window)
31
34
  self.is_logger = False # logger window opened
32
35
  self.is_app_log = False # app log window opened
33
36
  self.is_fake_stream = False # fake stream enabled
@@ -37,6 +40,7 @@ class Debug(QObject):
37
40
  def update(self):
38
41
  """Update debug"""
39
42
  self.update_menu()
43
+ self.fixtures.update()
40
44
 
41
45
  def update_menu(self):
42
46
  """Update debug menu"""
@@ -127,6 +131,8 @@ class Debug(QObject):
127
131
  print("[LOGGER] Switching to: " + level)
128
132
  self.set_log_level(level)
129
133
 
134
+ self.fixtures.setup()
135
+
130
136
  def connect_signals(self):
131
137
  """Connect signals"""
132
138
  # webengine debug signals
@@ -189,14 +195,6 @@ class Debug(QObject):
189
195
  cur.insertText("\n")
190
196
  self.window.logger.setTextCursor(cur) # Update visible cursor
191
197
 
192
- def fake_stream_enabled(self) -> bool:
193
- """
194
- Check if fake stream is enabled
195
-
196
- :return: True if enabled, False otherwise
197
- """
198
- return self.is_fake_stream
199
-
200
198
  def logger_enabled(self) -> bool:
201
199
  """
202
200
  Check if debug window is enabled
@@ -252,16 +250,6 @@ class Debug(QObject):
252
250
  # update menu
253
251
  self.update()
254
252
 
255
- def toggle_fake_stream(self):
256
- """
257
- Toggle fake stream debug
258
- """
259
- value = self.window.ui.menu['debug.fake_stream'].isChecked()
260
- self.is_fake_stream = value
261
- self.log(f"debug.fake_stream set to {value}")
262
- # update menu
263
- self.update()
264
-
265
253
  def on_close(self, id: str):
266
254
  """
267
255
  Handle debug window close event
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ # ================================================== #
4
+ # This file is a part of PYGPT package #
5
+ # Website: https://pygpt.net #
6
+ # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
+ # MIT License #
8
+ # Created By : Marcin Szczygliński #
9
+ # Updated Date: 2025.09.12 20:00:00 #
10
+ # ================================================== #
11
+
12
+ import os
13
+ from typing import Iterable
14
+
15
+ from pygpt_net.core.fixtures.stream.generator import FakeOpenAIStream
16
+ from pygpt_net.item.ctx import CtxItem
17
+
18
+
19
+ class Fixtures:
20
+ def __init__(self, window=None):
21
+ """
22
+ Fixtures controller
23
+
24
+ :param window: Window instance
25
+ """
26
+ self.window = window
27
+ self.enabled = {
28
+ "stream": False,
29
+ }
30
+
31
+ def is_enabled(self, name: str) -> bool:
32
+ """
33
+ Check if fixture is enabled by name
34
+
35
+ :param name: fixture name
36
+ """
37
+ return self.enabled.get(name, False)
38
+
39
+ def enable(self, name: str):
40
+ """
41
+ Enable fixture by name
42
+
43
+ :param name: fixture name
44
+ """
45
+ if name in self.enabled:
46
+ self.enabled[name] = True
47
+
48
+ def disable(self, name: str):
49
+ """
50
+ Disable fixture by name
51
+
52
+ :param name: fixture name
53
+ e"""
54
+ if name in self.enabled:
55
+ self.enabled[name] = False
56
+
57
+ def toggle(self, name: str):
58
+ """
59
+ Toggle fixture by name
60
+
61
+ :param name: fixture name
62
+ """
63
+ if name in self.enabled:
64
+ self.enabled[name] = not self.enabled[name]
65
+
66
+ def toggle_from_menu(self, name: str):
67
+ """
68
+ Toggle fake stream debug
69
+
70
+ :param name: fixture name
71
+ """
72
+ k = f"debug.fixtures.{name}"
73
+ if k not in self.window.ui.menu:
74
+ return
75
+ value = self.window.ui.menu[k].isChecked()
76
+ self.enable("stream") if value else self.disable("stream")
77
+ self.window.controller.debug.update() # update menu
78
+
79
+ def get_stream_generator(self, ctx: CtxItem) -> Iterable:
80
+ """
81
+ Get fake stream generator
82
+
83
+ :param ctx: context item
84
+ :return: stream generator
85
+ """
86
+ ctx.use_responses_api = False
87
+ path = os.path.join(self.window.core.config.get_app_path(), "data", "js", "app.js")
88
+ return FakeOpenAIStream(code_path=path).stream(
89
+ api="raw",
90
+ chunk="code",
91
+ )
92
+
93
+ def setup(self):
94
+ """Set up fixtures"""
95
+ pass
96
+
97
+ def update(self):
98
+ """Update fixtures"""
99
+ pass
100
+
101
+ def reload(self):
102
+ """Reload fixtures"""
103
+ pass
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.07.21 21:00:00 #
9
+ # Updated Date: 2025.09.11 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  from pygpt_net.core.types import (
@@ -29,7 +29,7 @@ class Launcher:
29
29
  """Post setup launcher"""
30
30
  # check for updates
31
31
  if self.window.core.config.get('updater.check.launch'):
32
- self.window.core.updater.check()
32
+ self.window.core.updater.run_check(force=True) # async
33
33
 
34
34
  def show_api_monit(self):
35
35
  """Show empty API KEY monit"""
@@ -671,9 +671,19 @@ class Presets:
671
671
 
672
672
  def reload(self):
673
673
  """Reload presets"""
674
+ was_locked = self.locked
674
675
  self.locked = True
675
676
  self.window.core.presets.load()
676
677
  self.refresh()
678
+ if not was_locked:
679
+ self.locked = False
680
+
681
+ def lock(self):
682
+ """Lock presets change"""
683
+ self.locked = True
684
+
685
+ def unlock(self):
686
+ """Unlock presets change"""
677
687
  self.locked = False
678
688
 
679
689
  def add_selected(self, id: int):
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.24 02:00:00 #
9
+ # Updated Date: 2025.09.12 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import gc
@@ -412,7 +412,7 @@ class Debug:
412
412
  qobjects = sum(1 for obj in QApplication.allWidgets() if isinstance(obj, QObject))
413
413
  stats.append(f"QObjects: {qobjects}")
414
414
 
415
- res += "\n" + "\n".join(stats)
415
+ res += "\n\n".join(stats)
416
416
  print("\n".join(stats))
417
417
  return res
418
418
 
File without changes
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.09.07 05:00:00 #
9
+ # Updated Date: 2025.09.12 20:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import asyncio
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.26 23:00:00 #
9
+ # Updated Date: 2025.09.12 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
@@ -109,6 +109,16 @@ class Models:
109
109
 
110
110
  return updated
111
111
 
112
+ def from_base(self, key: str) -> Optional[ModelItem]:
113
+ """
114
+ Get model from base models
115
+
116
+ :param key: model name
117
+ :return: model config object or None
118
+ """
119
+ items = self.get_base()
120
+ return items.get(key)
121
+
112
122
  def get(self, key: str) -> ModelItem:
113
123
  """
114
124
  Return model config
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.09.11 08:00:00 #
9
+ # Updated Date: 2025.09.12 23:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import os
@@ -447,9 +447,13 @@ class Body:
447
447
  syntax_style = cfg_get("render.code_syntax") or "default"
448
448
  style_js = (
449
449
  f'window.CODE_SYNTAX_STYLE={_json_dumps(syntax_style)};'
450
+ f'window.PROFILE_CODE_HL_N_LINE={int(cfg_get("render.code_syntax.stream_n_line", 25))};'
451
+ f'window.PROFILE_CODE_HL_N_CHARS={int(cfg_get("render.code_syntax.stream_n_chars", 5000))};'
450
452
  f'window.PROFILE_CODE_STOP_HL_AFTER_LINES={int(cfg_get("render.code_syntax.stream_max_lines", 300))};'
451
453
  f'window.PROFILE_CODE_FINAL_HL_MAX_LINES={int(cfg_get("render.code_syntax.final_max_lines", 1500))};'
452
454
  f'window.PROFILE_CODE_FINAL_HL_MAX_CHARS={int(cfg_get("render.code_syntax.final_max_chars", 350000))};'
455
+ f'window.DISABLE_SYNTAX_HIGHLIGHT={int(cfg_get("render.code_syntax.disabled", 0))};'
456
+ f'window.USER_MSG_COLLAPSE_HEIGHT_PX={int(cfg_get("render.msg.user.collapse.px", 1500))};'
453
457
  )
454
458
 
455
459
  tips_js = f'window.TIPS={tips_json};'
@@ -6,7 +6,7 @@
6
6
  # GitHub: https://github.com/szczyglis-dev/py-gpt #
7
7
  # MIT License #
8
8
  # Created By : Marcin Szczygliński #
9
- # Updated Date: 2025.08.11 14:00:00 #
9
+ # Updated Date: 2025.09.11 00:00:00 #
10
10
  # ================================================== #
11
11
 
12
12
  import copy
@@ -453,11 +453,16 @@ class Updater:
453
453
  True
454
454
  )
455
455
 
456
- def run_check(self):
457
- """Run check for updates in background"""
456
+ def run_check(self, force: bool = False):
457
+ """
458
+ Run check for updates in background
459
+
460
+ :param force: force show version dialog
461
+ """
458
462
  worker = UpdaterWorker()
459
463
  worker.window = self.window
460
464
  worker.checker = self.check_silent
465
+ worker.force = force
461
466
  worker.signals.version_changed.connect(self.handle_new_version)
462
467
  self.window.threadpool.start(worker)
463
468
 
@@ -475,12 +480,13 @@ class UpdaterWorker(QRunnable):
475
480
  self.last_check_time = None
476
481
  self.window = None
477
482
  self.checker = None
483
+ self.force = False
478
484
 
479
485
  @Slot()
480
486
  def run(self):
481
487
  try:
482
488
  # if background check is not enabled, abort
483
- if not self.window.core.config.get("updater.check.bg"):
489
+ if not self.window.core.config.get("updater.check.bg") and not self.force:
484
490
  return
485
491
 
486
492
  # check
@@ -489,10 +495,12 @@ class UpdaterWorker(QRunnable):
489
495
  if last_checked is not None and last_checked != "":
490
496
  parsed_prev_checked = parse_version(last_checked)
491
497
 
492
- # print("Checking for updates...")
498
+ if self.force:
499
+ print("Checking for updates...")
500
+
493
501
  is_new, version, build, changelog, download_windows, download_linux = self.checker()
494
502
  if is_new:
495
- if parsed_prev_checked is None or parsed_prev_checked < parse_version(version):
503
+ if self.force or (parsed_prev_checked is None or parsed_prev_checked < parse_version(version)):
496
504
  self.signals.version_changed.emit(
497
505
  version,
498
506
  build,
@@ -500,6 +508,9 @@ class UpdaterWorker(QRunnable):
500
508
  download_windows,
501
509
  download_linux,
502
510
  )
511
+ return
512
+ if self.force:
513
+ print("No updates available.")
503
514
 
504
515
  except Exception as e:
505
516
  self.window.core.debug.log(e)
@@ -516,4 +527,4 @@ class UpdaterWorker(QRunnable):
516
527
  try:
517
528
  sig.deleteLater()
518
529
  except RuntimeError:
519
- pass
530
+ pass
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.42",
4
- "app.version": "2.6.42",
5
- "updated_at": "2025-09-11T00:00:00"
3
+ "version": "2.6.44",
4
+ "app.version": "2.6.44",
5
+ "updated_at": "2025-09-12T00:00:00"
6
6
  },
7
7
  "access.audio.event.speech": false,
8
8
  "access.audio.event.speech.disabled": [],
@@ -429,12 +429,16 @@
429
429
  "remote_tools.xai.sources.x": true,
430
430
  "remote_tools.xai.sources.news": false,
431
431
  "render.blocks": true,
432
- "render.code_syntax": "github-dark",
433
- "render.code_syntax.stream_max_lines": 1000,
432
+ "render.code_syntax": "github-dark",
433
+ "render.code_syntax.disabled": false,
434
+ "render.code_syntax.final_max_chars": 350000,
434
435
  "render.code_syntax.final_max_lines": 1500,
435
- "render.code_syntax.final_max_chars": 350000,
436
+ "render.code_syntax.stream_max_lines": 1000,
437
+ "render.code_syntax.stream_n_line": 25,
438
+ "render.code_syntax.stream_n_chars": 5000,
436
439
  "render.engine": "web",
437
440
  "render.memory.limit": "2.5GB",
441
+ "render.msg.user.collapse.px": 1500,
438
442
  "render.open_gl": false,
439
443
  "render.plain": false,
440
444
  "send_clear": true,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "__meta__": {
3
- "version": "2.6.42",
4
- "app.version": "2.6.42",
5
- "updated_at": "2025-09-11T08:03:34"
3
+ "version": "2.6.44",
4
+ "app.version": "2.6.44",
5
+ "updated_at": "2025-09-12T08:03:34"
6
6
  },
7
7
  "items": {
8
8
  "SpeakLeash/bielik-11b-v2.3-instruct:Q4_K_M": {
@@ -2437,13 +2437,7 @@
2437
2437
  "id": "grok-2-image-1212",
2438
2438
  "name": "grok-2-image-1212",
2439
2439
  "mode": [
2440
- "chat",
2441
- "llama_index",
2442
- "img",
2443
- "agent_llama",
2444
- "agent_openai",
2445
- "agent",
2446
- "expert"
2440
+ "img"
2447
2441
  ],
2448
2442
  "llama_index": {
2449
2443
  "args": [
@@ -593,6 +593,15 @@
593
593
  "multiplier": 1,
594
594
  "step": 1,
595
595
  "advanced": false
596
+ },
597
+ "theme.style": {
598
+ "section": "layout",
599
+ "type": "combo",
600
+ "use": "styles",
601
+ "label": "settings.theme.style",
602
+ "description": "settings.render.web.only.desc",
603
+ "value": "chatgpt",
604
+ "advanced": false
596
605
  },
597
606
  "zoom": {
598
607
  "section": "layout",
@@ -607,15 +616,6 @@
607
616
  "step": 1,
608
617
  "advanced": false
609
618
  },
610
- "theme.style": {
611
- "section": "layout",
612
- "type": "combo",
613
- "use": "styles",
614
- "label": "settings.theme.style",
615
- "description": "settings.render.web.only.desc",
616
- "value": "chatgpt",
617
- "advanced": false
618
- },
619
619
  "render.code_syntax": {
620
620
  "section": "layout",
621
621
  "type": "combo",
@@ -626,6 +626,36 @@
626
626
  "advanced": false,
627
627
  "tab": "code_syntax"
628
628
  },
629
+ "render.code_syntax.disabled": {
630
+ "section": "layout",
631
+ "type": "bool",
632
+ "label": "settings.render.code_syntax.disabled",
633
+ "value": false,
634
+ "advanced": false,
635
+ "tab": "code_syntax"
636
+ },
637
+ "render.code_syntax.stream_n_line": {
638
+ "section": "layout",
639
+ "type": "int",
640
+ "min": 0,
641
+ "slider": false,
642
+ "label": "settings.render.code_syntax.stream_n_line",
643
+ "description": "settings.render.code_syntax.stream_n_line.desc",
644
+ "value": 50,
645
+ "advanced": false,
646
+ "tab": "code_syntax"
647
+ },
648
+ "render.code_syntax.stream_n_chars": {
649
+ "section": "layout",
650
+ "type": "int",
651
+ "min": 0,
652
+ "slider": false,
653
+ "label": "settings.render.code_syntax.stream_n_chars",
654
+ "description": "settings.render.code_syntax.stream_n_chars.desc",
655
+ "value": 300,
656
+ "advanced": false,
657
+ "tab": "code_syntax"
658
+ },
629
659
  "render.code_syntax.stream_max_lines": {
630
660
  "section": "layout",
631
661
  "type": "int",
@@ -721,6 +751,19 @@
721
751
  "step": 1,
722
752
  "advanced": false
723
753
  },
754
+ "layout.dpi.factor": {
755
+ "section": "layout",
756
+ "type": "float",
757
+ "slider": true,
758
+ "label": "settings.layout.dpi.factor",
759
+ "description": "settings.restart.required",
760
+ "value": 1.0,
761
+ "min": 1.0,
762
+ "max": 3.0,
763
+ "multiplier": 100,
764
+ "step": 1,
765
+ "advanced": false
766
+ },
724
767
  "layout.dpi.scaling": {
725
768
  "section": "layout",
726
769
  "type": "bool",
@@ -734,17 +777,14 @@
734
777
  "step": 1,
735
778
  "advanced": false
736
779
  },
737
- "layout.dpi.factor": {
780
+ "render.msg.user.collapse.px": {
738
781
  "section": "layout",
739
- "type": "float",
740
- "slider": true,
741
- "label": "settings.layout.dpi.factor",
742
- "description": "settings.restart.required",
743
- "value": 1.0,
744
- "min": 1.0,
745
- "max": 3.0,
746
- "multiplier": 100,
747
- "step": 1,
782
+ "type": "int",
783
+ "min": 0,
784
+ "slider": false,
785
+ "label": "settings.render.msg.user.collapse.px",
786
+ "description": "settings.render.msg.user.collapse.px.desc",
787
+ "value": 1500,
748
788
  "advanced": false
749
789
  },
750
790
  "layout.tooltips": {
@@ -438,6 +438,10 @@ li + li {{
438
438
  margin-top: .35em;
439
439
  }}
440
440
 
441
+ li div:first-child {{
442
+ margin-top: 1rem;
443
+ }}
444
+
441
445
  .code-wrapper pre code {{
442
446
  max-height: 1000px;
443
447
  overflow-y: auto;
@@ -469,6 +469,10 @@ li + li {{
469
469
  margin-top: .35em;
470
470
  }}
471
471
 
472
+ li div:first-child {{
473
+ margin-top: 1rem;
474
+ }}
475
+
472
476
  .code-wrapper pre code {{
473
477
  max-height: 1000px;
474
478
  overflow-y: auto;
@@ -465,6 +465,10 @@ li + li {{
465
465
  margin-top: .35em;
466
466
  }}
467
467
 
468
+ li div:first-child {{
469
+ margin-top: 1rem;
470
+ }}
471
+
468
472
  .code-wrapper pre code {{
469
473
  max-height: 1000px;
470
474
  overflow-y: auto;