Design colors

Retrieve and access design colors.

Running this example

To run this example locally:

  1. 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.

  2. 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.

  3. Clone the starter kit:

    git clone https://github.com/canva-sdks/canva-apps-sdk-starter-kit.git
    cd canva-apps-sdk-starter-kit
    SHELL
  4. Install dependencies:

    npm install
    SHELL
  5. Run the example:

    npm run start design_colors
    SHELL
  6. 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 API
const [designColors, setDesignColors] = useState<DesignColor[]>([]);
const handleClick = React.useCallback(async () => {
// The getDesignColors function returns the colors used in the current design
const { 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 the
current 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 */}
<FormField
label="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 colors
Demonstrates 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?