taxforge 0.9.24__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.
- {taxforge-0.9.24 → taxforge-0.9.26}/PKG-INFO +1 -1
- {taxforge-0.9.24 → taxforge-0.9.26}/pyproject.toml +1 -1
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/aitax/__init__.py +1 -1
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/aitax/aitax.py +84 -1
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/aitax/cli.py +1 -1
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/taxforge.egg-info/PKG-INFO +1 -1
- {taxforge-0.9.24 → taxforge-0.9.26}/README.md +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/setup.cfg +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/tests/test_fact_graph.py +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/tests/test_investments.py +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/tests/test_tax_engine.py +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/aitax/components.py +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/aitax/document_extractor.py +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/aitax/persistence.py +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/aitax/state.py +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/taxforge.egg-info/SOURCES.txt +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/taxforge.egg-info/dependency_links.txt +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/taxforge.egg-info/entry_points.txt +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/taxforge.egg-info/requires.txt +0 -0
- {taxforge-0.9.24 → taxforge-0.9.26}/ui/taxforge.egg-info/top_level.txt +0 -0
|
@@ -1264,10 +1264,93 @@ def review_page() -> rx.Component:
|
|
|
1264
1264
|
),
|
|
1265
1265
|
|
|
1266
1266
|
width="100%",
|
|
1267
|
-
max_width="
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|