import ThemePrefsTI from 'app/common/ThemePrefs-ti'; import {CheckerT, createCheckers} from 'ts-interface-checker'; export interface ThemePrefs { appearance: ThemeAppearance; syncWithOS: boolean; colors: { light: ThemeNameOrColors; dark: ThemeNameOrColors; } } export type ThemeAppearance = 'light' | 'dark'; export type ThemeNameOrColors = ThemeName | ThemeColors; export type ThemeName = 'GristLight' | 'GristDark'; export interface Theme { appearance: ThemeAppearance; colors: ThemeColors; } export interface ThemeColors { /* Text */ 'text': string; 'text-light': string; 'text-dark': string; 'text-error': string; 'text-danger': string; 'text-disabled': string; /* Page */ 'page-bg': string; 'page-backdrop': string; /* Page Panels */ 'page-panels-main-panel-bg': string; 'page-panels-left-panel-bg': string; 'page-panels-right-panel-bg': string; 'page-panels-top-header-bg': string; 'page-panels-bottom-footer-bg': string; 'page-panels-border': string; 'page-panels-border-resizing': string; 'page-panels-side-panel-opener-fg': string; 'page-panels-side-panel-opener-active-fg': string; 'page-panels-side-panel-opener-active-bg': string; /* Add New */ 'add-new-circle-fg': string; 'add-new-circle-bg': string; 'add-new-circle-hover-bg': string; 'add-new-circle-small-fg': string; 'add-new-circle-small-bg': string; 'add-new-circle-small-hover-bg': string; /* Top Bar */ 'top-bar-button-primary-fg': string; 'top-bar-button-secondary-fg': string; 'top-bar-button-disabled-fg': string; 'top-bar-button-error-fg': string; /* Notifications */ 'notifications-panel-header-bg': string; 'notifications-panel-body-bg': string; 'notifications-panel-border': string; /* Toasts */ 'toast-text': string; 'toast-text-light': string; 'toast-bg': string; 'toast-error-icon': string; 'toast-error-bg': string; 'toast-success-icon': string; 'toast-success-bg': string; 'toast-warning-icon': string; 'toast-warning-bg': string; 'toast-info-icon': string; 'toast-info-bg': string; 'toast-control-fg': string; 'toast-control-info-fg': string; /* Tooltips */ 'tooltip-fg': string; 'tooltip-bg': string; 'tooltip-icon': string; 'tooltip-close-button-fg': string; 'tooltip-close-button-hover-fg': string; 'tooltip-close-button-hover-bg': string; /* Modals */ 'modal-bg': string; 'modal-backdrop': string; 'modal-border': string; 'modal-border-dark': string; 'modal-border-hover': string; 'modal-shadow-inner': string; 'modal-shadow-outer': string; 'modal-close-button-fg': string; 'modal-backdrop-close-button-fg': string; 'modal-backdrop-close-button-hover-fg': string; /* Popups */ 'popup-bg': string; 'popup-shadow-inner': string; 'popup-shadow-outer': string; 'popup-close-button-fg': string; /* Progress Bars */ 'progress-bar-fg': string; 'progress-bar-error-fg': string; 'progress-bar-bg': string; /* Links */ 'link': string; 'link-hover': string; /* Hover */ 'hover': string; 'hover-light': string; /* Cell Editor */ 'cell-editor-fg': string; 'cell-editor-bg': string; /* Cursor */ 'cursor': string; 'cursor-inactive': string; 'cursor-readonly': string; /* Tables */ 'table-header-fg': string; 'table-header-selected-fg': string; 'table-header-bg': string; 'table-header-selected-bg': string; 'table-header-border': string; 'table-header-border-dark': string; 'table-body-bg': string; 'table-body-border': string; 'table-add-new-bg': string; 'table-scroll-shadow': string; 'table-frozen-columns-border': string; 'table-drag-drop-indicator': string; 'table-drag-drop-shadow': string; /* Cards */ 'card-compact-widget-bg': string; 'card-compact-record-bg': string; 'card-blocks-bg': string; 'card-form-label': string; 'card-compact-label': string; 'card-blocks-label': string; 'card-form-border': string; 'card-compact-border': string; 'card-editing-layout-bg': string; 'card-editing-layout-border': string; /* Card Lists */ 'card-list-form-border': string; 'card-list-blocks-border': string; /* Selection */ 'selection': string; 'selection-opaque-fg': string; 'selection-opaque-bg': string; 'selection-opaque-dark-bg': string; /* Widgets */ 'widget-bg': string; 'widget-border': string; 'widget-active-border': string; 'widget-inactive-stripes-light': string; 'widget-inactive-stripes-dark': string; /* Pinned Docs */ 'pinned-doc-footer-bg': string; 'pinned-doc-border': string; 'pinned-doc-border-hover': string; 'pinned-doc-editor-bg': string; /* Raw Data */ 'raw-data-table-border': string; 'raw-data-table-border-hover': string; /* Controls */ 'control-fg': string; 'control-primary-fg': string; 'control-primary-bg': string; 'control-secondary-fg': string; 'control-hover-fg': string; 'control-primary-hover-bg': string; 'control-secondary-hover-fg': string; 'control-secondary-hover-bg': string; 'control-disabled-fg': string; 'control-disabled-bg': string; 'control-primary-disabled': string; 'control-border': string; /* Checkboxes */ 'checkbox-bg': string; 'checkbox-disabled-bg': string; 'checkbox-border': string; 'checkbox-border-hover': string; /* Move Docs */ 'move-docs-selected-fg': string; 'move-docs-selected-bg': string; 'move-docs-disabled-bg': string; /* Filter Bar */ 'filter-bar-button-saved-fg': string; 'filter-bar-button-saved-bg': string; 'filter-bar-button-saved-hover-bg': string; /* Icon Buttons */ 'icon-button-fg': string; 'icon-button-primary-bg': string; 'icon-button-primary-hover-bg': string; 'icon-button-secondary-bg': string; 'icon-button-secondary-hover-bg': string; /* Left Panel */ 'left-panel-page-hover-bg': string; 'left-panel-active-page-fg': string; 'left-panel-active-page-bg': string; 'left-panel-disabled-page-fg': string; 'left-panel-page-options-fg': string; 'left-panel-page-options-hover-fg': string; 'left-panel-page-options-hover-bg': string; 'left-panel-page-options-selected-hover-bg': string; 'left-panel-page-initials-fg': string; 'left-panel-page-initials-bg': string; /* Right Panel */ 'right-panel-tab-fg': string; 'right-panel-tab-bg': string; 'right-panel-tab-icon': string; 'right-panel-tab-icon-hover': string; 'right-panel-tab-hover-bg': string; 'right-panel-tab-selected-fg': string; 'right-panel-tab-selected-bg': string; 'right-panel-tab-button-hover-bg': string; 'right-panel-subtab-fg': string; 'right-panel-subtab-selected-fg': string; 'right-panel-subtab-selected-underline': string; 'right-panel-subtab-hover-fg': string; 'right-panel-subtab-hover-underline': string; 'right-panel-disabled-overlay': string; 'right-panel-toggle-button-enabled-fg': string; 'right-panel-toggle-button-enabled-bg': string; 'right-panel-toggle-button-enabled-hover-fg': string; 'right-panel-toggle-button-disabled-fg': string; 'right-panel-toggle-button-disabled-bg': string; 'right-panel-field-settings-bg': string; 'right-panel-field-settings-button-bg': string; /* Document History */ 'document-history-snapshot-fg': string; 'document-history-snapshot-selected-fg': string; 'document-history-snapshot-bg': string; 'document-history-snapshot-selected-bg': string; 'document-history-snapshot-border': string; 'document-history-activity-text': string; 'document-history-activity-text-light': string; /* Accents */ 'accent-icon': string; 'accent-border': string; 'accent-text': string; /* Inputs */ 'input-fg': string; 'input-bg': string; 'input-disabled-fg': string; 'input-disabled-bg': string; 'input-placeholder-fg': string; 'input-border': string; 'input-valid': string; 'input-invalid': string; 'input-focus': string; 'input-readonly-bg': string; 'input-readonly-border': string; /* Choice Entry */ 'choice-entry-bg': string; 'choice-entry-border': string; 'choice-entry-border-hover': string; /* Select Buttons */ 'select-button-fg': string; 'select-button-placeholder-fg': string; 'select-button-disabled-fg': string; 'select-button-bg': string; 'select-button-border': string; 'select-button-border-invalid': string; /* Menus */ 'menu-text': string; 'menu-light-text': string; 'menu-bg': string; 'menu-subheader-fg': string; 'menu-border': string; 'menu-shadow': string; /* Menu Items */ 'menu-item-fg': string; 'menu-item-selected-fg': string; 'menu-item-selected-bg': string; 'menu-item-disabled-fg': string; 'menu-item-icon-fg': string; 'menu-item-icon-selected-fg': string; 'menu-item-link-fg': string; 'menu-item-link-selected-fg': string; 'menu-item-link-selected-bg': string; /* Autocomplete */ 'autocomplete-match-text': string; 'autocomplete-selected-match-text': string; 'autocomplete-item-selected-bg': string; /* Search */ 'search-border': string; 'search-prev-next-button-fg': string; 'search-prev-next-button-bg': string; /* Loaders */ 'loader-fg': string; 'loader-bg': string; /* Site Switcher */ 'site-switcher-active-fg': string; 'site-switcher-active-bg': string; /* Doc Menu */ 'doc-menu-doc-options-fg': string; 'doc-menu-doc-options-hover-fg': string; 'doc-menu-doc-options-hover-bg': string; /* Shortcut Keys */ 'shortcut-key-fg': string; 'shortcut-key-primary-fg': string; 'shortcut-key-secondary-fg': string; 'shortcut-key-bg': string; 'shortcut-key-border': string; /* Breadcrumbs */ 'breadcrumbs-tag-fg': string; 'breadcrumbs-tag-bg': string; 'breadcrumbs-tag-alert-bg': string; /* Page Widget Picker */ 'widget-picker-primary-bg': string; 'widget-picker-secondary-bg': string; 'widget-picker-item-fg': string; 'widget-picker-item-selected-bg': string; 'widget-picker-item-disabled-bg': string; 'widget-picker-icon': string; 'widget-picker-primary-icon': string; 'widget-picker-summary-icon': string; 'widget-picker-border': string; 'widget-picker-shadow': string; /* Code View */ 'code-view-text': string; 'code-view-keyword': string; 'code-view-comment': string; 'code-view-meta': string; 'code-view-title': string; 'code-view-params': string; 'code-view-string': string; 'code-view-number': string; /* Importer */ 'importer-table-info-border': string; 'importer-preview-border': string; 'importer-skipped-table-overlay': string; 'importer-match-icon': string; /* Menu Toggles */ 'menu-toggle-fg': string; 'menu-toggle-hover-fg': string; 'menu-toggle-active-fg': string; 'menu-toggle-bg': string; 'menu-toggle-border': string; /* Button Groups */ 'button-group-fg': string; 'button-group-light-fg': string; 'button-group-bg': string; 'button-group-icon': string; 'button-group-border': string; 'button-group-border-hover': string; 'button-group-selected-fg': string; 'button-group-light-selected-fg': string; 'button-group-selected-bg': string; 'button-group-selected-border': string; /* Access Rules */ 'access-rules-table-header-fg': string; 'access-rules-table-header-bg': string; 'access-rules-table-body-fg': string; 'access-rules-table-border': string; 'access-rules-column-list-border': string; 'access-rules-column-item-fg': string; 'access-rules-column-item-bg': string; 'access-rules-column-item-icon-fg': string; 'access-rules-column-item-icon-hover-fg': string; 'access-rules-column-item-icon-hover-bg': string; /* Cells */ 'cell-fg': string; 'cell-bg': string; 'cell-zebra-bg': string; /* Formula Editor */ 'formula-editor-bg': string; /* Charts */ 'chart-fg': string; 'chart-bg': string; 'chart-legend-bg': string; 'chart-x-axis': string; 'chart-y-axis': string; /* Comments */ 'comments-popup-header-bg': string; 'comments-popup-body-bg': string; 'comments-popup-border': string; 'comments-user-name-fg': string; 'comments-panel-topic-bg': string; 'comments-panel-topic-border': string; 'comments-panel-resolved-topic-bg': string; } export const ThemePrefsChecker = createCheckers(ThemePrefsTI).ThemePrefs as CheckerT; export function getDefaultThemePrefs(): ThemePrefs { return { appearance: 'light', syncWithOS: false, colors: { light: 'GristLight', dark: 'GristDark', } }; }