Here's a look at V1 of the grid view mode in fullscreen search:
Most of my time has been working on a snapshot feature where the app takes a snapshot of the canvas. This will then be used in the fullscreen search to show a preview of the canvas file.
I will most likely use the same approach for note documents instead of rendering the actual note document. It's less resource intensive to load an image compared to a note document with multiple blocks.
Later, I will also use the snapshot feature in preview overlays that appear when hovering a note or canvas file. But before this, I think I should fix the UI for fullscreen search first. Just simple things like the list of search result should extend as much height as possible meaning all the way to the bottom of window.
In the video, you can see the canvas being a bit laggy in the beginning when it's first loading. I do have some debouncing, but I think it might be a good idea to have a more sophisticated approach where only certain objects are loading at the same time. Perhaps only the ones inside the viewport, but if too many are showing, then have a maximum of how many can load at the same time.
#dev #AppKit #Swift #SwiftUI #macOS
View quoted note →
Frederik Handberg
npub1nj0c...2gqz
23 🇩🇰 I'm studying for a degree in Software Engineering while building fun projects and experimenting with drone technology.
I'm also learning to sew garments as a hobby 🪡 Sometimes I work as a freelance photographer for different news outlets 📷
I mostly share progress updates as I'm working on my software and drone projects, and as I learn to sew.
Basically, I just write about my hobbies...
I have been working on improving the fullscreen search functionality by implementing a preview mode. So now, there are two modes: _Grid_ and _Preview_. The preview mode is simply the grid but with a preview of the file’s contents. There will also by a third mode called _List_.
I experienced some serious performance issues after implementing this new preview mode. This is really what most of my time was spent trying to fix.
Before I was showing a real representation of the canvas where I rendered all the objects and scaled them to an appropriate size. Doing a full render of a canvas that could potentially contain 20 different objects (images, videos, note documents, etc.) is a bad idea. And it becomes an even worse idea if the search results include more than one canvas.
I decided to figure out a different solution that would solve the performance issues.
So I started experimenting… I figured that I could actually just show an image of the canvas, so I implemented functionality to take a snapshot of the canvas whenever closing a canvas file or switching to a different tab.
This works really well and I think I will choose the same approach for the minimap inside canvas files. Because currently, I am doing a full render of the objects inside a minimap and there is just no reason to do that… Instead I will just use the snapshot approach.
This means, I should also save a snapshot after making a change in the canvas, but of course with a debounce timer. For example, if moving an object, then take a new snapshot after a timer has expired.
Will share a video demonstrating of the fullscreen search later…
The pictures are from 2 days ago 💚 #nature #photography 📷


Now that I have improved the media popup by implementing support for zoom-in and out with pinch gestures and an easier way to dismiss the media popup by either clicking the background or by swiping up and down, I think it's time to work on an easier to way switch between the different media attachments in a note document.
I found this on Threads that I think looks quite good:
Video credit:
Initially, I just wanted to show chevron buttons to switch to next or previous attachment, but I think showing the actual thumbnails looks much nicer. I'll see if I can get that working 💻 #dev #inspiration
View quoted note →

Threads
Rolando (@rnmp) on Threads
a beautiful home for your inspiration
Been working on a different way to dismiss the image popup in the notes app.
Before the only option was to either click Escape key or click in the background behind the image which will also close the popup. Now the user can simply swipe up or down, or "zoom out" by making the pinch gesture.
I really want the image in the popup to animate back to its original position in the note document. I do have a semi-working solution, but it's still experimental. I'm having trouble with the opening animation being laggy, but the closing animation looks fine for some reason.
#dev #macOS #Swift #SwiftUI #AppKit
It won’t be long before I start building the iOS version of my notes app.
I’ve been looking for inspiration on how I could design the visual canvas.
Something like this:
Video credit:


Threads
Yana Yank (@yetishade) on Threads
I solo build apps 🦢🪷
An open/close animation like this for folders would be pretty cool:
I doubt it can be build in #SwiftUI animations. Probably need #AppKit for that. Though I’m not so sure. Haven’t worked much with animations except for basic SwiftUI transitions like when opening the sidebar, it smoothly slides out. #dev
Video credit:
View quoted note →
X (formerly Twitter)
shawn. (@zzzzshawn) on X
Folder interaction
I think it would be beneficial to have an easy way for the user to manage and clean/delete the assets (images and videos) in their vault.
*The vault is the folder that contains all the files and folders in their Space.*
It should show a list/grid of all the assets. Maybe have an import button. Be able to rename assets. Allow user to select and delete. Stuff like that.
Then have filtering buttons. For example, filter by unused. This should display a list of all unused assets - meaning an asset that is not attached to any note or canvas.
In case an asset is being used, the user should be able to see which notes and canvases are using it.
I already have much of the backend for this, because once the user tries to delete an asset, the app will check to see if the asset is attached to any note or canvas, and if so, it’ll display a warning message that the user must confirm before the deletion will proceed.
I just think it would be great to have a dedicated page to manage assets rather than doing this in the ‘Files’ sidebar.
View quoted note →
I implemented an object to embed websites into visual canvas files in the notes app I'm building.
The website objects are live, meaning that if the user double-clicks on an object, they can scroll, zoom, select text, and click links - just as they would in a real browser.
I need to show the actual website inside the minimap in the bottom-left corner. Currently, it just shows a dark box with a Safari logo.
#dev #Swift #SwiftUI #AppKit #macOS
The website objects are live, meaning that if the user double-clicks on an object, they can scroll, zoom, select text, and click links - just as they would in a real browser.
I need to show the actual website inside the minimap in the bottom-left corner. Currently, it just shows a dark box with a Safari logo.
#dev #Swift #SwiftUI #AppKit #macOSThink it’s time for me to try the KMP plugin in ItelliJ.
https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform
I only write native Swift code, so Kotlin Multiplatform is not interesting to me, but I’ve been using VSCode for a while now, and the Swift LSP is slow. Like really slow sometimes. Maybe IntelliJ is faster 🤷♂️
However, I am currently working on a macOS app, so will have to see if the plugin allows me to run the app directly from IntelliJ.
And hopefully it actually prints the logs. I use a plugin in VSCode to be able to run my app, but often the logs just don’t appear at all in the terminal…
I implemented a table block for my notes app.
The total table width can be resized but also each individual column.
Columns and rows can be added and removed in the context menu.
I’m having a problem with the floating formatting toolbar not appearing when selecting text in the table. So yeah, not completely working yet - a few bugs to be fixed. Also need to get all text formatting working. E.g. text alignment currently isn’t working. #dev


Working on implementing support for tables in my notes app. Having trouble with `NSTextView` inside table cells not extending full height.
Like if we have two cells in a row (which means there are two columns), then resizing column 1 will cause the text to wrap around. Cell 2 in column 2 will then increase its height leaving empty area below. This empty area is not clickable because the textview is not extending all the available height...
Funny enough, when closing and reopening the note, then the height is calculated correctly. This means the available area is clickable. But as soon as I make a resize adjustment to a column divider, this available height is not calculated correctly... #bug
Pictures are from September 🍂 Really is a beautiful month.
_(re-uploading with Blossom to keep local backup)_
View quoted note →

I just found out the Haven app can find all your Blossom media and save it locally as a backup.
The only thing I can’t get working is videos in the ‘Viewer’ tab. I’m unable to play my Blossom videos and they also cannot show a thumbnail. Getting “No Preview ERROR 404”, but otherwise it’s working great.
GitHub
GitHub - btcforplebs/nostr-vault: High Availability Vault for Events on Nostr
High Availability Vault for Events on Nostr. Contribute to btcforplebs/nostr-vault development by creating an account on GitHub.
It’s gotta be nice having all that fur to keep warm in the snow ❄️ It’s like a big winter coat 🧥
_(re-uploading with Blossom to keep a backup)_
View quoted note →
View quoted note →Should have started using Blossom way earlier…
I’m now keeping a local backup of all my Blossom files.
View quoted note →
View quoted note →I’m re-uploading some media files using Blossom to keep a backup in case hosting providers start deleting stuff.
View quoted note →
I'm testing re-uploading the image using Blossom...
View quoted note →
View quoted note →On our morning walk 🌳
This little RC nitro car has not been running for about 10 years. I replaced the glow plug to a new one and the tubes for fuel.
It can start but then stops when I lower the RPM. It seems to not be getting enough fuel.

