taxforge 0.9.25__tar.gz → 0.9.26__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taxforge
3
- Version: 0.9.25
3
+ Version: 0.9.26
4
4
  Summary: AI-powered tax preparation assistant
5
5
  Author: TaxForge Team
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "taxforge"
7
- version = "0.9.25"
7
+ version = "0.9.26"
8
8
  description = "AI-powered tax preparation assistant"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -1,3 +1,3 @@
1
1
  """TaxForge - AI-powered tax preparation"""
2
2
 
3
- __version__ = "0.9.25"
3
+ __version__ = "0.9.26"
@@ -22,7 +22,7 @@ def styled_input(placeholder: str, value, on_change, input_type: str = "text", w
22
22
  background="white",
23
23
  border=f"1px solid {COLORS['border']}",
24
24
  color=COLORS["text_primary"],
25
- _placeholder={"color": "#64748b"}, # Darker placeholder (slate-500)
25
+ _placeholder={"color": COLORS["text_muted"]},
26
26
  padding="10px 12px",
27
27
  border_radius="8px",
28
28
  _focus={
@@ -795,7 +795,7 @@ def review_page() -> rx.Component:
795
795
  background="white",
796
796
  border=f"1px solid {COLORS['border']}",
797
797
  color=COLORS["text_primary"],
798
- _placeholder={"color": "#64748b"},
798
+ _placeholder={"color": COLORS["text_muted"]},
799
799
  padding="10px 12px",
800
800
  border_radius="8px",
801
801
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -809,7 +809,7 @@ def review_page() -> rx.Component:
809
809
  background="white",
810
810
  border=f"1px solid {COLORS['border']}",
811
811
  color=COLORS["text_primary"],
812
- _placeholder={"color": "#64748b"},
812
+ _placeholder={"color": COLORS["text_muted"]},
813
813
  padding="10px 12px",
814
814
  border_radius="8px",
815
815
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -822,7 +822,7 @@ def review_page() -> rx.Component:
822
822
  background="white",
823
823
  border=f"1px solid {COLORS['border']}",
824
824
  color=COLORS["text_primary"],
825
- _placeholder={"color": "#64748b"},
825
+ _placeholder={"color": COLORS["text_muted"]},
826
826
  padding="10px 12px",
827
827
  border_radius="8px",
828
828
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -839,7 +839,7 @@ def review_page() -> rx.Component:
839
839
  background="white",
840
840
  border=f"1px solid {COLORS['border']}",
841
841
  color=COLORS["text_primary"],
842
- _placeholder={"color": "#64748b"},
842
+ _placeholder={"color": COLORS["text_muted"]},
843
843
  padding="10px 12px",
844
844
  border_radius="8px",
845
845
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -852,7 +852,7 @@ def review_page() -> rx.Component:
852
852
  background="white",
853
853
  border=f"1px solid {COLORS['border']}",
854
854
  color=COLORS["text_primary"],
855
- _placeholder={"color": "#64748b"},
855
+ _placeholder={"color": COLORS["text_muted"]},
856
856
  padding="10px 12px",
857
857
  border_radius="8px",
858
858
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -869,7 +869,7 @@ def review_page() -> rx.Component:
869
869
  background="white",
870
870
  border=f"1px solid {COLORS['border']}",
871
871
  color=COLORS["text_primary"],
872
- _placeholder={"color": "#64748b"},
872
+ _placeholder={"color": COLORS["text_muted"]},
873
873
  padding="10px 12px",
874
874
  border_radius="8px",
875
875
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -882,7 +882,7 @@ def review_page() -> rx.Component:
882
882
  background="white",
883
883
  border=f"1px solid {COLORS['border']}",
884
884
  color=COLORS["text_primary"],
885
- _placeholder={"color": "#64748b"},
885
+ _placeholder={"color": COLORS["text_muted"]},
886
886
  padding="10px 12px",
887
887
  border_radius="8px",
888
888
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -899,7 +899,7 @@ def review_page() -> rx.Component:
899
899
  background="white",
900
900
  border=f"1px solid {COLORS['border']}",
901
901
  color=COLORS["text_primary"],
902
- _placeholder={"color": "#64748b"},
902
+ _placeholder={"color": COLORS["text_muted"]},
903
903
  padding="10px 12px",
904
904
  border_radius="8px",
905
905
  _focus={"border_color": COLORS["accent_primary"], "box_shadow": f"0 0 0 3px {COLORS['accent_light']}"},
@@ -1264,10 +1264,93 @@ def review_page() -> rx.Component:
1264
1264
  ),
1265
1265
 
1266
1266
  width="100%",
1267
- max_width="1200px",
1267
+ max_width="1400px",
1268
1268
  margin="0 auto",
1269
1269
  padding="100px 40px 40px 40px",
1270
1270
  ),
1271
+ # Responsive layout CSS - uses MutationObserver for reliable DOM manipulation
1272
+ rx.html("""
1273
+ <style>
1274
+ .review-grid-container {
1275
+ display: grid;
1276
+ grid-template-columns: 1fr 1fr;
1277
+ gap: 24px;
1278
+ width: 100%;
1279
+ margin-bottom: 24px;
1280
+ }
1281
+ @media (max-width: 900px) {
1282
+ .review-grid-container {
1283
+ grid-template-columns: 1fr;
1284
+ }
1285
+ }
1286
+ </style>
1287
+ <script>
1288
+ (function() {
1289
+ function applyLayout() {
1290
+ // Find the review page vstack
1291
+ const vstacks = document.querySelectorAll('div');
1292
+ for (let v of vstacks) {
1293
+ // Look for the vstack that contains both Documents and Manual Entry
1294
+ const text = v.textContent || '';
1295
+ if (text.includes('Review Tax Data') &&
1296
+ text.includes('Documents') &&
1297
+ text.includes('Manual Entry') &&
1298
+ text.includes('Income')) {
1299
+
1300
+ // Find direct children that are the sections
1301
+ const children = v.children;
1302
+ let docIdx = -1, manualIdx = -1;
1303
+
1304
+ for (let i = 0; i < children.length; i++) {
1305
+ const childText = children[i].textContent || '';
1306
+ if (childText.includes('Documents') && childText.includes('Select All') && !childText.includes('Manual Entry')) {
1307
+ docIdx = i;
1308
+ }
1309
+ if (childText.includes('Manual Entry') && childText.includes('Rental Properties')) {
1310
+ manualIdx = i;
1311
+ }
1312
+ }
1313
+
1314
+ // If we found both and they're not already wrapped
1315
+ if (docIdx >= 0 && manualIdx >= 0 &&
1316
+ !children[docIdx].parentElement.classList.contains('review-grid-container')) {
1317
+
1318
+ const wrapper = document.createElement('div');
1319
+ wrapper.className = 'review-grid-container';
1320
+
1321
+ // Get references before modifying
1322
+ const docSection = children[docIdx];
1323
+ const manualSection = children[manualIdx];
1324
+
1325
+ // Insert wrapper before doc section
1326
+ v.insertBefore(wrapper, docSection);
1327
+
1328
+ // Move both sections into wrapper
1329
+ wrapper.appendChild(docSection);
1330
+ wrapper.appendChild(manualSection);
1331
+ }
1332
+ break;
1333
+ }
1334
+ }
1335
+ }
1336
+
1337
+ // Run on load and observe for changes
1338
+ if (document.readyState === 'loading') {
1339
+ document.addEventListener('DOMContentLoaded', function() {
1340
+ setTimeout(applyLayout, 100);
1341
+ });
1342
+ } else {
1343
+ setTimeout(applyLayout, 100);
1344
+ }
1345
+
1346
+ // Also observe for Reflex re-renders
1347
+ const observer = new MutationObserver(function(mutations) {
1348
+ setTimeout(applyLayout, 50);
1349
+ });
1350
+ observer.observe(document.body, { childList: true, subtree: true });
1351
+ })();
1352
+ </script>
1353
+ """),
1271
1354
  )
1272
1355
 
1273
1356
 
@@ -8,7 +8,7 @@ import shutil
8
8
  from pathlib import Path
9
9
 
10
10
 
11
- __version__ = "0.9.25"
11
+ __version__ = "0.9.26"
12
12
 
13
13
  RXCONFIG_CONTENT = '''"""Reflex config for TaxForge."""
14
14
  import reflex as rx
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taxforge
3
- Version: 0.9.25
3
+ Version: 0.9.26
4
4
  Summary: AI-powered tax preparation assistant
5
5
  Author: TaxForge Team
6
6
  License: MIT
File without changes
File without changes
File without changes