diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f7b10a3b67..d43e91e6031 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3579,6 +3579,19 @@ importers: version: 6.0.1(webpack@5.105.2) projects/packages/podcast: + dependencies: + '@wordpress/components': + specifier: 32.6.0 + version: 32.6.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@wordpress/element': + specifier: 6.44.0 + version: 6.44.0 + '@wordpress/i18n': + specifier: 6.17.0 + version: 6.17.0 + '@wordpress/ui': + specifier: 0.11.0 + version: 0.11.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) devDependencies: '@automattic/jetpack-wp-build-polyfills': specifier: workspace:* @@ -3598,12 +3611,6 @@ importers: '@wordpress/build': specifier: 0.13.0 version: 0.13.0(@babel/core@7.29.0)(browserslist@4.28.2) - '@wordpress/element': - specifier: 6.44.0 - version: 6.44.0 - '@wordpress/i18n': - specifier: 6.17.0 - version: 6.17.0 browserslist: specifier: ^4.24.0 version: 4.28.2 @@ -19432,6 +19439,7 @@ snapshots: use-sync-external-store: 1.6.0(react@18.3.1) optionalDependencies: '@types/react': 18.3.28 + optional: true '@base-ui/react@1.4.0(@date-fns/tz@1.4.1)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -19444,6 +19452,21 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) use-sync-external-store: 1.6.0(react@18.3.1) + optional: true + + '@base-ui/react@1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.29.2 + '@base-ui/utils': 0.2.8(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.2.11 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + use-sync-external-store: 1.6.0(react@18.3.1) + optionalDependencies: + '@date-fns/tz': 1.4.1 + '@types/react': 18.3.28 + date-fns: 4.1.0 '@base-ui/react@1.4.1(@date-fns/tz@1.4.1)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -19468,6 +19491,7 @@ snapshots: use-sync-external-store: 1.6.0(react@18.3.1) optionalDependencies: '@types/react': 18.3.28 + optional: true '@base-ui/utils@0.2.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -19477,6 +19501,18 @@ snapshots: react-dom: 18.3.1(react@18.3.1) reselect: 5.1.1 use-sync-external-store: 1.6.0(react@18.3.1) + optional: true + + '@base-ui/utils@0.2.8(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.29.2 + '@floating-ui/utils': 0.2.11 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + reselect: 5.1.1 + use-sync-external-store: 1.6.0(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.28 '@base-ui/utils@0.2.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -24202,7 +24238,7 @@ snapshots: '@wordpress/base-styles': 6.20.0 '@wordpress/compose': 7.44.0(react@18.3.1) '@wordpress/date': 5.44.0 - '@wordpress/deprecated': 4.44.0 + '@wordpress/deprecated': 4.45.0 '@wordpress/dom': 4.44.0 '@wordpress/element': 6.44.0 '@wordpress/escape-html': 3.44.0 @@ -24210,7 +24246,7 @@ snapshots: '@wordpress/html-entities': 4.44.0 '@wordpress/i18n': 6.17.0 '@wordpress/icons': 12.2.0(react@18.3.1) - '@wordpress/is-shallow-equal': 5.44.0 + '@wordpress/is-shallow-equal': 5.45.0 '@wordpress/keycodes': 4.44.0 '@wordpress/primitives': 4.44.0(react@18.3.1) '@wordpress/private-apis': 1.44.0 @@ -25916,7 +25952,7 @@ snapshots: '@wordpress/ui@0.11.0(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@base-ui/react': 1.4.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@base-ui/react': 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@date-fns/tz': 1.4.1 '@wordpress/a11y': 4.44.0 '@wordpress/compose': 7.44.0(react@18.3.1) @@ -25938,7 +25974,7 @@ snapshots: '@wordpress/ui@0.11.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@base-ui/react': 1.4.0(@date-fns/tz@1.4.1)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@base-ui/react': 1.4.1(@date-fns/tz@1.4.1)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@date-fns/tz': 1.4.1 '@wordpress/a11y': 4.44.0 '@wordpress/compose': 7.44.0(react@18.3.1) diff --git a/projects/packages/podcast/changelog/add-admin-tabs-scaffold b/projects/packages/podcast/changelog/add-admin-tabs-scaffold new file mode 100644 index 00000000000..de1a7d28cc7 --- /dev/null +++ b/projects/packages/podcast/changelog/add-admin-tabs-scaffold @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Replace the wp-build placeholder with page chrome (title, tagline) plus tab navigation (Welcome, Settings, Episodes, Distribution). Each tab panel is still empty — PR 4 in the untangle train fills them in. diff --git a/projects/packages/podcast/package.json b/projects/packages/podcast/package.json index fd66f8c84ed..f3eeedc12ad 100644 --- a/projects/packages/podcast/package.json +++ b/projects/packages/podcast/package.json @@ -26,6 +26,12 @@ "browserslist": [ "extends @wordpress/browserslist-config" ], + "dependencies": { + "@wordpress/components": "32.6.0", + "@wordpress/element": "6.44.0", + "@wordpress/i18n": "6.17.0", + "@wordpress/ui": "0.11.0" + }, "devDependencies": { "@automattic/jetpack-wp-build-polyfills": "workspace:*", "@babel/core": "7.29.0", @@ -33,8 +39,6 @@ "@types/react": "18.3.28", "@wordpress/browserslist-config": "6.44.0", "@wordpress/build": "0.13.0", - "@wordpress/element": "6.44.0", - "@wordpress/i18n": "6.17.0", "browserslist": "^4.24.0" }, "optionalDependencies": { diff --git a/projects/packages/podcast/routes/dashboard/package.json b/projects/packages/podcast/routes/dashboard/package.json index 7dab7404e23..f130ca6154a 100644 --- a/projects/packages/podcast/routes/dashboard/package.json +++ b/projects/packages/podcast/routes/dashboard/package.json @@ -4,8 +4,10 @@ "private": true, "dependencies": { "@types/react": "18.3.28", + "@wordpress/components": "32.6.0", "@wordpress/element": "6.44.0", - "@wordpress/i18n": "6.17.0" + "@wordpress/i18n": "6.17.0", + "@wordpress/ui": "0.11.0" }, "route": { "path": "/", diff --git a/projects/packages/podcast/routes/dashboard/stage.tsx b/projects/packages/podcast/routes/dashboard/stage.tsx index 4cee550f943..92f5ceebfb9 100644 --- a/projects/packages/podcast/routes/dashboard/stage.tsx +++ b/projects/packages/podcast/routes/dashboard/stage.tsx @@ -1,6 +1,59 @@ +/** + * Podcast dashboard stage: page chrome + tab navigation. + * + * Placeholder scaffolding only — each tab panel renders a stub. PR 4 in the + * untangle train wires the full AdminPage + jetpack-components integration + * along with the real tab contents. + */ + +import { useState, useCallback } from '@wordpress/element'; +import { __ } from '@wordpress/i18n'; +import { Tabs } from '@wordpress/ui'; + +const TAB_VALUES = [ 'settings', 'episodes', 'distribution', 'stats' ] as const; +type TabName = ( typeof TAB_VALUES )[ number ]; + +const isValidTab = ( value: string | null ): value is TabName => + !! value && ( TAB_VALUES as readonly string[] ).includes( value ); + const Stage = () => { - // "Podcast" is a product name, do not translate. - return
+ { __( 'Publish a podcast and reach your fans, anywhere they listen.', 'jetpack-podcast' ) } +
+ +{ __( 'Settings — placeholder.', 'jetpack-podcast' ) }
+{ __( 'Episodes — placeholder.', 'jetpack-podcast' ) }
+{ __( 'Distribution — placeholder.', 'jetpack-podcast' ) }
+{ __( 'Stats — placeholder.', 'jetpack-podcast' ) }
+