feat: info pages — tab replacement, custom pages on /info, responsive fixes

- Add replaces_tab field to admin editor with conflict detection
- Show custom InfoPages as extra tabs on /info page
- Replace built-in tab content when replacement is configured
- Rich DOMPurify sanitizer for TipTap content (images, video, iframe)
- Fix query race: built-in queries wait for tab-replacements to load
- Horizontal scroll for tabs on mobile, 44px touch targets
- Responsive prose: scrollable tables, h-auto on img/video, light theme borders
- Loyalty tier names truncation, progress bar labels stack on mobile
This commit is contained in:
Fringg
2026-04-24 15:01:11 +03:00
parent c16593aeee
commit 656946952a
9 changed files with 481 additions and 29 deletions

View File

@@ -139,6 +139,11 @@ const PageRow = memo(function PageRow({
>
{page.is_active ? t('admin.infoPages.active') : t('admin.infoPages.inactive')}
</span>
{page.replaces_tab && (
<span className="rounded-full bg-purple-500/20 px-2 py-0.5 text-[10px] font-medium text-purple-400">
{t(`admin.infoPages.replacesTabOptions.${page.replaces_tab}`)}
</span>
)}
<span className="text-xs text-dark-500">#{page.id}</span>
</div>