Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
178ac7a
Add favicon and apple-touch-icon routes to AppGateway for proper icon…
tjementum Jul 21, 2025
c0b56da
Fix keyboard navigation and focus management for UserTable on mobile …
tjementum Jul 22, 2025
959d723
Show Invite user tooltip on mobile devices
tjementum Jul 22, 2025
1d06618
Include search term in filter dialog clear functionality and show too…
tjementum Jul 22, 2025
285647c
Fix user selection issue on mobile devices
tjementum Jul 24, 2025
a5409f9
Fix mobile menu scrolling with proper overflow handling
tjementum Jul 24, 2025
0b1ad8e
Make dialogs and modals full screen on mobile with sticky footer support
tjementum Jul 24, 2025
2cba23b
Update all dialogs to use DialogFooter for consistent mobile CTA plac…
tjementum Jul 24, 2025
6cb06ad
Make toast messages full width on mobile screens
tjementum Jul 25, 2025
ef8cc57
Make pagination sticky at bottom on mobile devices
tjementum Jul 25, 2025
ae4c408
Add PWA support and native mobile app feel
tjementum Jul 25, 2025
9135ee1
Make hamburger menu button fixed position on mobile
tjementum Jul 25, 2025
0fde028
Fix scrollbar always visible on mobile devices
tjementum Jul 25, 2025
995fb9b
Fix screen position to prevent bouncing on both mobile and desktop sc…
tjementum Jul 25, 2025
228cf08
Fix mobile UI spacing and safe area handling for iOS devices
tjementum Jul 25, 2025
0e90cc7
Fix safe area padding for iPad devices in UserProfileSidePane
tjementum Jul 25, 2025
099aea9
Fix background scrolling by applying fixed positioning to html element
tjementum Jul 25, 2025
c6fff0d
Fix touch device detection to use single selection mode on iPads
tjementum Jul 25, 2025
189796d
Add theme-color meta tags for iOS Dynamic Island background
tjementum Jul 25, 2025
ea77fe9
Make theme color dynamically update from CSS variables
tjementum Jul 25, 2025
c7f1204
Make user table responsive with conditional column rendering for diff…
tjementum Jul 25, 2025
7b21309
Remove autofocus from admin input fields to prevent mobile keyboards
tjementum Jul 25, 2025
b3df044
Fix double-tap navigation issue on iPad by using React Aria Link comp…
tjementum Jul 25, 2025
79940a2
Add touch support for side menu resizing on iPad
tjementum Jul 25, 2025
abca6e0
Fix toast rounded corners being cut off on mobile screens
tjementum Jul 25, 2025
0c8e98e
Implement infinite scroll for users on mobile devices without pagination
tjementum Jul 26, 2025
483ebb3
Add iOS home screen installation prompt with swipe-to-dismiss
tjementum Jul 27, 2025
c5de7d6
Introduce sticker headers on mobile devices
tjementum Jul 26, 2025
ae76c70
Fix complexity in UserTable
tjementum Jul 27, 2025
a9721a7
Make user table bounce on scroll for mobile screens
tjementum Jul 27, 2025
a1f80c2
Align theme selector menu to the right on mobile
tjementum Jul 27, 2025
bca6f45
Add directional scroll locking for tables on touch devices
tjementum Jul 27, 2025
680a040
Disable horizontal scrolling on mobile tables when side panel is open
tjementum Jul 27, 2025
c5cd9f0
Fix mobile menu click-through issue by adding touch event handling an…
tjementum Jul 27, 2025
84e0594
Show email for users without name on mobile screen sizes in the user …
tjementum Jul 27, 2025
72de77d
Simplify user profile side pane accessibility label and remove redund…
tjementum Jul 27, 2025
4ad3774
Fix focus ring clipping in dialog components
tjementum Jul 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions application/AppGateway/appsettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,50 @@
"AllowedHosts": "*",
"ReverseProxy": {
"Routes": {
"favicon": {
"ClusterId": "account-management-static",
"Match": {
"Path": "/favicon.ico"
},
"Transforms": [
{
"ResponseHeader": "Cache-Control",
"Set": "public, max-age=604800"
},
{
"ResponseHeader": "Content-Type",
"Set": "image/x-icon"
}
]
},
"apple-touch-icon": {
"ClusterId": "account-management-static",
"Match": {
"Path": "/apple-touch-icon.png"
},
"Transforms": [
{
"ResponseHeader": "Cache-Control",
"Set": "public, max-age=604800"
}
]
},
"manifest": {
"ClusterId": "account-management-static",
"Match": {
"Path": "/manifest.json"
},
"Transforms": [
{
"ResponseHeader": "Cache-Control",
"Set": "public, max-age=604800"
},
{
"ResponseHeader": "Content-Type",
"Set": "application/manifest+json"
}
]
},
"root": {
"ClusterId": "account-management-api",
"Match": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { t } from "@lingui/core/macro";
import { Button } from "@repo/ui/components/Button";
import { Dialog, DialogTrigger } from "@repo/ui/components/Dialog";
import { DialogContent, DialogFooter, DialogHeader } from "@repo/ui/components/DialogFooter";
import { Heading } from "@repo/ui/components/Heading";
import { Modal } from "@repo/ui/components/Modal";
import { MailIcon, XIcon } from "lucide-react";
Expand All @@ -15,26 +16,27 @@ export function SupportDialog({ children }: Readonly<SupportDialogProps>) {
<DialogTrigger>
{children}
<Modal isDismissable={true} zIndex="high">
<Dialog className="max-w-lg">
<Dialog className="sm:max-w-lg">
{({ close }) => (
<>
<XIcon onClick={close} className="absolute top-2 right-2 h-10 w-10 cursor-pointer p-2 hover:bg-muted" />
<Heading slot="title" className="text-2xl">
{t`Contact support`}
</Heading>
<p className="text-muted-foreground text-sm">{t`Need help? Our support team is here to assist you.`}</p>
<div className="mt-4 flex flex-col gap-4">
<DialogHeader description={t`Need help? Our support team is here to assist you.`}>
<Heading slot="title" className="text-2xl">
{t`Contact support`}
</Heading>
</DialogHeader>
<DialogContent className="flex flex-col gap-4">
<div className="flex items-center gap-3 rounded-lg border border-input bg-input-background p-4 opacity-50">
<MailIcon className="h-5 w-5 text-muted-foreground" />
<a href="mailto:support@platformplatform.net" className="text-primary hover:underline">
support@platformplatform.net
</a>
</div>
<p className="text-muted-foreground text-sm">{t`Feel free to reach out with any questions or issues you may have.`}</p>
<div className="mt-6 flex justify-end gap-4">
<Button onPress={close}>{t`Close`}</Button>
</div>
</div>
</DialogContent>
<DialogFooter>
<Button onPress={close}>{t`Close`}</Button>
</DialogFooter>
</>
)}
</Dialog>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@ enum ThemeMode {
Dark = "dark"
}

function updateThemeColorMeta() {
requestAnimationFrame(() => {
const root = document.documentElement;
const computedStyle = window.getComputedStyle(root);
const backgroundHsl = computedStyle.getPropertyValue("--background").trim();
const backgroundColor = backgroundHsl ? `hsl(${backgroundHsl.replace(/\s+/g, ", ")})` : "#000000";

const themeColorMetas = document.querySelectorAll('meta[name="theme-color"]');
themeColorMetas.forEach((meta) => {
meta.setAttribute("content", backgroundColor);
});
});
}

export default function ThemeModeSelector({
variant = "icon",
onAction
Expand Down Expand Up @@ -52,6 +66,8 @@ export default function ThemeModeSelector({
}
}

updateThemeColorMeta();

// Listen for storage changes from other tabs/components
const handleStorageChange = (e: StorageEvent) => {
if (e.key === THEME_MODE_KEY && e.newValue) {
Expand Down Expand Up @@ -109,6 +125,8 @@ export default function ThemeModeSelector({
}
}

updateThemeColorMeta();

// Dispatch event to notify other components
window.dispatchEvent(new CustomEvent("theme-mode-changed", { detail: newMode }));

Expand Down Expand Up @@ -157,7 +175,11 @@ export default function ThemeModeSelector({
</div>
</Button>
)}
<Menu onAction={handleThemeChange} aria-label={t`Change theme`} placement="bottom">
<Menu
onAction={handleThemeChange}
aria-label={t`Change theme`}
placement={variant === "mobile-menu" ? "bottom end" : "bottom"}
>
<MenuItem id={ThemeMode.System} textValue="System">
<div className="flex items-center gap-2">
{window.matchMedia("(prefers-color-scheme: dark)").matches ? (
Expand Down
Loading
Loading