Commit e9c7bf7
feat(core,ui): add configurable Bootstrap text and JTabView component (#624)
* feat(core): add configurable Bootstrap text via BootstrapText struct
Add a serializable BootstrapText struct that externalizes all ~30
user-facing strings from Bootstrap, enabling per-project localization
and branding without modifying framework code.
Closes #622
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
* fix(core): address code review feedback
- Add BootstrapText.SafeFormat helper with try/catch fallback for
malformed user-edited format strings
- Replace all string.Format calls with SafeFormat in Bootstrap.cs
- Use nameof(BootstrapText.*) instead of string literals in editor UI
- Use BindProperty for JTextField binding (proper undo/prefab support)
- Add tests for SafeFormat, Default field validation, exact field count,
sub-headers, and reset logic
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
* feat(ui): add JTabView component and improve editor UI test coverage
- Add JTabView tabbed container component with configurable maxTabsPerRow
- Refactor BootstrapEditorUI Text Settings into 6 categorized tabs (3x2 grid)
- Add 46 new tests across 8 components using reflection for private methods
(JButton, JCard, JObjectField, JTextField, JDropdown, JStack, JTabView,
BootstrapEditorUI)
- Update GitHub instructions to require 93%+ coverage for non-core packages
with support for both EditMode and non-interactive PlayMode tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
* chore: update compiled build output
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
* style(ui): add explicit parentheses for arithmetic precedence
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
* fix(core,ui): address code review feedback
- Add null guard to BootstrapText.SafeFormat for null templates
- Make JTabView._maxTabsPerRow readonly
- Use evt.currentTarget instead of evt.target in JTabView handlers
- Add SafeFormat null template test
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
* fix(ui): use reflection for currentTarget setter in tests
The currentTarget setter is internal in UIElements. Use reflection
with a null check so tests gracefully skip if the API changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
---------
Signed-off-by: JasonXuDeveloper - 傑 <jason@xgamedev.net>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>1 parent d29713b commit e9c7bf7
File tree
35 files changed
+2281
-71
lines changed- .github/instructions
- UnityProject
- Assets
- HotUpdate/Compiled
- AOT
- Obfuz/SymbolObfus
- StreamingAssets/yoo/main
- Packages
- com.jasonxudeveloper.jengine.core
- Editor/CustomEditor
- Runtime
- com.jasonxudeveloper.jengine.ui
- Editor
- Internal
- Tests/Editor
- Components
- Button
- Form
- Layout
- Internal
35 files changed
+2281
-71
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
46 | 56 | | |
47 | 57 | | |
| 58 | + | |
48 | 59 | | |
49 | 60 | | |
50 | 61 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
102 | 102 | | |
103 | 103 | | |
104 | 104 | | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
105 | 183 | | |
106 | 184 | | |
107 | 185 | | |
| |||
110 | 188 | | |
111 | 189 | | |
112 | 190 | | |
| 191 | + | |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Lines changed: 128 additions & 20 deletions
Large diffs are not rendered by default.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Binary file not shown.
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
0 commit comments