diff --git a/changelog.md b/changelog.md
index 1e1ac70e2..22af73b80 100644
--- a/changelog.md
+++ b/changelog.md
@@ -85,14 +85,40 @@ pre {
}
.page .df {
- font-size: 2em;
- vertical-align: middle;
+ font-size: 2em;
+ vertical-align: middle;
}
```
## changelog
For a full record of development, visit our [Github Page](https://github.com/naturalcrit/homebrewery).
+### Saturday 4/04/2026 - v3.21.0
+
+{{taskList
+##### Gazook89
+* [x] Allow custom {{openSans **:fas_table_list: SNIPPETS**}} to be inserted mid-line
+
+##### abquintic
+* [x] Move example snippet images out of imgur (for folks without imgur access)
+
+##### 5e-Cleric
+* [x] Add auto-suggest to tag entry input box
+* [x] Replace all example artwork with
+* [x] Added tooltips to the {{openSans :fas_circle_info: **Properties**}} menu
+* [x] Removed {{openSans **SYSTEMS**}} checkboxes from {{openSans :fas_circle_info: **Properties**}} menu; instead {{openSans **TAGS**}} should be used for this purpose
+* [x] Replace all AI-generated art with public domain art
+* [x] Major backend refactor to use Vite
+
+##### A1Asriel (new contributor!)
+* [x] Add fix for column breaks on Firefox
+
+Fixes issues [#543](https://github.com/naturalcrit/homebrewery/issues/543), [#2473](https://github.com/naturalcrit/homebrewery/issues/2473), [#3712](https://github.com/naturalcrit/homebrewery/issues/3712)
+
+##### G-Ambatte, abquintic, 5e-Cleric
+* [x] Multiple other backend fixes and refactors
+}}
+
### Friday 1/11/2026 - v3.20.1
{{taskList
@@ -2358,4 +2384,4 @@ Massive changelog incoming:
* Added `phb.standalone.css` plus a build system for creating it
* Added page numbers and footer text
-* Page accent now flips each page
+* Page accent now flips each page
\ No newline at end of file
diff --git a/client/components/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx
index c7d337a94..32b3a2012 100644
--- a/client/components/codeEditor/codeEditor.jsx
+++ b/client/components/codeEditor/codeEditor.jsx
@@ -16,6 +16,7 @@ const CodeEditor = createReactClass({
value : '',
wrap : true,
onChange : ()=>{},
+ onReady : ()=>{},
enableFolding : true,
editorTheme : 'default'
};
@@ -177,7 +178,7 @@ const CodeEditor = createReactClass({
// return el;
// }
});
-
+ this.props.onReady?.(this.codeMirror);
// Add custom behaviors (auto-close curlies and auto-complete emojis)
closeTag.autoCloseCurlyBraces(CodeMirror, this.codeMirror);
autoCompleteEmoji.showAutocompleteEmoji(CodeMirror, this.codeMirror);
@@ -189,7 +190,8 @@ const CodeEditor = createReactClass({
// Use for GFM tabs that use common hot-keys
isGFM : function() {
- if((this.props.tab === 'brewText') || (this.props.tab === 'brewSnippets')) return true;
+ console.log(this.props.tab);
+ if( this.props.tab === 'brewText' || this.props.tab === 'brewSnippets') return true;
return false;
},
@@ -226,7 +228,9 @@ const CodeEditor = createReactClass({
},
makeBold : function() {
+ console.log('hello');
if(!this.isGFM()) return;
+ console.log(this.isGFM());
const selection = this.codeMirror?.getSelection(), t = selection.slice(0, 2) === '**' && selection.slice(-2) === '**';
this.codeMirror?.replaceSelection(t ? selection.slice(2, -2) : `**${selection}**`, 'around');
if(selection.length === 0){
diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx
index 8e74473b3..efdfce5c9 100644
--- a/client/homebrew/brewRenderer/brewRenderer.jsx
+++ b/client/homebrew/brewRenderer/brewRenderer.jsx
@@ -33,7 +33,7 @@ const INITIAL_CONTENT = dedent`
-