Skip to content

Conversation

@micieslak
Copy link
Member

@micieslak micieslak commented Nov 20, 2025

What does the PR do

Re-implements Theme from stateful singleton to attached property object, with dynamically propagated properties through the visual objects tree.

The approach is similar to the one used by buit-in themes, like Material or Universal.

It consists of following elements:

  • Theme - attached property type, holds state (padding, font size offset, style), which is propagated within the objects tree.
  • StatusColors - singleton, stateless, holds fixed colors definitions
  • ThemePalette <- non-mutable, not creatable component served by Theme, defining colors. We have two instances for dark/light styles
  • ThemeUtils - singleton, stateless utility methods and constants
  • Fonts - singleton, stateless, loads and serves fonts
  • Assets - singleton, stateless, access point for png/svg/emoji

By using attached property type, visual features like colors and sizes are no longer single global state, the same for all components within the app. It brings better flexibility when building responsive layouts for multiple platforms.

Closes: #19213

image

Affected areas

Entire QML codebase

Architecture compliance

Impact on end user

This change doesn't bring any changes visible to the end user.

How to test

Run the app and go through all possible views to detect incorrect colors, fonts, paddings, etc.

Risk

As there are many changes, there is a risk of introducing regressions related to visual appearance.

@micieslak micieslak requested review from a team, alexjba, caybro and noeliaSD as code owners November 20, 2025 10:27
@micieslak micieslak marked this pull request as draft November 20, 2025 10:27
@micieslak micieslak force-pushed the feat/theme-attached-type branch from 71355b5 to d6a2153 Compare November 20, 2025 10:34
@status-im-auto
Copy link
Member

status-im-auto commented Nov 20, 2025

Jenkins Builds

Click to see older builds (257)
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ d6a2153 #2 2025-11-20 10:42:15 ~7 min tests/nim 📄log
✔️ d6a2153 #2 2025-11-20 10:44:30 ~9 min android/arm64 🤖apk 📲
✔️ d6a2153 #2 2025-11-20 10:49:24 ~14 min tests/ui 📄log
✔️ d6a2153 #2 2025-11-20 10:50:05 ~15 min ios/aarch64 📱ipa
✔️ d6a2153 #2 2025-11-20 10:50:22 ~15 min macos/aarch64 🍎dmg
✔️ d6a2153 #2 2025-11-20 10:52:47 ~17 min linux/x86_64 📦tgz
✔️ d6a2153 #2 2025-11-20 10:53:42 ~18 min macos/aarch64-nwaku 🍎dmg
✔️ d6a2153 #2 2025-11-20 10:57:35 ~22 min linux/x86_64-nwaku 📦tgz
✔️ d6a2153 pr19316 2025-11-20 11:08:48 ~15 min tests/e2e 📊rpt
✔️ d6a2153 #2 2025-11-20 11:10:34 ~35 min windows/x86_64 💿exe
✖️ d6a2153 PR19316 2025-11-20 11:38:10 ~27 min tests/e2e-windows 📊rpt
39086dbb #3 2025-11-20 17:22:25 ~7 min android/arm64 📄log
a21474e #4 2025-11-21 11:18:31 ~6 min android/arm64 📄log
✔️ a21474e #3 2025-11-21 11:19:16 ~6 min tests/nim 📄log
a21474e #3 2025-11-21 11:21:22 ~9 min linux/x86_64-nwaku 📄log
a21474e #3 2025-11-21 11:25:12 ~12 min macos/aarch64-nwaku 📄log
✔️ a21474e #3 2025-11-21 11:26:01 ~13 min macos/aarch64 🍎dmg
✔️ a21474e #3 2025-11-21 11:26:21 ~13 min tests/ui 📄log
✔️ a21474e #3 2025-11-21 11:28:35 ~16 min linux/x86_64 📦tgz
✔️ a21474e #3 2025-11-21 11:38:31 ~26 min ios/aarch64 📱ipa
✔️ a21474e #3 2025-11-21 11:39:09 ~26 min windows/x86_64 💿exe
✔️ a21474e pr19316 2025-11-21 11:44:30 ~15 min tests/e2e 📊rpt
✖️ a21474e PR19316 2025-11-21 12:06:45 ~27 min tests/e2e-windows 📊rpt
✔️ 35c8758d #5 2025-11-21 15:58:00 ~9 min android/arm64 🤖apk 📲
✔️ 42ca45b #4 2025-11-21 16:04:34 ~15 min tests/nim 📄log
✔️ 42ca45b #4 2025-11-21 16:04:40 ~15 min ios/aarch64 📱ipa
✔️ 42ca45b #4 2025-11-21 16:04:40 ~15 min macos/aarch64-nwaku 🍎dmg
✔️ 42ca45b #4 2025-11-21 16:09:50 ~20 min linux/x86_64 📦tgz
✔️ 42ca45b #4 2025-11-21 16:11:05 ~22 min linux/x86_64-nwaku 📦tgz
✔️ 42ca45b #4 2025-11-21 16:11:42 ~22 min tests/ui 📄log
✔️ 42ca45b #4 2025-11-21 16:12:12 ~23 min windows/x86_64 💿exe
✔️ 42ca45b pr19316 2025-11-21 16:27:34 ~17 min tests/e2e 📊rpt
✖️ 42ca45b PR19316 2025-11-21 16:42:24 ~30 min tests/e2e-windows 📊rpt
✔️ 1c5773db #6 2025-11-21 17:26:40 ~10 min android/arm64 🤖apk 📲
✔️ 9f3195d8 #7 2025-11-22 17:27:58 ~12 min android/arm64 🤖apk 📲
✔️ b11fba6b #8 2025-11-24 17:30:49 ~15 min android/arm64 🤖apk 📲
✔️ ad13304e #9 2025-11-25 11:43:08 ~10 min android/arm64 🤖apk 📲
c1b54b0 #5 2025-11-25 11:44:19 ~11 min macos/aarch64-nwaku 📄log
c1b54b0 #5 2025-11-25 11:44:33 ~11 min linux/x86_64-nwaku 📄log
✔️ c1b54b0 #5 2025-11-25 11:46:30 ~13 min tests/nim 📄log
✔️ c1b54b0 #5 2025-11-25 11:48:56 ~16 min macos/aarch64 🍎dmg
c1b54b0 #5 2025-11-25 11:55:45 ~22 min tests/ui 📄log
✔️ c1b54b0 #5 2025-11-25 11:55:55 ~23 min linux/x86_64 📦tgz
✔️ c1b54b0 #5 2025-11-25 12:01:14 ~28 min windows/x86_64 💿exe
✔️ c1b54b0 pr19316 2025-11-25 12:11:55 ~15 min tests/e2e 📊rpt
✖️ c1b54b0 PR19316 2025-11-25 12:20:06 ~18 min tests/e2e-windows 📊rpt
6cf7b25 #6 2025-11-25 12:09:44 ~6 min macos/aarch64-nwaku 📄log
✔️ 6cf7b25 #6 2025-11-25 12:11:18 ~8 min tests/nim 📄log
✔️ 6cf7b25 #6 2025-11-25 12:15:12 ~12 min macos/aarch64 🍎dmg
✖️ 6cf7b25 #6 2025-11-25 12:15:12 ~12 min ios/aarch64 📱ipa
6cf7b25 #6 2025-11-25 12:17:54 ~14 min tests/ui 📄log
✔️ 6cf7b25 #6 2025-11-25 12:18:42 ~15 min linux/x86_64 📦tgz
✔️ 6cf7b25 #6 2025-11-25 12:23:58 ~20 min windows/x86_64 💿exe
✔️ 6cf7b25 #6 2025-11-25 12:24:58 ~22 min linux/x86_64-nwaku 📦tgz
✔️ 6cf7b25 pr19316 2025-11-25 12:36:19 ~17 min tests/e2e 📊rpt
✖️ 6cf7b25 PR19316 2025-11-25 12:52:53 ~28 min tests/e2e-windows 📊rpt
✔️ 6137e074 #10 2025-11-25 12:11:33 ~8 min android/arm64 🤖apk 📲
cf4e110 #7 2025-11-25 15:40:53 ~5 min macos/aarch64-nwaku 📄log
✔️ cf4e110 #7 2025-11-25 15:41:45 ~6 min tests/nim 📄log
✖️ cf4e110 #7 2025-11-25 15:44:29 ~9 min ios/aarch64 📱ipa
✔️ cf4e110 #7 2025-11-25 15:46:16 ~11 min macos/aarch64 🍎dmg
✔️ cf4e110 #7 2025-11-25 15:50:15 ~15 min linux/x86_64 📦tgz
cf4e110 #7 2025-11-25 15:50:28 ~15 min tests/ui 📄log
✔️ cf4e110 #7 2025-11-25 15:51:37 ~16 min linux/x86_64-nwaku 📦tgz
✔️ cf4e110 #7 2025-11-25 16:00:32 ~25 min windows/x86_64 💿exe
✖️ cf4e110 pr19316 2025-11-25 16:08:06 ~17 min tests/e2e 📊rpt
✖️ cf4e110 PR19316 2025-11-25 16:26:41 ~26 min tests/e2e-windows 📊rpt
5309fdb #8 2025-11-25 20:14:50 ~6 min macos/aarch64-nwaku 📄log
✔️ 5309fdb #8 2025-11-25 20:15:07 ~6 min tests/nim 📄log
✔️ 5309fdb #8 2025-11-25 20:22:03 ~13 min ios/aarch64 📱ipa
✔️ 5309fdb #8 2025-11-25 20:23:10 ~14 min macos/aarch64 🍎dmg
✔️ 5309fdb #8 2025-11-25 20:24:13 ~15 min linux/x86_64 📦tgz
✔️ 5309fdb #8 2025-11-25 20:24:32 ~15 min tests/ui 📄log
✔️ 5309fdb #8 2025-11-25 20:25:43 ~17 min linux/x86_64-nwaku 📦tgz
✔️ 5309fdb #8 2025-11-25 20:31:59 ~23 min windows/x86_64 💿exe
✔️ 5309fdb pr19316 2025-11-25 20:41:09 ~16 min tests/e2e 📊rpt
✔️ 85e5f55 #9 2025-11-26 14:28:14 ~6 min tests/nim 📄log
85e5f55 #9 2025-11-26 14:28:18 ~6 min macos/aarch64-nwaku 📄log
✔️ 85e5f55 #9 2025-11-26 14:35:27 ~13 min tests/ui 📄log
✔️ 85e5f55 #9 2025-11-26 14:36:02 ~14 min ios/aarch64 📱ipa
✔️ 85e5f55 #9 2025-11-26 14:36:24 ~14 min macos/aarch64 🍎dmg
✔️ 85e5f55 #9 2025-11-26 14:37:15 ~15 min linux/x86_64-nwaku 📦tgz
✔️ 85e5f55 #9 2025-11-26 14:38:29 ~16 min linux/x86_64 📦tgz
✔️ 85e5f55 #9 2025-11-26 14:46:05 ~24 min windows/x86_64 💿exe
✔️ 85e5f55 pr19316 2025-11-26 14:54:36 ~16 min tests/e2e 📊rpt
✖️ 85e5f55 PR19316 2025-11-26 15:15:15 ~29 min tests/e2e-windows 📊rpt
012c3f1 #10 2025-11-28 13:19:02 ~5 min linux/x86_64-nwaku 📄log
✔️ 012c3f1 #10 2025-11-28 13:20:12 ~7 min tests/nim 📄log
012c3f1 #10 2025-11-28 13:21:02 ~7 min macos/aarch64-nwaku 📄log
012c3f1 #10 2025-11-28 13:21:06 ~7 min macos/aarch64 📄log
✔️ 012c3f1 #14 2025-11-28 13:22:50 ~9 min android/arm64 🤖apk 📲
✔️ 012c3f1 #10 2025-11-28 13:27:59 ~14 min tests/ui 📄log
✔️ 012c3f1 #10 2025-11-28 13:29:27 ~16 min linux/x86_64 📦tgz
✔️ 012c3f1 #10 2025-11-28 13:31:00 ~17 min ios/aarch64 📱ipa
✔️ 012c3f1 #10 2025-11-28 13:42:10 ~28 min windows/x86_64 💿exe
✔️ 012c3f1 pr19316 2025-11-28 13:47:14 ~17 min tests/e2e 📊rpt
✖️ 012c3f1 PR19316 2025-11-28 14:06:47 ~24 min tests/e2e-windows 📊rpt
✔️ 184d157 #11 2025-12-01 14:08:33 ~8 min tests/nim 📄log
184d157 #11 2025-12-01 14:09:24 ~9 min macos/aarch64-nwaku 📄log
184d157 #11 2025-12-01 14:13:51 ~13 min tests/ui 📄log
✔️ 184d157 #11 2025-12-01 14:15:55 ~15 min macos/aarch64 🍎dmg
✔️ 184d157 #11 2025-12-01 14:16:49 ~16 min linux/x86_64 📦tgz
✔️ 184d157 #11 2025-12-01 14:17:55 ~17 min linux/x86_64-nwaku 📦tgz
✔️ 184d157 #11 2025-12-01 14:17:58 ~17 min ios/aarch64 📱ipa
✔️ 184d157 #11 2025-12-01 14:27:53 ~27 min windows/x86_64 💿exe
✖️ 184d157 pr19316 2025-12-01 14:32:56 ~16 min tests/e2e 📊rpt
✖️ 184d157 PR19316 2025-12-01 14:55:50 ~27 min tests/e2e-windows 📊rpt
✔️ 6b85b7ae #15 2025-12-01 14:10:15 ~10 min android/arm64 🤖apk 📲
✔️ c79517d #12 2025-12-01 18:21:07 ~8 min tests/nim 📄log
✔️ c79517d #16 2025-12-01 18:21:43 ~8 min android/arm64 🤖apk 📲
c79517d #12 2025-12-01 18:21:53 ~8 min macos/aarch64-nwaku 📄log
c79517d #12 2025-12-01 18:21:56 ~8 min macos/aarch64 📄log
c79517d #12 2025-12-01 18:26:46 ~13 min tests/ui 📄log
✔️ c79517d #12 2025-12-01 18:30:15 ~17 min linux/x86_64 📦tgz
✔️ c79517d #12 2025-12-01 18:32:45 ~19 min ios/aarch64 📱ipa
✔️ c79517d #12 2025-12-01 18:35:17 ~22 min linux/x86_64-nwaku 📦tgz
✔️ c79517d #12 2025-12-01 18:43:28 ~30 min windows/x86_64 💿exe
✔️ c79517d pr19316 2025-12-01 18:46:35 ~16 min tests/e2e 📊rpt
✔️ c79517d PR19316 2025-12-01 19:05:51 ~22 min tests/e2e-windows 📊rpt
✔️ 2f412cd #13 2025-12-02 12:41:35 ~8 min tests/nim 📄log
2f412cd #13 2025-12-02 12:43:01 ~9 min macos/aarch64 📄log
2f412cd #13 2025-12-02 12:43:01 ~9 min macos/aarch64-nwaku 📄log
✔️ 2f412cd #13 2025-12-02 12:48:13 ~14 min tests/ui 📄log
✔️ 2cb594df #17 2025-12-02 12:43:41 ~10 min android/arm64 🤖apk 📲
✔️ b16bc5d #14 2025-12-02 12:59:29 ~8 min tests/nim 📄log
✔️ b16bc5d #18 2025-12-02 13:01:15 ~10 min android/arm64 🤖apk 📲
✔️ b16bc5d #14 2025-12-02 13:03:27 ~12 min macos/aarch64 🍎dmg
✔️ b16bc5d #14 2025-12-02 13:10:35 ~20 min ios/aarch64 📱ipa
✔️ b16bc5d #14 2025-12-02 13:12:45 ~22 min linux/x86_64 📦tgz
✔️ b16bc5d #14 2025-12-02 13:14:08 ~23 min tests/ui 📄log
✔️ b16bc5d #14 2025-12-02 13:15:56 ~25 min linux/x86_64-nwaku 📦tgz
✔️ b16bc5d #14 2025-12-02 13:16:10 ~25 min macos/aarch64-nwaku 🍎dmg
✔️ b16bc5d #14 2025-12-02 13:24:10 ~33 min windows/x86_64 💿exe
✖️ b16bc5d pr19316 2025-12-02 13:29:53 ~17 min tests/e2e 📊rpt
✖️ b16bc5d PR19316 2025-12-02 13:46:59 ~22 min tests/e2e-windows 📊rpt
✔️ bd198c5 #15 2025-12-02 16:38:15 ~7 min tests/nim 📄log
bd198c5 #15 2025-12-02 16:40:14 ~9 min macos/aarch64 📄log
bd198c5 #15 2025-12-02 16:40:14 ~9 min macos/aarch64-nwaku 📄log
✔️ bd198c5 #15 2025-12-02 16:47:16 ~16 min tests/ui 📄log
✔️ bd198c5 #15 2025-12-02 16:47:56 ~17 min linux/x86_64 📦tgz
✔️ bd198c5 #15 2025-12-02 16:53:21 ~22 min ios/aarch64 📱ipa
✔️ bd198c5 #15 2025-12-02 16:54:01 ~23 min linux/x86_64-nwaku 📦tgz
✔️ bd198c5 #15 2025-12-02 17:02:35 ~32 min windows/x86_64 💿exe
✖️ bd198c5 pr19316 2025-12-02 17:23:05 ~35 min tests/e2e 📊rpt
✖️ bd198c5 PR19316 2025-12-02 17:29:15 ~26 min tests/e2e-windows 📊rpt
✔️ ebc85b0a #19 2025-12-02 16:40:03 ~9 min android/arm64 🤖apk 📲
✔️ 18f96cd6 #20 2025-12-02 17:39:12 ~23 min android/arm64 🤖apk 📲
d6a9bd3 #16 2025-12-02 23:26:19 ~6 min macos/aarch64 📄log
d6a9bd3 #16 2025-12-02 23:26:19 ~6 min macos/aarch64-nwaku 📄log
✖️ d6a9bd3 #16 2025-12-02 23:33:54 ~14 min ios/aarch64 📱ipa
✔️ d6a9bd3 #16 2025-12-02 23:42:07 ~22 min linux/x86_64-nwaku 📦tgz
✔️ d6a9bd3 #16 2025-12-02 23:47:32 ~27 min windows/x86_64 💿exe
✔️ d6a9bd3 PR19316 2025-12-03 00:09:55 ~22 min tests/e2e-windows 📊rpt
✔️ 7ba6ffa9 #21 2025-12-02 23:28:53 ~9 min android/arm64 🤖apk 📲
✔️ 9573a05d #22 2025-12-03 01:32:31 ~9 min android/arm64 🤖apk 📲
f1bfc61 #18 2025-12-03 01:39:13 ~5 min macos/aarch64 📄log
✔️ f1bfc61 #23 2025-12-03 01:43:03 ~9 min android/arm64 🤖apk 📲
f1bfc61 #18 2025-12-03 01:44:13 ~10 min macos/aarch64-nwaku 📄log
✖️ f1bfc61 #18 2025-12-03 01:44:43 ~10 min ios/aarch64 📱ipa
✔️ f1bfc61 #18 2025-12-03 01:56:09 ~22 min linux/x86_64-nwaku 📦tgz
✔️ f1bfc61 #18 2025-12-03 02:08:03 ~34 min windows/x86_64 💿exe
✔️ f1bfc61 PR19316 2025-12-03 02:30:18 ~22 min tests/e2e-windows 📊rpt
b6f5316 #20 2025-12-03 09:21:10 ~6 min macos/aarch64 📄log
✔️ b6f5316 #20 2025-12-03 09:23:45 ~8 min tests/nim 📄log
✖️ b6f5316 #20 2025-12-03 09:24:51 ~10 min ios/aarch64 📱ipa
✔️ b6f5316 #25 2025-12-03 09:25:18 ~10 min android/arm64 🤖apk 📲
✔️ b6f5316 #20 2025-12-03 09:28:12 ~13 min tests/ui 📄log
✔️ b6f5316 #20 2025-12-03 09:32:51 ~17 min linux/x86_64 📦tgz
b6f5316 #20 2025-12-03 09:35:00 ~20 min macos/aarch64-nwaku 📄log
✔️ b6f5316 #20 2025-12-03 09:36:07 ~21 min linux/x86_64-nwaku 📦tgz
✔️ b6f5316 #20 2025-12-03 09:42:18 ~27 min windows/x86_64 💿exe
✔️ b6f5316 pr19316 2025-12-03 09:47:45 ~14 min tests/e2e 📊rpt
✔️ b6f5316 PR19316 2025-12-03 10:09:14 ~26 min tests/e2e-windows 📊rpt
d2d4b11 #21 2025-12-03 13:41:55 ~11 min macos/aarch64-nwaku 📄log
✔️ d2d4b11 #21 2025-12-03 13:45:53 ~15 min macos/aarch64 🍎dmg
✖️ d2d4b11 #21 2025-12-03 13:48:09 ~17 min ios/aarch64 📱ipa
✔️ d2d4b11 #26 2025-12-03 13:50:28 ~19 min android/arm64 🤖apk 📲
✔️ d2d4b11 #21 2025-12-03 13:52:53 ~22 min tests/nim 📄log
✔️ d2d4b11 #21 2025-12-03 14:01:52 ~31 min tests/ui 📄log
✔️ d2d4b11 #21 2025-12-03 14:03:07 ~32 min linux/x86_64 📦tgz
✔️ d2d4b11 #21 2025-12-03 14:05:37 ~35 min linux/x86_64-nwaku 📦tgz
✔️ d2d4b11 #21 2025-12-03 14:06:32 ~35 min windows/x86_64 💿exe
✔️ d2d4b11 pr19316 2025-12-03 14:23:29 ~20 min tests/e2e 📊rpt
✖️ d2d4b11 PR19316 2025-12-03 14:27:15 ~20 min tests/e2e-windows 📊rpt
✔️ 1384e93 #22 2025-12-03 14:35:44 ~8 min tests/nim 📄log
✔️ 1384e93 #27 2025-12-03 14:36:15 ~9 min android/arm64 🤖apk 📲
1384e93 #22 2025-12-03 14:36:31 ~9 min macos/aarch64-nwaku 📄log
1384e93 #22 2025-12-03 14:36:31 ~9 min macos/aarch64 📄log
✔️ 1384e93 #22 2025-12-03 14:42:04 ~14 min tests/ui 📄log
✔️ 1384e93 #22 2025-12-03 14:44:15 ~17 min linux/x86_64 📦tgz
✖️ 1384e93 #22 2025-12-03 14:45:30 ~18 min ios/aarch64 📱ipa
✔️ 1384e93 #22 2025-12-03 14:49:54 ~22 min linux/x86_64-nwaku 📦tgz
✔️ 1384e93 pr19316 2025-12-03 14:59:54 ~15 min tests/e2e 📊rpt
✔️ 1384e93 #22 2025-12-03 15:03:10 ~35 min windows/x86_64 💿exe
✔️ 1384e93 PR19316 2025-12-03 15:21:44 ~18 min tests/e2e-windows 📊rpt
✔️ 6e30c3d #23 2025-12-03 16:15:01 ~8 min tests/nim 📄log
✔️ 6e30c3d #28 2025-12-03 16:16:32 ~10 min android/arm64 🤖apk 📲
6e30c3d #23 2025-12-03 16:16:56 ~10 min macos/aarch64-nwaku 📄log
✔️ 6e30c3d #23 2025-12-03 16:21:47 ~15 min tests/ui 📄log
✔️ 6e30c3d #23 2025-12-03 16:24:22 ~17 min linux/x86_64 📦tgz
✔️ 6e30c3d #24 2025-12-03 16:30:30 ~23 min macos/aarch64 🍎dmg
✔️ 6e30c3d #23 2025-12-03 16:30:59 ~24 min linux/x86_64-nwaku 📦tgz
✔️ 6e30c3d #23 2025-12-03 16:36:37 ~29 min windows/x86_64 💿exe
6e30c3d pr19316 2025-12-03 16:45:46 ~21 min tests/e2e 📄log
✔️ 6e30c3d PR19316 2025-12-03 16:59:28 ~22 min tests/e2e-windows 📊rpt
✔️ 53f51b0 #24 2025-12-03 17:21:59 ~7 min tests/nim 📄log
✔️ 53f51b0 #25 2025-12-03 17:28:41 ~14 min macos/aarch64 🍎dmg
✔️ 53f51b0 #24 2025-12-03 17:29:15 ~15 min tests/ui 📄log
✔️ 53f51b0 #24 2025-12-03 17:33:04 ~18 min linux/x86_64 📦tgz
✖️ 53f51b0 #24 2025-12-03 17:33:35 ~19 min ios/aarch64 📱ipa
✔️ 53f51b0 #24 2025-12-03 17:38:38 ~24 min linux/x86_64-nwaku 📦tgz
✔️ 53f51b0 #24 2025-12-03 17:41:28 ~27 min macos/aarch64-nwaku 🍎dmg
✔️ 53f51b0 #24 2025-12-03 17:44:31 ~30 min windows/x86_64 💿exe
✔️ 53f51b0 pr19316 2025-12-03 18:03:39 ~30 min tests/e2e 📊rpt
✔️ 53f51b0 PR19316 2025-12-03 18:07:17 ~22 min tests/e2e-windows 📊rpt
✔️ ca99e7b #25 2025-12-04 16:58:59 ~8 min tests/nim 📄log
✔️ ca99e7b #26 2025-12-04 17:01:44 ~11 min macos/aarch64 🍎dmg
✔️ ca99e7b #25 2025-12-04 17:04:58 ~14 min tests/ui 📄log
✖️ ca99e7b #25 2025-12-04 17:06:52 ~16 min ios/aarch64 📱ipa
✔️ ca99e7b #25 2025-12-04 17:08:49 ~18 min linux/x86_64 📦tgz
✔️ ca99e7b #25 2025-12-04 17:13:45 ~23 min linux/x86_64-nwaku 📦tgz
✔️ ca99e7b #25 2025-12-04 17:15:50 ~25 min macos/aarch64-nwaku 🍎dmg
✔️ ca99e7b #25 2025-12-04 17:20:24 ~29 min windows/x86_64 💿exe
✖️ ca99e7b pr19316 2025-12-04 17:26:00 ~17 min tests/e2e 📊rpt
✖️ ca99e7b PR19316 2025-12-04 17:52:24 ~31 min tests/e2e-windows 📊rpt
✔️ fefffda #31 2025-12-04 17:57:46 ~9 min android/arm64 🤖apk 📲
✔️ fefffda #26 2025-12-04 17:59:30 ~11 min tests/nim 📄log
✔️ fefffda #26 2025-12-04 18:02:53 ~14 min tests/ui 📄log
✔️ fefffda #26 2025-12-04 18:08:33 ~20 min linux/x86_64 📦tgz
✔️ fefffda #26 2025-12-04 18:10:03 ~21 min linux/x86_64-nwaku 📦tgz
✖️ fefffda #26 2025-12-04 18:11:58 ~23 min ios/aarch64 📱ipa
✔️ fefffda #27 2025-12-04 18:18:32 ~29 min macos/aarch64 🍎dmg
✔️ fefffda #26 2025-12-04 18:21:07 ~32 min windows/x86_64 💿exe
✔️ fefffda pr19316 2025-12-04 18:25:31 ~16 min tests/e2e 📊rpt
✔️ fefffda PR19316 2025-12-04 18:42:57 ~21 min tests/e2e-windows 📊rpt
✔️ 084ca8ca #32 2025-12-05 11:22:29 ~9 min android/arm64 🤖apk 📲
✔️ c3ed396 #27 2025-12-05 11:23:18 ~9 min tests/nim 📄log
✔️ c3ed396 #27 2025-12-05 11:26:59 ~13 min tests/ui 📄log
✔️ c3ed396 #27 2025-12-05 11:32:38 ~19 min linux/x86_64 📦tgz
✔️ c3ed396 #27 2025-12-05 11:35:22 ~22 min linux/x86_64-nwaku 📦tgz
✖️ c3ed396 #27 2025-12-05 11:36:33 ~23 min ios/aarch64 📱ipa
✔️ c3ed396 #28 2025-12-05 11:42:34 ~29 min macos/aarch64 🍎dmg
✔️ c3ed396 #27 2025-12-05 11:43:53 ~30 min macos/aarch64-nwaku 🍎dmg
✔️ c3ed396 pr19316 2025-12-05 11:48:17 ~15 min tests/e2e 📊rpt
✔️ c3ed396 #27 2025-12-05 11:48:51 ~35 min windows/x86_64 💿exe
✔️ 0a853be0 #33 2025-12-05 11:59:10 ~10 min android/arm64 🤖apk 📲
✔️ 658d72a #28 2025-12-05 11:59:57 ~10 min tests/nim 📄log
✔️ 658d72a #28 2025-12-05 12:03:48 ~14 min tests/ui 📄log
✔️ 658d72a #28 2025-12-05 12:09:13 ~20 min linux/x86_64 📦tgz
✖️ 658d72a #28 2025-12-05 12:09:39 ~20 min ios/aarch64 📱ipa
✔️ 658d72a #28 2025-12-05 12:12:18 ~23 min linux/x86_64-nwaku 📦tgz
✔️ 658d72a #28 2025-12-05 12:13:37 ~24 min macos/aarch64-nwaku 🍎dmg
✔️ 658d72a #29 2025-12-05 12:15:03 ~25 min macos/aarch64 🍎dmg
✔️ 658d72a PR19316 2025-12-05 12:15:33 ~26 min tests/e2e-windows 📊rpt
✖️ 658d72a pr19316 2025-12-05 12:24:15 ~14 min tests/e2e 📊rpt
✔️ 658d72a #28 2025-12-05 12:27:58 ~38 min windows/x86_64 💿exe
✔️ 658d72a PR19316 2025-12-05 12:53:53 ~25 min tests/e2e-windows 📊rpt
Commit #️⃣ Finished (UTC) Duration Platform Result
✔️ ac8cd163 #34 2025-12-05 14:40:16 ~10 min android/arm64 🤖apk 📲
✔️ af3312b #29 2025-12-05 14:40:29 ~10 min tests/nim 📄log
✔️ af3312b #29 2025-12-05 14:44:38 ~14 min tests/ui 📄log
✔️ af3312b #29 2025-12-05 14:49:10 ~19 min linux/x86_64 📦tgz
✔️ af3312b #29 2025-12-05 14:53:06 ~23 min linux/x86_64-nwaku 📦tgz
✖️ af3312b #29 2025-12-05 14:53:37 ~23 min ios/aarch64 📱ipa
✔️ af3312b #29 2025-12-05 14:54:18 ~24 min windows/x86_64 💿exe
✔️ af3312b #30 2025-12-05 14:59:20 ~29 min macos/aarch64 🍎dmg
✔️ af3312b pr19316 2025-12-05 15:04:36 ~15 min tests/e2e 📊rpt
✔️ af3312b PR19316 2025-12-05 15:18:53 ~24 min tests/e2e-windows 📊rpt

@micieslak micieslak force-pushed the feat/theme-attached-type branch 3 times, most recently from c1b54b0 to 6cf7b25 Compare November 25, 2025 12:02
Copy link
Contributor

@alexjba alexjba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work! I love it :beers
Let's get it merged quickly now that we have the release branch. It's probably a burden to maintain.

@micieslak micieslak force-pushed the feat/theme-attached-type branch 2 times, most recently from cf4e110 to 5309fdb Compare November 25, 2025 20:08
Copy link
Member

@caybro caybro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome work! Just some suggestions and minor things

readonly property alias monoFont: monoFont.font
readonly property alias codeFont: codeFont.font

FontLoader {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could (pre)load all these fonts from C++ too, and it would be faster imo :) And just expose the three baseFont/monoFont/codeFont properties

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I meant https://doc.qt.io/qt-6/qfontdatabase.html#addApplicationFont

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The idea was to keep the attached type as small/simple as possible. Ideally only stuff that can benefit from propagation should be there. I found it more modular when keeping things like that separated.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup, this wouldn't be part of the propagation, just initialized and setup somewhere else, not in QML

@micieslak micieslak force-pushed the feat/theme-attached-type branch 6 times, most recently from b16bc5d to bd198c5 Compare December 2, 2025 16:30
Copy link
Contributor

@noeliaSD noeliaSD left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work on this implementation! The structure looks solid and the overall approach makes the theming system feel clean and easy to work with. I’ve left a couple of comments and suggestions, but everything is looking really good.

Next step for me will be to run a full test of the PR on both desktop and mobile to ensure everything behaves correctly across breakpoints.

@micieslak micieslak force-pushed the feat/theme-attached-type branch 3 times, most recently from e9ab1e6 to f1bfc61 Compare December 3, 2025 01:33
@micieslak micieslak marked this pull request as ready for review December 3, 2025 01:37
@micieslak micieslak requested a review from a team as a code owner December 3, 2025 01:37
@micieslak micieslak requested review from friofry and saledjenic and removed request for a team December 3, 2025 01:37
@saledjenic
Copy link
Contributor

@micieslak, could we postpone merging this PR until a big tokens-related refactor gets merged?

@micieslak micieslak force-pushed the feat/theme-attached-type branch from ca99e7b to fefffda Compare December 4, 2025 17:48
@micieslak
Copy link
Member Author

Thank you @noeliaSD @caybro @alexjba for reviews and testing! I think I addressed everything. It's rebased and (hopefully) ready to merge.

Copy link
Member

@caybro caybro left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work, let's merge this 🚀

@micieslak micieslak force-pushed the feat/theme-attached-type branch from fefffda to c3ed396 Compare December 5, 2025 11:13
@micieslak micieslak force-pushed the feat/theme-attached-type branch from c3ed396 to 658d72a Compare December 5, 2025 11:48
@micieslak micieslak force-pushed the feat/theme-attached-type branch from 658d72a to af3312b Compare December 5, 2025 14:29
@micieslak micieslak merged commit 773bc20 into master Dec 5, 2025
9 of 12 checks passed
@micieslak micieslak deleted the feat/theme-attached-type branch December 5, 2025 15:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Theme/Sizing/Layout control based on attached object

6 participants