diff --git a/.husky/css_check.js b/.husky/css_check.js index ee8ae13e96..31bb08895a 100644 --- a/.husky/css_check.js +++ b/.husky/css_check.js @@ -21,7 +21,7 @@ for (const file of files) { content = content.replace(commentPattern, ""); // look for first level selectors const firstLevelSelectors = content.match(firstLevelSelectorPattern) || []; - if (!firstLevelSelectors.every((line) => line.startsWith(".o-spreadsheet "))) { + if (!firstLevelSelectors.every((line) => line.startsWith(".o-spreadsheet ") || line.startsWith(".o-spreadsheet."))) { faultyFiles.push(file); } } @@ -38,7 +38,7 @@ Every css selector should be encompassed within .o-spreadsheet. For example: .o-spreadsheet { ... } -or +or .o-spreadsheet .foo { ... } diff --git a/demo/main.js b/demo/main.js index 4b75fa36fb..d773832f43 100644 --- a/demo/main.js +++ b/demo/main.js @@ -70,7 +70,7 @@ let start; class Demo extends Component { setup() { - this.state = useState({ key: 0, displayHeader: false }); + this.state = useState({ key: 0, displayHeader: false, colorScheme: "light" }); this.stateUpdateMessages = []; this.client = { id: uuidGenerator.uuidv4(), @@ -108,6 +108,15 @@ class Demo extends Component { icon: "o-spreadsheet-Icon.OPEN_DASHBOARD", }); + topbarMenuRegistry.addChild("dark_mode", ["file"], { + name: "Toggle dark mode", + sequence: 12.5, + isReadonlyAllowed: true, + execute: () => + (this.state.colorScheme = this.state.colorScheme === "dark" ? "light" : "dark"), + icon: "o-spreadsheet-Icon.DARK_MODE", + }); + topbarMenuRegistry.addChild("read_write", ["file"], { name: "Open with write access", sequence: 13, @@ -215,7 +224,10 @@ class Demo extends Component { useExternalListener(window, "beforeunload", this.leaveCollaborativeSession.bind(this)); useExternalListener(window, "unhandledrejection", this.notifyError.bind(this)); - useExternalListener(window, "error", this.notifyError.bind(this)); + useExternalListener(window, "error", (ev) => { + console.error("Global error caught: ", ev.error || ev.message); + this.notifyError(); + }); onWillStart(() => this.initiateConnection()); @@ -331,11 +343,11 @@ Demo.template = xml/* xml */ `
A header
- +
- +
`; Demo.components = { Spreadsheet }; diff --git a/packages/o-spreadsheet-engine/src/constants.ts b/packages/o-spreadsheet-engine/src/constants.ts index ab440f861f..5724c6af88 100644 --- a/packages/o-spreadsheet-engine/src/constants.ts +++ b/packages/o-spreadsheet-engine/src/constants.ts @@ -277,7 +277,7 @@ export const DEFAULT_CAROUSEL_TITLE_STYLE: ChartStyle = { color: TEXT_BODY, }; -export const DEFAULT_TOKEN_COLOR: Color = "#000000"; +export const DEFAULT_TOKEN_COLOR: Color = "light-dark(#000000, #ffffff)"; const functionColor = DEFAULT_TOKEN_COLOR; const operatorColor = "#3da4ab"; diff --git a/packages/o-spreadsheet-engine/src/helpers/color.ts b/packages/o-spreadsheet-engine/src/helpers/color.ts index 6518f4e8c7..c4914c09ac 100644 --- a/packages/o-spreadsheet-engine/src/helpers/color.ts +++ b/packages/o-spreadsheet-engine/src/helpers/color.ts @@ -15,12 +15,10 @@ export const colors = [ "#00a3a3", "#f012be", "#3d9970", - "#111111", "#62A300", "#ff4136", "#949494", - "#85144b", - "#001f3f", + "#ff5c9d", ]; /* diff --git a/src/components/border_editor/border_editor.css b/src/components/border_editor/border_editor.css index 3c0df1f59c..33cd1715d2 100644 --- a/src/components/border_editor/border_editor.css +++ b/src/components/border_editor/border_editor.css @@ -1,7 +1,6 @@ .o-spreadsheet { .o-border-selector { padding: 4px; - background-color: white; .o-divider { border-right: 1px solid var(--os-gray-300); @@ -30,7 +29,6 @@ } .o-border-style-dropdown { - background: #ffffff; padding: 4px; .o-style-preview { margin: 7px 5px 7px 5px; @@ -38,19 +36,19 @@ height: 5px; } .o-style-thin { - border-bottom: 1px solid #000000; + border-bottom: 1px solid var(--os-black); } .o-style-medium { - border-bottom: 2px solid #000000; + border-bottom: 2px solid var(--os-black); } .o-style-thick { - border-bottom: 3px solid #000000; + border-bottom: 3px solid var(--os-black); } .o-style-dashed { - border-bottom: 1px dashed #000000; + border-bottom: 1px dashed var(--os-black); } .o-style-dotted { - border-bottom: 1px dotted #000000; + border-bottom: 1px dotted var(--os-black); } .o-dropdown-border-type { cursor: pointer; diff --git a/src/components/border_editor/border_editor.xml b/src/components/border_editor/border_editor.xml index b6ec88c67e..ca38ff8fec 100644 --- a/src/components/border_editor/border_editor.xml +++ b/src/components/border_editor/border_editor.xml @@ -3,7 +3,7 @@ Border Color
@@ -52,7 +52,7 @@ -
+
-
+
Standard
Custom
-
+
diff --git a/src/components/color_picker/color_picker_widget.css b/src/components/color_picker/color_picker_widget.css index ca4fb2859c..4ca9dd6cc7 100644 --- a/src/components/color_picker/color_picker_widget.css +++ b/src/components/color_picker/color_picker_widget.css @@ -14,7 +14,7 @@ border-radius: 2px; cursor: pointer; &:not([disabled]):hover { - background-color: rgba(0, 0, 0, 0.08); + background-color: var(--os-background-gray-color-hover); } } diff --git a/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.css b/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.css index 6977afcfe3..3ff1da5d34 100644 --- a/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.css +++ b/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.css @@ -2,7 +2,6 @@ .o-autocomplete-dropdown { pointer-events: auto; cursor: pointer; - background-color: #fff; max-width: 400px; z-index: 1; .o-autocomplete-value-focus { diff --git a/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.ts b/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.ts index 8df5009813..f4d28d26b3 100644 --- a/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.ts +++ b/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.ts @@ -36,7 +36,7 @@ export class TextValueProvider extends Component { getCss(html: HtmlContent) { return cssPropertiesToCss({ - color: html.color || "#000000", + color: html.color, background: html.backgroundColor, }); } diff --git a/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.xml b/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.xml index 651521e8be..3b17bb148f 100644 --- a/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.xml +++ b/src/components/composer/autocomplete_dropdown/autocomplete_dropdown.xml @@ -3,7 +3,7 @@
+ 'o-autocomplete-dropdown bg-white': props.proposals.length}">
void; onStopHover?: () => void; color?: Color; + opacity?: number; backgroundColor?: Color; classes?: string[]; }; @@ -635,10 +636,6 @@ export class Composer extends Component const { end, start } = this.props.composerStore.composerSelection; for (let index = 0; index < tokens.length; index++) { const token = tokens[index]; - let color = token.color || DEFAULT_TOKEN_COLOR; - if (token.isBlurred) { - color = setColorAlpha(color, 0.5); - } const classes: string[] = []; if ( token.type === "REFERENCE" && @@ -662,7 +659,8 @@ export class Composer extends Component result.push({ value: token.value, - color, + color: token.color || DEFAULT_TOKEN_COLOR, + opacity: token.isBlurred ? 0.5 : 1, classes, onHover: (rect) => this.onTokenHover(index, rect), onStopHover: () => this.onTokenHover(undefined), diff --git a/src/components/composer/composer/composer.xml b/src/components/composer/composer/composer.xml index 2ae4ef5194..654f9ad236 100644 --- a/src/components/composer/composer/composer.xml +++ b/src/components/composer/composer/composer.xml @@ -60,7 +60,7 @@ t-on-click="closeAssistant" class="fa-stack position-absolute top-0 start-100 translate-middle fs-4"> - +
{ content.onHover?.(getBoundingRectAsPOJO(span)); }); @@ -266,11 +269,13 @@ export class ContentEditableHelper { } function compareContentToSpanElement(content: HtmlContent, node: HTMLElement): boolean { - const contentColor = content.color ? toHex(content.color) : ""; - const nodeColor = node.style?.color ? toHex(node.style.color) : ""; + const contentColor = content.color || ""; + const nodeColor = node.style?.color || ""; + const nodeOpacity = node.style?.opacity || "1"; const sameColor = contentColor === nodeColor; const sameClass = deepEquals(content.classes, [...node.classList]); const sameContent = node.innerText === content.value; - return sameColor && sameClass && sameContent; + const sameOpacity = (content.opacity ?? 1).toString() === nodeOpacity; + return sameColor && sameClass && sameContent && sameOpacity; } diff --git a/src/components/composer/formula_assistant/formula_assistant.css b/src/components/composer/formula_assistant/formula_assistant.css index d1090c35d4..d5cbe184c0 100644 --- a/src/components/composer/formula_assistant/formula_assistant.css +++ b/src/components/composer/formula_assistant/formula_assistant.css @@ -1,5 +1,4 @@ .o-spreadsheet .o-formula-assistant { - background: #ffffff; .o-formula-assistant-head { background-color: var(--os-composer-assistant-background); padding: 10px; @@ -17,7 +16,7 @@ text-shadow: 0px 0px 1px var(--os-composer-assistant-color); } div:last-child { - color: black; + color: var(--os-black); } } .o-formula-assistant-gray { diff --git a/src/components/composer/formula_assistant/formula_assistant.xml b/src/components/composer/formula_assistant/formula_assistant.xml index 0bbeaafc7a..50557be77f 100644 --- a/src/components/composer/formula_assistant/formula_assistant.xml +++ b/src/components/composer/formula_assistant/formula_assistant.xml @@ -2,7 +2,7 @@
-
+
diff --git a/src/components/composer/grid_composer/grid_composer.css b/src/components/composer/grid_composer/grid_composer.css index bdea36a2f3..7254469279 100644 --- a/src/components/composer/grid_composer/grid_composer.css +++ b/src/components/composer/grid_composer/grid_composer.css @@ -1,5 +1,6 @@ .o-spreadsheet { div.o-grid-composer { + color-scheme: light; z-index: var(--os-components-importance-grid-composer); position: absolute; font-family: var(--os-default-font); diff --git a/src/components/composer/speech_bubble/speech_bubble.css b/src/components/composer/speech_bubble/speech_bubble.css index a6b2041cde..13064a25e8 100644 --- a/src/components/composer/speech_bubble/speech_bubble.css +++ b/src/components/composer/speech_bubble/speech_bubble.css @@ -1,6 +1,6 @@ .o-spreadsheet { .o-speech-bubble { - background-color: white; + background-color: var(--os-white-bg); box-sizing: border-box; box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); border: 1px solid var(--os-gray-400); @@ -11,7 +11,7 @@ position: absolute; top: 100%; left: 50%; - background-color: white; + background-color: var(--os-white-bg); height: var(--os-bubble-arrow-size); width: var(--os-bubble-arrow-size); transform-origin: top left; diff --git a/src/components/error_tooltip/error_tooltip.css b/src/components/error_tooltip/error_tooltip.css index e1fcc6539b..56eaee2960 100644 --- a/src/components/error_tooltip/error_tooltip.css +++ b/src/components/error_tooltip/error_tooltip.css @@ -1,7 +1,6 @@ .o-spreadsheet { .o-error-tooltip { font-size: 13px; - background-color: white; border-left: 3px solid red; padding: 10px; overflow-wrap: break-word; diff --git a/src/components/error_tooltip/error_tooltip.xml b/src/components/error_tooltip/error_tooltip.xml index 4f60336b28..6b297310ea 100644 --- a/src/components/error_tooltip/error_tooltip.xml +++ b/src/components/error_tooltip/error_tooltip.xml @@ -1,6 +1,6 @@ -
+
Error
diff --git a/src/components/figures/chart/chart_dashboard_menu/chart_dashboard_menu.css b/src/components/figures/chart/chart_dashboard_menu/chart_dashboard_menu.css index 731ea36e10..240761bb6e 100644 --- a/src/components/figures/chart/chart_dashboard_menu/chart_dashboard_menu.css +++ b/src/components/figures/chart/chart_dashboard_menu/chart_dashboard_menu.css @@ -14,7 +14,7 @@ &:hover, &:target { color: var(--os-gray-900) !important; - background: rgba(0, 0, 0, 0.1); + background: var(--os-background-gray-color-hover); } .o-chart-preview { diff --git a/src/components/figures/figure/figure.css b/src/components/figures/figure/figure.css index d3754e5e26..e97a198455 100644 --- a/src/components/figures/figure/figure.css +++ b/src/components/figures/figure/figure.css @@ -1,5 +1,8 @@ .o-spreadsheet { div.o-figure { + color-scheme: light; + color: var(--os-text-body); + position: absolute; width: 100%; height: 100%; diff --git a/src/components/font_size_editor/font_size_editor.css b/src/components/font_size_editor/font_size_editor.css index c3336b5f4a..74382d3e43 100644 --- a/src/components/font_size_editor/font_size_editor.css +++ b/src/components/font_size_editor/font_size_editor.css @@ -14,7 +14,7 @@ line-height: 26px; padding: 3px 12px; &:hover { - background-color: rgba(0, 0, 0, 0.08); + background-color: var(--os-background-gray-color-hover); } } } diff --git a/src/components/icon_picker/icon_picker.css b/src/components/icon_picker/icon_picker.css index 3d3cb33339..823371c987 100644 --- a/src/components/icon_picker/icon_picker.css +++ b/src/components/icon_picker/icon_picker.css @@ -2,7 +2,6 @@ .o-icon-picker { position: absolute; box-shadow: 1px 2px 5px 2px rgba(51, 51, 51, 0.15); - background-color: white; padding: 2px 1px; z-index: var(--os-components-importance-icon-picker); } diff --git a/src/components/icon_picker/icon_picker.xml b/src/components/icon_picker/icon_picker.xml index 3d7bad8f1f..e762b1fdae 100644 --- a/src/components/icon_picker/icon_picker.xml +++ b/src/components/icon_picker/icon_picker.xml @@ -1,6 +1,6 @@ -
+
@@ -1048,4 +1049,9 @@ /> + +
+ +
+
diff --git a/src/components/link/link_display/link_display.css b/src/components/link/link_display/link_display.css index 70ecd04b6e..c91fd48d7a 100644 --- a/src/components/link/link_display/link_display.css +++ b/src/components/link/link_display/link_display.css @@ -1,7 +1,6 @@ .o-spreadsheet { .o-link-tool { font-size: 13px; - background-color: white; box-shadow: 0 1px 4px 3px rgba(60, 64, 67, 0.15); padding: 6px 12px; border-radius: 4px; @@ -42,6 +41,6 @@ } .o-link-icon:hover { cursor: pointer; - color: #000; + color: var(--os-black); } } diff --git a/src/components/link/link_display/link_display.xml b/src/components/link/link_display/link_display.xml index 380910b166..7266003825 100644 --- a/src/components/link/link_display/link_display.xml +++ b/src/components/link/link_display/link_display.xml @@ -1,6 +1,6 @@ -