-
diff --git a/packages/ui/src/navigation.tsx b/packages/ui/src/navigation.tsx
index 4a88ebee..a72f027a 100644
--- a/packages/ui/src/navigation.tsx
+++ b/packages/ui/src/navigation.tsx
@@ -5,14 +5,18 @@ import {
HomeIcon,
NwcFilledIcon,
NwcIcon,
+ PlusIcon,
RelayFilledIcon,
RelayIcon,
} from "@lume/icons";
-import { cn } from "@lume/utils";
+import { cn, editorAtom } from "@lume/utils";
+import { useSetAtom } from "jotai";
import { NavLink } from "react-router-dom";
import { ActiveAccount } from "./account/active";
export function Navigation() {
+ const setIsEditorOpen = useSetAtom(editorAtom);
+
return (
@@ -154,6 +158,13 @@ export function Navigation() {
+
diff --git a/packages/utils/index.ts b/packages/utils/index.ts
index 7ebd27b9..d0bffed6 100644
--- a/packages/utils/index.ts
+++ b/packages/utils/index.ts
@@ -7,3 +7,4 @@ export * from "./src/hooks/useNetworkStatus";
export * from "./src/hooks/useOpenGraph";
export * from "./src/cn";
export * from "./src/image";
+export * from "./src/state";
diff --git a/packages/utils/package.json b/packages/utils/package.json
index 1dea825e..73a042bb 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -13,6 +13,7 @@
"@tauri-apps/plugin-notification": "2.0.0-alpha.5",
"clsx": "^2.1.0",
"dayjs": "^1.11.10",
+ "jotai": "^2.6.1",
"nostr-tools": "1.17.0",
"react": "^18.2.0",
"tailwind-merge": "^1.14.0"
diff --git a/packages/utils/src/state.ts b/packages/utils/src/state.ts
new file mode 100644
index 00000000..4a7b2ae3
--- /dev/null
+++ b/packages/utils/src/state.ts
@@ -0,0 +1,9 @@
+import { atom } from "jotai";
+
+export const editorAtom = atom(false);
+export const editorValueAtom = atom([
+ {
+ type: "paragraph",
+ children: [{ text: "" }],
+ },
+]);
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cff12615..cee5c296 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -315,6 +315,9 @@ importers:
get-urls:
specifier: ^12.1.0
version: 12.1.0
+ jotai:
+ specifier: ^2.6.1
+ version: 2.6.1(@types/react@18.2.46)(react@18.2.0)
markdown-to-jsx:
specifier: ^7.4.0
version: 7.4.0(react@18.2.0)
@@ -805,6 +808,9 @@ importers:
'@tauri-apps/plugin-sql':
specifier: 2.0.0-alpha.5
version: 2.0.0-alpha.5
+ nostr-tools:
+ specifier: '1.17'
+ version: 1.17.0(typescript@5.3.3)
react:
specifier: ^18.2.0
version: 18.2.0
@@ -855,6 +861,9 @@ importers:
packages/ui:
dependencies:
+ '@dnd-kit/core':
+ specifier: ^6.1.0
+ version: 6.1.0(react-dom@18.2.0)(react@18.2.0)
'@lume/ark':
specifier: workspace:^
version: link:../ark
@@ -894,6 +903,12 @@ importers:
'@tauri-apps/plugin-os':
specifier: 2.0.0-alpha.6
version: 2.0.0-alpha.6
+ framer-motion:
+ specifier: ^10.17.0
+ version: 10.17.0(react-dom@18.2.0)(react@18.2.0)
+ jotai:
+ specifier: ^2.6.1
+ version: 2.6.1(@types/react@18.2.46)(react@18.2.0)
minidenticons:
specifier: ^4.2.0
version: 4.2.0
@@ -903,9 +918,18 @@ importers:
react:
specifier: ^18.2.0
version: 18.2.0
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
react-router-dom:
specifier: ^6.21.1
version: 6.21.1(react-dom@18.2.0)(react@18.2.0)
+ slate:
+ specifier: ^0.101.5
+ version: 0.101.5
+ slate-react:
+ specifier: ^0.101.5
+ version: 0.101.5(react-dom@18.2.0)(react@18.2.0)(slate@0.101.5)
sonner:
specifier: ^1.3.1
version: 1.3.1(react-dom@18.2.0)(react@18.2.0)
@@ -949,6 +973,9 @@ importers:
dayjs:
specifier: ^1.11.10
version: 1.11.10
+ jotai:
+ specifier: ^2.6.1
+ version: 2.6.1(@types/react@18.2.46)(react@18.2.0)
nostr-tools:
specifier: 1.17.0
version: 1.17.0(typescript@5.3.3)
@@ -1072,6 +1099,37 @@ packages:
dev: true
optional: true
+ /@dnd-kit/accessibility@3.1.0(react@18.2.0):
+ resolution: {integrity: sha512-ea7IkhKvlJUv9iSHJOnxinBcoOI3ppGnnL+VDJ75O45Nss6HtZd8IdN8touXPDtASfeI2T2LImb8VOZcL47wjQ==}
+ peerDependencies:
+ react: '>=16.8.0'
+ dependencies:
+ react: 18.2.0
+ tslib: 2.6.2
+ dev: false
+
+ /@dnd-kit/core@6.1.0(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-J3cQBClB4TVxwGo3KEjssGEXNJqGVWx17aRTZ1ob0FliR5IjYgTxl5YJbKTzA6IzrtelotH19v6y7uoIRUZPSg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+ dependencies:
+ '@dnd-kit/accessibility': 3.1.0(react@18.2.0)
+ '@dnd-kit/utilities': 3.2.2(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ tslib: 2.6.2
+ dev: false
+
+ /@dnd-kit/utilities@3.2.2(react@18.2.0):
+ resolution: {integrity: sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==}
+ peerDependencies:
+ react: '>=16.8.0'
+ dependencies:
+ react: 18.2.0
+ tslib: 2.6.2
+ dev: false
+
/@emotion/is-prop-valid@0.8.8:
resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==}
requiresBuild: true
@@ -1377,6 +1435,10 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
+ /@juggle/resize-observer@3.4.0:
+ resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
+ dev: false
+
/@noble/ciphers@0.2.0:
resolution: {integrity: sha512-6YBxJDAapHSdd3bLDv6x2wRPwq4QFMUaB3HvljNBUTThDd12eSm7/3F+2lnfzx2jvM+S6Nsy0jEt9QbPqSwqRw==}
dev: false
@@ -2398,8 +2460,8 @@ packages:
/@scure/bip39@1.2.1:
resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==}
dependencies:
- '@noble/hashes': 1.3.1
- '@scure/base': 1.1.1
+ '@noble/hashes': 1.3.3
+ '@scure/base': 1.1.5
dev: false
/@swc/core-darwin-arm64@1.3.102:
@@ -2834,6 +2896,14 @@ packages:
'@tiptap/pm': 2.1.13
dev: false
+ /@types/is-hotkey@0.1.10:
+ resolution: {integrity: sha512-RvC8KMw5BCac1NvRRyaHgMMEtBaZ6wh0pyPTBu7izn4Sj/AX9Y4aXU5c7rX8PnM/knsuUpC1IeoBkANtxBypsQ==}
+ dev: false
+
+ /@types/lodash@4.14.202:
+ resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==}
+ dev: false
+
/@types/node@20.10.6:
resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==}
dependencies:
@@ -3267,6 +3337,10 @@ packages:
- supports-color
dev: true
+ /compute-scroll-into-view@3.1.0:
+ resolution: {integrity: sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==}
+ dev: false
+
/content-disposition@0.5.2:
resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==}
engines: {node: '>= 0.6'}
@@ -3436,6 +3510,11 @@ packages:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: true
+ /direction@1.0.4:
+ resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==}
+ hasBin: true
+ dev: false
+
/dlv@1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dev: true
@@ -4009,6 +4088,10 @@ packages:
safer-buffer: 2.1.2
dev: true
+ /immer@10.0.3:
+ resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==}
+ dev: false
+
/inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
dev: true
@@ -4113,6 +4196,10 @@ packages:
is-extglob: 2.1.1
dev: true
+ /is-hotkey@0.2.0:
+ resolution: {integrity: sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==}
+ dev: false
+
/is-negative-zero@2.0.2:
resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
engines: {node: '>= 0.4'}
@@ -4142,6 +4229,11 @@ packages:
isobject: 3.0.1
dev: false
+ /is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
/is-regex@1.1.4:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'}
@@ -4228,6 +4320,22 @@ packages:
hasBin: true
dev: true
+ /jotai@2.6.1(@types/react@18.2.46)(react@18.2.0):
+ resolution: {integrity: sha512-GLQtAnA9iEKRMXnyCjf1azIxfQi5JausX2EI5qSlb59j4i73ZEyV/EXPDEAQj4uQNZYEefi3degv/Pw3+L/Dtg==}
+ engines: {node: '>=12.20.0'}
+ peerDependencies:
+ '@types/react': '>=17.0.0'
+ react: '>=17.0.0'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+ react:
+ optional: true
+ dependencies:
+ '@types/react': 18.2.46
+ react: 18.2.0
+ dev: false
+
/js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: false
@@ -4346,6 +4454,10 @@ packages:
resolution: {integrity: sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==}
dev: true
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: false
+
/lodash@4.17.5:
resolution: {integrity: sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==}
dev: true
@@ -5258,6 +5370,12 @@ packages:
loose-envify: 1.4.0
dev: false
+ /scroll-into-view-if-needed@3.1.0:
+ resolution: {integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==}
+ dependencies:
+ compute-scroll-into-view: 3.1.0
+ dev: false
+
/semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
hasBin: true
@@ -5348,6 +5466,35 @@ packages:
engines: {node: '>=14'}
dev: true
+ /slate-react@0.101.5(react-dom@18.2.0)(react@18.2.0)(slate@0.101.5):
+ resolution: {integrity: sha512-KfnC1Je7dIZo1Uv4g5d1+No8hKkgXKcSEGGOH7zzZEX9iYGckSg6aBgO0hFmoilidowSiSU45/baL5aeYma9Vg==}
+ peerDependencies:
+ react: '>=18.2.0'
+ react-dom: '>=18.2.0'
+ slate: '>=0.99.0'
+ dependencies:
+ '@juggle/resize-observer': 3.4.0
+ '@types/is-hotkey': 0.1.10
+ '@types/lodash': 4.14.202
+ direction: 1.0.4
+ is-hotkey: 0.2.0
+ is-plain-object: 5.0.0
+ lodash: 4.17.21
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ scroll-into-view-if-needed: 3.1.0
+ slate: 0.101.5
+ tiny-invariant: 1.3.1
+ dev: false
+
+ /slate@0.101.5:
+ resolution: {integrity: sha512-ZZt1ia8ayRqxtpILRMi2a4MfdvwdTu64CorxTVq9vNSd0GQ/t3YDkze6wKjdeUtENmBlq5wNIDInZbx38Hfu5Q==}
+ dependencies:
+ immer: 10.0.3
+ is-plain-object: 5.0.0
+ tiny-warning: 1.0.3
+ dev: false
+
/smol-toml@1.1.3:
resolution: {integrity: sha512-qTyy6Owjho1ISBmxj4HdrFWB2kMQ5RczU6J04OqslSfdSH656OIHuomHS4ZDvhwm37nig/uXyiTMJxlC9zIVfw==}
engines: {node: '>= 18', pnpm: '>= 8'}
@@ -5613,6 +5760,14 @@ packages:
resolution: {integrity: sha512-UOZql+P2ET0da+B7V3/RImN3IhC5ghb+9cpecfUhmYGIm0z73dDr3A781nBLnFYmRzeT1AmoT4w9Lgr8n7n7xg==}
dev: true
+ /tiny-invariant@1.3.1:
+ resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
+ dev: false
+
+ /tiny-warning@1.0.3:
+ resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==}
+ dev: false
+
/tippy.js@6.3.7:
resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==}
dependencies: