Design colors
Retrieve and access design colors.
Running this example
To run this example locally:
-
If you haven't already, create a new app in the Developer Portal(opens in a new tab or window). For more information, refer to our Quickstart guide.
-
In your app's configuration on the Developer Portal(opens in a new tab or window), ensure the "Development URL" is set to
http://localhost:8080. -
Clone the starter kit:
git clone https://github.com/canva-sdks/canva-apps-sdk-starter-kit.gitcd canva-apps-sdk-starter-kitSHELL -
Install dependencies:
npm installSHELL -
Run the example:
npm run start:example design_colorsSHELL -
Click the Preview URL link shown in the terminal to open the example in the Canva editor.
Example app source code
// For usage information, see the README.md file.import {Button,Column,Columns,FormField,MultilineInput,Rows,Swatch,Text,} from "@canva/app-ui-kit";import { getDesignColors, type DesignColor } from "@canva/design";import React, { useState } from "react";import * as styles from "styles/components.css";export const App = () => {// State to store the design colors retrieved from the Canva Design APIconst [designColors, setDesignColors] = useState<DesignColor[]>([]);const handleClick = React.useCallback(async () => {// The getDesignColors function returns the colors used in the current designconst { colors } = await getDesignColors();setDesignColors(colors);}, []);// For this example, we preview up to the first 5 solid colors (gradients are currently not supported).const previewColors = designColors.filter((designColor) => designColor.type === "solid").slice(0, 5).map((designColor) => designColor.color);return (<div className={styles.scrollContainer}><Rows spacing="3u"><Text>This example demonstrates how apps can retrieve the colors used in thecurrent design.</Text><Button variant="primary" onClick={handleClick} stretch>Get design colors</Button><Columns spacing="1u">{previewColors.map((color, index) => (<Column key={`${color}-${index}`} width="content"><Swatch fill={[color]} /></Column>))}</Columns>{/* Display the design colors as formatted JSON */}<FormFieldlabel="Design colors"value={JSON.stringify(designColors, null, 2)}control={(props) => (<MultilineInput {...props} maxRows={12} autoGrow readOnly />)}/></Rows></div>);};
TYPESCRIPT
// For usage information, see the README.md file.import { AppUiProvider } from "@canva/app-ui-kit";import { createRoot } from "react-dom/client";import { App } from "./app";import "@canva/app-ui-kit/styles.css";import type { DesignEditorIntent } from "@canva/intents/design";import { prepareDesignEditor } from "@canva/intents/design";async function render() {const root = createRoot(document.getElementById("root") as Element);root.render(<AppUiProvider><App /></AppUiProvider>,);}const designEditor: DesignEditorIntent = { render };prepareDesignEditor(designEditor);// Hot Module Replacement for development (automatically reloads the app when changes are made)if (module.hot) {module.hot.accept("./app", render);}
TYPESCRIPT
# Design colorsDemonstrates how to retrieve the colors currently used in the design.For API reference docs and instructions on running this example, see: https://www.canva.dev/docs/apps/examples/design-colors/.Related examples: See `design_interaction/design_metadata` for reading other design information, or `ui/color` for opening Canva's built-in color selector.NOTE: This example differs from what is expected for public apps to pass a Canva review:- Uses the preview `getDesignColors` API. Production apps must not use preview APIs- Error handling is simplified for demonstration. Production apps must implement comprehensive error handling with clear user feedback and graceful failure modes- Internationalization is not implemented. Production apps must support multiple languages using the `@canva/app-i18n-kit` package to pass Canva review requirements- The code structure is simplified: Production apps using [intents](https://www.canva.dev/docs/apps/intents/) are recommended to call the `prepareDesignEditor` function from `src/intents/design_editor/index.tsx`
MARKDOWN
API reference
Need help?
- Join our Community Forum(opens in a new tab or window)
- Report issues with this example on GitHub(opens in a new tab or window)