Merge remote-tracking branch 'origin/staging-render' into develop

This commit is contained in:
Alejandro Alonso
2026-02-25 14:26:42 +01:00
4 changed files with 31 additions and 24 deletions

View File

@@ -115,21 +115,25 @@
(defn get-frames
"Retrieves all frame objects as vector"
([objects] (get-frames objects nil))
([objects {:keys [skip-components? skip-copies?]
([objects {:keys [skip-components? skip-copies? ignore-index?]
:or {skip-components? false
skip-copies? false}}]
(->> (or (-> objects meta ::index-frames)
(let [lookup (d/getf objects)
xform (comp (remove #(= uuid/zero %))
(keep lookup)
(filter cfh/frame-shape?))]
(->> (keys objects)
(sequence xform))))
(remove #(or (and ^boolean skip-components?
^boolean (ctk/instance-head? %))
(and ^boolean skip-copies?
(and ^boolean (ctk/instance-head? %)
(not ^boolean (ctk/main-instance? %)))))))))
skip-copies? false
ignore-index? false}}]
(let [frame-index
(if (and (not ignore-index?) (-> objects meta ::index-frames))
(-> objects meta ::index-frames)
(let [lookup (d/getf objects)
xform (comp (remove #(= uuid/zero %))
(keep lookup)
(filter cfh/frame-shape?))]
(->> (keys objects)
(sequence xform))))]
(->> frame-index
(remove #(or (and ^boolean skip-components?
^boolean (ctk/instance-head? %))
(and ^boolean skip-copies?
(and ^boolean (ctk/instance-head? %)
(not ^boolean (ctk/main-instance? %))))))))))
(defn get-frames-ids
"Retrieves all frame ids as vector"

View File

@@ -242,7 +242,7 @@
[{:keys [objects zoom selected focus is-show-artboard-names
on-frame-enter on-frame-leave on-frame-select]}]
(let [selected (or selected #{})
shapes (ctt/get-frames objects {:skip-copies? true})
shapes (ctt/get-frames objects {:skip-copies? true :ignore-index? true})
shapes (if (dbg/enabled? :shape-titles)
(into (set shapes)
(map (d/getf objects))

View File

@@ -19,6 +19,8 @@
[rumext.v2 :as mf])
(:import goog.events.EventType))
(def caret-blink-interval-ms 250)
(defn- sync-wasm-text-editor-content!
"Sync WASM text editor content back to the shape via the standard
commit pipeline. Called after every text-modifying input."
@@ -54,18 +56,17 @@
(.focus node))
js/undefined))
;; Animation loop for cursor blink
(mf/use-effect
(fn []
(let [raf-id (atom nil)
animate (fn animate []
(when (text-editor/text-editor-is-active?)
(wasm.api/request-render "cursor-blink")
(reset! raf-id (js/requestAnimationFrame animate))))]
(animate)
(let [timeout-id (atom nil)
schedule-blink (fn schedule-blink []
(when (text-editor/text-editor-is-active?)
(wasm.api/request-render "cursor-blink"))
(reset! timeout-id (js/setTimeout schedule-blink caret-blink-interval-ms)))]
(schedule-blink)
(fn []
(when @raf-id
(js/cancelAnimationFrame @raf-id))))))
(when @timeout-id
(js/clearTimeout @timeout-id))))))
;; Document-level keydown handler for control keys
(mf/use-effect

View File

@@ -1958,6 +1958,8 @@ export class SelectionController extends EventTarget {
this.startOffset === this.endOffset &&
this.endOffset === endNode.nodeValue?.length
) {
const paragraph = this.startParagraph;
setParagraphStyles(paragraph, newStyles);
const newTextSpan = createVoidTextSpan(newStyles);
this.endTextSpan.after(newTextSpan);
this.setSelection(newTextSpan.firstChild, 0, newTextSpan.firstChild, 0);