Skip to content

Commit d91b562

Browse files
authored
Merge branch 'main' into jd/yt-events
2 parents 216f94b + 1457a9c commit d91b562

File tree

103 files changed

+1933
-2212
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+1933
-2212
lines changed

special-pages/pages/onboarding/app/v3/components/DockInstructions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function DockInstructions() {
1515
<div className={styles.root}>
1616
<video
1717
className={styles.video}
18-
src="assets/video/dock-instructions/add-to-dock.mp4"
18+
src="assets/videos/add-to-dock.mp4"
1919
autoPlay={!isReducedMotion}
2020
loop
2121
muted

special-pages/pages/onboarding/app/v4/App.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { h } from 'preact';
2-
import { useContext } from 'preact/hooks';
32
import styles from './App.module.css';
4-
import { GlobalContext, GlobalDispatch } from '../global';
3+
import { useGlobalDispatch, useGlobalState } from '../global';
54
import { useEnv } from '../../../../shared/components/EnvironmentProvider';
65
import { usePlatformName } from '../shared/components/SettingsProvider';
76
import { ErrorBoundary } from '../../../../shared/components/ErrorBoundary';
@@ -14,10 +13,10 @@ import { SingleStep } from './components/SingleStep';
1413
* @param {import("preact").ComponentChild} props.children
1514
*/
1615
export function App({ children }) {
17-
const { debugState } = useEnv();
16+
const { debugState, isDarkMode } = useEnv();
1817
const platformName = usePlatformName();
19-
const globalState = useContext(GlobalContext);
20-
const dispatch = useContext(GlobalDispatch);
18+
const globalState = useGlobalState();
19+
const dispatch = useGlobalDispatch();
2120

2221
const { activeStep, exiting } = globalState;
2322

@@ -27,7 +26,7 @@ export function App({ children }) {
2726
};
2827

2928
return (
30-
<main data-platform-name={platformName || 'macos'} data-app-version="v4">
29+
<main class={isDarkMode ? 'theme-dark' : 'theme-light'} data-platform-name={platformName || 'macos'} data-app-version="v4">
3130
<Background />
3231
{debugState && <Debug state={globalState} />}
3332
<div class={styles.container} data-current={activeStep} data-exiting={String(exiting)}>
@@ -40,6 +39,10 @@ export function App({ children }) {
4039
);
4140
}
4241

42+
/**
43+
* @param {object} props
44+
* @param {import('../types').GlobalState} props.state
45+
*/
4346
function Debug(props) {
4447
const { order, step, exiting, activeStep, nextStep } = props.state;
4548
const debugData = { order, step, exiting, activeStep, nextStep };
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
@import url('./fonts.css');
2+
@import url('@duckduckgo/design-tokens/build/desktop-browsers/onboarding.css');
23

34
:root {
45
--font-display: 'DuckSansDisplay', system-ui, sans-serif;
56
--font-product: 'DuckSansProduct', system-ui, sans-serif;
67
}
78

89
.container {
9-
--bubble-bg: white;
10-
--bubble-border: #CBEAFF;
10+
--bubble-bg: var(--ds-surface-tertiary);
11+
--bubble-border: var(--ds-accent-alt-primary);
1112

1213
display: flow-root;
1314
position: relative;
14-
15-
@media (prefers-color-scheme: dark) {
16-
--bubble-bg: #011D34;
17-
--bubble-border: #133E7C;
18-
}
1915
}
Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,57 @@
11
import { h } from 'preact';
2-
import { useState, useContext, useEffect } from 'preact/hooks';
2+
import { useState } from 'preact/hooks';
33
import { useTypedTranslation } from '../../types';
44
import { Trans } from '../../../../../shared/components/TranslationsProvider';
5-
import { GlobalDispatch, useGlobalState } from '../../global';
5+
import { useGlobalState } from '../../global';
66
import { useEnv } from '../../../../../shared/components/EnvironmentProvider';
77
import { ToggleButton } from '../../shared/components/ToggleButton';
88
import { AddressBarPreview } from './AddressBarPreview';
99
import { Button } from './Button';
10+
import { Container } from './Container';
1011
import { Launch } from '../../shared/components/Icons';
1112
import styles from './AddressBarContent.module.css';
1213

14+
/** @typedef {'search-and-duckai' | 'search-only'} AddressBarOption */
15+
1316
/**
1417
* Bottom bubble content for the addressBarMode step.
1518
* Shows the address bar preview animation, radio toggle buttons for search mode,
1619
* a footer note about AI features, and the Start Browsing button.
20+
*
21+
* @param {object} props
22+
* @param {() => void} props.dismiss
23+
* @param {(id: import('../../types').SystemValueId, payload: import('../../types').SystemValue, current: boolean) => void} props.updateSystemValue
1724
*/
18-
export function AddressBarContent() {
25+
export function AddressBarContent({ dismiss, updateSystemValue }) {
1926
const { t } = useTypedTranslation();
2027
const { isDarkMode } = useEnv();
21-
const dispatch = useContext(GlobalDispatch);
2228
const { status } = useGlobalState();
23-
const [selectedOption, setSelectedOption] = useState('search-and-duckai');
24-
const isPending = status.kind === 'executing';
25-
26-
const dispatchPreference = (option) => {
27-
dispatch({
28-
kind: 'update-system-value',
29-
id: 'address-bar-mode',
30-
payload: { enabled: option === 'search-and-duckai' },
31-
current: true,
32-
});
33-
};
3429

35-
useEffect(() => {
36-
dispatchPreference(selectedOption);
37-
}, []);
30+
const [selectedOption, setSelectedOption] = useState(/** @type {AddressBarOption} */ ('search-and-duckai'));
31+
const isPending = status.kind === 'executing';
3832

39-
const handleSelection = (option) => {
33+
/** @param {AddressBarOption} option */
34+
const select = (option) => {
4035
if (option === selectedOption || isPending) return;
4136
setSelectedOption(option);
42-
dispatchPreference(option);
37+
updateSystemValue('address-bar-mode', { enabled: option === 'search-and-duckai' }, true);
4338
};
4439

45-
const dismiss = () => dispatch({ kind: 'dismiss' });
46-
4740
return (
48-
<div class={styles.root}>
41+
<Container class={styles.root}>
4942
<div class={styles.previewContainer}>
5043
<AddressBarPreview isReduced={selectedOption === 'search-only'} isDarkMode={isDarkMode} />
5144
</div>
5245
<div class={styles.toggleButtons}>
5346
<ToggleButton
5447
label={t('addressBarMode_searchAndDuckAi')}
5548
selected={selectedOption === 'search-and-duckai'}
56-
onClick={() => handleSelection('search-and-duckai')}
49+
onClick={() => select('search-and-duckai')}
5750
/>
5851
<ToggleButton
5952
label={t('addressBarMode_searchOnly')}
6053
selected={selectedOption === 'search-only'}
61-
onClick={() => handleSelection('search-only')}
54+
onClick={() => select('search-only')}
6255
/>
6356
</div>
6457
<div class={styles.footer}>
@@ -70,6 +63,6 @@ export function AddressBarContent() {
7063
<Button variant="primary" size="wide" class={styles.startButton} onClick={dismiss}>
7164
{t('startBrowsing')} <Launch />
7265
</Button>
73-
</div>
66+
</Container>
7467
);
7568
}
Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
.root {
2-
display: flex;
3-
flex-direction: column;
4-
align-items: center;
5-
align-self: stretch;
6-
padding: var(--sp-12); /* 48px */
2+
gap: 0;
73
}
84

95
.previewContainer {
@@ -22,46 +18,42 @@
2218
line-height: calc(18 * var(--px-in-rem));
2319

2420
/* Override ToggleButton theme to match Figma — light */
25-
--toggle-accent-light: #4397E0;
26-
--toggle-accent-text-light: #1074CC;
27-
--toggle-accent-bg-light: rgba(161, 207, 247, 0.08);
28-
--toggle-border-light: rgba(0, 0, 0, 0.20);
29-
--toggle-color-light: rgba(36, 35, 35, 0.96);
30-
--toggle-radio-light: #4397E0;
21+
--toggle-accent-light: var(--ds-accent-primary);
22+
--toggle-accent-text-light: var(--ds-accent-primary-text-color);
23+
--toggle-accent-bg-light: var(--ds-accent-alt-glow-secondary);
24+
--toggle-border-light: var(--ds-control-primary-border-color);
25+
--toggle-color-light: var(--ds-text-primary);
26+
--toggle-radio-light: var(--ds-accent-primary);
3127

3228
/* Override ToggleButton theme to match Figma — dark */
33-
--toggle-accent-dark: #75B6EB;
34-
--toggle-accent-text-dark: #75B6EB;
35-
--toggle-accent-bg-dark: rgba(161, 207, 247, 0.08);
36-
--toggle-bg-dark: #011D34;
37-
--toggle-border-dark: rgba(255, 255, 255, 0.36);
38-
--toggle-color-dark: white;
39-
--toggle-radio-dark: #75B6EB;
40-
--toggle-radio-check-dark: #222222;
29+
--toggle-accent-dark: var(--ds-accent-primary);
30+
--toggle-accent-text-dark: var(--ds-accent-primary);
31+
--toggle-accent-bg-dark: var(--ds-accent-alt-glow-secondary);
32+
--toggle-bg-dark: var(--ds-surface-tertiary);
33+
--toggle-border-dark: var(--ds-control-primary-border-color);
34+
--toggle-color-dark: var(--ds-text-primary);
35+
--toggle-radio-dark: var(--ds-accent-primary);
36+
--toggle-radio-check-dark: var(--ds-accent-primary-content-color);
4137
}
4238

4339
.footer {
4440
display: flex;
45-
align-items: flex-start;
41+
align-items: center;
4642
gap: var(--sp-2); /* 8px */
4743
align-self: stretch;
4844
margin-top: calc(26 * var(--px-in-rem)); /* 26px */
4945
}
5046

5147
.starIcon {
52-
width: var(--sp-5); /* 20px */
53-
height: var(--sp-5); /* 20px */
48+
width: var(--sp-6); /* 24px */
49+
height: var(--sp-6); /* 24px */
5450
flex-shrink: 0;
5551
}
5652

5753
.footerText {
5854
font-size: calc(13 * var(--px-in-rem));
5955
line-height: calc(16 * var(--px-in-rem));
60-
color: var(--color-black-at-84);
61-
62-
@media (prefers-color-scheme: dark) {
63-
color: var(--color-white-at-84);
64-
}
56+
color: var(--ds-text-primary);
6557
}
6658

6759
.footerText :where(b) {
@@ -71,4 +63,3 @@
7163
.startButton {
7264
margin-top: var(--sp-8); /* 32px */
7365
}
74-

0 commit comments

Comments
 (0)