Add question types, nudge feature, and share modal

- Add new question card components (photo, audio, text, who-likely)
- Add share preview modal for matches
- Add nudge notification system with rate limiting
- Add session-based notification improvements
- Add match confetti celebration animation
- Update onboarding flow with paywall tracking
- Remove deprecated swipe card and tutorial components
- Update GlassCard/GlassInput to use solid backgrounds
- Fix routing issues after packs screen removal
This commit is contained in:
jjbrunton committed 2026-01-25 19:17:39 +00:00
1 parent 8612b16b93
commit 1daf386765
114 files changed
+14877 -7911

No files matched your search

@@ -72,22 +72,21 @@ describe('GlassCard', () => {
});
describe('platform behavior', () => {
it('uses BlurView on iOS', () => {
// GlassCard now uses solid backgrounds instead of BlurView for reliability
it('renders correctly on iOS', () => {
Object.defineProperty(Platform, 'OS', {
get: () => 'ios',
});
const { getByTestId } = render(
const { getByText } = render(
<GlassCard>
<Text>iOS Card</Text>
</GlassCard>
);
expect(getByTestId('blur-view')).toBeTruthy();
expect(getByText('iOS Card')).toBeTruthy();
});
// Note: Testing Android platform requires component re-evaluation
// which is complex with module-level Platform checks
it('renders correctly', () => {
const { getByText } = render(
<GlassCard>
@@ -100,43 +99,42 @@ describe('GlassCard', () => {
});
describe('intensity prop', () => {
// Note: intensity prop is kept for API compatibility but no longer affects visual rendering
// since BlurView was replaced with solid backgrounds for reliability
beforeEach(() => {
Object.defineProperty(Platform, 'OS', {
get: () => 'ios',
});
});
it('applies light intensity', () => {
const { getByTestId } = render(
it('accepts light intensity prop', () => {
const { getByText } = render(
<GlassCard intensity="light">
<Text>Light Card</Text>
</GlassCard>
);
const blurView = getByTestId('blur-view');
expect(blurView).toBeTruthy();
expect(getByText('Light Card')).toBeTruthy();
});
it('applies medium intensity by default', () => {
const { getByTestId } = render(
it('accepts medium intensity by default', () => {
const { getByText } = render(
<GlassCard>
<Text>Medium Card</Text>
</GlassCard>
);
const blurView = getByTestId('blur-view');
expect(blurView).toBeTruthy();
expect(getByText('Medium Card')).toBeTruthy();
});
it('applies heavy intensity', () => {
const { getByTestId } = render(
it('accepts heavy intensity prop', () => {
const { getByText } = render(
<GlassCard intensity="heavy">
<Text>Heavy Card</Text>
</GlassCard>
);
const blurView = getByTestId('blur-view');
expect(blurView).toBeTruthy();
expect(getByText('Heavy Card')).toBeTruthy();
});
});
@@ -92,16 +92,17 @@ describe('GlassInput', () => {
});
describe('platform behavior', () => {
it('uses BlurView on iOS', () => {
// GlassInput now uses solid backgrounds instead of BlurView for reliability
it('renders correctly on iOS', () => {
Object.defineProperty(Platform, 'OS', {
get: () => 'ios',
});
const { getByTestId } = render(
const { getByPlaceholderText } = render(
<GlassInput placeholder="iOS Input" />
);
expect(getByTestId('blur-view')).toBeTruthy();
expect(getByPlaceholderText('iOS Input')).toBeTruthy();
});
// Note: Testing Android platform requires component re-evaluation