@floegence/floe-webapp-core 0.35.42 → 0.35.44

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.
Files changed (30) hide show
  1. package/dist/components/notes/NotesBoard.d.ts +36 -0
  2. package/dist/components/notes/NotesBoard.js +141 -0
  3. package/dist/components/notes/NotesBoardNote.d.ts +17 -0
  4. package/dist/components/notes/NotesBoardNote.js +114 -0
  5. package/dist/components/notes/NotesContextMenu.js +7 -7
  6. package/dist/components/notes/NotesEditorFlyout.d.ts +19 -0
  7. package/dist/components/notes/NotesEditorFlyout.js +92 -0
  8. package/dist/components/notes/NotesOverlay.d.ts +9 -1
  9. package/dist/components/notes/NotesOverlay.js +445 -0
  10. package/dist/components/notes/NotesOverlayLegacy.d.ts +1 -8
  11. package/dist/components/notes/NotesOverviewPanel.d.ts +22 -0
  12. package/dist/components/notes/NotesOverviewPanel.js +52 -0
  13. package/dist/components/notes/NotesTopicRail.d.ts +18 -0
  14. package/dist/components/notes/NotesTopicRail.js +94 -0
  15. package/dist/components/notes/NotesTrashFlyout.d.ts +13 -0
  16. package/dist/components/notes/NotesTrashFlyout.js +90 -0
  17. package/dist/components/notes/index.d.ts +1 -1
  18. package/dist/components/notes/notesOverlayHelpers.d.ts +93 -0
  19. package/dist/components/notes/notesOverlayHelpers.js +159 -0
  20. package/dist/components/notes/useNotesOverlayModel.d.ts +196 -0
  21. package/dist/components/notes/useNotesOverlayModel.js +559 -0
  22. package/dist/floe.css +3 -1
  23. package/dist/full.js +1 -1
  24. package/dist/hooks/useOverlayMask.d.ts +3 -2
  25. package/dist/hooks/useOverlayMask.js +37 -27
  26. package/dist/notes-legacy.css +46 -12
  27. package/dist/notes.js +1 -1
  28. package/dist/styles.css +1 -1
  29. package/package.json +1 -1
  30. package/dist/components/notes/NotesOverlayLegacy.js +0 -1551
@@ -0,0 +1,90 @@
1
+ import { createComponent as r, insert as t, className as D, effect as O, setStyleProperty as N, template as a, delegateEvents as Q } from "solid-js/web";
2
+ import { Show as u, For as P } from "solid-js";
3
+ import { X as U } from "../icons/index.js";
4
+ import { NotesAnimalIcon as V, NotesTrashCanIcon as W } from "./notesAppearance.js";
5
+ import { topicAccentClass as Y, notePreviewMetrics as Z, getNotePreviewText as tt, formatDeletedTimestamp as et, formatRemainingTrashTime as st, noteColorClass as nt } from "./notesOverlayHelpers.js";
6
+ var it = /* @__PURE__ */ a("<div class=notes-trash-backdrop>"), lt = /* @__PURE__ */ a("<div class=notes-trash__sections>"), ot = /* @__PURE__ */ a('<div class=notes-trash__flyout><div class=notes-trash__panel><div class=notes-trash__panel-header><div class=notes-trash__panel-title-group><div class=notes-trash__panel-title-row><div class=notes-trash__panel-title>Trash Dock</div><div class=notes-trash__panel-header-actions><div class=notes-trash__panel-count> items</div><button type=button class=notes-trash__panel-close aria-label="Close trash dock"></button></div></div><div class=notes-trash__panel-body>Grouped by topic, sorted by latest deletion, and recoverable for 72 hours.'), rt = /* @__PURE__ */ a("<div class=notes-trash__empty><div><strong>Trash is empty</strong><span>Deleted notes from any topic will appear here."), at = /* @__PURE__ */ a("<section class=notes-trash-section><div class=notes-trash-section__header><div class=notes-trash-section__title-group><div class=notes-trash-section__title-line><div></div><div class=notes-trash-section__title></div></div><div class=notes-trash-section__meta> deleted note</div></div><button type=button class=notes-trash-section__clear>Clear topic trash</button></div><div class=notes-trash-section__grid>"), ct = /* @__PURE__ */ a("<button type=button class=is-danger>Delete now"), _t = /* @__PURE__ */ a("<article><div class=notes-note__surface><div class=notes-trash-note__meta><span></span><strong></strong></div><div class=notes-trash-note__body><span></span></div><div class=notes-trash-note__actions><button type=button>Restore");
7
+ function mt(s) {
8
+ return r(u, {
9
+ get when() {
10
+ return s.open;
11
+ },
12
+ get children() {
13
+ return [(() => {
14
+ var c = it();
15
+ return c.$$contextmenu = (l) => {
16
+ l.preventDefault(), l.stopPropagation(), s.onBackdropContextMenu?.(l);
17
+ }, c.$$click = () => s.onClose(), c;
18
+ })(), (() => {
19
+ var c = ot(), l = c.firstChild, R = l.firstChild, z = R.firstChild, A = z.firstChild, F = A.firstChild, I = F.nextSibling, d = I.firstChild, M = d.firstChild, m = d.nextSibling;
20
+ return l.$$contextmenu = (e) => {
21
+ e.preventDefault(), e.stopPropagation();
22
+ }, l.$$pointerdown = (e) => e.stopPropagation(), t(d, () => s.groups.reduce((e, n) => e + n.items.length, 0), M), m.$$click = () => s.onClose(), t(m, r(U, {
23
+ class: "w-4 h-4"
24
+ })), t(l, r(u, {
25
+ get when() {
26
+ return s.groups.length > 0;
27
+ },
28
+ get fallback() {
29
+ return (() => {
30
+ var e = rt(), n = e.firstChild;
31
+ return t(e, r(W, {
32
+ class: "notes-trash__empty-icon"
33
+ }), n), e;
34
+ })();
35
+ },
36
+ get children() {
37
+ var e = lt();
38
+ return t(e, r(P, {
39
+ get each() {
40
+ return s.groups;
41
+ },
42
+ children: (n) => {
43
+ const B = Y(n.topic_icon_accent);
44
+ return (() => {
45
+ var p = at(), g = p.firstChild, f = g.firstChild, C = f.firstChild, h = C.firstChild, E = h.nextSibling, $ = C.nextSibling, G = $.firstChild, K = f.nextSibling, X = g.nextSibling;
46
+ return D(h, `notes-topic-mark notes-topic-mark--trash ${B}`), t(h, r(V, {
47
+ get iconKey() {
48
+ return n.topic_icon_key;
49
+ },
50
+ class: "notes-topic-mark__icon"
51
+ })), t(E, () => n.topic_name), t($, () => n.items.length, G), t($, () => n.items.length === 1 ? "" : "s", null), K.$$click = () => s.onClearTopicTrash(n.topic_id), t(X, r(P, {
52
+ get each() {
53
+ return n.items;
54
+ },
55
+ children: (o) => {
56
+ const v = Z(o), j = tt(o.body, v.preview_limit);
57
+ return (() => {
58
+ var _ = _t(), q = _.firstChild, b = q.firstChild, w = b.firstChild, H = w.nextSibling, x = b.nextSibling, J = x.firstChild, y = x.nextSibling, L = y.firstChild;
59
+ return t(w, () => et(o.deleted_at_unix_ms)), t(H, () => st(o.deleted_at_unix_ms, s.now)), t(J, j), L.$$click = () => s.onRestore(o.note_id), t(y, r(u, {
60
+ get when() {
61
+ return s.canDeleteNow;
62
+ },
63
+ get children() {
64
+ var i = ct();
65
+ return i.$$click = () => s.onDeleteNow(o.note_id), i;
66
+ }
67
+ }), null), O((i) => {
68
+ var k = `notes-note notes-trash-note ${nt(o.color_token)} notes-note--size-${o.size_bucket - 1}`, S = `${v.width}px`, T = `${v.height}px`;
69
+ return k !== i.e && D(_, i.e = k), S !== i.t && N(_, "--note-width", i.t = S), T !== i.a && N(_, "--note-height", i.a = T), i;
70
+ }, {
71
+ e: void 0,
72
+ t: void 0,
73
+ a: void 0
74
+ }), _;
75
+ })();
76
+ }
77
+ })), p;
78
+ })();
79
+ }
80
+ })), e;
81
+ }
82
+ }), null), c;
83
+ })()];
84
+ }
85
+ });
86
+ }
87
+ Q(["click", "contextmenu", "pointerdown"]);
88
+ export {
89
+ mt as NotesTrashFlyout
90
+ };
@@ -1,4 +1,4 @@
1
- export { NotesOverlay, type NotesOverlayProps } from './NotesOverlay';
1
+ export { NotesOverlay, type NotesOverlayInteractionMode, type NotesOverlayProps, } from './NotesOverlay';
2
2
  export { NotesContextMenu, estimateNotesContextMenuHeight, NOTES_CONTEXT_MENU_WIDTH_PX, type NotesContextMenuItem } from './NotesContextMenu';
3
3
  export { NOTE_COLOR_LABELS, TOPIC_ACCENT_LABELS, NotesAnimalIcon, NotesOverlayIcon, NotesTrashCanIcon, } from './notesAppearance';
4
4
  export * from './types';
@@ -0,0 +1,93 @@
1
+ import { type NoteColorToken, type NotesItem, type NotesPoint, type NotesRect, type NotesTrashItem, type NotesViewport, type TopicAccentToken } from './types';
2
+ export declare const NOTES_TRASH_RETENTION_MS: number;
3
+ export declare const NOTES_CANVAS_ZOOM_STEP = 1.18;
4
+ export declare const NOTES_DEFAULT_FRAME_WIDTH = 1280;
5
+ export declare const NOTES_DEFAULT_FRAME_HEIGHT = 880;
6
+ export declare const NOTES_MOBILE_BREAKPOINT_PX = 960;
7
+ export interface NotesCanvasPlacement {
8
+ topicID: string;
9
+ worldX: number;
10
+ worldY: number;
11
+ }
12
+ export interface NotesContextMenuState extends NotesCanvasPlacement {
13
+ clientX: number;
14
+ clientY: number;
15
+ noteID?: string | null;
16
+ }
17
+ export interface NotesOverviewBounds extends NotesRect {
18
+ width: number;
19
+ height: number;
20
+ }
21
+ export interface NotesOverviewViewportMetrics {
22
+ left: number;
23
+ top: number;
24
+ width: number;
25
+ height: number;
26
+ centerX: number;
27
+ centerY: number;
28
+ }
29
+ export interface NotesOverviewNavigationState {
30
+ pointerId: number;
31
+ bounds: NotesOverviewBounds;
32
+ surfaceRect: DOMRect;
33
+ centerOffsetX: number;
34
+ centerOffsetY: number;
35
+ }
36
+ export declare function clamp(value: number, min: number, max: number): number;
37
+ export declare function clampOverviewCenter(center: number, span: number, min: number, max: number): number;
38
+ export declare function getNormalizedOverviewPoint(clientX: number, clientY: number, rect: DOMRect): {
39
+ x: number;
40
+ y: number;
41
+ };
42
+ export declare function normalizeNoteText(text: string): string;
43
+ export declare function getNotePreviewText(text: string, limit: number): string;
44
+ export declare function formatRemainingTrashTime(deletedAtUnixMs: number, now?: number): string;
45
+ export declare function formatDeletedTimestamp(timestamp: number): string;
46
+ export declare function noteColorClass(token: NoteColorToken): string;
47
+ export declare function topicAccentClass(token: TopicAccentToken): string;
48
+ export declare function buildOverviewBounds(rect: NotesRect): NotesOverviewBounds;
49
+ export declare function resolveOverviewBounds(boardBounds: NotesRect, visibleRect: NotesRect): NotesOverviewBounds;
50
+ export declare function resolveFrameSize(frame: {
51
+ width: number;
52
+ height: number;
53
+ }): {
54
+ width: number;
55
+ height: number;
56
+ };
57
+ export declare function resolveCenteredViewport(options: {
58
+ viewport: NotesViewport;
59
+ frame: {
60
+ width: number;
61
+ height: number;
62
+ };
63
+ bounds: NotesOverviewBounds;
64
+ worldX: number;
65
+ worldY: number;
66
+ scale?: number;
67
+ }): NotesViewport;
68
+ export declare function createOverviewItem(item: NotesItem, bounds: NotesOverviewBounds): {
69
+ id: string;
70
+ className: string;
71
+ x: number;
72
+ y: number;
73
+ width: number;
74
+ height: number;
75
+ };
76
+ export declare function createContextMenuPosition(options: {
77
+ clientX: number;
78
+ clientY: number;
79
+ menuWidth: number;
80
+ menuHeight: number;
81
+ }): {
82
+ left: number;
83
+ top: number;
84
+ };
85
+ export declare function notePreviewMetrics(item: NotesItem): Readonly<{
86
+ width: number;
87
+ height: number;
88
+ preview_lines: number;
89
+ preview_limit: number;
90
+ }>;
91
+ export declare function hasLiveNotesForTopic(items: readonly NotesItem[], topicID: string): number;
92
+ export declare function findTrashTopicNoteCount(items: readonly NotesTrashItem[], topicID: string): number;
93
+ export declare function samePoint(left: NotesPoint, right: NotesPoint): boolean;
@@ -0,0 +1,159 @@
1
+ import { NOTE_BUCKET_METRICS as c, clampScale as u, centerViewportOnWorldPoint as d } from "./types.js";
2
+ const l = 4320 * 60 * 1e3, E = 1.18, s = 1280, f = 880, X = 960, w = Object.freeze({
3
+ amber: "butter",
4
+ azure: "mist",
5
+ coral: "coral",
6
+ graphite: "sand",
7
+ rose: "blush",
8
+ sage: "moss"
9
+ }), x = Object.freeze({
10
+ berry: "rose",
11
+ ember: "coral",
12
+ gold: "amber",
13
+ ink: "plum",
14
+ moss: "mint",
15
+ sea: "sky"
16
+ });
17
+ function a(e, t, n) {
18
+ return Math.max(t, Math.min(n, e));
19
+ }
20
+ function m(e, t, n, i) {
21
+ const r = i - n;
22
+ return !Number.isFinite(r) || r <= 0 ? e : t >= r ? n + r / 2 : a(e, n + t / 2, i - t / 2);
23
+ }
24
+ function N(e, t, n) {
25
+ return {
26
+ x: a((e - n.left) / n.width, 0, 1),
27
+ y: a((t - n.top) / n.height, 0, 1)
28
+ };
29
+ }
30
+ function T(e) {
31
+ return String(e ?? "").replace(/\r\n/g, `
32
+ `).trim();
33
+ }
34
+ function S(e, t) {
35
+ const n = T(e).replace(/\n{3,}/g, `
36
+
37
+ `);
38
+ return n ? n.length <= t ? n : `${n.slice(0, Math.max(0, t - 1)).trimEnd()}...` : "Empty note";
39
+ }
40
+ function Y(e, t = Date.now()) {
41
+ const n = Math.max(0, l - (t - e)), i = Math.ceil(n / (3600 * 1e3));
42
+ if (i >= 24) {
43
+ const r = Math.floor(i / 24), o = i % 24;
44
+ return o === 0 ? `${r}d left` : `${r}d ${o}h left`;
45
+ }
46
+ return `${Math.max(1, i)}h left`;
47
+ }
48
+ function v(e) {
49
+ return new Intl.DateTimeFormat(void 0, {
50
+ month: "short",
51
+ day: "numeric",
52
+ hour: "numeric",
53
+ minute: "2-digit"
54
+ }).format(e);
55
+ }
56
+ function _(e) {
57
+ return `notes-note--${w[e]}`;
58
+ }
59
+ function C(e) {
60
+ return `notes-topic-tone--${x[e]}`;
61
+ }
62
+ function g(e) {
63
+ return {
64
+ ...e,
65
+ width: e.maxX - e.minX,
66
+ height: e.maxY - e.minY
67
+ };
68
+ }
69
+ function y(e, t) {
70
+ const n = t.maxX - t.minX, i = t.maxY - t.minY;
71
+ return g({
72
+ minX: Math.min(e.minX - n / 2, t.minX),
73
+ minY: Math.min(e.minY - i / 2, t.minY),
74
+ maxX: Math.max(e.maxX + n / 2, t.maxX),
75
+ maxY: Math.max(e.maxY + i / 2, t.maxY)
76
+ });
77
+ }
78
+ function M(e) {
79
+ return {
80
+ width: e.width > 0 ? e.width : typeof window > "u" ? s : window.innerWidth,
81
+ height: e.height > 0 ? e.height : typeof window > "u" ? f : window.innerHeight
82
+ };
83
+ }
84
+ function A(e) {
85
+ const t = u(e.scale ?? e.viewport.scale), n = M(e.frame), i = n.width / t, r = n.height / t, o = m(
86
+ e.worldX,
87
+ i,
88
+ e.bounds.minX,
89
+ e.bounds.maxX
90
+ ), h = m(
91
+ e.worldY,
92
+ r,
93
+ e.bounds.minY,
94
+ e.bounds.maxY
95
+ );
96
+ return d(
97
+ { ...e.viewport, scale: t },
98
+ o,
99
+ h,
100
+ n.width,
101
+ n.height
102
+ );
103
+ }
104
+ function F(e, t) {
105
+ const n = c[e.size_bucket];
106
+ return {
107
+ id: e.note_id,
108
+ className: _(e.color_token),
109
+ x: (e.x - t.minX) / t.width * 100,
110
+ y: (e.y - t.minY) / t.height * 100,
111
+ width: n.width / t.width * 100,
112
+ height: n.height / t.height * 100
113
+ };
114
+ }
115
+ function p(e) {
116
+ const t = typeof window > "u" ? e.clientX : window.innerWidth - e.menuWidth, n = typeof window > "u" ? e.clientY : window.innerHeight - e.menuHeight;
117
+ return {
118
+ left: Math.max(16, Math.min(e.clientX, t)),
119
+ top: Math.max(16, Math.min(e.clientY, n))
120
+ };
121
+ }
122
+ function I(e) {
123
+ return c[e.size_bucket];
124
+ }
125
+ function W(e, t) {
126
+ return e.reduce((n, i) => n + (i.topic_id === t ? 1 : 0), 0);
127
+ }
128
+ function H(e, t) {
129
+ return e.reduce((n, i) => n + (i.topic_id === t ? 1 : 0), 0);
130
+ }
131
+ function P(e, t) {
132
+ return e.x === t.x && e.y === t.y;
133
+ }
134
+ export {
135
+ E as NOTES_CANVAS_ZOOM_STEP,
136
+ f as NOTES_DEFAULT_FRAME_HEIGHT,
137
+ s as NOTES_DEFAULT_FRAME_WIDTH,
138
+ X as NOTES_MOBILE_BREAKPOINT_PX,
139
+ l as NOTES_TRASH_RETENTION_MS,
140
+ g as buildOverviewBounds,
141
+ a as clamp,
142
+ m as clampOverviewCenter,
143
+ p as createContextMenuPosition,
144
+ F as createOverviewItem,
145
+ H as findTrashTopicNoteCount,
146
+ v as formatDeletedTimestamp,
147
+ Y as formatRemainingTrashTime,
148
+ N as getNormalizedOverviewPoint,
149
+ S as getNotePreviewText,
150
+ W as hasLiveNotesForTopic,
151
+ T as normalizeNoteText,
152
+ _ as noteColorClass,
153
+ I as notePreviewMetrics,
154
+ A as resolveCenteredViewport,
155
+ M as resolveFrameSize,
156
+ y as resolveOverviewBounds,
157
+ P as samePoint,
158
+ C as topicAccentClass
159
+ };
@@ -0,0 +1,196 @@
1
+ import { type JSX } from 'solid-js';
2
+ import { type NotesContextMenuItem } from './NotesContextMenu';
3
+ import { type NotesContextMenuState, type NotesOverviewNavigationState } from './notesOverlayHelpers';
4
+ import { type NotesController, type NotesItem, type NotesTopic, type NotesViewport } from './types';
5
+ export interface UseNotesOverlayModelOptions {
6
+ open: boolean;
7
+ onClose: () => void;
8
+ controller: NotesController;
9
+ }
10
+ export declare function useNotesOverlayModel(options: UseNotesOverlayModelOptions): {
11
+ header: {
12
+ topicCount: import("solid-js").Accessor<number>;
13
+ totalLiveNotes: import("solid-js").Accessor<number>;
14
+ trashCount: import("solid-js").Accessor<number>;
15
+ };
16
+ rail: {
17
+ topics: import("solid-js").Accessor<Readonly<{
18
+ topic_id: string;
19
+ name: string;
20
+ icon_key: import("./types").TopicIconKey;
21
+ icon_accent: import("./types").TopicAccentToken;
22
+ sort_order: number;
23
+ created_at_unix_ms: number;
24
+ updated_at_unix_ms: number;
25
+ deleted_at_unix_ms: number;
26
+ }>[]>;
27
+ activeTopicID: import("solid-js").Accessor<string>;
28
+ draftTopicTitle: import("solid-js").Accessor<string>;
29
+ renamingTopicID: import("solid-js").Accessor<string | null>;
30
+ renamingTopicTitle: import("solid-js").Accessor<string>;
31
+ getLiveNoteCount: (topicID: string) => number;
32
+ setDraftTopicTitle: import("solid-js").Setter<string>;
33
+ submitTopic: () => Promise<void>;
34
+ selectTopic: (topicID: string) => void;
35
+ startTopicRename: (topic: NotesTopic) => void;
36
+ setRenamingTopicTitle: import("solid-js").Setter<string>;
37
+ saveTopicRename: () => Promise<void>;
38
+ cancelTopicRename: () => void;
39
+ deleteTopic: (topic: NotesTopic) => Promise<void>;
40
+ };
41
+ board: {
42
+ activeTopic: import("solid-js").Accessor<Readonly<{
43
+ topic_id: string;
44
+ name: string;
45
+ icon_key: import("./types").TopicIconKey;
46
+ icon_accent: import("./types").TopicAccentToken;
47
+ sort_order: number;
48
+ created_at_unix_ms: number;
49
+ updated_at_unix_ms: number;
50
+ deleted_at_unix_ms: number;
51
+ }> | undefined>;
52
+ activeTopicLabel: import("solid-js").Accessor<string>;
53
+ activeItems: import("solid-js").Accessor<Readonly<{
54
+ note_id: string;
55
+ topic_id: string;
56
+ body: string;
57
+ preview_text: string;
58
+ character_count: number;
59
+ size_bucket: import("./types").NotesSizeBucket;
60
+ style_version: string;
61
+ color_token: import("./types").NoteColorToken;
62
+ x: number;
63
+ y: number;
64
+ z_index: number;
65
+ created_at_unix_ms: number;
66
+ updated_at_unix_ms: number;
67
+ }>[]>;
68
+ activeTopicID: import("solid-js").Accessor<string>;
69
+ topics: import("solid-js").Accessor<Readonly<{
70
+ topic_id: string;
71
+ name: string;
72
+ icon_key: import("./types").TopicIconKey;
73
+ icon_accent: import("./types").TopicAccentToken;
74
+ sort_order: number;
75
+ created_at_unix_ms: number;
76
+ updated_at_unix_ms: number;
77
+ deleted_at_unix_ms: number;
78
+ }>[]>;
79
+ topZIndex: import("solid-js").Accessor<number>;
80
+ viewport: import("solid-js").Accessor<Readonly<{
81
+ x: number;
82
+ y: number;
83
+ scale: number;
84
+ }>>;
85
+ boardScaleLabel: import("solid-js").Accessor<string>;
86
+ isMobile: import("solid-js").Accessor<boolean>;
87
+ overviewOpen: import("solid-js").Accessor<boolean>;
88
+ optimisticFrontNoteID: import("solid-js").Accessor<string | null>;
89
+ copiedNoteID: import("solid-js").Accessor<string | null>;
90
+ setCanvasFrameRef: import("solid-js").Setter<HTMLDivElement | undefined>;
91
+ commitViewport: (viewport: NotesViewport) => void;
92
+ openCanvasContextMenu: (event: {
93
+ clientX: number;
94
+ clientY: number;
95
+ worldX: number;
96
+ worldY: number;
97
+ }) => void;
98
+ zoomOut: () => void;
99
+ zoomIn: () => void;
100
+ openOverview: () => void;
101
+ selectTopic: (topicID: string) => void;
102
+ mobileCreateNote: () => Promise<void>;
103
+ mobilePaste: () => Promise<void>;
104
+ copyNote: (item: NotesItem) => Promise<void>;
105
+ openNoteContextMenu: (event: MouseEvent, item: NotesItem) => void;
106
+ openEditor: (noteID: string) => void;
107
+ moveToTrash: (noteID: string) => Promise<void>;
108
+ startOptimisticFront: (noteID: string) => void;
109
+ commitFront: (noteID: string) => void;
110
+ commitMove: (noteID: string, position: {
111
+ x: number;
112
+ y: number;
113
+ }) => Promise<void>;
114
+ };
115
+ overview: {
116
+ items: import("solid-js").Accessor<{
117
+ id: string;
118
+ className: string;
119
+ x: number;
120
+ y: number;
121
+ width: number;
122
+ height: number;
123
+ }[]>;
124
+ viewportStyle: import("solid-js").Accessor<{
125
+ left: string;
126
+ top: string;
127
+ width: string;
128
+ height: string;
129
+ }>;
130
+ navigationState: import("solid-js").Accessor<NotesOverviewNavigationState | null>;
131
+ beginNavigation: JSX.EventHandler<HTMLDivElement, PointerEvent>;
132
+ close: () => void;
133
+ open: () => void;
134
+ };
135
+ trash: {
136
+ open: import("solid-js").Accessor<boolean>;
137
+ groups: import("solid-js").Accessor<Readonly<{
138
+ topic_id: string;
139
+ topic_name: string;
140
+ topic_icon_key: import("./types").TopicIconKey;
141
+ topic_icon_accent: import("./types").TopicAccentToken;
142
+ topic_sort_order: number;
143
+ latest_deleted_at_unix_ms: number;
144
+ items: import("./types").NotesTrashItem[];
145
+ }>[]>;
146
+ count: import("solid-js").Accessor<number>;
147
+ now: import("solid-js").Accessor<number>;
148
+ canDeleteNow: boolean;
149
+ close: () => void;
150
+ openDock: () => void;
151
+ backdropContextMenu: (event: MouseEvent) => void;
152
+ restore: (noteID: string) => Promise<void>;
153
+ deleteNow: (noteID: string) => Promise<void>;
154
+ clearTopic: (topicID: string) => Promise<void>;
155
+ };
156
+ contextMenu: {
157
+ state: import("solid-js").Accessor<NotesContextMenuState | null>;
158
+ items: import("solid-js").Accessor<NotesContextMenuItem[]>;
159
+ position: import("solid-js").Accessor<{
160
+ left: number;
161
+ top: number;
162
+ } | undefined>;
163
+ close: () => null;
164
+ };
165
+ editor: {
166
+ note: import("solid-js").Accessor<Readonly<{
167
+ note_id: string;
168
+ topic_id: string;
169
+ body: string;
170
+ preview_text: string;
171
+ character_count: number;
172
+ size_bucket: import("./types").NotesSizeBucket;
173
+ style_version: string;
174
+ color_token: import("./types").NoteColorToken;
175
+ x: number;
176
+ y: number;
177
+ z_index: number;
178
+ created_at_unix_ms: number;
179
+ updated_at_unix_ms: number;
180
+ }> | undefined>;
181
+ draftBody: import("solid-js").Accessor<string>;
182
+ draftColor: import("solid-js").Accessor<"azure" | "coral" | "graphite" | "sage" | "amber" | "rose">;
183
+ setDraftBody: import("solid-js").Setter<string>;
184
+ setDraftColor: import("solid-js").Setter<"azure" | "coral" | "graphite" | "sage" | "amber" | "rose">;
185
+ close: () => void;
186
+ save: () => Promise<void>;
187
+ };
188
+ manualPaste: {
189
+ open: () => boolean;
190
+ text: import("solid-js").Accessor<string>;
191
+ setText: import("solid-js").Setter<string>;
192
+ close: () => void;
193
+ confirm: () => Promise<void>;
194
+ };
195
+ handleCloseRequest: () => void;
196
+ };