@oh-just-another/react-ui 0.57.0
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/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/README.md +54 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/bottom-sheet.d.ts +26 -0
- package/dist/bottom-sheet.d.ts.map +1 -0
- package/dist/bottom-sheet.js +87 -0
- package/dist/bottom-sheet.js.map +1 -0
- package/dist/button-group.d.ts +14 -0
- package/dist/button-group.d.ts.map +1 -0
- package/dist/button-group.js +3 -0
- package/dist/button-group.js.map +1 -0
- package/dist/color-palette.d.ts +34 -0
- package/dist/color-palette.d.ts.map +1 -0
- package/dist/color-palette.js +77 -0
- package/dist/color-palette.js.map +1 -0
- package/dist/color-swatch-picker.d.ts +29 -0
- package/dist/color-swatch-picker.d.ts.map +1 -0
- package/dist/color-swatch-picker.js +56 -0
- package/dist/color-swatch-picker.js.map +1 -0
- package/dist/command-palette.d.ts +13 -0
- package/dist/command-palette.d.ts.map +1 -0
- package/dist/command-palette.js +146 -0
- package/dist/command-palette.js.map +1 -0
- package/dist/comments-panel.d.ts +27 -0
- package/dist/comments-panel.d.ts.map +1 -0
- package/dist/comments-panel.js +139 -0
- package/dist/comments-panel.js.map +1 -0
- package/dist/constants.d.ts +112 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +119 -0
- package/dist/constants.js.map +1 -0
- package/dist/context-menu-controller.d.ts +41 -0
- package/dist/context-menu-controller.d.ts.map +1 -0
- package/dist/context-menu-controller.js +26 -0
- package/dist/context-menu-controller.js.map +1 -0
- package/dist/context-menu.d.ts +53 -0
- package/dist/context-menu.d.ts.map +1 -0
- package/dist/context-menu.js +333 -0
- package/dist/context-menu.js.map +1 -0
- package/dist/context.d.ts +44 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +95 -0
- package/dist/context.js.map +1 -0
- package/dist/diagram-bars.d.ts +21 -0
- package/dist/diagram-bars.d.ts.map +1 -0
- package/dist/diagram-bars.js +4 -0
- package/dist/diagram-bars.js.map +1 -0
- package/dist/diagram-canvas.d.ts +39 -0
- package/dist/diagram-canvas.d.ts.map +1 -0
- package/dist/diagram-canvas.js +9 -0
- package/dist/diagram-canvas.js.map +1 -0
- package/dist/diagram-root.d.ts +70 -0
- package/dist/diagram-root.d.ts.map +1 -0
- package/dist/diagram-root.js +180 -0
- package/dist/diagram-root.js.map +1 -0
- package/dist/diff-panel.d.ts +25 -0
- package/dist/diff-panel.d.ts.map +1 -0
- package/dist/diff-panel.js +77 -0
- package/dist/diff-panel.js.map +1 -0
- package/dist/edge-style-panel.d.ts +19 -0
- package/dist/edge-style-panel.d.ts.map +1 -0
- package/dist/edge-style-panel.js +120 -0
- package/dist/edge-style-panel.js.map +1 -0
- package/dist/frame-name-editor-overlay.d.ts +13 -0
- package/dist/frame-name-editor-overlay.d.ts.map +1 -0
- package/dist/frame-name-editor-overlay.js +84 -0
- package/dist/frame-name-editor-overlay.js.map +1 -0
- package/dist/frame-panel.d.ts +19 -0
- package/dist/frame-panel.d.ts.map +1 -0
- package/dist/frame-panel.js +66 -0
- package/dist/frame-panel.js.map +1 -0
- package/dist/help-button.d.ts +16 -0
- package/dist/help-button.d.ts.map +1 -0
- package/dist/help-button.js +14 -0
- package/dist/help-button.js.map +1 -0
- package/dist/help-dialog.d.ts +56 -0
- package/dist/help-dialog.d.ts.map +1 -0
- package/dist/help-dialog.js +142 -0
- package/dist/help-dialog.js.map +1 -0
- package/dist/hooks.d.ts +54 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +85 -0
- package/dist/hooks.js.map +1 -0
- package/dist/icon-button.d.ts +28 -0
- package/dist/icon-button.d.ts.map +1 -0
- package/dist/icon-button.js +14 -0
- package/dist/icon-button.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/layer-panel.d.ts +13 -0
- package/dist/layer-panel.d.ts.map +1 -0
- package/dist/layer-panel.js +109 -0
- package/dist/layer-panel.js.map +1 -0
- package/dist/library-panel.d.ts +33 -0
- package/dist/library-panel.d.ts.map +1 -0
- package/dist/library-panel.js +37 -0
- package/dist/library-panel.js.map +1 -0
- package/dist/link-caption-editor.d.ts +8 -0
- package/dist/link-caption-editor.d.ts.map +1 -0
- package/dist/link-caption-editor.js +65 -0
- package/dist/link-caption-editor.js.map +1 -0
- package/dist/link-drop-shape-menu.d.ts +12 -0
- package/dist/link-drop-shape-menu.d.ts.map +1 -0
- package/dist/link-drop-shape-menu.js +55 -0
- package/dist/link-drop-shape-menu.js.map +1 -0
- package/dist/link-hover-popup.d.ts +2 -0
- package/dist/link-hover-popup.d.ts.map +1 -0
- package/dist/link-hover-popup.js +96 -0
- package/dist/link-hover-popup.js.map +1 -0
- package/dist/main-menu.d.ts +67 -0
- package/dist/main-menu.d.ts.map +1 -0
- package/dist/main-menu.js +243 -0
- package/dist/main-menu.js.map +1 -0
- package/dist/markdown.d.ts +10 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +131 -0
- package/dist/markdown.js.map +1 -0
- package/dist/merge-dialog.d.ts +22 -0
- package/dist/merge-dialog.d.ts.map +1 -0
- package/dist/merge-dialog.js +46 -0
- package/dist/merge-dialog.js.map +1 -0
- package/dist/modal.d.ts +19 -0
- package/dist/modal.d.ts.map +1 -0
- package/dist/modal.js +87 -0
- package/dist/modal.js.map +1 -0
- package/dist/palette.d.ts +73 -0
- package/dist/palette.d.ts.map +1 -0
- package/dist/palette.js +330 -0
- package/dist/palette.js.map +1 -0
- package/dist/popover.d.ts +33 -0
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +107 -0
- package/dist/popover.js.map +1 -0
- package/dist/property-panel.d.ts +32 -0
- package/dist/property-panel.d.ts.map +1 -0
- package/dist/property-panel.js +728 -0
- package/dist/property-panel.js.map +1 -0
- package/dist/reset-to-content-button.d.ts +10 -0
- package/dist/reset-to-content-button.d.ts.map +1 -0
- package/dist/reset-to-content-button.js +62 -0
- package/dist/reset-to-content-button.js.map +1 -0
- package/dist/segmented-control.d.ts +23 -0
- package/dist/segmented-control.d.ts.map +1 -0
- package/dist/segmented-control.js +5 -0
- package/dist/segmented-control.js.map +1 -0
- package/dist/selection-floating-panel.d.ts +56 -0
- package/dist/selection-floating-panel.d.ts.map +1 -0
- package/dist/selection-floating-panel.js +251 -0
- package/dist/selection-floating-panel.js.map +1 -0
- package/dist/sidebar.d.ts +31 -0
- package/dist/sidebar.d.ts.map +1 -0
- package/dist/sidebar.js +66 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/slider.d.ts +20 -0
- package/dist/slider.d.ts.map +1 -0
- package/dist/slider.js +9 -0
- package/dist/slider.js.map +1 -0
- package/dist/text-editor-overlay.d.ts +16 -0
- package/dist/text-editor-overlay.d.ts.map +1 -0
- package/dist/text-editor-overlay.js +112 -0
- package/dist/text-editor-overlay.js.map +1 -0
- package/dist/toast.d.ts +34 -0
- package/dist/toast.d.ts.map +1 -0
- package/dist/toast.js +89 -0
- package/dist/toast.js.map +1 -0
- package/dist/toolbar.d.ts +149 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +282 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/tooltip.d.ts +21 -0
- package/dist/tooltip.d.ts.map +1 -0
- package/dist/tooltip.js +217 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/ui-layer.d.ts +22 -0
- package/dist/ui-layer.d.ts.map +1 -0
- package/dist/ui-layer.js +3 -0
- package/dist/ui-layer.js.map +1 -0
- package/dist/versioning.d.ts +32 -0
- package/dist/versioning.d.ts.map +1 -0
- package/dist/versioning.js +206 -0
- package/dist/versioning.js.map +1 -0
- package/package.json +81 -0
- package/src/styles.css +1502 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element + canvas color palettes used by the bundled
|
|
3
|
+
* `<ColorSwatchPicker>`. Hosts that want a custom palette import
|
|
4
|
+
* these constants and concat their own; the picker accepts any
|
|
5
|
+
* `readonly string[]`.
|
|
6
|
+
*
|
|
7
|
+
* Palette is sourced from `@oh-just-another/tokens`. Each hue carries
|
|
8
|
+
* two pinned tones — step-4 ("subtle") for fills and step-9 ("solid")
|
|
9
|
+
* for strokes / marks. Step-9 stays the same hex on both themes per
|
|
10
|
+
* Radix spec, so the picker reads as the same "brand" colour
|
|
11
|
+
* regardless of the active theme.
|
|
12
|
+
*
|
|
13
|
+
* `"transparent"` is the canonical "no colour" sentinel — the picker
|
|
14
|
+
* renders it as a checkerboard swatch and writes the string
|
|
15
|
+
* `"transparent"` into the underlying style.
|
|
16
|
+
*/
|
|
17
|
+
import { CANVAS_TONES, HUES, HUE_TONES } from "@oh-just-another/tokens";
|
|
18
|
+
const fillsLight = HUES.map((hue) => HUE_TONES.light[hue].fill);
|
|
19
|
+
const solidsLight = HUES.map((hue) => HUE_TONES.light[hue].solid);
|
|
20
|
+
const fillsDark = HUES.map((hue) => HUE_TONES.dark[hue].fill);
|
|
21
|
+
const solidsDark = HUES.map((hue) => HUE_TONES.dark[hue].solid);
|
|
22
|
+
const canvasLight = HUES.map((hue) => CANVAS_TONES.light[hue]);
|
|
23
|
+
const canvasDark = HUES.map((hue) => CANVAS_TONES.dark[hue]);
|
|
24
|
+
/**
|
|
25
|
+
* Light-theme element palette: step-4 subtle tints first row,
|
|
26
|
+
* step-9 solids second row, neutrals + transparent last row.
|
|
27
|
+
*/
|
|
28
|
+
export const ELEMENT_PALETTE_LIGHT = [
|
|
29
|
+
...fillsLight,
|
|
30
|
+
...solidsLight,
|
|
31
|
+
"#ffffff",
|
|
32
|
+
"#1e1e1e",
|
|
33
|
+
"transparent",
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Dark-theme element palette — step-4 dark tints for fills,
|
|
37
|
+
* step-9 dark for solids. Per Radix spec, the step-9 hex matches
|
|
38
|
+
* the light variant so brand colour stays anchored across themes;
|
|
39
|
+
* only the tint row swaps to deep-tinted backgrounds.
|
|
40
|
+
*/
|
|
41
|
+
export const ELEMENT_PALETTE_DARK = [
|
|
42
|
+
...fillsDark,
|
|
43
|
+
...solidsDark,
|
|
44
|
+
"#1e1e1e",
|
|
45
|
+
"#ffffff",
|
|
46
|
+
"transparent",
|
|
47
|
+
];
|
|
48
|
+
/**
|
|
49
|
+
* Light-theme canvas palette — paper-like backgrounds for the
|
|
50
|
+
* editor surface. Pure white sits first; the rest are step-2 hues
|
|
51
|
+
* (almost-pure tints with a hint of colour). Meant for the canvas
|
|
52
|
+
* itself, not for shapes.
|
|
53
|
+
*/
|
|
54
|
+
export const CANVAS_PALETTE_LIGHT = ["#ffffff", ...canvasLight];
|
|
55
|
+
/**
|
|
56
|
+
* Dark-theme canvas palette — near-black backgrounds. Step-2 dark
|
|
57
|
+
* from each Radix hue: deep, almost-neutral tints that read as
|
|
58
|
+
* "themed background" rather than "filled colour".
|
|
59
|
+
*/
|
|
60
|
+
export const CANVAS_PALETTE_DARK = ["#121113", ...canvasDark];
|
|
61
|
+
/**
|
|
62
|
+
* Resolve which palette flavour to use given a `theme` setting
|
|
63
|
+
* ("light" / "dark" / "system"). For `"system"` consults the OS
|
|
64
|
+
* `prefers-color-scheme` media query, re-checked on each call so a
|
|
65
|
+
* host that re-renders on theme change picks up the switch without
|
|
66
|
+
* subscribing.
|
|
67
|
+
*/
|
|
68
|
+
export const resolvePaletteTheme = (theme) => {
|
|
69
|
+
if (theme === "light" || theme === "dark")
|
|
70
|
+
return theme;
|
|
71
|
+
if (typeof window === "undefined")
|
|
72
|
+
return "light";
|
|
73
|
+
return window.matchMedia("(prefers-color-scheme: dark)").matches
|
|
74
|
+
? "dark"
|
|
75
|
+
: "light";
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=color-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-palette.js","sourceRoot":"","sources":["../src/color-palette.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAExE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAChE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAClE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAEhE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,GAAG,UAAU;IACb,GAAG,WAAW;IACd,SAAS;IACT,SAAS;IACT,aAAa;CACd,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,GAAG,SAAS;IACZ,GAAG,UAAU;IACb,SAAS;IACT,SAAS;IACT,aAAa;CACd,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,SAAS,EAAE,GAAG,WAAW,CAAC,CAAC;AAEnF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB,CAAC,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAkC,EAChB,EAAE;IACpB,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACxD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IAClD,OAAO,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO;QAC9D,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swatch grid + custom-colour picker. A row of pinned palette colours;
|
|
3
|
+
* users click a swatch to pick, or click the `+` button to open a
|
|
4
|
+
* native colour picker for anything outside the palette. The
|
|
5
|
+
* "transparent" swatch shows a checkerboard pattern and reports `null`
|
|
6
|
+
* upstream.
|
|
7
|
+
*
|
|
8
|
+
* Each cell is a fixed 26 × 26 box: a 24 × 24 colour fill sits
|
|
9
|
+
* centred inside, with 1 px of breathing room. On hover the fill
|
|
10
|
+
* grows to the full 26 × 26 (no layout shift — the cell itself
|
|
11
|
+
* stays at 26). Selected cells get a 2-px tonal ring on the cell
|
|
12
|
+
* border so the ring sits outside the fill, not over it.
|
|
13
|
+
*
|
|
14
|
+
* Default palette is theme-aware — when `palette` is omitted, the
|
|
15
|
+
* picker reads from the OS theme (via `prefers-color-scheme`) and
|
|
16
|
+
* picks the appropriate light / dark palette.
|
|
17
|
+
*/
|
|
18
|
+
export interface ColorSwatchPickerProps {
|
|
19
|
+
readonly value: string | null;
|
|
20
|
+
readonly onChange: (color: string | null) => void;
|
|
21
|
+
/** Override the bundled palette. Defaults to theme-aware element palette. */
|
|
22
|
+
readonly palette?: readonly string[];
|
|
23
|
+
/** Show the `+` button that opens the native colour picker. Default `true`. */
|
|
24
|
+
readonly allowCustom?: boolean;
|
|
25
|
+
/** Show the `×` clear button that sets value to `null`. Default `true`. */
|
|
26
|
+
readonly allowClear?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare const ColorSwatchPicker: ({ value, onChange, palette, allowCustom, allowClear, }: ColorSwatchPickerProps) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
//# sourceMappingURL=color-swatch-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-swatch-picker.d.ts","sourceRoot":"","sources":["../src/color-swatch-picker.tsx"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAClD,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,+EAA+E;IAC/E,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,iBAAiB,GAAI,wDAM/B,sBAAsB,4CAoCxB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Plus, X } from "lucide-react";
|
|
4
|
+
import { ELEMENT_PALETTE_LIGHT, ELEMENT_PALETTE_DARK, resolvePaletteTheme, } from "./color-palette.js";
|
|
5
|
+
export const ColorSwatchPicker = ({ value, onChange, palette, allowCustom = true, allowClear = true, }) => {
|
|
6
|
+
const resolved = palette ?? defaultPaletteForCurrentTheme();
|
|
7
|
+
const [customOpen, setCustomOpen] = useState(false);
|
|
8
|
+
return (_jsxs("div", { className: "du-swatch-grid", role: "radiogroup", "aria-label": "Colour", children: [resolved.map((c) => (_jsx(Swatch, { color: c, selected: normalise(c) === normalise(value), onClick: () => { onChange(c === "transparent" ? null : c); } }, c))), allowCustom ? (_jsx(CustomSwatch, { value: value, onChange: onChange, open: customOpen, onOpenChange: setCustomOpen })) : null, allowClear ? (_jsx("button", { type: "button", "aria-label": "Clear colour", title: "Clear colour", onClick: () => { onChange(null); }, className: "du-swatch du-swatch-clear", children: _jsx("span", { className: "du-swatch-fill du-swatch-fill-blank", children: _jsx(X, { size: 12, strokeWidth: 2 }) }) })) : null] }));
|
|
9
|
+
};
|
|
10
|
+
const Swatch = ({ color, selected, onClick, }) => {
|
|
11
|
+
const isTransparent = color === "transparent";
|
|
12
|
+
return (_jsx("button", { type: "button", role: "radio", "aria-checked": selected, "aria-label": color, title: color, onClick: onClick, className: "du-swatch", children: _jsx("span", { className: "du-swatch-fill", style: {
|
|
13
|
+
background: isTransparent
|
|
14
|
+
? "repeating-conic-gradient(#ccc 0% 25%, #fff 0% 50%) 50% / 6px 6px"
|
|
15
|
+
: color,
|
|
16
|
+
} }) }));
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* The `+` button — opens the browser's native colour picker. When
|
|
20
|
+
* `value` is already a custom colour (not in palette) the trigger
|
|
21
|
+
* shows that colour instead of a `+`.
|
|
22
|
+
*/
|
|
23
|
+
const CustomSwatch = ({ value, onChange, open, onOpenChange, }) => {
|
|
24
|
+
const hasColour = !!value && value !== "transparent";
|
|
25
|
+
return (_jsxs("label", { className: "du-swatch du-swatch-custom", title: "Pick custom colour", children: [_jsx("span", { className: "du-swatch-fill", style: hasColour ? { background: value } : undefined, children: hasColour ? null : _jsx(Plus, { size: 12, strokeWidth: 2 }) }), _jsx("input", { type: "color", "aria-label": "Custom colour", value: normaliseHex(value), onChange: (ev) => {
|
|
26
|
+
onChange(ev.target.value);
|
|
27
|
+
onOpenChange(false);
|
|
28
|
+
}, onClick: () => { onOpenChange(!open); }, className: "du-swatch-color-input" })] }));
|
|
29
|
+
};
|
|
30
|
+
const normalise = (color) => color === null ? "transparent" : color.toLowerCase();
|
|
31
|
+
const normaliseHex = (value) => {
|
|
32
|
+
if (!value || value === "transparent")
|
|
33
|
+
return "#000000";
|
|
34
|
+
if (/^#[0-9a-f]{6}$/i.test(value))
|
|
35
|
+
return value.toLowerCase();
|
|
36
|
+
if (/^#[0-9a-f]{3}$/i.test(value)) {
|
|
37
|
+
const v = value.slice(1);
|
|
38
|
+
return `#${v[0]}${v[0]}${v[1]}${v[1]}${v[2]}${v[2]}`.toLowerCase();
|
|
39
|
+
}
|
|
40
|
+
return "#000000";
|
|
41
|
+
};
|
|
42
|
+
const defaultPaletteForCurrentTheme = () => {
|
|
43
|
+
if (typeof document === "undefined")
|
|
44
|
+
return ELEMENT_PALETTE_LIGHT;
|
|
45
|
+
// Respect the host's forced theme attribute when present; fall
|
|
46
|
+
// back to OS preference otherwise.
|
|
47
|
+
const attr = document.documentElement.getAttribute("data-theme");
|
|
48
|
+
if (attr === "dark")
|
|
49
|
+
return ELEMENT_PALETTE_DARK;
|
|
50
|
+
if (attr === "light")
|
|
51
|
+
return ELEMENT_PALETTE_LIGHT;
|
|
52
|
+
return resolvePaletteTheme("system") === "dark"
|
|
53
|
+
? ELEMENT_PALETTE_DARK
|
|
54
|
+
: ELEMENT_PALETTE_LIGHT;
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=color-swatch-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-swatch-picker.js","sourceRoot":"","sources":["../src/color-swatch-picker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Command palette (standard `⌘K`). A searchable list of every registered action,
|
|
4
|
+
* dispatched through the same `ActionRegistry` as hotkeys / context menu — so
|
|
5
|
+
* it stays in sync automatically as actions are added. Self-contained: manages
|
|
6
|
+
* its own open state and registers the `open-command-palette` action (so the
|
|
7
|
+
* `⌘K` shortcut also appears in the help dialog). Mount once per host.
|
|
8
|
+
*
|
|
9
|
+
* Predicate-gated actions whose predicate currently fails are shown disabled
|
|
10
|
+
* (greyed, not runnable) so the list is stable but can't fire a no-op.
|
|
11
|
+
*/
|
|
12
|
+
export declare const CommandPalette: () => ReactElement | null;
|
|
13
|
+
//# sourceMappingURL=command-palette.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../src/command-palette.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,OAAO,CAAC;AAUf;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QAAO,YAAY,GAAG,IA8HhD,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState, } from "react";
|
|
3
|
+
import { defaultActionRegistry, formatHotkey, } from "@oh-just-another/state";
|
|
4
|
+
import { Modal } from "./modal.js";
|
|
5
|
+
import { useDiagramOptional } from "./hooks.js";
|
|
6
|
+
/**
|
|
7
|
+
* Command palette (standard `⌘K`). A searchable list of every registered action,
|
|
8
|
+
* dispatched through the same `ActionRegistry` as hotkeys / context menu — so
|
|
9
|
+
* it stays in sync automatically as actions are added. Self-contained: manages
|
|
10
|
+
* its own open state and registers the `open-command-palette` action (so the
|
|
11
|
+
* `⌘K` shortcut also appears in the help dialog). Mount once per host.
|
|
12
|
+
*
|
|
13
|
+
* Predicate-gated actions whose predicate currently fails are shown disabled
|
|
14
|
+
* (greyed, not runnable) so the list is stable but can't fire a no-op.
|
|
15
|
+
*/
|
|
16
|
+
export const CommandPalette = () => {
|
|
17
|
+
const editor = useDiagramOptional();
|
|
18
|
+
const [open, setOpen] = useState(false);
|
|
19
|
+
const [query, setQuery] = useState("");
|
|
20
|
+
const [active, setActive] = useState(0);
|
|
21
|
+
const inputRef = useRef(null);
|
|
22
|
+
// Register the open action so `⌘K` routes through the registry like every
|
|
23
|
+
// other hotkey (fed by the host keydown listener) and shows in the help
|
|
24
|
+
// dialog. `replace` is idempotent across StrictMode / HMR.
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
defaultActionRegistry.replace({
|
|
27
|
+
id: "open-command-palette",
|
|
28
|
+
label: "Command palette",
|
|
29
|
+
category: "other",
|
|
30
|
+
hotkey: { key: "k", meta: true },
|
|
31
|
+
perform: () => { setOpen(true); },
|
|
32
|
+
});
|
|
33
|
+
return () => { defaultActionRegistry.unregister("open-command-palette"); };
|
|
34
|
+
}, []);
|
|
35
|
+
// Actions with a label, minus the palette opener itself. Built once; the
|
|
36
|
+
// registry is stable for the session.
|
|
37
|
+
const all = useMemo(() => defaultActionRegistry
|
|
38
|
+
.getAll()
|
|
39
|
+
.filter((a) => a.label !== undefined && a.id !== "open-command-palette"), [open]);
|
|
40
|
+
const ctx = editor ? { editor } : null;
|
|
41
|
+
const matches = useMemo(() => {
|
|
42
|
+
const q = query.trim().toLowerCase();
|
|
43
|
+
const list = q
|
|
44
|
+
? all.filter((a) => (a.label ?? "").toLowerCase().includes(q))
|
|
45
|
+
: all;
|
|
46
|
+
return list.map((a) => ({
|
|
47
|
+
action: a,
|
|
48
|
+
enabled: ctx ? (a.predicate ? a.predicate(ctx) : true) : false,
|
|
49
|
+
}));
|
|
50
|
+
}, [all, query, ctx]);
|
|
51
|
+
// Reset transient state whenever the palette opens.
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (!open)
|
|
54
|
+
return;
|
|
55
|
+
setQuery("");
|
|
56
|
+
setActive(0);
|
|
57
|
+
// Focus the input after the modal mounts.
|
|
58
|
+
const id = requestAnimationFrame(() => inputRef.current?.focus());
|
|
59
|
+
return () => { cancelAnimationFrame(id); };
|
|
60
|
+
}, [open]);
|
|
61
|
+
useEffect(() => { setActive(0); }, [query]);
|
|
62
|
+
if (!open)
|
|
63
|
+
return null;
|
|
64
|
+
const close = () => { setOpen(false); };
|
|
65
|
+
const run = (entry) => {
|
|
66
|
+
if (!entry.enabled || !ctx)
|
|
67
|
+
return;
|
|
68
|
+
close();
|
|
69
|
+
defaultActionRegistry.dispatch(entry.action.id, ctx);
|
|
70
|
+
};
|
|
71
|
+
const onInputKey = (ev) => {
|
|
72
|
+
if (ev.key === "ArrowDown") {
|
|
73
|
+
ev.preventDefault();
|
|
74
|
+
setActive((i) => Math.min(matches.length - 1, i + 1));
|
|
75
|
+
}
|
|
76
|
+
else if (ev.key === "ArrowUp") {
|
|
77
|
+
ev.preventDefault();
|
|
78
|
+
setActive((i) => Math.max(0, i - 1));
|
|
79
|
+
}
|
|
80
|
+
else if (ev.key === "Enter") {
|
|
81
|
+
ev.preventDefault();
|
|
82
|
+
const entry = matches[active];
|
|
83
|
+
if (entry)
|
|
84
|
+
run(entry);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const rowStyle = (i, enabled) => ({
|
|
88
|
+
display: "flex",
|
|
89
|
+
alignItems: "center",
|
|
90
|
+
justifyContent: "space-between",
|
|
91
|
+
gap: 12,
|
|
92
|
+
padding: "8px 14px",
|
|
93
|
+
cursor: enabled ? "pointer" : "default",
|
|
94
|
+
opacity: enabled ? 1 : 0.4,
|
|
95
|
+
background: i === active ? "var(--du-ui-hover, rgba(0,0,0,0.06))" : "transparent",
|
|
96
|
+
});
|
|
97
|
+
return (_jsxs(Modal, { open: open, onClose: close, title: "Command palette", style: MODAL_STYLE, children: [_jsx("input", { ref: inputRef, value: query, onChange: (e) => { setQuery(e.target.value); }, onKeyDown: onInputKey, placeholder: "Search commands\u2026", "aria-label": "Search commands", style: INPUT_STYLE }), _jsx("ul", { style: LIST_STYLE, role: "listbox", children: matches.length === 0 ? (_jsx("li", { style: { padding: "12px 14px", opacity: 0.6 }, children: "No commands" })) : (matches.map((entry, i) => {
|
|
98
|
+
const keys = actionHotkey(entry.action);
|
|
99
|
+
return (_jsxs("li", { role: "option", "aria-selected": i === active, "aria-disabled": !entry.enabled, style: rowStyle(i, entry.enabled), onPointerEnter: () => { setActive(i); }, onClick: () => { run(entry); }, children: [_jsx("span", { children: entry.action.label }), keys ? _jsx("kbd", { style: KBD_STYLE, children: keys }) : null] }, entry.action.id));
|
|
100
|
+
})) })] }));
|
|
101
|
+
};
|
|
102
|
+
/** First hotkey/sequence of an action, formatted for the chip (or null). */
|
|
103
|
+
const actionHotkey = (action) => {
|
|
104
|
+
if (action.hotkey) {
|
|
105
|
+
const raw = Array.isArray(action.hotkey)
|
|
106
|
+
? action.hotkey
|
|
107
|
+
: [action.hotkey];
|
|
108
|
+
const first = raw[0];
|
|
109
|
+
if (first)
|
|
110
|
+
return formatHotkey(first);
|
|
111
|
+
}
|
|
112
|
+
if (action.sequence && action.sequence.length > 0) {
|
|
113
|
+
return action.sequence.map((k) => (k.length === 1 ? k.toUpperCase() : k)).join(" ");
|
|
114
|
+
}
|
|
115
|
+
return null;
|
|
116
|
+
};
|
|
117
|
+
const MODAL_STYLE = {
|
|
118
|
+
maxWidth: 520,
|
|
119
|
+
width: "calc(100vw - 64px)",
|
|
120
|
+
padding: 0,
|
|
121
|
+
display: "flex",
|
|
122
|
+
flexDirection: "column",
|
|
123
|
+
overflow: "hidden",
|
|
124
|
+
};
|
|
125
|
+
const INPUT_STYLE = {
|
|
126
|
+
border: "none",
|
|
127
|
+
borderBottom: "1px solid var(--du-ui-border)",
|
|
128
|
+
outline: "none",
|
|
129
|
+
padding: "14px 16px",
|
|
130
|
+
fontSize: 15,
|
|
131
|
+
background: "transparent",
|
|
132
|
+
color: "inherit",
|
|
133
|
+
};
|
|
134
|
+
const LIST_STYLE = {
|
|
135
|
+
listStyle: "none",
|
|
136
|
+
margin: 0,
|
|
137
|
+
padding: 4,
|
|
138
|
+
maxHeight: 360,
|
|
139
|
+
overflowY: "auto",
|
|
140
|
+
};
|
|
141
|
+
const KBD_STYLE = {
|
|
142
|
+
fontSize: 11,
|
|
143
|
+
color: "var(--du-text-muted, #6b6b6b)",
|
|
144
|
+
fontFamily: "inherit",
|
|
145
|
+
};
|
|
146
|
+
//# sourceMappingURL=command-palette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette.js","sourceRoot":"","sources":["../src/command-palette.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Side-panel listing every annotation thread in the scene. Each row is
|
|
4
|
+
* a button that focuses the annotation (opens `<CommentsPopover>` and
|
|
5
|
+
* highlights the pin). Resolved threads render dimmed. Hosts that want
|
|
6
|
+
* a different layout can compose their own from `useAnnotations` +
|
|
7
|
+
* `editor.setSelectedAnnotation`.
|
|
8
|
+
*/
|
|
9
|
+
export interface CommentsPanelProps {
|
|
10
|
+
readonly style?: CSSProperties;
|
|
11
|
+
readonly className?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const CommentsPanel: ({ style, className }: CommentsPanelProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
/**
|
|
15
|
+
* Floating thread view for the focused annotation. Renders nothing
|
|
16
|
+
* when no annotation is open. Drop it as a sibling of `<DiagramSurface>`
|
|
17
|
+
* inside `<DiagramRoot>` so it can position itself over the canvas.
|
|
18
|
+
*
|
|
19
|
+
* Composes from `useAnnotations` + `useSelectedAnnotation`; hosts that
|
|
20
|
+
* want a different layout (modal, side-panel, etc.) can rebuild it.
|
|
21
|
+
*/
|
|
22
|
+
export interface CommentsPopoverProps {
|
|
23
|
+
readonly style?: CSSProperties;
|
|
24
|
+
readonly className?: string;
|
|
25
|
+
}
|
|
26
|
+
export declare const CommentsPopover: ({ style, className }: CommentsPopoverProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
27
|
+
//# sourceMappingURL=comments-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments-panel.d.ts","sourceRoot":"","sources":["../src/comments-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAKrD;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,GAAI,sBAAsB,kBAAkB,4CAyFrE,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,eAAe,GAAI,sBAAsB,oBAAoB,mDAyJzE,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useAnnotations, useDiagramOptional, useSelectedAnnotation } from "./hooks.js";
|
|
4
|
+
import { COMMENTS_PANEL_WIDTH } from "./constants.js";
|
|
5
|
+
import { Markdown } from "./markdown.js";
|
|
6
|
+
export const CommentsPanel = ({ style, className }) => {
|
|
7
|
+
const editor = useDiagramOptional();
|
|
8
|
+
const annotations = useAnnotations();
|
|
9
|
+
const selectedId = useSelectedAnnotation();
|
|
10
|
+
return (_jsxs("aside", { className: className, style: {
|
|
11
|
+
flex: "0 0 240px",
|
|
12
|
+
background: "var(--panel, #161616)",
|
|
13
|
+
color: "var(--text, #ddd)",
|
|
14
|
+
borderLeft: "1px solid var(--border, #2a2a2a)",
|
|
15
|
+
display: "flex",
|
|
16
|
+
flexDirection: "column",
|
|
17
|
+
minHeight: 0,
|
|
18
|
+
...style,
|
|
19
|
+
}, children: [_jsxs("header", { style: {
|
|
20
|
+
padding: "8px 12px",
|
|
21
|
+
fontSize: 11,
|
|
22
|
+
textTransform: "uppercase",
|
|
23
|
+
letterSpacing: 0.5,
|
|
24
|
+
color: "var(--muted, #888)",
|
|
25
|
+
borderBottom: "1px solid var(--border, #2a2a2a)",
|
|
26
|
+
}, children: ["Comments (", annotations.length, ")"] }), _jsx("div", { style: { flex: 1, overflowY: "auto" }, children: annotations.length === 0 ? (_jsx("div", { style: { padding: "16px 12px", color: "var(--faint, #555)", fontSize: 12 }, children: "No comments yet. Right-click on the canvas to add one." })) : (annotations.map((ann) => {
|
|
27
|
+
const first = ann.thread[0];
|
|
28
|
+
const isOpen = ann.id === selectedId;
|
|
29
|
+
return (_jsxs("button", { type: "button", onClick: () => editor?.setSelectedAnnotation(ann.id), style: {
|
|
30
|
+
display: "block",
|
|
31
|
+
width: "100%",
|
|
32
|
+
textAlign: "left",
|
|
33
|
+
padding: "8px 12px",
|
|
34
|
+
border: "none",
|
|
35
|
+
borderLeft: isOpen ? "3px solid var(--accent, #1a73e8)" : "3px solid transparent",
|
|
36
|
+
background: isOpen ? "var(--cursor-bg, rgba(26,115,232,0.12))" : "transparent",
|
|
37
|
+
color: "inherit",
|
|
38
|
+
cursor: "pointer",
|
|
39
|
+
opacity: ann.resolved ? 0.55 : 1,
|
|
40
|
+
borderBottom: "1px solid var(--divider, #333)",
|
|
41
|
+
font: "inherit",
|
|
42
|
+
fontSize: 12,
|
|
43
|
+
}, children: [_jsxs("div", { style: { display: "flex", gap: 6, marginBottom: 2 }, children: [_jsx("span", { style: { fontWeight: 600 }, children: first?.authorName ?? "—" }), ann.thread.length > 1 ? (_jsxs("span", { style: { color: "var(--muted, #888)" }, children: ["+", ann.thread.length - 1] })) : null, ann.resolved ? (_jsx("span", { style: { marginLeft: "auto", color: "var(--muted, #888)" }, children: "resolved" })) : null] }), _jsx("div", { style: {
|
|
44
|
+
color: "var(--muted, #888)",
|
|
45
|
+
overflow: "hidden",
|
|
46
|
+
textOverflow: "ellipsis",
|
|
47
|
+
whiteSpace: "nowrap",
|
|
48
|
+
}, children: first?.body ?? "(empty)" })] }, ann.id));
|
|
49
|
+
})) })] }));
|
|
50
|
+
};
|
|
51
|
+
export const CommentsPopover = ({ style, className }) => {
|
|
52
|
+
const editor = useDiagramOptional();
|
|
53
|
+
const annotations = useAnnotations();
|
|
54
|
+
const selectedId = useSelectedAnnotation();
|
|
55
|
+
const [draft, setDraft] = useState("");
|
|
56
|
+
if (!editor || !selectedId)
|
|
57
|
+
return null;
|
|
58
|
+
const ann = annotations.find((a) => a.id === selectedId);
|
|
59
|
+
if (!ann)
|
|
60
|
+
return null;
|
|
61
|
+
const submit = () => {
|
|
62
|
+
const body = draft.trim();
|
|
63
|
+
if (!body)
|
|
64
|
+
return;
|
|
65
|
+
editor.addComment(ann.id, body);
|
|
66
|
+
setDraft("");
|
|
67
|
+
};
|
|
68
|
+
return (_jsxs("div", { className: className, role: "dialog", "aria-label": "Annotation thread", style: {
|
|
69
|
+
position: "absolute",
|
|
70
|
+
top: 16,
|
|
71
|
+
right: 16,
|
|
72
|
+
width: COMMENTS_PANEL_WIDTH,
|
|
73
|
+
maxHeight: "70vh",
|
|
74
|
+
display: "flex",
|
|
75
|
+
flexDirection: "column",
|
|
76
|
+
background: "var(--panel, #161616)",
|
|
77
|
+
color: "var(--text, #ddd)",
|
|
78
|
+
border: "1px solid var(--border, #2a2a2a)",
|
|
79
|
+
borderRadius: 8,
|
|
80
|
+
boxShadow: "0 6px 24px rgba(0,0,0,0.4)",
|
|
81
|
+
font: "13px system-ui, -apple-system, sans-serif",
|
|
82
|
+
...style,
|
|
83
|
+
}, children: [_jsxs("header", { style: {
|
|
84
|
+
display: "flex",
|
|
85
|
+
alignItems: "center",
|
|
86
|
+
gap: 8,
|
|
87
|
+
padding: "8px 10px",
|
|
88
|
+
borderBottom: "1px solid var(--divider, #333)",
|
|
89
|
+
}, children: [_jsx("span", { style: { fontSize: 11, color: "var(--muted, #888)" }, children: ann.resolved ? "Resolved" : "Open" }), _jsx("button", { type: "button", onClick: () => { editor.toggleAnnotationResolved(ann.id); }, style: popoverButtonStyle, children: ann.resolved ? "Reopen" : "Resolve" }), _jsx("button", { type: "button", onClick: () => {
|
|
90
|
+
editor.removeAnnotation(ann.id);
|
|
91
|
+
}, style: popoverButtonStyle, "aria-label": "Delete thread", children: "\u00D7" }), _jsx("button", { type: "button", onClick: () => { editor.setSelectedAnnotation(null); }, style: { ...popoverButtonStyle, marginLeft: 4 }, "aria-label": "Close", children: "\u2304" })] }), _jsx("div", { style: { flex: 1, overflowY: "auto", padding: "8px 10px" }, children: ann.thread.length === 0 ? (_jsx("div", { style: { color: "var(--faint, #555)" }, children: "No comments yet." })) : (ann.thread.map((c) => (_jsxs("div", { style: { marginBottom: 10, position: "relative" }, children: [_jsx("button", { type: "button", onClick: () => { editor.removeComment(ann.id, c.id); }, "aria-label": "Delete comment", title: "Delete comment", style: {
|
|
92
|
+
position: "absolute",
|
|
93
|
+
top: 0,
|
|
94
|
+
right: 0,
|
|
95
|
+
background: "transparent",
|
|
96
|
+
border: "none",
|
|
97
|
+
color: "var(--muted, #888)",
|
|
98
|
+
cursor: "pointer",
|
|
99
|
+
padding: "0 4px",
|
|
100
|
+
fontSize: 12,
|
|
101
|
+
lineHeight: 1,
|
|
102
|
+
}, children: "\u00D7" }), _jsxs("div", { style: {
|
|
103
|
+
fontSize: 11,
|
|
104
|
+
color: "var(--muted, #888)",
|
|
105
|
+
marginBottom: 2,
|
|
106
|
+
}, children: [_jsx("strong", { style: { color: "var(--text, #ddd)" }, children: c.authorName }), " ", formatTime(c.createdAt)] }), _jsx("div", { style: { whiteSpace: "pre-wrap", paddingRight: 16 }, children: _jsx(Markdown, { text: c.body }) })] }, c.id)))) }), _jsxs("form", { onSubmit: (ev) => {
|
|
107
|
+
ev.preventDefault();
|
|
108
|
+
submit();
|
|
109
|
+
}, style: {
|
|
110
|
+
padding: "8px 10px",
|
|
111
|
+
borderTop: "1px solid var(--divider, #333)",
|
|
112
|
+
display: "flex",
|
|
113
|
+
gap: 6,
|
|
114
|
+
}, children: [_jsx("input", { type: "text", value: draft, onChange: (ev) => { setDraft(ev.target.value); }, placeholder: "Reply\u2026", style: {
|
|
115
|
+
flex: 1,
|
|
116
|
+
background: "var(--button-bg, #2a2a2a)",
|
|
117
|
+
border: "1px solid var(--border, #2a2a2a)",
|
|
118
|
+
color: "inherit",
|
|
119
|
+
padding: "4px 8px",
|
|
120
|
+
borderRadius: 4,
|
|
121
|
+
font: "inherit",
|
|
122
|
+
} }), _jsx("button", { type: "submit", style: popoverButtonStyle, disabled: !draft.trim(), children: "Send" })] })] }));
|
|
123
|
+
};
|
|
124
|
+
const popoverButtonStyle = {
|
|
125
|
+
background: "var(--button-bg, #2a2a2a)",
|
|
126
|
+
border: "1px solid var(--border, #2a2a2a)",
|
|
127
|
+
color: "inherit",
|
|
128
|
+
padding: "3px 8px",
|
|
129
|
+
borderRadius: 4,
|
|
130
|
+
cursor: "pointer",
|
|
131
|
+
fontSize: 11,
|
|
132
|
+
};
|
|
133
|
+
const formatTime = (iso) => {
|
|
134
|
+
const date = new Date(iso);
|
|
135
|
+
if (Number.isNaN(date.getTime()))
|
|
136
|
+
return "";
|
|
137
|
+
return date.toLocaleString();
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=comments-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comments-panel.js","sourceRoot":"","sources":["../src/comments-panel.tsx"],"names":[],"mappings":"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"}
|