@floegence/floe-webapp-core 0.35.41 → 0.35.43

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 (32) 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 +3 -1
  9. package/dist/components/notes/NotesOverlay.js +376 -852
  10. package/dist/components/notes/NotesOverlayLegacy.d.ts +1 -0
  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/types.d.ts +3 -0
  21. package/dist/components/notes/types.js +61 -44
  22. package/dist/components/notes/useNotesOverlayModel.d.ts +196 -0
  23. package/dist/components/notes/useNotesOverlayModel.js +559 -0
  24. package/dist/floe.css +3 -1
  25. package/dist/full.js +254 -253
  26. package/dist/hooks/useOverlayMask.d.ts +3 -2
  27. package/dist/hooks/useOverlayMask.js +37 -27
  28. package/dist/notes-legacy.css +2584 -0
  29. package/dist/notes.css +1 -1014
  30. package/dist/notes.js +26 -25
  31. package/dist/styles.css +1 -1
  32. package/package.json +1 -1
@@ -0,0 +1,559 @@
1
+ import { createSignal as a, createMemo as c, createEffect as v, onCleanup as X } from "solid-js";
2
+ import { Paste as xt, Plus as Dt, Trash as Mt } from "../icons/index.js";
3
+ import { NOTES_CONTEXT_MENU_WIDTH_PX as Pt, estimateNotesContextMenuHeight as Ot } from "./NotesContextMenu.js";
4
+ import { resolveFrameSize as F, resolveOverviewBounds as Xt, createOverviewItem as Yt, clamp as I, createContextMenuPosition as St, NOTES_MOBILE_BREAKPOINT_PX as Rt, getNormalizedOverviewPoint as Ee, findTrashTopicNoteCount as Lt, hasLiveNotesForTopic as zt, NOTES_CANVAS_ZOOM_STEP as ke, resolveCenteredViewport as Et } from "./notesOverlayHelpers.js";
5
+ import { normalizeNotesSnapshot as kt, groupTrashItems as At, visibleWorldRect as Bt, computeBoardBounds as Ft } from "./types.js";
6
+ import { useNotification as Vt } from "../../context/NotificationContext.js";
7
+ function u(n) {
8
+ return n instanceof Error ? n.message : String(n);
9
+ }
10
+ function qt(n) {
11
+ const s = Vt(), [oe, Ae] = a(), [_, Be] = a({ width: 0, height: 0 }), [T, p] = a(null), [ne, re] = a(""), [V, ie] = a(null), [ce, W] = a(""), [H, Y] = a(null), [se, ae] = a(""), [le, de] = a("amber"), [ue, pe] = a(!1), [fe, he] = a(!1), [$, we] = a(null), [K, Z] = a(""), [Fe, S] = a(null), [Ve, We] = a(Date.now()), [He, $e] = a(!1), [me, y] = a(null), [Ke, ve] = a(null), [Te, x] = a(null);
12
+ let D, j, q = null;
13
+ const h = c(() => kt(n.controller.snapshot())), g = c(
14
+ () => h().topics.filter((e) => e.deleted_at_unix_ms <= 0)
15
+ ), Ze = c(() => g().length), N = c(() => {
16
+ const e = n.controller.activeTopicID();
17
+ return g().some((t) => t.topic_id === e) ? e : g()[0]?.topic_id ?? "";
18
+ }), M = c(
19
+ () => g().find((e) => e.topic_id === N())
20
+ ), R = c(
21
+ () => h().items.filter((e) => e.topic_id === N())
22
+ ), je = c(() => At(h().trash_items)), ge = c(() => h().trash_items.length), qe = c(() => h().items.length), Ge = c(
23
+ () => R().reduce((e, t) => Math.max(e, t.z_index), 1)
24
+ ), w = c(
25
+ () => Te() ?? n.controller.viewport()
26
+ ), Ue = c(() => M()?.name ?? "No topic"), Je = c(
27
+ () => `${Math.round(w().scale * 100)}%`
28
+ ), Qe = c(() => {
29
+ const e = F(_());
30
+ return Bt(w(), e.width, e.height);
31
+ }), L = c(
32
+ () => Xt(Ft(R()), Qe())
33
+ ), et = c(
34
+ () => R().map((e) => Yt(e, L()))
35
+ ), ye = c(() => {
36
+ const e = L(), t = F(_()), o = w(), r = -o.x / o.scale, i = -o.y / o.scale, l = t.width / o.scale, f = t.height / o.scale, d = I(r, e.minX, e.maxX), C = I(i, e.minY, e.maxY), b = I(r + l, e.minX, e.maxX), te = I(i + f, e.minY, e.maxY), O = Math.max((b - d) / e.width * 100, 6), m = Math.max((te - C) / e.height * 100, 8), Le = (d - e.minX) / e.width * 100, ze = (C - e.minY) / e.height * 100;
37
+ return {
38
+ left: Le,
39
+ top: ze,
40
+ width: O,
41
+ height: m,
42
+ centerX: Le + O / 2,
43
+ centerY: ze + m / 2
44
+ };
45
+ }), tt = c(() => {
46
+ const e = ye();
47
+ return {
48
+ left: `${e.left}%`,
49
+ top: `${e.top}%`,
50
+ width: `${e.width}%`,
51
+ height: `${e.height}%`
52
+ };
53
+ }), Ne = c(() => {
54
+ const e = H();
55
+ return e ? h().items.find((t) => t.note_id === e) : void 0;
56
+ }), G = () => {
57
+ D !== void 0 && (window.clearTimeout(D), D = void 0);
58
+ }, z = () => {
59
+ we(null), Z("");
60
+ }, E = () => {
61
+ Y(null);
62
+ }, P = () => {
63
+ he(!1);
64
+ }, Ce = () => {
65
+ he(!0);
66
+ }, k = () => {
67
+ pe(!1);
68
+ }, U = () => {
69
+ pe(!0);
70
+ }, A = () => {
71
+ ie(null), W("");
72
+ }, ot = () => {
73
+ p(null), k(), P(), E(), z();
74
+ }, nt = () => {
75
+ if (T()) {
76
+ p(null);
77
+ return;
78
+ }
79
+ if (H()) {
80
+ E();
81
+ return;
82
+ }
83
+ if ($()) {
84
+ z();
85
+ return;
86
+ }
87
+ if (fe()) {
88
+ P();
89
+ return;
90
+ }
91
+ if (ue()) {
92
+ k();
93
+ return;
94
+ }
95
+ n.onClose();
96
+ }, B = (e) => {
97
+ n.controller.setActiveTopicID(e);
98
+ }, be = (e) => zt(h().items, e), rt = (e, t, o = M()?.topic_id) => {
99
+ if (!o) return null;
100
+ const r = g().find((d) => d.topic_id === o);
101
+ if (!r) return null;
102
+ const i = oe();
103
+ if (!i) return null;
104
+ const l = i.getBoundingClientRect();
105
+ if (l.width <= 0 || l.height <= 0 || e < l.left || e > l.right || t < l.top || t > l.bottom)
106
+ return null;
107
+ const f = w();
108
+ return {
109
+ topicID: r.topic_id,
110
+ worldX: (e - l.left - f.x) / f.scale,
111
+ worldY: (t - l.top - f.y) / f.scale
112
+ };
113
+ }, Ie = () => {
114
+ const e = M();
115
+ if (!e) return null;
116
+ const t = F(_()), o = w();
117
+ return {
118
+ topicID: e.topic_id,
119
+ worldX: (t.width / 2 - o.x) / o.scale,
120
+ worldY: (t.height / 2 - o.y) / o.scale
121
+ };
122
+ }, _e = (e, t, o) => {
123
+ const r = rt(e, t, o?.topicID);
124
+ return r ? (p({
125
+ clientX: e,
126
+ clientY: t,
127
+ worldX: r.worldX,
128
+ worldY: r.worldY,
129
+ topicID: r.topicID,
130
+ noteID: o?.noteID ?? null
131
+ }), !0) : !1;
132
+ }, xe = (e) => {
133
+ x(e), n.controller.setViewport(e), x(null);
134
+ }, De = (e, t, o) => Et({
135
+ viewport: w(),
136
+ frame: _(),
137
+ bounds: L(),
138
+ worldX: e,
139
+ worldY: t,
140
+ scale: o
141
+ }), Me = (e) => {
142
+ const t = w(), o = F(_()), r = (o.width / 2 - t.x) / t.scale, i = (o.height / 2 - t.y) / t.scale, l = e === "in" ? t.scale * ke : t.scale / ke;
143
+ xe(De(r, i, l));
144
+ }, Pe = (e, t, o) => {
145
+ const r = o.surfaceRect;
146
+ if (r.width <= 0 || r.height <= 0) return;
147
+ const i = Ee(e, t, r), l = I(i.x - o.centerOffsetX, 0, 1), f = I(i.y - o.centerOffsetY, 0, 1), d = o.bounds;
148
+ x(
149
+ De(
150
+ d.minX + l * d.width,
151
+ d.minY + f * d.height
152
+ )
153
+ );
154
+ }, J = (e) => {
155
+ if (j?.abort(), j = void 0, e) {
156
+ const t = Te();
157
+ t && n.controller.setViewport(t);
158
+ }
159
+ x(null), ve(null);
160
+ }, it = (e) => {
161
+ if (e.button !== 0 && e.pointerType !== "touch" && e.pointerType !== "pen")
162
+ return;
163
+ const t = e.currentTarget, o = t.getBoundingClientRect();
164
+ if (o.width <= 0 || o.height <= 0) return;
165
+ const r = Ee(e.clientX, e.clientY, o), i = ye(), l = r.x * 100, f = r.y * 100, d = l >= i.left && l <= i.left + i.width && f >= i.top && f <= i.top + i.height, C = {
166
+ pointerId: e.pointerId,
167
+ bounds: L(),
168
+ surfaceRect: o,
169
+ centerOffsetX: d ? r.x - i.centerX / 100 : 0,
170
+ centerOffsetY: d ? r.y - i.centerY / 100 : 0
171
+ };
172
+ J(!1), e.preventDefault(), e.stopPropagation(), ve(C), Pe(e.clientX, e.clientY, C), t.setPointerCapture?.(e.pointerId);
173
+ const b = new AbortController();
174
+ j = b;
175
+ const te = (m) => {
176
+ m.pointerId === e.pointerId && Pe(m.clientX, m.clientY, C);
177
+ }, O = (m) => {
178
+ m.pointerId === e.pointerId && (t.hasPointerCapture?.(e.pointerId) && t.releasePointerCapture(e.pointerId), J(!0));
179
+ };
180
+ t.addEventListener("pointermove", te, { signal: b.signal }), t.addEventListener("pointerup", O, {
181
+ once: !0,
182
+ signal: b.signal
183
+ }), t.addEventListener("pointercancel", O, {
184
+ once: !0,
185
+ signal: b.signal
186
+ });
187
+ }, Oe = async (e) => {
188
+ try {
189
+ const t = await n.controller.createNote({
190
+ topic_id: e.topicID,
191
+ x: e.worldX,
192
+ y: e.worldY,
193
+ body: ""
194
+ });
195
+ Y(t.note_id);
196
+ } catch (t) {
197
+ s.error("Create failed", u(t));
198
+ }
199
+ }, Xe = async (e, t) => {
200
+ try {
201
+ await n.controller.createNote({
202
+ topic_id: e.topicID,
203
+ x: e.worldX,
204
+ y: e.worldY,
205
+ body: t
206
+ }), s.success("Pasted", "Created a new note from clipboard text.");
207
+ } catch (o) {
208
+ s.error("Paste failed", u(o));
209
+ }
210
+ }, Ye = (e) => {
211
+ Z(""), we(e);
212
+ }, Se = async (e) => {
213
+ try {
214
+ const t = await navigator.clipboard.readText();
215
+ if (!t.trim()) {
216
+ s.info("Clipboard empty", "Paste text into the dialog to create a note."), Ye(e);
217
+ return;
218
+ }
219
+ await Xe(e, t);
220
+ } catch {
221
+ s.info("Clipboard blocked", "Manual paste is available as a fallback."), Ye(e);
222
+ }
223
+ }, ct = (e) => {
224
+ G(), S(e), D = window.setTimeout(() => {
225
+ D = void 0, S((t) => t === e ? null : t);
226
+ }, 1100);
227
+ }, st = (e) => {
228
+ y(e);
229
+ }, Q = (e) => {
230
+ y(e), Promise.resolve(n.controller.bringNoteToFront(e)).catch((t) => {
231
+ s.error("Bring forward failed", u(t)), y((o) => o === e ? null : o);
232
+ });
233
+ }, at = (e) => {
234
+ p(null), Y(e);
235
+ }, lt = async (e) => {
236
+ if (!e.body.trim()) {
237
+ p(null), Y(e.note_id);
238
+ return;
239
+ }
240
+ try {
241
+ Q(e.note_id), await navigator.clipboard.writeText(e.body), ct(e.note_id);
242
+ } catch {
243
+ s.error("Copy failed", "Clipboard write was not available.");
244
+ }
245
+ }, Re = async (e) => {
246
+ try {
247
+ await n.controller.deleteNote(e), G(), S((t) => t === e ? null : t), U();
248
+ } catch (t) {
249
+ s.error("Delete failed", u(t));
250
+ }
251
+ }, dt = async (e) => {
252
+ try {
253
+ await n.controller.restoreNote(e);
254
+ } catch (t) {
255
+ s.error("Restore failed", u(t));
256
+ }
257
+ }, ut = async (e) => {
258
+ if (n.controller.deleteTrashedNotePermanently)
259
+ try {
260
+ await n.controller.deleteTrashedNotePermanently(e);
261
+ } catch (t) {
262
+ s.error("Delete failed", u(t));
263
+ }
264
+ }, pt = async (e) => {
265
+ try {
266
+ await n.controller.clearTrashTopic(e);
267
+ } catch (t) {
268
+ s.error("Trash failed", u(t));
269
+ }
270
+ }, ft = async () => {
271
+ const e = H();
272
+ if (e)
273
+ try {
274
+ await n.controller.updateNote(e, {
275
+ body: se(),
276
+ color_token: le()
277
+ }), s.success("Saved", "Note updated."), E();
278
+ } catch (t) {
279
+ s.error("Save failed", u(t));
280
+ }
281
+ }, ht = async () => {
282
+ const e = $();
283
+ !e || !K().trim() || (await Xe(e, K()), z());
284
+ }, wt = async () => {
285
+ const e = ne().trim();
286
+ if (e)
287
+ try {
288
+ const t = await n.controller.createTopic({ name: e });
289
+ re(""), B(t.topic_id);
290
+ } catch (t) {
291
+ s.error("Topic failed", u(t));
292
+ }
293
+ }, mt = (e) => {
294
+ ie(e.topic_id), W(e.name);
295
+ }, vt = async () => {
296
+ const e = V();
297
+ if (!e) return;
298
+ const t = ce().trim();
299
+ if (A(), !!t)
300
+ try {
301
+ await n.controller.updateTopic(e, { name: t });
302
+ } catch (o) {
303
+ s.error("Rename failed", u(o));
304
+ }
305
+ }, Tt = async (e) => {
306
+ const t = be(e.topic_id) + Lt(h().trash_items, e.topic_id);
307
+ V() === e.topic_id && A();
308
+ try {
309
+ if (await n.controller.deleteTopic(e.topic_id) === !1) {
310
+ s.info(
311
+ "Keep one topic",
312
+ "At least one topic needs to remain available."
313
+ );
314
+ return;
315
+ }
316
+ if (t > 0) {
317
+ U(), s.success(
318
+ "Topic deleted",
319
+ "Live notes moved into trash for this topic."
320
+ );
321
+ return;
322
+ }
323
+ s.success("Topic deleted", "The empty topic was removed.");
324
+ } catch (o) {
325
+ s.error("Delete failed", u(o));
326
+ }
327
+ }, gt = async (e, t) => {
328
+ try {
329
+ await n.controller.updateNote(e, {
330
+ x: t.x,
331
+ y: t.y
332
+ });
333
+ } catch (o) {
334
+ s.error("Move failed", u(o));
335
+ }
336
+ }, yt = async () => {
337
+ const e = Ie();
338
+ e && (P(), await Oe(e));
339
+ }, Nt = async () => {
340
+ const e = Ie();
341
+ e && (P(), await Se(e));
342
+ }, ee = c(() => {
343
+ const e = T();
344
+ if (!e) return [];
345
+ const t = [
346
+ {
347
+ id: "paste",
348
+ kind: "action",
349
+ label: "Paste here",
350
+ icon: xt,
351
+ onSelect: () => {
352
+ const o = T();
353
+ o && (p(null), Se(o));
354
+ }
355
+ },
356
+ {
357
+ id: "new",
358
+ kind: "action",
359
+ label: "New note",
360
+ icon: Dt,
361
+ onSelect: () => {
362
+ const o = T();
363
+ o && (p(null), Oe(o));
364
+ }
365
+ }
366
+ ];
367
+ return e.noteID && (t.push({ id: "separator-delete", kind: "separator" }), t.push({
368
+ id: "delete",
369
+ kind: "action",
370
+ label: "Delete",
371
+ icon: Mt,
372
+ destructive: !0,
373
+ onSelect: () => {
374
+ const o = T();
375
+ o?.noteID && (p(null), Re(o.noteID));
376
+ }
377
+ })), t;
378
+ }), Ct = c(() => {
379
+ const e = T();
380
+ if (!e) return;
381
+ const t = ee().filter((r) => r.kind === "action").length, o = ee().filter((r) => r.kind === "separator").length;
382
+ return St({
383
+ clientX: e.clientX,
384
+ clientY: e.clientY,
385
+ menuWidth: Pt,
386
+ menuHeight: Ot(t, o)
387
+ });
388
+ }), bt = (e) => {
389
+ const t = M();
390
+ t && p({
391
+ clientX: e.clientX,
392
+ clientY: e.clientY,
393
+ worldX: e.worldX,
394
+ worldY: e.worldY,
395
+ topicID: t.topic_id
396
+ });
397
+ }, It = (e, t) => {
398
+ Q(t.note_id), _e(e.clientX, e.clientY, {
399
+ topicID: t.topic_id,
400
+ noteID: t.note_id
401
+ });
402
+ }, _t = (e) => {
403
+ k(), _e(e.clientX, e.clientY);
404
+ };
405
+ return v(() => {
406
+ n.open || (ot(), A(), x(null), y(null), S(null));
407
+ }), v(() => {
408
+ const e = N();
409
+ e && n.controller.activeTopicID() !== e && B(e);
410
+ }), v(() => {
411
+ const e = Ne();
412
+ if (!e) {
413
+ q = null;
414
+ return;
415
+ }
416
+ q !== e.note_id && (q = e.note_id, ae(e.body), de(e.color_token));
417
+ }), v(() => {
418
+ const e = me();
419
+ if (!e) return;
420
+ const t = h().items.find((r) => r.note_id === e);
421
+ if (!t) {
422
+ y(null);
423
+ return;
424
+ }
425
+ const o = h().items.reduce(
426
+ (r, i) => Math.max(r, i.z_index),
427
+ 0
428
+ );
429
+ t.z_index >= o && y(null);
430
+ }), v(() => {
431
+ if (!n.open) return;
432
+ const e = () => {
433
+ $e(window.innerWidth < Rt);
434
+ };
435
+ e(), window.addEventListener("resize", e), X(() => window.removeEventListener("resize", e));
436
+ }), v(() => {
437
+ const e = oe();
438
+ if (!e) return;
439
+ const t = () => {
440
+ Be({
441
+ width: e.clientWidth,
442
+ height: e.clientHeight
443
+ });
444
+ };
445
+ if (t(), typeof ResizeObserver > "u") {
446
+ window.addEventListener("resize", t), X(() => window.removeEventListener("resize", t));
447
+ return;
448
+ }
449
+ const o = new ResizeObserver(t);
450
+ o.observe(e), X(() => o.disconnect());
451
+ }), v(() => {
452
+ if (!n.open) return;
453
+ const e = window.setInterval(() => We(Date.now()), 60 * 1e3);
454
+ X(() => window.clearInterval(e));
455
+ }), v(() => {
456
+ N() && p(null);
457
+ }), X(() => {
458
+ G(), J(!1);
459
+ }), {
460
+ header: {
461
+ topicCount: Ze,
462
+ totalLiveNotes: qe,
463
+ trashCount: ge
464
+ },
465
+ rail: {
466
+ topics: g,
467
+ activeTopicID: N,
468
+ draftTopicTitle: ne,
469
+ renamingTopicID: V,
470
+ renamingTopicTitle: ce,
471
+ getLiveNoteCount: be,
472
+ setDraftTopicTitle: re,
473
+ submitTopic: wt,
474
+ selectTopic: B,
475
+ startTopicRename: mt,
476
+ setRenamingTopicTitle: W,
477
+ saveTopicRename: vt,
478
+ cancelTopicRename: A,
479
+ deleteTopic: Tt
480
+ },
481
+ board: {
482
+ activeTopic: M,
483
+ activeTopicLabel: Ue,
484
+ activeItems: R,
485
+ activeTopicID: N,
486
+ topics: g,
487
+ topZIndex: Ge,
488
+ viewport: w,
489
+ boardScaleLabel: Je,
490
+ isMobile: He,
491
+ overviewOpen: fe,
492
+ optimisticFrontNoteID: me,
493
+ copiedNoteID: Fe,
494
+ setCanvasFrameRef: Ae,
495
+ commitViewport: xe,
496
+ openCanvasContextMenu: bt,
497
+ zoomOut: () => Me("out"),
498
+ zoomIn: () => Me("in"),
499
+ openOverview: Ce,
500
+ selectTopic: B,
501
+ mobileCreateNote: yt,
502
+ mobilePaste: Nt,
503
+ copyNote: lt,
504
+ openNoteContextMenu: It,
505
+ openEditor: at,
506
+ moveToTrash: Re,
507
+ startOptimisticFront: st,
508
+ commitFront: Q,
509
+ commitMove: gt
510
+ },
511
+ overview: {
512
+ items: et,
513
+ viewportStyle: tt,
514
+ navigationState: Ke,
515
+ beginNavigation: it,
516
+ close: P,
517
+ open: Ce
518
+ },
519
+ trash: {
520
+ open: ue,
521
+ groups: je,
522
+ count: ge,
523
+ now: Ve,
524
+ canDeleteNow: !!n.controller.deleteTrashedNotePermanently,
525
+ close: k,
526
+ openDock: U,
527
+ backdropContextMenu: _t,
528
+ restore: dt,
529
+ deleteNow: ut,
530
+ clearTopic: pt
531
+ },
532
+ contextMenu: {
533
+ state: T,
534
+ items: ee,
535
+ position: Ct,
536
+ close: () => p(null)
537
+ },
538
+ editor: {
539
+ note: Ne,
540
+ draftBody: se,
541
+ draftColor: le,
542
+ setDraftBody: ae,
543
+ setDraftColor: de,
544
+ close: E,
545
+ save: ft
546
+ },
547
+ manualPaste: {
548
+ open: () => !!$(),
549
+ text: K,
550
+ setText: Z,
551
+ close: z,
552
+ confirm: ht
553
+ },
554
+ handleCloseRequest: nt
555
+ };
556
+ }
557
+ export {
558
+ qt as useNotesOverlayModel
559
+ };
package/dist/floe.css CHANGED
@@ -406,7 +406,9 @@
406
406
  [data-floe-hot-interaction~='resize'] [data-floe-geometry-surface='shell-sidebar'],
407
407
  [data-floe-hot-interaction~='resize'] [data-floe-geometry-surface='sidebar-pane'],
408
408
  [data-floe-hot-interaction~='resize'] [data-floe-geometry-surface='floating-window'],
409
- [data-floe-hot-interaction~='drag'] [data-floe-geometry-surface='floating-window'] {
409
+ [data-floe-hot-interaction~='drag'] [data-floe-geometry-surface='floating-window'],
410
+ [data-floe-hot-interaction~='drag'] [data-floe-geometry-surface='notes-note'],
411
+ [data-floe-hot-interaction~='drag'] [data-floe-geometry-surface='notes-note'] .notes-note__surface {
410
412
  animation: none !important;
411
413
  transition: none !important;
412
414
  }