@rowsncolumns/spreadsheet 10.2.74 → 10.2.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/excel-validation-kinds.d.ts +71 -0
- package/dist/cjs/api/excel-validation-kinds.d.ts.map +1 -0
- package/dist/cjs/api/excel-validation-kinds.js +304 -0
- package/dist/cjs/api/go-to-special.d.ts +32 -0
- package/dist/cjs/api/go-to-special.d.ts.map +1 -0
- package/dist/cjs/api/go-to-special.js +111 -0
- package/dist/cjs/api/validation-tooltip.d.ts +17 -0
- package/dist/cjs/api/validation-tooltip.d.ts.map +1 -0
- package/dist/cjs/api/validation-tooltip.js +42 -0
- package/dist/cjs/atoms/advanced-filter-dialog.atom.d.ts +28 -0
- package/dist/cjs/atoms/advanced-filter-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/advanced-filter-dialog.atom.js +32 -0
- package/dist/cjs/atoms/go-to-dialog.atom.d.ts +11 -1
- package/dist/cjs/atoms/go-to-dialog.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/goal-seek-dialog.atom.d.ts +29 -0
- package/dist/cjs/atoms/goal-seek-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/goal-seek-dialog.atom.js +30 -0
- package/dist/cjs/atoms/index.d.ts +1 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +1 -0
- package/dist/cjs/atoms/subtotal-dialog.atom.d.ts +39 -0
- package/dist/cjs/atoms/subtotal-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/subtotal-dialog.atom.js +30 -0
- package/dist/cjs/atoms/text-to-columns-dialog.atom.d.ts +34 -0
- package/dist/cjs/atoms/text-to-columns-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/text-to-columns-dialog.atom.js +36 -0
- package/dist/cjs/atoms/watch-window.atom.d.ts +37 -0
- package/dist/cjs/atoms/watch-window.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/watch-window.atom.js +61 -0
- package/dist/cjs/components/advanced-filter-dialog/index.d.ts +28 -0
- package/dist/cjs/components/advanced-filter-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/advanced-filter-dialog/index.js +134 -0
- package/dist/cjs/components/calculation-options-dialog/index.d.ts +33 -0
- package/dist/cjs/components/calculation-options-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/calculation-options-dialog/index.js +69 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +104 -21
- package/dist/cjs/components/canvas-grid/typings.d.ts +19 -2
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/alignment.d.ts +30 -0
- package/dist/cjs/components/cell/alignment.d.ts.map +1 -1
- package/dist/cjs/components/cell/alignment.js +56 -1
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +15 -7
- package/dist/cjs/components/cell-diff/index.d.ts +3 -2
- package/dist/cjs/components/cell-diff/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +2 -1
- package/dist/cjs/components/context-menu/index.d.ts +6 -1
- package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
- package/dist/cjs/components/context-menu/index.js +146 -3
- package/dist/cjs/components/embeds/embed-component.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-component.js +16 -1
- package/dist/cjs/components/go-to-dialog/index.d.ts +11 -1
- package/dist/cjs/components/go-to-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/go-to-dialog/index.js +67 -24
- package/dist/cjs/components/goal-seek-dialog/index.d.ts +32 -0
- package/dist/cjs/components/goal-seek-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/goal-seek-dialog/index.js +149 -0
- package/dist/cjs/components/subtotal-dialog/index.d.ts +30 -0
- package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/subtotal-dialog/index.js +126 -0
- package/dist/cjs/components/text-to-columns-dialog/index.d.ts +37 -0
- package/dist/cjs/components/text-to-columns-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/text-to-columns-dialog/index.js +166 -0
- package/dist/cjs/components/toolbar/background-color-selector.d.ts +13 -1
- package/dist/cjs/components/toolbar/background-color-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/background-color-selector.js +57 -11
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts +15 -2
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/cell-style-selector.js +56 -3
- package/dist/cjs/components/toolbar/fill-selectors.d.ts +49 -0
- package/dist/cjs/components/toolbar/fill-selectors.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/fill-selectors.js +196 -0
- package/dist/cjs/components/toolbar/index.d.ts +1 -0
- package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/index.js +1 -0
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts +8 -0
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.js +23 -4
- package/dist/cjs/components/watch-window/index.d.ts +25 -0
- package/dist/cjs/components/watch-window/index.d.ts.map +1 -0
- package/dist/cjs/components/watch-window/index.js +63 -0
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +17 -6
- package/dist/cjs/hooks/use-get-tooltip.d.ts.map +1 -1
- package/dist/cjs/hooks/use-get-tooltip.js +7 -2
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +24 -12
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +117 -4
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +19 -1
- package/dist/esm/api/excel-validation-kinds.d.ts +71 -0
- package/dist/esm/api/excel-validation-kinds.d.ts.map +1 -0
- package/dist/esm/api/excel-validation-kinds.js +287 -0
- package/dist/esm/api/go-to-special.d.ts +32 -0
- package/dist/esm/api/go-to-special.d.ts.map +1 -0
- package/dist/esm/api/go-to-special.js +96 -0
- package/dist/esm/api/validation-tooltip.d.ts +17 -0
- package/dist/esm/api/validation-tooltip.d.ts.map +1 -0
- package/dist/esm/api/validation-tooltip.js +34 -0
- package/dist/esm/atoms/advanced-filter-dialog.atom.d.ts +28 -0
- package/dist/esm/atoms/advanced-filter-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/advanced-filter-dialog.atom.js +21 -0
- package/dist/esm/atoms/go-to-dialog.atom.d.ts +11 -1
- package/dist/esm/atoms/go-to-dialog.atom.d.ts.map +1 -1
- package/dist/esm/atoms/goal-seek-dialog.atom.d.ts +29 -0
- package/dist/esm/atoms/goal-seek-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/goal-seek-dialog.atom.js +21 -0
- package/dist/esm/atoms/index.d.ts +1 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +1 -0
- package/dist/esm/atoms/subtotal-dialog.atom.d.ts +39 -0
- package/dist/esm/atoms/subtotal-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/subtotal-dialog.atom.js +21 -0
- package/dist/esm/atoms/text-to-columns-dialog.atom.d.ts +34 -0
- package/dist/esm/atoms/text-to-columns-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/text-to-columns-dialog.atom.js +25 -0
- package/dist/esm/atoms/watch-window.atom.d.ts +37 -0
- package/dist/esm/atoms/watch-window.atom.d.ts.map +1 -0
- package/dist/esm/atoms/watch-window.atom.js +37 -0
- package/dist/esm/components/advanced-filter-dialog/index.d.ts +28 -0
- package/dist/esm/components/advanced-filter-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/advanced-filter-dialog/index.js +125 -0
- package/dist/esm/components/calculation-options-dialog/index.d.ts +33 -0
- package/dist/esm/components/calculation-options-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/calculation-options-dialog/index.js +61 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +99 -20
- package/dist/esm/components/canvas-grid/typings.d.ts +19 -2
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/alignment.d.ts +30 -0
- package/dist/esm/components/cell/alignment.d.ts.map +1 -1
- package/dist/esm/components/cell/alignment.js +51 -0
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +16 -8
- package/dist/esm/components/cell-diff/index.d.ts +3 -2
- package/dist/esm/components/cell-diff/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +2 -1
- package/dist/esm/components/context-menu/index.d.ts +6 -1
- package/dist/esm/components/context-menu/index.d.ts.map +1 -1
- package/dist/esm/components/context-menu/index.js +139 -4
- package/dist/esm/components/embeds/embed-component.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-component.js +17 -1
- package/dist/esm/components/go-to-dialog/index.d.ts +11 -1
- package/dist/esm/components/go-to-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/go-to-dialog/index.js +63 -23
- package/dist/esm/components/goal-seek-dialog/index.d.ts +32 -0
- package/dist/esm/components/goal-seek-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/goal-seek-dialog/index.js +125 -0
- package/dist/esm/components/subtotal-dialog/index.d.ts +30 -0
- package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/subtotal-dialog/index.js +115 -0
- package/dist/esm/components/text-to-columns-dialog/index.d.ts +37 -0
- package/dist/esm/components/text-to-columns-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/text-to-columns-dialog/index.js +147 -0
- package/dist/esm/components/toolbar/background-color-selector.d.ts +13 -1
- package/dist/esm/components/toolbar/background-color-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/background-color-selector.js +61 -11
- package/dist/esm/components/toolbar/cell-style-selector.d.ts +15 -2
- package/dist/esm/components/toolbar/cell-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/cell-style-selector.js +46 -2
- package/dist/esm/components/toolbar/fill-selectors.d.ts +49 -0
- package/dist/esm/components/toolbar/fill-selectors.d.ts.map +1 -0
- package/dist/esm/components/toolbar/fill-selectors.js +162 -0
- package/dist/esm/components/toolbar/index.d.ts +1 -0
- package/dist/esm/components/toolbar/index.d.ts.map +1 -1
- package/dist/esm/components/toolbar/index.js +1 -0
- package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts +8 -0
- package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/text-horizontal-align-selector.js +21 -5
- package/dist/esm/components/watch-window/index.d.ts +25 -0
- package/dist/esm/components/watch-window/index.d.ts.map +1 -0
- package/dist/esm/components/watch-window/index.js +54 -0
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +17 -6
- package/dist/esm/hooks/use-get-tooltip.d.ts.map +1 -1
- package/dist/esm/hooks/use-get-tooltip.js +7 -2
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +24 -12
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +8 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +117 -4
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +18 -0
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { CellFormat, FillPattern, GradientFill } from "../../types";
|
|
3
|
+
import type { SpreadsheetTheme } from "../canvas-grid/typings";
|
|
4
|
+
/** The fill-related slice of a cell format the fill popover authors. */
|
|
5
|
+
export type CellFill = Pick<CellFormat, "backgroundColor" | "fillPattern" | "foregroundColor" | "gradient">;
|
|
6
|
+
/** Excel's Format Cells → Fill → Pattern Style menu, in Excel's order. */
|
|
7
|
+
export declare const FILL_PATTERN_OPTIONS: ReadonlyArray<{
|
|
8
|
+
pattern: FillPattern;
|
|
9
|
+
label: string;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Excel's Fill Effects → Shading styles. `degree` follows OOXML
|
|
13
|
+
* `<gradientFill degree>`: 0 runs left → right, 90 top → bottom.
|
|
14
|
+
*/
|
|
15
|
+
export declare const GRADIENT_PRESETS: ReadonlyArray<{
|
|
16
|
+
label: string;
|
|
17
|
+
gradient: Omit<GradientFill, "stops">;
|
|
18
|
+
}>;
|
|
19
|
+
/** Two-stop gradient from a preset and two colours. */
|
|
20
|
+
export declare const buildGradientFill: (preset: Omit<GradientFill, "stops">, color1: string, color2: string) => GradientFill;
|
|
21
|
+
/**
|
|
22
|
+
* CSS preview of a gradient fill. OOXML measures the linear angle from the
|
|
23
|
+
* left→right axis; CSS from the bottom→top axis, so CSS = degree + 90.
|
|
24
|
+
*/
|
|
25
|
+
export declare const gradientToCss: (gradient: GradientFill) => string;
|
|
26
|
+
export type PatternFillPickerProps = {
|
|
27
|
+
fill?: CellFill | null;
|
|
28
|
+
theme: SpreadsheetTheme;
|
|
29
|
+
onChangeFill(fill: CellFill): void;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Pattern fill authoring (Excel: Format Cells → Fill → Pattern Color /
|
|
33
|
+
* Pattern Style). The pattern paints in `foregroundColor` over the solid
|
|
34
|
+
* `backgroundColor`; a gradient on the cell is cleared, as Excel treats the
|
|
35
|
+
* two as exclusive.
|
|
36
|
+
*/
|
|
37
|
+
export declare const PatternFillPicker: ({ fill, theme, onChangeFill, }: PatternFillPickerProps) => React.JSX.Element;
|
|
38
|
+
export type GradientFillPickerProps = {
|
|
39
|
+
fill?: CellFill | null;
|
|
40
|
+
theme: SpreadsheetTheme;
|
|
41
|
+
onChangeFill(fill: CellFill): void;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Gradient fill authoring (Excel: Fill Effects → Gradient, two colours +
|
|
45
|
+
* shading style). Picking a style applies immediately with the two colours;
|
|
46
|
+
* changing a colour re-applies when the cell already has a gradient.
|
|
47
|
+
*/
|
|
48
|
+
export declare const GradientFillPicker: ({ fill, theme, onChangeFill, }: GradientFillPickerProps) => React.JSX.Element;
|
|
49
|
+
//# sourceMappingURL=fill-selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill-selectors.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/fill-selectors.tsx"],"names":[],"mappings":"AACA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAIjD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,wEAAwE;AACxE,MAAM,MAAM,QAAQ,GAAG,IAAI,CACzB,UAAU,EACV,iBAAiB,GAAG,aAAa,GAAG,iBAAiB,GAAG,UAAU,CACnE,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC;IAC/C,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf,CAkBA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;CACvC,CASA,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EACnC,QAAQ,MAAM,EACd,QAAQ,MAAM,KACb,YAMD,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,UAAU,YAAY,KAAG,MAUtD,CAAC;AAqCF,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,gCAI/B,sBAAsB,sBA+ExB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;CACpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,gCAIhC,uBAAuB,sBA8FzB,CAAC"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GradientFillPicker = exports.PatternFillPicker = exports.gradientToCss = exports.buildGradientFill = exports.GRADIENT_PRESETS = exports.FILL_PATTERN_OPTIONS = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
6
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
var fill_patterns_1 = require("../../api/fill-patterns");
|
|
8
|
+
var themes_1 = require("../../themes");
|
|
9
|
+
/** Excel's Format Cells → Fill → Pattern Style menu, in Excel's order. */
|
|
10
|
+
exports.FILL_PATTERN_OPTIONS = [
|
|
11
|
+
{ pattern: "gray0625", label: "6.25% Gray" },
|
|
12
|
+
{ pattern: "gray125", label: "12.5% Gray" },
|
|
13
|
+
{ pattern: "lightGray", label: "25% Gray" },
|
|
14
|
+
{ pattern: "mediumGray", label: "50% Gray" },
|
|
15
|
+
{ pattern: "darkGray", label: "75% Gray" },
|
|
16
|
+
{ pattern: "darkHorizontal", label: "Horizontal Stripe" },
|
|
17
|
+
{ pattern: "darkVertical", label: "Vertical Stripe" },
|
|
18
|
+
{ pattern: "darkDown", label: "Reverse Diagonal Stripe" },
|
|
19
|
+
{ pattern: "darkUp", label: "Diagonal Stripe" },
|
|
20
|
+
{ pattern: "darkGrid", label: "Diagonal Crosshatch" },
|
|
21
|
+
{ pattern: "darkTrellis", label: "Thick Diagonal Crosshatch" },
|
|
22
|
+
{ pattern: "lightHorizontal", label: "Thin Horizontal Stripe" },
|
|
23
|
+
{ pattern: "lightVertical", label: "Thin Vertical Stripe" },
|
|
24
|
+
{ pattern: "lightDown", label: "Thin Reverse Diagonal Stripe" },
|
|
25
|
+
{ pattern: "lightUp", label: "Thin Diagonal Stripe" },
|
|
26
|
+
{ pattern: "lightGrid", label: "Thin Horizontal Crosshatch" },
|
|
27
|
+
{ pattern: "lightTrellis", label: "Thin Diagonal Crosshatch" },
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Excel's Fill Effects → Shading styles. `degree` follows OOXML
|
|
31
|
+
* `<gradientFill degree>`: 0 runs left → right, 90 top → bottom.
|
|
32
|
+
*/
|
|
33
|
+
exports.GRADIENT_PRESETS = [
|
|
34
|
+
{ label: "Horizontal", gradient: { type: "linear", degree: 90 } },
|
|
35
|
+
{ label: "Vertical", gradient: { type: "linear", degree: 0 } },
|
|
36
|
+
{ label: "Diagonal up", gradient: { type: "linear", degree: 45 } },
|
|
37
|
+
{ label: "Diagonal down", gradient: { type: "linear", degree: 135 } },
|
|
38
|
+
{
|
|
39
|
+
label: "From center",
|
|
40
|
+
gradient: { type: "path", left: 0.5, right: 0.5, top: 0.5, bottom: 0.5 },
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
/** Two-stop gradient from a preset and two colours. */
|
|
44
|
+
var buildGradientFill = function (preset, color1, color2) { return (tslib_1.__assign(tslib_1.__assign({}, preset), { stops: [
|
|
45
|
+
{ position: 0, color: color1 },
|
|
46
|
+
{ position: 1, color: color2 },
|
|
47
|
+
] })); };
|
|
48
|
+
exports.buildGradientFill = buildGradientFill;
|
|
49
|
+
/**
|
|
50
|
+
* CSS preview of a gradient fill. OOXML measures the linear angle from the
|
|
51
|
+
* left→right axis; CSS from the bottom→top axis, so CSS = degree + 90.
|
|
52
|
+
*/
|
|
53
|
+
var gradientToCss = function (gradient) {
|
|
54
|
+
var _a;
|
|
55
|
+
var stops = gradient.stops
|
|
56
|
+
.slice()
|
|
57
|
+
.sort(function (a, b) { return a.position - b.position; })
|
|
58
|
+
.map(function (stop) { return "".concat(stop.color, " ").concat(Math.round(stop.position * 100), "%"); })
|
|
59
|
+
.join(", ");
|
|
60
|
+
if (gradient.type === "path") {
|
|
61
|
+
return "radial-gradient(circle, ".concat(stops, ")");
|
|
62
|
+
}
|
|
63
|
+
return "linear-gradient(".concat((((_a = gradient.degree) !== null && _a !== void 0 ? _a : 0) + 90) % 360, "deg, ").concat(stops, ")");
|
|
64
|
+
};
|
|
65
|
+
exports.gradientToCss = gradientToCss;
|
|
66
|
+
var DEFAULT_PATTERN_COLOR = "#000000";
|
|
67
|
+
var PatternSwatch = function (_a) {
|
|
68
|
+
var pattern = _a.pattern, foregroundColor = _a.foregroundColor, backgroundColor = _a.backgroundColor, label = _a.label;
|
|
69
|
+
var url = (0, react_1.useMemo)(function () {
|
|
70
|
+
var _a;
|
|
71
|
+
var canvas = (0, fill_patterns_1.getPatternCanvas)(pattern, foregroundColor, backgroundColor);
|
|
72
|
+
try {
|
|
73
|
+
return (_a = canvas === null || canvas === void 0 ? void 0 : canvas.toDataURL()) !== null && _a !== void 0 ? _a : undefined;
|
|
74
|
+
}
|
|
75
|
+
catch (_b) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
}, [pattern, foregroundColor, backgroundColor]);
|
|
79
|
+
return (react_1.default.createElement("span", { "aria-hidden": "true", className: "block w-full h-full border border-solid border-rnc-border", style: url
|
|
80
|
+
? { backgroundImage: "url(".concat(url, ")"), backgroundRepeat: "repeat" }
|
|
81
|
+
: { backgroundColor: backgroundColor }, title: label }));
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Pattern fill authoring (Excel: Format Cells → Fill → Pattern Color /
|
|
85
|
+
* Pattern Style). The pattern paints in `foregroundColor` over the solid
|
|
86
|
+
* `backgroundColor`; a gradient on the cell is cleared, as Excel treats the
|
|
87
|
+
* two as exclusive.
|
|
88
|
+
*/
|
|
89
|
+
var PatternFillPicker = function (_a) {
|
|
90
|
+
var fill = _a.fill, theme = _a.theme, onChangeFill = _a.onChangeFill;
|
|
91
|
+
var background = (fill === null || fill === void 0 ? void 0 : fill.backgroundColor)
|
|
92
|
+
? (0, themes_1.getStringifiedColor)(fill.backgroundColor, theme)
|
|
93
|
+
: undefined;
|
|
94
|
+
var patternColor = (fill === null || fill === void 0 ? void 0 : fill.foregroundColor)
|
|
95
|
+
? (0, themes_1.getStringifiedColor)(fill.foregroundColor, theme)
|
|
96
|
+
: DEFAULT_PATTERN_COLOR;
|
|
97
|
+
var activePattern = (fill === null || fill === void 0 ? void 0 : fill.fillPattern) &&
|
|
98
|
+
fill.fillPattern !== "none" &&
|
|
99
|
+
fill.fillPattern !== "solid"
|
|
100
|
+
? fill.fillPattern
|
|
101
|
+
: undefined;
|
|
102
|
+
var apply = function (pattern, foregroundColor) {
|
|
103
|
+
var _a;
|
|
104
|
+
return onChangeFill({
|
|
105
|
+
backgroundColor: (_a = fill === null || fill === void 0 ? void 0 : fill.backgroundColor) !== null && _a !== void 0 ? _a : undefined,
|
|
106
|
+
fillPattern: pattern,
|
|
107
|
+
foregroundColor: pattern ? foregroundColor : undefined,
|
|
108
|
+
gradient: undefined,
|
|
109
|
+
});
|
|
110
|
+
};
|
|
111
|
+
return (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1" },
|
|
112
|
+
react_1.default.createElement(ui_1.Button, { variant: "outline", size: "xs", tabIndex: -1, className: "justify-center py-1", onClick: function () { return apply(undefined, undefined); } }, "No pattern"),
|
|
113
|
+
react_1.default.createElement("div", { className: "pt-2 text-xs text-left" }, "Pattern style"),
|
|
114
|
+
react_1.default.createElement("div", { role: "group", "aria-label": "Pattern style", className: "grid grid-cols-6 gap-1" }, exports.FILL_PATTERN_OPTIONS.map(function (_a) {
|
|
115
|
+
var pattern = _a.pattern, label = _a.label;
|
|
116
|
+
return (react_1.default.createElement("button", { type: "button", key: pattern, "aria-label": label, "aria-pressed": activePattern === pattern, className: "w-6 h-6 p-0 border-2 border-solid rounded-sm bg-transparent cursor-pointer ".concat(activePattern === pattern
|
|
117
|
+
? "border-rnc-primary"
|
|
118
|
+
: "border-transparent"), onClick: function () {
|
|
119
|
+
return apply(pattern, (fill === null || fill === void 0 ? void 0 : fill.foregroundColor) ? patternColor : undefined);
|
|
120
|
+
} },
|
|
121
|
+
react_1.default.createElement(PatternSwatch, { pattern: pattern, foregroundColor: patternColor, backgroundColor: background, label: label })));
|
|
122
|
+
})),
|
|
123
|
+
react_1.default.createElement("div", { className: "pt-2 text-xs text-left" }, "Pattern color"),
|
|
124
|
+
react_1.default.createElement(ui_1.ColorPicker, { value: patternColor, colors: themes_1.STANDARD_COLORS, onChange: function (color) { return apply(activePattern !== null && activePattern !== void 0 ? activePattern : "darkGray", color); }, className: "gap-1" }),
|
|
125
|
+
react_1.default.createElement("div", { className: "flex items-center gap-1" },
|
|
126
|
+
react_1.default.createElement(ui_1.HexColorPicker, { value: patternColor, onChange: function (color) { return apply(activePattern !== null && activePattern !== void 0 ? activePattern : "darkGray", color); } }))));
|
|
127
|
+
};
|
|
128
|
+
exports.PatternFillPicker = PatternFillPicker;
|
|
129
|
+
/**
|
|
130
|
+
* Gradient fill authoring (Excel: Fill Effects → Gradient, two colours +
|
|
131
|
+
* shading style). Picking a style applies immediately with the two colours;
|
|
132
|
+
* changing a colour re-applies when the cell already has a gradient.
|
|
133
|
+
*/
|
|
134
|
+
var GradientFillPicker = function (_a) {
|
|
135
|
+
var _b;
|
|
136
|
+
var fill = _a.fill, theme = _a.theme, onChangeFill = _a.onChangeFill;
|
|
137
|
+
var existing = (_b = fill === null || fill === void 0 ? void 0 : fill.gradient) !== null && _b !== void 0 ? _b : undefined;
|
|
138
|
+
var _c = tslib_1.__read((0, react_1.useState)(function () {
|
|
139
|
+
var _a, _b, _c;
|
|
140
|
+
return (_c = (_b = (_a = existing === null || existing === void 0 ? void 0 : existing.stops) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.color) !== null && _c !== void 0 ? _c : ((fill === null || fill === void 0 ? void 0 : fill.backgroundColor)
|
|
141
|
+
? (0, themes_1.getStringifiedColor)(fill.backgroundColor, theme)
|
|
142
|
+
: "#FFFFFF");
|
|
143
|
+
}), 2), color1 = _c[0], setColor1 = _c[1];
|
|
144
|
+
var _d = tslib_1.__read((0, react_1.useState)(function () { var _a, _b, _c; return (_c = (_b = (_a = existing === null || existing === void 0 ? void 0 : existing.stops) === null || _a === void 0 ? void 0 : _a[existing.stops.length - 1]) === null || _b === void 0 ? void 0 : _b.color) !== null && _c !== void 0 ? _c : "#4472C4"; }), 2), color2 = _d[0], setColor2 = _d[1];
|
|
145
|
+
var apply = function (preset, c1, c2) {
|
|
146
|
+
if (c1 === void 0) { c1 = color1; }
|
|
147
|
+
if (c2 === void 0) { c2 = color2; }
|
|
148
|
+
return onChangeFill({
|
|
149
|
+
backgroundColor: undefined,
|
|
150
|
+
fillPattern: undefined,
|
|
151
|
+
foregroundColor: undefined,
|
|
152
|
+
gradient: (0, exports.buildGradientFill)(preset, c1, c2),
|
|
153
|
+
});
|
|
154
|
+
};
|
|
155
|
+
var reapply = function (c1, c2) {
|
|
156
|
+
if (!existing)
|
|
157
|
+
return;
|
|
158
|
+
var _stops = existing.stops, preset = tslib_1.__rest(existing, ["stops"]);
|
|
159
|
+
apply(preset, c1, c2);
|
|
160
|
+
};
|
|
161
|
+
var isActive = function (preset) {
|
|
162
|
+
var _a, _b;
|
|
163
|
+
return !!existing &&
|
|
164
|
+
existing.type === preset.type &&
|
|
165
|
+
(preset.type === "path" || ((_a = existing.degree) !== null && _a !== void 0 ? _a : 0) === ((_b = preset.degree) !== null && _b !== void 0 ? _b : 0));
|
|
166
|
+
};
|
|
167
|
+
return (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1" },
|
|
168
|
+
react_1.default.createElement(ui_1.Button, { variant: "outline", size: "xs", tabIndex: -1, className: "justify-center py-1", onClick: function () {
|
|
169
|
+
var _a, _b, _c;
|
|
170
|
+
return onChangeFill({
|
|
171
|
+
backgroundColor: (_a = fill === null || fill === void 0 ? void 0 : fill.backgroundColor) !== null && _a !== void 0 ? _a : undefined,
|
|
172
|
+
fillPattern: (_b = fill === null || fill === void 0 ? void 0 : fill.fillPattern) !== null && _b !== void 0 ? _b : undefined,
|
|
173
|
+
foregroundColor: (_c = fill === null || fill === void 0 ? void 0 : fill.foregroundColor) !== null && _c !== void 0 ? _c : undefined,
|
|
174
|
+
gradient: undefined,
|
|
175
|
+
});
|
|
176
|
+
} }, "No gradient"),
|
|
177
|
+
react_1.default.createElement("div", { className: "grid grid-cols-[auto_1fr] items-center gap-2 pt-2 text-xs" },
|
|
178
|
+
react_1.default.createElement("span", null, "Color 1"),
|
|
179
|
+
react_1.default.createElement(ui_1.HexColorPicker, { value: color1, onChange: function (color) {
|
|
180
|
+
setColor1(color);
|
|
181
|
+
reapply(color, color2);
|
|
182
|
+
} }),
|
|
183
|
+
react_1.default.createElement("span", null, "Color 2"),
|
|
184
|
+
react_1.default.createElement(ui_1.HexColorPicker, { value: color2, onChange: function (color) {
|
|
185
|
+
setColor2(color);
|
|
186
|
+
reapply(color1, color);
|
|
187
|
+
} })),
|
|
188
|
+
react_1.default.createElement("div", { className: "pt-2 text-xs text-left" }, "Shading style"),
|
|
189
|
+
react_1.default.createElement("div", { role: "group", "aria-label": "Shading style", className: "grid grid-cols-5 gap-1" }, exports.GRADIENT_PRESETS.map(function (_a) {
|
|
190
|
+
var label = _a.label, gradient = _a.gradient;
|
|
191
|
+
return (react_1.default.createElement("button", { type: "button", key: label, "aria-label": label, "aria-pressed": isActive(gradient), className: "w-8 h-6 p-0 border-2 border-solid rounded-sm cursor-pointer ".concat(isActive(gradient) ? "border-rnc-primary" : "border-rnc-border"), style: {
|
|
192
|
+
backgroundImage: (0, exports.gradientToCss)((0, exports.buildGradientFill)(gradient, color1, color2)),
|
|
193
|
+
}, onClick: function () { return apply(gradient); } }));
|
|
194
|
+
}))));
|
|
195
|
+
};
|
|
196
|
+
exports.GradientFillPicker = GradientFillPicker;
|
|
@@ -4,6 +4,7 @@ export * from "./scale-selector";
|
|
|
4
4
|
export * from "./font-size-selector";
|
|
5
5
|
export * from "./text-color-selector";
|
|
6
6
|
export * from "./background-color-selector";
|
|
7
|
+
export * from "./fill-selectors";
|
|
7
8
|
export * from "./merge-cells-selector";
|
|
8
9
|
export * from "./border-selector";
|
|
9
10
|
export * from "./font-family-selector";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/index.tsx"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/index.tsx"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
|
|
@@ -7,6 +7,7 @@ tslib_1.__exportStar(require("./scale-selector"), exports);
|
|
|
7
7
|
tslib_1.__exportStar(require("./font-size-selector"), exports);
|
|
8
8
|
tslib_1.__exportStar(require("./text-color-selector"), exports);
|
|
9
9
|
tslib_1.__exportStar(require("./background-color-selector"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./fill-selectors"), exports);
|
|
10
11
|
tslib_1.__exportStar(require("./merge-cells-selector"), exports);
|
|
11
12
|
tslib_1.__exportStar(require("./border-selector"), exports);
|
|
12
13
|
tslib_1.__exportStar(require("./font-family-selector"), exports);
|
|
@@ -5,6 +5,14 @@ type TextHorizontalAlignSelectorProps = {
|
|
|
5
5
|
value: HorizontalAlign | undefined | null;
|
|
6
6
|
onChange(value: HorizontalAlign): void;
|
|
7
7
|
};
|
|
8
|
+
/**
|
|
9
|
+
* Excel's remaining Format Cells → Alignment → Horizontal entries. They have
|
|
10
|
+
* no toolbar glyph, so they render as labelled buttons under the icon row.
|
|
11
|
+
*/
|
|
12
|
+
export declare const EXTENDED_HORIZONTAL_ALIGNMENTS: ReadonlyArray<{
|
|
13
|
+
value: HorizontalAlign;
|
|
14
|
+
label: string;
|
|
15
|
+
}>;
|
|
8
16
|
export declare const TextHorizontalAlignSelector: ({ value, onChange, disabled, }: TextHorizontalAlignSelectorProps) => React.JSX.Element;
|
|
9
17
|
export {};
|
|
10
18
|
//# sourceMappingURL=text-horizontal-align-selector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-horizontal-align-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/text-horizontal-align-selector.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"text-horizontal-align-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/text-horizontal-align-selector.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,KAAK,gCAAgC,GAAG;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,EAAE,aAAa,CAAC;IACzD,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,CAGA,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,gCAIzC,gCAAgC,sBA6FlC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TextHorizontalAlignSelector = void 0;
|
|
3
|
+
exports.TextHorizontalAlignSelector = exports.EXTENDED_HORIZONTAL_ALIGNMENTS = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var icons_1 = require("@rowsncolumns/icons");
|
|
6
6
|
var ui_1 = require("@rowsncolumns/ui");
|
|
@@ -8,15 +8,28 @@ var ui_2 = require("@rowsncolumns/ui");
|
|
|
8
8
|
var ui_3 = require("@rowsncolumns/ui");
|
|
9
9
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
10
10
|
var atoms_1 = require("../../atoms");
|
|
11
|
+
/**
|
|
12
|
+
* Excel's remaining Format Cells → Alignment → Horizontal entries. They have
|
|
13
|
+
* no toolbar glyph, so they render as labelled buttons under the icon row.
|
|
14
|
+
*/
|
|
15
|
+
exports.EXTENDED_HORIZONTAL_ALIGNMENTS = [
|
|
16
|
+
{ value: "distributed", label: "Distributed" },
|
|
17
|
+
{ value: "fill", label: "Fill" },
|
|
18
|
+
];
|
|
11
19
|
var TextHorizontalAlignSelector = function (_a) {
|
|
12
20
|
var _b = _a.value, value = _b === void 0 ? "left" : _b, onChange = _a.onChange, disabled = _a.disabled;
|
|
13
21
|
var focusSheet = (0, atoms_1.useFocusSheet)();
|
|
14
22
|
var _c = tslib_1.__read((0, react_1.useState)(false), 2), isOpen = _c[0], onOpenChange = _c[1];
|
|
15
23
|
var close = function () { return onOpenChange(false); };
|
|
24
|
+
var select = function (next) {
|
|
25
|
+
onChange(next);
|
|
26
|
+
focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
|
|
27
|
+
close();
|
|
28
|
+
};
|
|
16
29
|
return (react_1.default.createElement(ui_2.Popover, { open: isOpen, onOpenChange: onOpenChange },
|
|
17
30
|
react_1.default.createElement(ui_2.PopoverTrigger, { asChild: true },
|
|
18
|
-
react_1.default.createElement(ui_1.IconButton, { size: "lg", tooltip: "Horizontal align", disabled: disabled },
|
|
19
|
-
value === "right" ? (react_1.default.createElement(icons_1.MdFormatAlignRight, null)) : value === "center" ? (react_1.default.createElement(icons_1.MdFormatAlignCenter, null)) : (react_1.default.createElement(icons_1.MdFormatAlignLeft, null)),
|
|
31
|
+
react_1.default.createElement(ui_1.IconButton, { size: "lg", tooltip: "Horizontal align", "aria-label": "Horizontal align", disabled: disabled },
|
|
32
|
+
value === "right" ? (react_1.default.createElement(icons_1.MdFormatAlignRight, null)) : value === "center" || value === "centerContinuous" ? (react_1.default.createElement(icons_1.MdFormatAlignCenter, null)) : value === "justify" || value === "distributed" ? (react_1.default.createElement(icons_1.MdFormatAlignJustify, null)) : (react_1.default.createElement(icons_1.MdFormatAlignLeft, null)),
|
|
20
33
|
react_1.default.createElement(icons_1.MdOutlineArrowDropDown, null))),
|
|
21
34
|
react_1.default.createElement(ui_2.PopoverContent, { align: "start" },
|
|
22
35
|
react_1.default.createElement(ui_3.Stack, { direction: "horizontal", className: "gap-1 max-w-[140px] flex-wrap" },
|
|
@@ -37,6 +50,12 @@ var TextHorizontalAlignSelector = function (_a) {
|
|
|
37
50
|
focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
|
|
38
51
|
close();
|
|
39
52
|
} },
|
|
40
|
-
react_1.default.createElement(icons_1.MdFormatAlignRight, null))
|
|
53
|
+
react_1.default.createElement(icons_1.MdFormatAlignRight, null)),
|
|
54
|
+
react_1.default.createElement(ui_1.IconButton, { size: "lg", tooltip: "Justify", "aria-label": "Justify", isActive: value === "justify", onClick: function () { return select("justify"); } },
|
|
55
|
+
react_1.default.createElement(icons_1.MdFormatAlignJustify, null))),
|
|
56
|
+
react_1.default.createElement(ui_3.Stack, { direction: "horizontal", className: "gap-1 pt-1 max-w-[140px]" }, exports.EXTENDED_HORIZONTAL_ALIGNMENTS.map(function (_a) {
|
|
57
|
+
var option = _a.value, label = _a.label;
|
|
58
|
+
return (react_1.default.createElement(ui_1.Button, { key: option, type: "button", variant: value === option ? "secondary" : "ghost", size: "xs", "aria-pressed": value === option, onClick: function () { return select(option); } }, label));
|
|
59
|
+
})))));
|
|
41
60
|
};
|
|
42
61
|
exports.TextHorizontalAlignSelector = TextHorizontalAlignSelector;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type WatchWindowContext, type WatchWindowEntry } from "../../atoms/watch-window.atom";
|
|
3
|
+
import type { SheetCoordinate } from "../../types";
|
|
4
|
+
export type WatchWindowProps = {
|
|
5
|
+
entries: WatchWindowEntry[];
|
|
6
|
+
context: WatchWindowContext | null;
|
|
7
|
+
onRemove(cell: SheetCoordinate): void;
|
|
8
|
+
onClose(): void;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Excel's Watch Window: a floating list of cells with their sheet, address,
|
|
12
|
+
* current value and formula, refreshed with the grid. Double-click a row to
|
|
13
|
+
* jump to the cell. Presentational; {@link WatchWindowHost} wires the atoms.
|
|
14
|
+
*/
|
|
15
|
+
export declare const WatchWindow: React.MemoExoticComponent<({ entries, context, onRemove, onClose }: WatchWindowProps) => React.JSX.Element>;
|
|
16
|
+
/**
|
|
17
|
+
* Host-mounted, atom-driven Watch Window. Mount once alongside the other
|
|
18
|
+
* dialogs; the grid's context menu offers "Add to Watch Window" while a
|
|
19
|
+
* host is mounted and republishes live getters on each render.
|
|
20
|
+
*/
|
|
21
|
+
export declare const WatchWindowHost: {
|
|
22
|
+
(): React.JSX.Element | null;
|
|
23
|
+
displayName: string;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/watch-window/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,sEACoB,gBAAgB,uBA6E3D,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;CAgB3B,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WatchWindowHost = exports.WatchWindow = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
6
|
+
var icons_1 = require("@rowsncolumns/icons");
|
|
7
|
+
var utils_1 = require("@rowsncolumns/utils");
|
|
8
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
9
|
+
var watch_window_atom_1 = require("../../atoms/watch-window.atom");
|
|
10
|
+
/**
|
|
11
|
+
* Excel's Watch Window: a floating list of cells with their sheet, address,
|
|
12
|
+
* current value and formula, refreshed with the grid. Double-click a row to
|
|
13
|
+
* jump to the cell. Presentational; {@link WatchWindowHost} wires the atoms.
|
|
14
|
+
*/
|
|
15
|
+
exports.WatchWindow = (0, react_1.memo)(function (_a) {
|
|
16
|
+
var entries = _a.entries, context = _a.context, onRemove = _a.onRemove, onClose = _a.onClose;
|
|
17
|
+
return (react_1.default.createElement("div", { role: "dialog", "aria-label": "Watch Window", className: "fixed bottom-4 right-4 z-50 w-[420px] max-w-[92vw] rounded-md border border-rnc-border bg-rnc-background text-rnc-foreground shadow-lg pointer-events-auto" },
|
|
18
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between px-3 py-2 border-b border-rnc-border" },
|
|
19
|
+
react_1.default.createElement("span", { className: "text-sm font-medium" }, "Watch Window"),
|
|
20
|
+
react_1.default.createElement(ui_1.IconButton, { "aria-label": "Close Watch Window", onClick: onClose },
|
|
21
|
+
react_1.default.createElement(icons_1.Cross1Icon, null))),
|
|
22
|
+
entries.length === 0 ? (react_1.default.createElement("div", { className: "px-3 py-4 text-xs text-rnc-foreground/60" }, "No cells are being watched. Right-click a cell \u2192 Add to Watch Window.")) : (react_1.default.createElement("table", { className: "w-full text-xs border-collapse" },
|
|
23
|
+
react_1.default.createElement("thead", null,
|
|
24
|
+
react_1.default.createElement("tr", { className: "text-left text-rnc-foreground/70" },
|
|
25
|
+
react_1.default.createElement("th", { className: "px-3 py-1 font-medium" }, "Sheet"),
|
|
26
|
+
react_1.default.createElement("th", { className: "px-2 py-1 font-medium" }, "Cell"),
|
|
27
|
+
react_1.default.createElement("th", { className: "px-2 py-1 font-medium" }, "Value"),
|
|
28
|
+
react_1.default.createElement("th", { className: "px-2 py-1 font-medium" }, "Formula"),
|
|
29
|
+
react_1.default.createElement("th", { className: "px-2 py-1" }))),
|
|
30
|
+
react_1.default.createElement("tbody", null, entries.map(function (entry) {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
var address = (_a = (0, utils_1.cellToAddress)(entry)) !== null && _a !== void 0 ? _a : "";
|
|
33
|
+
var sheetName = (_c = (_b = context === null || context === void 0 ? void 0 : context.getSheetName) === null || _b === void 0 ? void 0 : _b.call(context, entry.sheetId)) !== null && _c !== void 0 ? _c : String(entry.sheetId);
|
|
34
|
+
var value = context === null || context === void 0 ? void 0 : context.getFormattedValue(entry.sheetId, entry.rowIndex, entry.columnIndex);
|
|
35
|
+
var formula = context === null || context === void 0 ? void 0 : context.getFormula(entry.sheetId, entry.rowIndex, entry.columnIndex);
|
|
36
|
+
return (react_1.default.createElement("tr", { key: "".concat(entry.sheetId, ":").concat(entry.rowIndex, ":").concat(entry.columnIndex), className: "cursor-default hover:bg-rnc-accent", onDoubleClick: function () { return context === null || context === void 0 ? void 0 : context.onNavigate(entry); }, "data-testid": "watch-row" },
|
|
37
|
+
react_1.default.createElement("td", { className: "px-3 py-1 truncate max-w-[110px]" }, sheetName),
|
|
38
|
+
react_1.default.createElement("td", { className: "px-2 py-1 font-mono" }, address),
|
|
39
|
+
react_1.default.createElement("td", { className: "px-2 py-1 truncate max-w-[120px]" }, value !== null && value !== void 0 ? value : ""),
|
|
40
|
+
react_1.default.createElement("td", { className: "px-2 py-1 font-mono truncate max-w-[140px]" }, formula !== null && formula !== void 0 ? formula : ""),
|
|
41
|
+
react_1.default.createElement("td", { className: "px-2 py-1 text-right" },
|
|
42
|
+
react_1.default.createElement(ui_1.Button, { variant: "ghost", size: "xs", "aria-label": "Remove watch ".concat(sheetName, "!").concat(address), onClick: function () { return onRemove(entry); } }, "Delete"))));
|
|
43
|
+
}))))));
|
|
44
|
+
});
|
|
45
|
+
exports.WatchWindow.displayName = "WatchWindow";
|
|
46
|
+
/**
|
|
47
|
+
* Host-mounted, atom-driven Watch Window. Mount once alongside the other
|
|
48
|
+
* dialogs; the grid's context menu offers "Add to Watch Window" while a
|
|
49
|
+
* host is mounted and republishes live getters on each render.
|
|
50
|
+
*/
|
|
51
|
+
var WatchWindowHost = function () {
|
|
52
|
+
(0, watch_window_atom_1.useRegisterWatchWindowHost)();
|
|
53
|
+
var _a = tslib_1.__read((0, watch_window_atom_1.useWatchWindowEntries)(), 1), entries = _a[0];
|
|
54
|
+
var _b = tslib_1.__read((0, watch_window_atom_1.useWatchWindowOpen)(), 2), open = _b[0], setOpen = _b[1];
|
|
55
|
+
var context = (0, watch_window_atom_1.useWatchWindowContext)();
|
|
56
|
+
var removeWatch = (0, watch_window_atom_1.useRemoveWatch)();
|
|
57
|
+
var close = (0, react_1.useCallback)(function () { return setOpen(false); }, [setOpen]);
|
|
58
|
+
if (!open)
|
|
59
|
+
return null;
|
|
60
|
+
return (react_1.default.createElement(exports.WatchWindow, { entries: entries, context: context, onRemove: removeWatch, onClose: close }));
|
|
61
|
+
};
|
|
62
|
+
exports.WatchWindowHost = WatchWindowHost;
|
|
63
|
+
exports.WatchWindowHost.displayName = "WatchWindowHost";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-cell-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-cell-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-cell-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-cell-renderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ var utils_1 = require("@rowsncolumns/utils");
|
|
|
7
7
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
8
8
|
var colors_1 = require("../api/colors");
|
|
9
9
|
var validation_1 = require("../api/validation");
|
|
10
|
+
var alignment_1 = require("../components/cell/alignment");
|
|
10
11
|
var cell_background_1 = require("../components/cell/cell-background");
|
|
11
12
|
var cell_diff_1 = require("../components/cell-diff");
|
|
12
13
|
var cell_overlay_1 = require("../components/cell-overlay");
|
|
@@ -56,10 +57,17 @@ var useCellRenderer = function (_a) {
|
|
|
56
57
|
// Calculated column
|
|
57
58
|
var isCalculatedColumn = isTableHeader(rowIndex, columnIndex) &&
|
|
58
59
|
isCalculatedColumnHeader(rowIndex, columnIndex);
|
|
59
|
-
// Cell overflow
|
|
60
|
+
// Cell overflow. Excel's justify / distributed alignments wrap inside
|
|
61
|
+
// the cell's own width even without `wrapStrategy: "wrap"`, and fill
|
|
62
|
+
// repeats the text to the cell edge — none of them ever spill into
|
|
63
|
+
// the neighbouring cells.
|
|
60
64
|
var wrapStrategy = effectiveCellFormat === null || effectiveCellFormat === void 0 ? void 0 : effectiveCellFormat.wrapStrategy;
|
|
61
|
-
var
|
|
62
|
-
var
|
|
65
|
+
var wrapsByAlignment = (0, alignment_1.alignmentImpliesWrap)(horizontalAlignment);
|
|
66
|
+
var fillsCell = (0, alignment_1.isFillAlignment)(horizontalAlignment);
|
|
67
|
+
var shouldWrap = wrapStrategy === "wrap" || wrapsByAlignment;
|
|
68
|
+
var isWrapEnabled = (wrapStrategy !== null && wrapStrategy !== void 0 ? wrapStrategy : "overflow") === "overflow" &&
|
|
69
|
+
!wrapsByAlignment &&
|
|
70
|
+
!fillsCell;
|
|
63
71
|
// Normalize display value for both rendering and overflow calculation
|
|
64
72
|
var displayFormattedValue = (0, helpers_1.normalizeDisplayText)(formattedValue, shouldWrap);
|
|
65
73
|
var shouldRecalcTextWidth = isWrapEnabled || wrapStrategy === "clip";
|
|
@@ -111,9 +119,12 @@ var useCellRenderer = function (_a) {
|
|
|
111
119
|
}
|
|
112
120
|
// shrinkToFit needs the natural text width to compare against the
|
|
113
121
|
// cell's available width; rotated text uses it to size the (unrotated)
|
|
114
|
-
// text box that gets pivoted around the cell edge
|
|
115
|
-
//
|
|
116
|
-
|
|
122
|
+
// text box that gets pivoted around the cell edge; fill alignment
|
|
123
|
+
// repeats the text `floor(cell / natural)` times. Without this, the
|
|
124
|
+
// Konva Text renders with width 0 (rotation) or a single unfilled copy.
|
|
125
|
+
var textWidth = (overflowRight && shouldRecalcTextWidth) ||
|
|
126
|
+
containsTextInside ||
|
|
127
|
+
fillsCell
|
|
117
128
|
? getTextDimension(sheetId, rowIndex, columnIndex, displayFormattedValue).width
|
|
118
129
|
: 0;
|
|
119
130
|
var enableOverflow = shouldOverflow && cellWidth > props.width;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-get-tooltip.d.ts","sourceRoot":"","sources":["../../../hooks/use-get-tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAsB,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrD,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB;;;;OAIG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,UAAU,GAAG,SAAS,CAAC;IAC1B;;OAEG;IACH,OAAO,EAAE,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,CAAC;IACxB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC;;OAEG;IACH,wBAAwB,CAAC,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5C;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,EAAE,4IAU/C,kBAAkB,CAAC,CAAC,CAAC,iNAmBf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"use-get-tooltip.d.ts","sourceRoot":"","sources":["../../../hooks/use-get-tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAsB,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrD,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB;;;;OAIG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,UAAU,GAAG,SAAS,CAAC;IAC1B;;OAEG;IACH,OAAO,EAAE,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,CAAC;IACxB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC;;OAEG;IACH,wBAAwB,CAAC,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5C;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,EAAE,4IAU/C,kBAAkB,CAAC,CAAC,CAAC,iNAmBf,gBAAgB,6BAiHxB,CAAC"}
|
|
@@ -42,8 +42,13 @@ var useGetTooltip = function (_a) {
|
|
|
42
42
|
// Check if we are rendering notes
|
|
43
43
|
// Error has precedence
|
|
44
44
|
var variant = (0, helpers_1.getTooltipVariant)(isError, isInvalid, isHyperlink, noteEditorCell ? true : !!note, customTooltipContent ? true : false);
|
|
45
|
-
// Content
|
|
46
|
-
|
|
45
|
+
// Content. An Invalid cell whose rule supplies its own error text
|
|
46
|
+
// (`customTooltipContent`) shows that instead of the generic marker.
|
|
47
|
+
var content = isError
|
|
48
|
+
? errorValue.message
|
|
49
|
+
: isInvalid && !customTooltipContent
|
|
50
|
+
? errorValue.message
|
|
51
|
+
: undefined;
|
|
47
52
|
// Title
|
|
48
53
|
var title = isHyperlink
|
|
49
54
|
? getFormattedValue(sheetId, rowIndex, columnIndex)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"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"}
|