Compare commits

..

1 Commits

Author SHA1 Message Date
01zulfi
2eb3375ca0 editor: change cursor size when font size is changed
Signed-off-by: 01zulfi <85733202+01zulfi@users.noreply.github.com>
2026-07-02 16:03:19 +05:00
12 changed files with 7531 additions and 2918 deletions

View File

@@ -107,7 +107,7 @@ jobs:
target_commitish: ${{ github.ref }}
- name: Generate flatpak sources
if: inputs.build-linux
if: inputs.publish-github && inputs.build-linux
run: |
sudo apt-get update
sudo apt-get install -y --quiet flatpak flatpak-builder pipx
@@ -127,13 +127,6 @@ jobs:
files: ./generated-sources.json
prerelease: ${{ endsWith(steps.app_metadata.outputs.app_version, '-beta') }}
- name: Upload generated-sources.json as artifact
uses: actions/upload-artifact@v4
if: inputs.build-linux
with:
name: generated-sources
path: ./generated-sources.json
build-macos:
name: Build for macOS
needs: build

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
"name": "@notesnook/desktop",
"productName": "Notesnook",
"description": "Your private note taking space",
"version": "3.4.3",
"version": "3.4.2",
"appAppleId": "1544027013",
"private": true,
"main": "./dist/cjs/index.js",
@@ -59,7 +59,7 @@
"@types/node": "22.15.3",
"@types/yargs": "^17.0.33",
"chokidar": "^4.0.3",
"electron": "^37.10.3",
"electron": "^37.0.0",
"electron-builder": "^26.8.1",
"esbuild": "0.21.5",
"fkill": "^10.0.3",

View File

@@ -39,7 +39,6 @@ import Share from "react-native-share";
import useGlobalSafeAreaInsets from "../../hooks/use-global-safe-area-insets";
import { useSettingStore } from "../../stores/use-setting-store";
import { DefaultAppStyles } from "../../utils/styles";
import FileViewer from "react-native-file-viewer";
const ImagePreview = () => {
const { colors } = useThemeColors("dialog");
@@ -88,8 +87,9 @@ const ImagePreview = () => {
return;
}
const attachment = await db.attachments.attachment(hash);
const path = `${cacheDir}/${"NN_" + (await getFileNameWithExtension(hash, attachment?.mimeType))
}`;
const path = `${cacheDir}/${
"NN_" + (await getFileNameWithExtension(hash, attachment?.mimeType))
}`;
await RNFetchBlob.fs.mv(`${cacheDir}/${uri}`, path).catch(() => {
/* empty */
});
@@ -136,23 +136,17 @@ const ImagePreview = () => {
borderWidth: 0
}}
onPress={async () => {
if (!image) return;
try {
if (Platform.OS === "android") {
await FileViewer.open(image.replace("file://", ""), {
showOpenWithDialog: true,
showAppsSuggestions: true,
shareFile: true
} as any);
} else {
await Share.open({
url: image
});
}
} catch (error) {
console.error(error);
}
useSettingStore
.getState()
.setAppDidEnterBackgroundForAction(true);
await Share.open({
url: image
}).catch(() => {
/* empty */
});
useSettingStore
.getState()
.setAppDidEnterBackgroundForAction(false);
}}
/>
<IconButton

View File

@@ -156,8 +156,7 @@ export function MenuItem({
style={{
flexDirection: "row",
alignItems: "center",
gap: DefaultAppStyles.GAP_SMALL,
flexShrink: 1
gap: DefaultAppStyles.GAP_SMALL
}}
>
{renderIcon ? (
@@ -186,7 +185,6 @@ export function MenuItem({
isFocused ? colors.selected.paragraph : colors.primary.paragraph
}
size={AppFontSize.sm}
style={{ flexShrink: 1 }}
>
{item.title}
</Paragraph>
@@ -197,9 +195,6 @@ export function MenuItem({
color={
isFocused ? colors.primary.paragraph : colors.secondary.paragraph
}
style={{
marginLeft: DefaultAppStyles.GAP_SMALL
}}
>
{menuItemCount}
</Paragraph>

View File

@@ -72,7 +72,7 @@ export const NotebookItem = ({
const notebook = item.notebook;
const isFocused = focused;
const { totalNotes, getTotalNotes } = useTotalNotes("notebook");
const updater = useRelationStore((state) => state.updater);
const updater = useRelationStore(state => state.updater);
const getTotalNotesRef = React.useRef(getTotalNotes);
getTotalNotesRef.current = getTotalNotes;
const { colors } = useThemeColors();
@@ -101,8 +101,8 @@ export const NotebookItem = ({
item.depth === 0
? undefined
: item.depth < 6
? 15 * item.depth
: 15 * 5,
? 15 * item.depth
: 15 * 5,
width: "100%",
marginTop: 2,
opacity: item.disabled ? 0.5 : 1
@@ -162,8 +162,7 @@ export const NotebookItem = ({
<View
style={{
flexDirection: "row",
alignItems: "center",
flexShrink: 1
alignItems: "center"
}}
>
<IconButton
@@ -192,8 +191,8 @@ export const NotebookItem = ({
!item.hasChildren || disableExpand
? "book-outline"
: expanded
? "chevron-down"
: "chevron-right"
? "chevron-down"
: "chevron-right"
}
/>
@@ -202,7 +201,6 @@ export const NotebookItem = ({
isFocused ? colors.selected.paragraph : colors.primary.paragraph
}
size={AppFontSize.sm}
style={{ flexShrink: 1 }}
>
{notebook?.title}
</Paragraph>
@@ -213,8 +211,7 @@ export const NotebookItem = ({
gap: DefaultAppStyles.GAP_SMALL,
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
marginLeft: DefaultAppStyles.GAP_SMALL
justifyContent: "center"
}}
>
{selectionEnabled ? (

View File

@@ -56,7 +56,7 @@ const TagItem = (props: {
const totalNotes = useTotalNotes("tag");
const totalNotesRef = React.useRef(totalNotes);
totalNotesRef.current = totalNotes;
const updater = useRelationStore((state) => state.updater);
const updater = useRelationStore(state => state.updater);
useEffect(() => {
if (item?.id) {
@@ -67,8 +67,6 @@ const TagItem = (props: {
return (
<View
style={{
minHeight: 35,
justifyContent: "center",
paddingHorizontal: DefaultAppStyles.GAP,
marginTop:
(props.id as number) === 0 ? DefaultAppStyles.GAP_VERTICAL : 2
@@ -125,8 +123,7 @@ const TagItem = (props: {
<View
style={{
flexDirection: "row",
alignItems: "center",
flexShrink: 1
alignItems: "center"
}}
>
<View
@@ -149,9 +146,6 @@ const TagItem = (props: {
isFocused ? colors.selected.paragraph : colors.primary.paragraph
}
size={AppFontSize.sm}
style={{
flexShrink: 1
}}
>
{item?.title}
</Paragraph>
@@ -179,9 +173,6 @@ const TagItem = (props: {
<Paragraph
size={AppFontSize.xxs}
color={colors.secondary.paragraph}
style={{
marginLeft: DefaultAppStyles.GAP_SMALL
}}
>
{totalNotes.totalNotes(item?.id)}
</Paragraph>

View File

@@ -398,8 +398,7 @@ const TagItem = ({
flexDirection: "row",
marginVertical: 5,
justifyContent: "flex-start",
minHeight: 40,
alignItems: "center"
height: 40
}}
onPress={() => {
if (!tag) return;
@@ -439,9 +438,7 @@ const TagItem = ({
/>
)}
{tag ? (
<Paragraph style={{ flexShrink: 1 }} size={AppFontSize.sm}>
{"#" + tag?.title}
</Paragraph>
<Paragraph size={AppFontSize.sm}>{"#" + tag?.title}</Paragraph>
) : (
<View
style={{

View File

@@ -1,12 +1,12 @@
{
"name": "@notesnook/web",
"version": "3.4.3",
"version": "3.4.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@notesnook/web",
"version": "3.4.3",
"version": "3.4.2",
"hasInstallScript": true,
"license": "GPL-3.0-or-later",
"dependencies": {

View File

@@ -1,7 +1,7 @@
{
"name": "@notesnook/web",
"description": "Your private note taking space",
"version": "3.4.3",
"version": "3.4.2",
"private": true,
"main": "./src/app.js",
"homepage": "https://notesnook.com/",

View File

@@ -97,7 +97,34 @@ const features: Record<FeatureKeys, Feature> = {
)
}
]
: [],
: [
{
icon: Inbox,
title: "Inbox API",
subtitle: "A new API to send data to Notesnook from other apps."
},
{
icon: LinkedTo,
title: "Deep links on Desktop",
subtitle: "Reference Notesnook notes from other apps."
},
{
icon: Plus,
title: "More features, bug fixes, and security improvments",
subtitle: (
<>
This release contains much much more.{" "}
<Link
href="https://blog.notesnook.com/notesnook-desktop-v3.4.0"
target="_blank"
title="Read the full release notes"
>
Read the full release notes
</Link>
</>
)
}
],
cta: {
title: strings.gotIt(),
icon: Checkmark,

View File

@@ -20,6 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import { tiptapKeys } from "@notesnook/common";
import { useToolbarStore } from "../../toolbar/stores/toolbar-store.js";
import { Editor, Extension } from "@tiptap/core";
import { Plugin, PluginKey } from "@tiptap/pm/state";
import { Decoration, DecorationSet } from "@tiptap/pm/view";
type FontSizeOptions = {
types: string[];
@@ -104,6 +106,56 @@ export const FontSize = Extension.create<FontSizeOptions>({
return true;
}
};
},
addProseMirrorPlugins() {
return [
new Plugin({
key: new PluginKey("fontSizeCaretFix"),
props: {
decorations: (state) => {
const { selection, storedMarks } = state;
if (!selection.empty || !storedMarks) {
return null;
}
const textStyleMark = storedMarks.find(
(m) => m.type.name === "textStyle"
);
if (!textStyleMark || !textStyleMark.attrs.fontSize) {
return null;
}
const span = document.createElement("span");
span.textContent = "\u200b";
span.style.fontSize = textStyleMark.attrs.fontSize;
if (textStyleMark.attrs.fontFamily) {
span.style.fontFamily = textStyleMark.attrs.fontFamily;
}
span.style.display = "inline";
span.style.overflow = "hidden";
span.style.pointerEvents = "none";
span.style.userSelect = "none";
span.setAttribute("contenteditable", "false");
console.log(
"editor font size caret plugin",
textStyleMark,
storedMarks,
span
);
return DecorationSet.create(state.doc, [
Decoration.widget(selection.from, span, {
side: -1,
stopEvent: () => true
})
]);
}
}
})
];
}
});