diff --git a/package.json b/package.json index 85836a1df..5ce083c10 100644 --- a/package.json +++ b/package.json @@ -106,6 +106,10 @@ "prepare": "npm run panda", "panda": "panda codegen", "panda:watch": "panda codegen --watch", + "dev:link-ui": "rm -rf node_modules/@microbit/ui && ln -s ../../../ui/packages/ui node_modules/@microbit/ui && rm -rf styled-system && npm run panda", + "dev:link-ui-patterns": "rm -rf node_modules/@microbit/ui-patterns && ln -s ../../../ui/packages/ui-patterns node_modules/@microbit/ui-patterns && rm -rf styled-system && npm run panda", + "dev:link-theme": "npm --prefix ../python-editor-v3-microbit run build && mkdir -p node_modules/@microbit-foundation && rm -rf node_modules/@microbit-foundation/python-editor-v3-microbit && ln -s ../../../python-editor-v3-microbit node_modules/@microbit-foundation/python-editor-v3-microbit && rm -rf styled-system && npm run panda", + "dev:unlink-theme": "rm -rf node_modules/@microbit-foundation/python-editor-v3-microbit && rm -rf styled-system && npm run panda", "serve": "npx serve --no-clipboard -l 3000 -- build/", "prestart": "npm run panda", "start": "vite dev", diff --git a/src/common/GenericDialog.tsx b/src/common/GenericDialog.tsx index fc4310ceb..febea7a64 100644 --- a/src/common/GenericDialog.tsx +++ b/src/common/GenericDialog.tsx @@ -78,7 +78,7 @@ export const GenericDialogFooter = ({ variant="link" size="lg" onPress={onCloseDontShowAgain} - css={{ color: "brand.500", mr: "auto" }} + css={{ color: "fg.link", mr: "auto" }} > diff --git a/src/common/PostSaveDialog.tsx b/src/common/PostSaveDialog.tsx index 53cdc2127..f2494438e 100644 --- a/src/common/PostSaveDialog.tsx +++ b/src/common/PostSaveDialog.tsx @@ -125,7 +125,7 @@ const PostSaveDialogBody = ({ values={{ link: (chunks: ReactNode) => ( { + expect(unknownSemanticTokens(appPreset, { introduces })).toEqual([]); +}); + +// A flat override of a { base, _onDark } token merges wholesale and +// silently drops the dark-surface flip — the same failure, one door over. +it("app preset keeps every condition the base preset's tokens carry", () => { + expect(droppedConditionTokens(appPreset)).toEqual([]); +}); + +// The private brand preset is optional — present only when linked +// (`npm run dev:link-theme`) or installed in a brand build, exactly as +// panda.config.ts treats it. Checked here rather than in its own repo so +// that repo stays free of a dependency on this library, and because the +// merge this guards against happens on this side. +const require = createRequire(import.meta.url); +let brandPreset: unknown; +try { + brandPreset = ( + require("@microbit-foundation/python-editor-v3-microbit/panda-preset") as { + default: unknown; + } + ).default; +} catch { + brandPreset = undefined; +} + +describe.skipIf(!brandPreset)("private brand preset", () => { + it("overrides only semantic tokens @microbit/ui defines", () => { + expect(unknownSemanticTokens(brandPreset, { introduces })).toEqual([]); + }); + + it("keeps every condition the base preset's tokens carry", () => { + expect(droppedConditionTokens(brandPreset)).toEqual([]); + }); +}); diff --git a/src/documentation/api/ApiDocumentation.tsx b/src/documentation/api/ApiDocumentation.tsx index 32f0d10ea..feddadf13 100644 --- a/src/documentation/api/ApiDocumentation.tsx +++ b/src/documentation/api/ApiDocumentation.tsx @@ -105,7 +105,7 @@ const ActiveLevel = ({ id="api-description" values={{ link: (chunks: ReactNode) => ( - + {chunks} ), diff --git a/src/documentation/common/DocumentationContent.tsx b/src/documentation/common/DocumentationContent.tsx index df5984499..573354231 100644 --- a/src/documentation/common/DocumentationContent.tsx +++ b/src/documentation/common/DocumentationContent.tsx @@ -73,7 +73,7 @@ const DocumentationApiLinkMark = ( const [, setState] = useRouterState(); return ( { e.preventDefault(); setState({ @@ -93,7 +93,7 @@ const DocumentationInternalLinkMark = ( const [state, setState] = useRouterState(); return ( { e.preventDefault(); setState( @@ -118,7 +118,7 @@ const DocumentationExternalLinkMark = ( ) => { return ( ( { link: (chunks: ReactNode) => ( diff --git a/src/workbench/connect-dialogs/FirmwareDialog.tsx b/src/workbench/connect-dialogs/FirmwareDialog.tsx index 17f501726..03208e61c 100644 --- a/src/workbench/connect-dialogs/FirmwareDialog.tsx +++ b/src/workbench/connect-dialogs/FirmwareDialog.tsx @@ -69,7 +69,7 @@ const FirmwareDialogBody = () => { values={{ link: (chunks: ReactNode) => ( { ( - + {chunks} ), @@ -109,7 +105,7 @@ const NotFoundDialogBody = ({ values={{ link: (chunks: ReactNode) => (