Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
ce79351
feat: let app to run in browser
vitonsky May 19, 2026
9fdb367
perf: vault component
vitonsky May 21, 2026
2b9955c
perf: note content component
vitonsky May 21, 2026
ac44bdb
perf: render menu when user click it
vitonsky May 21, 2026
5bdf1d2
perf: inline redux selector
vitonsky May 21, 2026
37f1505
perf: simplify notes container
vitonsky May 21, 2026
42aa83d
perf: memoize note tabs
vitonsky May 21, 2026
7394eb1
chore: support run in browser
vitonsky May 21, 2026
e889ce2
chore: serve bundle via webpack
vitonsky May 21, 2026
77ee828
perf: memoize workspaces list selector
vitonsky May 21, 2026
a205cbc
perf: prevent re-render note content
vitonsky May 21, 2026
a356954
perf: prevent re-render whole tab content
vitonsky May 21, 2026
9750329
perf: memoize items in notes list
vitonsky May 21, 2026
af1ce6d
perf: do not render closed menu
vitonsky May 21, 2026
b805edc
refactor: move to Charka UI v3
vitonsky May 22, 2026
8506ef7
fix: design tokens
vitonsky May 22, 2026
b3aef90
refactor: sync chakra theme
vitonsky May 23, 2026
0835f7b
feat: generate chakra types
vitonsky May 23, 2026
4fb38b3
refactor: update tooltip styles
vitonsky May 23, 2026
c909586
refactor: tune buttons and inputs
vitonsky May 23, 2026
e26eb78
refactor: consistent styles use
vitonsky May 23, 2026
7f4c69a
chore: ingore electron API in browser
vitonsky May 23, 2026
2b66040
chore: increase size
vitonsky May 23, 2026
222ff7a
chore: improve switch
vitonsky May 23, 2026
066060c
refactor: tooltips and alerts
vitonsky May 23, 2026
984a08f
fix: slider
vitonsky May 24, 2026
c1afdcc
fix: modal dialog header and close button
vitonsky May 24, 2026
20f887b
fix: modal text size
vitonsky May 24, 2026
ef30a6b
fix: properties form style
vitonsky May 24, 2026
711edda
fix: note preview
vitonsky May 24, 2026
5eddeee
fix: update vault creator code
vitonsky May 24, 2026
c2796be
fix: set secondary color
vitonsky May 24, 2026
f6c9544
fix: link style
vitonsky May 24, 2026
6e56a0f
fix: input with text
vitonsky May 24, 2026
e815b5a
chore: ensure type
vitonsky May 24, 2026
6551541
fix: skeletons
vitonsky May 24, 2026
adb8e72
fix: font sizes
vitonsky May 25, 2026
3aab995
chore: remove .base usage
vitonsky May 25, 2026
8cb68c1
fix: scroll colors
vitonsky May 25, 2026
9a06250
fix: menu small size
vitonsky May 25, 2026
2b54fe3
fix: tabs styles
vitonsky May 26, 2026
06918d0
fix: surface panel styles
vitonsky May 26, 2026
9727849
fix: add margin
vitonsky May 26, 2026
57f2db5
fix: input styles
vitonsky May 26, 2026
6585758
feat: update zen theme
vitonsky May 26, 2026
30d2b7f
fix: resizable panels usage
vitonsky May 26, 2026
712e193
chore: use small buttons in history list
vitonsky May 26, 2026
2a22fe8
chore: introduce statusbar button view
vitonsky May 26, 2026
af52d01
chore: note sidebar buttons
vitonsky May 26, 2026
921d196
chore: improve skeleton view
vitonsky May 26, 2026
fb03343
perf: use virtual list in suggested tags
vitonsky May 26, 2026
0056eab
perf: use fuse for suggests list
vitonsky May 26, 2026
68ea9a0
chore: delete unused utils
vitonsky May 26, 2026
23e5837
chore: update disabled bg
vitonsky May 26, 2026
e9e7120
fix: set state while rendering
vitonsky May 26, 2026
9dbaffb
chore: remove unused tokens
vitonsky May 27, 2026
6391cda
chore: sync color schemes
vitonsky May 27, 2026
76d882f
fix: monaco editor
vitonsky May 30, 2026
bcd71c8
fix: prevent re-render rich text container
vitonsky May 30, 2026
7ee54ac
perf: run search only in active note
vitonsky May 30, 2026
2405c54
refactor: use chakra menu for editor mode picker
vitonsky Jun 1, 2026
384ac21
perf: use virtualized tags tree
vitonsky Jun 1, 2026
ed71224
refactor: create tags tree recipe
vitonsky Jun 1, 2026
630f0a1
chore: normalize recipe use
vitonsky Jun 1, 2026
ed6afa3
chore: clean tags list
vitonsky Jun 1, 2026
5af8a06
chore: toggle menu by press ctrl
vitonsky Jun 1, 2026
d9a39c7
refactor: split tags tree component into files
vitonsky Jun 1, 2026
7659fd1
fix: tag creation
vitonsky Jun 1, 2026
5ca6b30
chore: simplify sorting
vitonsky Jun 2, 2026
05a783b
fix: rebuild tags tree by changes
vitonsky Jun 2, 2026
8614e8b
chore: use proxied instance
vitonsky Jun 2, 2026
b69f266
perf: use non-reactive selectors for useUpdateNotes hook
vitonsky Jun 3, 2026
0633790
chore: add memo wrapper
vitonsky Jun 3, 2026
ae32178
perf: do not render notes that has not been touched
vitonsky Jun 4, 2026
63f4448
fix: restore scroll after change tab
vitonsky Jun 4, 2026
03aa289
feat: introduce ListBox
vitonsky Jun 5, 2026
c6a2163
refactor: remove NestedList component
vitonsky Jun 5, 2026
60505ba
chore: remove cast to any
vitonsky Jun 5, 2026
2f0a89b
fix: show toaster
vitonsky Jun 5, 2026
26c7b72
chore: add session flags
vitonsky Jun 5, 2026
e182c25
chore: prevent form submit
vitonsky Jun 5, 2026
98d7719
chore: render button
vitonsky Jun 5, 2026
ddcf2c0
chore: ensure correct type in state
vitonsky Jun 5, 2026
f1b4835
chore: add comment
vitonsky Jun 5, 2026
6355883
chore: update menu item values
vitonsky Jun 5, 2026
d282446
refactor: simplify promise
vitonsky Jun 5, 2026
9984bca
chore: minimize deps interface
vitonsky Jun 5, 2026
6df3e89
chore: add guard
vitonsky Jun 5, 2026
1447d48
fix: order tags in selector
vitonsky Jun 7, 2026
8e8347b
chore: create objects lazy
vitonsky Jun 7, 2026
90c47f1
chore: add todo
vitonsky Jun 7, 2026
5a1879a
fix: clear stale callbacks
vitonsky Jun 7, 2026
5a425ef
chore: remove unnecessary memo
vitonsky Jun 7, 2026
605fc7c
chore: fix CSS
vitonsky Jun 7, 2026
4e7223a
chore: avoid type cast
vitonsky Jun 7, 2026
dadfebb
chore: remove unused components
vitonsky Jun 7, 2026
6636d5e
chore: remove unused components
vitonsky Jun 7, 2026
1c12e3c
chore: fix CSS
vitonsky Jun 7, 2026
eb951a0
chore: add memoization
vitonsky Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4,820 changes: 3,277 additions & 1,543 deletions package-lock.json

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion packages/app/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
.transly
.transly
chakra-config.json
20 changes: 15 additions & 5 deletions packages/app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"test": "vitest",
"clean": "rm -Rf dist out",
"dev": "webpack -w -c webpack.config.ts",
"serve": "webpack serve -c webpack.config.ts",
"start": "electron-forge start -- --no-sandbox",
"build": "rm -Rf dist && cross-env NODE_OPTIONS=--max-old-space-size=4096 NODE_ENV=production webpack -c webpack.config.ts",
"make": "electron-forge make",
Expand All @@ -35,15 +36,18 @@
"typecheck": "tsc --noEmit --watch",
"update-icons": "tsx ./scripts/icons/build.ts",
"update-locales": "transly cache seed && transly translate && prettier --write './src/locales/**/*.json'",
"release-preview": "npm version prerelease --preid=preview && git push --follow-tags"
"release-preview": "npm version prerelease --preid=preview && git push --follow-tags",
"postinstall": "chakra typegen src/components/theme/index.ts"
},
"devDependencies": {
"@chakra-ui/cli": "^3.35.0",
"@electron-forge/cli": "^7.11.1",
"@electron-forge/maker-deb": "^7.11.1",
"@electron-forge/maker-dmg": "^7.11.1",
"@electron-forge/maker-wix": "^7.11.1",
"@electron-forge/maker-zip": "^7.11.1",
"@electron-forge/plugin-auto-unpack-natives": "^7.11.1",
"@pmmmwh/react-refresh-webpack-plugin": "^0.6.2",
"@reforged/maker-appimage": "^5.1.1",
"@svgr/webpack": "^8.1.0",
"@swc/core": "^1.15.11",
Expand Down Expand Up @@ -78,6 +82,7 @@
"mini-css-extract-plugin": "^2.10.0",
"node-loader": "^2.1.0",
"p-limit": "^7.2.0",
"react-refresh": "^0.18.0",
"sharp": "^0.34.5",
"sharp-ico": "^0.1.5",
"swc-loader": "^0.2.7",
Expand All @@ -93,13 +98,15 @@
"vite-tsconfig-paths": "^6.1.1",
"webpack": "^5.106.2",
"webpack-cli": "^6.0.1",
"webpack-dev-server": "^5.2.4",
"webpack-merge": "^6.0.1"
},
"dependencies": {
"@chakra-ui/react": "^2.10.9",
"@chakra-ui/react": "^3.35.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@floating-ui/react": "^0.27.17",
"@headless-tree/core": "^1.7.0",
"@headless-tree/react": "^1.7.0",
"@hookform/resolvers": "^5.2.2",
"@lexical/react": "^0.39.0",
"@msgpack/msgpack": "^3.1.3",
Expand All @@ -126,13 +133,14 @@
"file-saver": "^2.0.5",
"flexsearch": "^0.8.212",
"font-list": "^2.0.2",
"framer-motion": "^12.29.2",
"fuse.js": "^7.3.0",
"fuzzysort": "^3.1.0",
"hotkeys-js": "^4.0.0",
"humanize-duration": "^3.33.2",
"i18next": "^26.0.4",
"i18next-fs-backend": "^2.6.3",
"i18next-http-backend": "^3.0.4",
"idb-keyval": "^6.2.2",
"leviathan-crypto": "^1.4.0",
"lexical": "^0.39.0",
"libsodium-wrappers-sumo": "^0.8.2",
Expand All @@ -142,15 +150,17 @@
"monaco-markdown": "^0.0.12",
"ms": "^2.1.3",
"nano-queries": "^2.0.3",
"next-themes": "^0.4.6",
"ordinality": "^1.0.2",
"pretty-bytes": "^7.1.0",
"react": "^19.2.4",
"react-aria-components": "^1.18.0",
"react-dom": "^19.2.4",
"react-dropzone": "^14.3.8",
"react-focus-lock": "^2.13.7",
"react-hook-form": "^7.71.1",
"react-i18next": "^17.0.2",
"react-icons": "^5.5.0",
"react-icons": "^5.6.0",
"react-redux": "^9.2.0",
"react-resizable-panels": "^3.0.6",
"recursive-readdir": "^2.2.3",
Expand Down
7 changes: 7 additions & 0 deletions packages/app/scripts/webpack/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import HtmlWebpackPlugin from 'html-webpack-plugin';
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
import path from 'path';
import { Configuration, WebpackPluginInstance } from 'webpack';
import { Configuration as DevServerConfig } from 'webpack-dev-server';
import { merge } from 'webpack-merge';

import { productName } from '../../package.json';
Expand All @@ -24,6 +25,12 @@ function getPathForPackage(packageName: string, packagePath: string) {

export default merge(commonConfig, {
target: 'web',
devServer: {
client: {
overlay: false,
},
hot: 'only',
} satisfies DevServerConfig,
entry: {
...Object.fromEntries(
windows.map(({ name, renderer }) => [
Expand Down
15 changes: 13 additions & 2 deletions packages/app/scripts/webpack/shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,22 @@ import path from 'path';
import { SwcMinifyWebpackPlugin } from 'swc-minify-webpack-plugin';
import { TsconfigPathsPlugin } from 'tsconfig-paths-webpack-plugin';
import { Configuration } from 'webpack';
import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';

import { isPreloadChunk, isProduction, mode, projectRoot } from './utils';
import {
isPreloadChunk,
isProduction,
isWebpackServeMode,
mode,
projectRoot,
} from './utils';

const outputPath = path.join(projectRoot, 'dist');

console.log('Webpack run', {
isProduction,
outputPath,
isWebpackServeMode,
});

export default {
Expand Down Expand Up @@ -81,7 +89,7 @@ export default {
},
output: {
path: outputPath,
publicPath: './',
publicPath: isWebpackServeMode ? '/' : './',

// Better chunk naming for caching
chunkFilename: isProduction ? '[name].[contenthash].js' : '[name].js',
Expand Down Expand Up @@ -113,6 +121,8 @@ export default {
runtime: 'automatic',
pragma: 'React.createElement',
pragmaFrag: 'React.Fragment',
development: !isProduction && isWebpackServeMode,
refresh: !isProduction && isWebpackServeMode,
},
},
target: 'es2022',
Expand Down Expand Up @@ -142,6 +152,7 @@ export default {
},

plugins: [
...(isWebpackServeMode ? [new ReactRefreshWebpackPlugin()] : []),
// run full TS type check in parallel; async: false -> build waits for typecheck and fails on errors
new ForkTsCheckerWebpackPlugin({
// Allow async in dev for faster builds
Expand Down
3 changes: 3 additions & 0 deletions packages/app/scripts/webpack/utils.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { existsSync, readdirSync, statSync } from 'fs';
import path from 'path';
import { argv } from 'process';
import { PathData } from 'webpack';

export const projectRoot = path.resolve('.');
Expand All @@ -8,6 +9,8 @@ export const mode = process.env.NODE_ENV === 'production' ? 'production' : 'deve

export const isProduction = mode === 'production';

export const isWebpackServeMode = argv.includes('serve');

export const isPreloadChunk = (chunk: Exclude<PathData['chunk'], void>) =>
Boolean(chunk.name && chunk.name.endsWith('-preload'));

Expand Down
8 changes: 5 additions & 3 deletions packages/app/src/api/buttons/useButtonsManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ export const useButtonsManager = (): ButtonsManagerObject => {
const managerRef = useRef<ButtonsManager>(null as unknown as ButtonsManager);
if (!managerRef.current) {
managerRef.current = new ButtonsManager((buttons) => {
setState({
start: buttons.start.map((button) => button.button),
end: buttons.end.map((button) => button.button),
requestAnimationFrame(() => {
setState({
start: buttons.start.map((button) => button.button),
end: buttons.end.map((button) => button.button),
});
});
});
}
Expand Down
35 changes: 0 additions & 35 deletions packages/app/src/components/AppToast.tsx

This file was deleted.

9 changes: 0 additions & 9 deletions packages/app/src/components/CalmButton.tsx

This file was deleted.

4 changes: 2 additions & 2 deletions packages/app/src/components/Features/Group.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ export const FeaturesPanel = ({ children, ...props }: StackProps) => {
return (
<VStack
align="start"
backgroundColor="dim.50"
backgroundColor="surface.panel"
padding="1rem"
borderRadius="6px"
borderRadius="xl"
width="100%"
gap="1rem"
{...props}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ export const FeaturesHeader: FC<FeaturesHeaderProps> = ({ children, ...rest }) =
<Text
as="h2"
{...rest}
sx={{
css={{
marginLeft: '40%',
fontSize: '18px',
fontWeight: 'bold',

'&:not(:first-child)': {
marginTop: '2rem',
},
...rest.sx,
}}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
>
{children}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ export const FeaturesOption: FC<FeaturesOptionProps> = ({
return (
<Box
w="100%"
sx={{
css={{
display: 'grid',
gridTemplateColumns: '40% minmax(auto, 60%)',
gridRowGap: '50rem',
}}
>
<Text
sx={{
css={{
display: 'flex',
justifyContent: 'end',
lineHeight: '120%',
Expand Down
51 changes: 27 additions & 24 deletions packages/app/src/components/IconButton.tsx
Original file line number Diff line number Diff line change
@@ -1,34 +1,37 @@
import React, { forwardRef } from 'react';
import React, { forwardRef, memo, ReactNode } from 'react';
import {
IconButton as BaseIconButton,
IconButtonProps as BaseIconButtonProps,
Tooltip,
TooltipProps,
} from '@chakra-ui/react';
import { Tooltip, type TooltipProps } from '@components/ui/tooltip';

export type IconButtonProps = Omit<BaseIconButtonProps, 'icon' | 'aria-label'> & {
icon: Exclude<BaseIconButtonProps['icon'], void>;
export type IconButtonProps = Omit<BaseIconButtonProps, 'aria-label'> & {
icon: ReactNode;
title: string;
tooltipPlacement?: TooltipProps['placement'];
tooltipPlacement?: string;
tooltipProps?: Omit<TooltipProps, 'children'>;
};

export const IconButton = forwardRef<HTMLDivElement, IconButtonProps>(
({ icon, title, tooltipPlacement, tooltipProps, ...buttonProps }, ref) => {
return (
<Tooltip
label={title}
hasArrow
placement={tooltipPlacement}
{...tooltipProps}
>
<BaseIconButton
ref={ref}
icon={icon}
aria-label={title}
{...buttonProps}
/>
</Tooltip>
);
},
export const IconButton = memo(
forwardRef<HTMLButtonElement, IconButtonProps>(
({ icon, title, tooltipPlacement, tooltipProps, ...buttonProps }, ref) => {
return (
<Tooltip
showArrow
{...(tooltipProps ?? {})}
content={title}
positioning={{
placement: tooltipPlacement as any,
...(tooltipProps?.positioning ?? {}),
}}
>
<BaseIconButton ref={ref} aria-label={title} {...buttonProps}>
{icon}
</BaseIconButton>
</Tooltip>
);
},
),
);

IconButton.displayName = 'IconButton';
Loading