from __future__ import annotations from gradio.themes.base import Base from gradio.themes.utils import colors, fonts, sizes # Import our custom colors from colors import ( purple as custom_purple, blue as custom_blue, grey as custom_grey, green as custom_green, red as custom_red, white, black, purple_alpha ) from sizes import spacing_md, radius_sm, text_md class CanvaTheme(Base): def __init__( self, *, primary_hue: colors.Color | str = colors.purple, # Using Gradio's purple secondary_hue: colors.Color | str = colors.blue, # Using Gradio's blue neutral_hue: colors.Color | str = colors.gray, # Using Gradio's gray text_size: sizes.Size | str = sizes.text_md, spacing_size: sizes.Size | str = sizes.spacing_md, radius_size: sizes.Size | str = sizes.radius_sm, font: fonts.Font | str | Iterable[fonts.Font | str] = ( # fonts.LocalFont("CanvaSans", weights=[400, 500, 700]), fonts.GoogleFont("Open Sans", weights=[400, 500, 700]), "ui-sans-serif", "system-ui", "sans-serif", ), font_mono: fonts.Font | str | Iterable[fonts.Font | str] = ( fonts.GoogleFont("JetBrains Mono", weights=[400, 700]), "ui-monospace", "Consolas", "monospace", ), ): super().__init__( primary_hue=primary_hue, secondary_hue=secondary_hue, neutral_hue=neutral_hue, spacing_size=spacing_size, radius_size=radius_size, text_size=text_size, font=font, font_mono=font_mono, ) super().set( # Body colors body_background_fill=white.c50, body_background_fill_dark=black.c50, # Text colors body_text_color=black.c50, body_text_color_dark=white.c50, # Block colors block_background_fill=white.c50, block_background_fill_dark=custom_grey.c800, block_border_color=custom_grey.c200, block_border_color_dark=custom_grey.c700, block_title_text_color=custom_grey.c500, block_title_text_color_dark=custom_grey.c400, # Input colors input_background_fill=custom_grey.c50, input_background_fill_dark=custom_grey.c800, input_border_color=custom_grey.c200, input_border_color_dark=custom_grey.c700, input_border_width="1px", # Button colors button_primary_background_fill=custom_purple.c500, button_primary_background_fill_dark=custom_purple.c600, button_primary_text_color=white.c50, button_primary_text_color_dark=white.c50, button_secondary_background_fill=custom_grey.c50, button_secondary_background_fill_dark=custom_grey.c800, button_secondary_text_color=black.c50, button_secondary_text_color_dark=white.c50, # Shadows shadow_drop="0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", shadow_inset="0 2px 4px 0 rgb(0 0 0 / 0.05) inset", # Link colors link_text_color=custom_purple.c500, link_text_color_dark=custom_purple.c400, )