Преглед изворни кода

Merge branch 'feat/db' into perf/lazy-load-data

Tienson Qin пре 1 година
родитељ
комит
6f90958e4b
100 измењених фајлова са 278 додато и 126 уклоњено
  1. 1 0
      .clj-kondo/config.edn
  2. 1 1
      CODE_OF_CONDUCT.md
  3. 9 9
      CONTRIBUTING.md
  4. 16 10
      deps/graph-parser/src/logseq/graph_parser.cljs
  5. 5 0
      fastlane/metadata/android/en-US/full_description.txt
  6. 1 0
      fastlane/metadata/android/en-US/short_description.txt
  7. 1 0
      gulpfile.js
  8. 4 4
      ios/App/App.xcodeproj/project.pbxproj
  9. 3 2
      package.json
  10. 0 0
      packages/tldraw/.editorconfig
  11. 0 0
      packages/tldraw/.eslintignore
  12. 0 0
      packages/tldraw/.eslintrc
  13. 0 0
      packages/tldraw/.gitattributes
  14. 0 0
      packages/tldraw/.gitignore
  15. 0 0
      packages/tldraw/.npmignore
  16. 0 0
      packages/tldraw/.prettierrc
  17. 0 0
      packages/tldraw/LICENSE.md
  18. 0 0
      packages/tldraw/README.md
  19. 0 0
      packages/tldraw/apps/tldraw-logseq/README.md
  20. 1 1
      packages/tldraw/apps/tldraw-logseq/build.mjs
  21. 1 9
      packages/tldraw/apps/tldraw-logseq/package.json
  22. 0 0
      packages/tldraw/apps/tldraw-logseq/postcss.config.js
  23. 0 0
      packages/tldraw/apps/tldraw-logseq/src/app.tsx
  24. 4 2
      packages/tldraw/apps/tldraw-logseq/src/components/ActionBar/ActionBar.tsx
  25. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/ActionBar/index.ts
  26. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/AppUI.tsx
  27. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/BlockLink/BlockLink.tsx
  28. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/BlockLink/index.ts
  29. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Button/Button.tsx
  30. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Button/CircleButton.tsx
  31. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Button/index.ts
  32. 4 2
      packages/tldraw/apps/tldraw-logseq/src/components/ContextBar/ContextBar.tsx
  33. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/ContextBar/contextBarActionFactory.tsx
  34. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/ContextBar/index.ts
  35. 7 13
      packages/tldraw/apps/tldraw-logseq/src/components/ContextMenu/ContextMenu.tsx
  36. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/ContextMenu/index.ts
  37. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Devtools/Devtools.tsx
  38. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Devtools/index.ts
  39. 13 10
      packages/tldraw/apps/tldraw-logseq/src/components/GeometryTools/GeometryTools.tsx
  40. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/GeometryTools/index.ts
  41. 4 4
      packages/tldraw/apps/tldraw-logseq/src/components/KeyboardShortcut/KeyboardShortcut.tsx
  42. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/KeyboardShortcut/index.ts
  43. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Minimap/Minimap.tsx
  44. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Minimap/index.ts
  45. 39 0
      packages/tldraw/apps/tldraw-logseq/src/components/PopoverButton/PopoverButton.tsx
  46. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/PopoverButton/index.ts
  47. 5 4
      packages/tldraw/apps/tldraw-logseq/src/components/PrimaryTools/PrimaryTools.tsx
  48. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/PrimaryTools/index.ts
  49. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/QuickLinks/QuickLinks.tsx
  50. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/QuickLinks/index.ts
  51. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/QuickSearch/QuickSearch.tsx
  52. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/QuickSearch/index.ts
  53. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/StatusBar/StatusBar.tsx
  54. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/StatusBar/index.ts
  55. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/ToolButton/ToolButton.tsx
  56. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/ToolButton/index.ts
  57. 31 0
      packages/tldraw/apps/tldraw-logseq/src/components/Tooltip/Tooltip.tsx
  58. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/Tooltip/index.ts
  59. 19 25
      packages/tldraw/apps/tldraw-logseq/src/components/ZoomMenu/ZoomMenu.tsx
  60. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/ZoomMenu/index.ts
  61. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/icons/TablerIcon.tsx
  62. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/icons/index.ts
  63. 9 9
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx
  64. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/NumberInput.tsx
  65. 1 1
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/ScaleInput.tsx
  66. 75 0
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/SelectInput.tsx
  67. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/ShapeLinksInput.tsx
  68. 0 0
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/TextInput.tsx
  69. 15 14
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/ToggleGroupInput.tsx
  70. 7 5
      packages/tldraw/apps/tldraw-logseq/src/components/inputs/ToggleInput.tsx
  71. 0 0
      packages/tldraw/apps/tldraw-logseq/src/hooks/useCameraMoving.ts
  72. 0 0
      packages/tldraw/apps/tldraw-logseq/src/hooks/useCopy.ts
  73. 0 0
      packages/tldraw/apps/tldraw-logseq/src/hooks/useDrop.ts
  74. 0 0
      packages/tldraw/apps/tldraw-logseq/src/hooks/usePaste.ts
  75. 0 0
      packages/tldraw/apps/tldraw-logseq/src/hooks/useQuickAdd.ts
  76. 0 0
      packages/tldraw/apps/tldraw-logseq/src/index.ts
  77. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/index.ts
  78. 2 1
      packages/tldraw/apps/tldraw-logseq/src/lib/logseq-context.ts
  79. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/preview-manager.tsx
  80. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/BindingIndicator.tsx
  81. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/BoxShape.tsx
  82. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/DotShape.tsx
  83. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/EllipseShape.tsx
  84. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/GroupShape.tsx
  85. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/HTMLShape.tsx
  86. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/HighlighterShape.tsx
  87. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/IFrameShape.tsx
  88. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/ImageShape.tsx
  89. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/LineShape.tsx
  90. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/LogseqPortalShape.tsx
  91. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PdfShape.tsx
  92. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PenShape.tsx
  93. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PencilShape.tsx
  94. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PolygonShape.tsx
  95. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/TextShape.tsx
  96. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/TweetShape.tsx
  97. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/VideoShape.tsx
  98. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/YouTubeShape.tsx
  99. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/arrow/Arrow.tsx
  100. 0 0
      packages/tldraw/apps/tldraw-logseq/src/lib/shapes/arrow/ArrowHead.tsx

+ 1 - 0
.clj-kondo/config.edn

@@ -89,6 +89,7 @@
              frontend.handler.file-based.page-property file-page-property
              frontend.handler.file-based.page-property file-page-property
              frontend.handler.file-based.property.util property-util
              frontend.handler.file-based.property.util property-util
              frontend.handler.file-based.recent file-recent-handler
              frontend.handler.file-based.recent file-recent-handler
+             frontend.handler.file-based.repo file-repo-handler
              frontend.handler.plugin plugin-handler
              frontend.handler.plugin plugin-handler
              frontend.handler.plugin-config plugin-config-handler
              frontend.handler.plugin-config plugin-config-handler
              frontend.handler.property.file property-file
              frontend.handler.property.file property-file

+ 1 - 1
CODE_OF_CONDUCT.md

@@ -63,7 +63,7 @@ a project may be further defined and clarified by project maintainers.
 ## Enforcement
 ## Enforcement
 
 
 Instances of abusive, harassing, or otherwise unacceptable behavior may be
 Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported by by contacting the moderators on the [Forum](https://discuss.logseq.com), [Discord](https://discord.gg/KpN4eHY) channel, Tienson Qin (@tiensonqin) on GitHub, or the official [Twitter](https://twitter.com/logseq). We will work with you to resolve the issue promptly. All
+reported by contacting the moderators on the [Forum](https://discuss.logseq.com), [Discord](https://discord.gg/KpN4eHY) channel, Tienson Qin (@tiensonqin) on GitHub, or the official [Twitter](https://twitter.com/logseq). We will work with you to resolve the issue promptly. All
 complaints will be reviewed and investigated and will result in a response that
 complaints will be reviewed and investigated and will result in a response that
 is deemed necessary and appropriate to the circumstances. The Logseq team
 is deemed necessary and appropriate to the circumstances. The Logseq team
 will maintain confidentiality with regard to the reporter of an incident.
 will maintain confidentiality with regard to the reporter of an incident.

+ 9 - 9
CONTRIBUTING.md

@@ -22,7 +22,7 @@ Please read and follow our [Code of Conduct][coc].
 
 
 There are many ways you can help. Here are some ways to help without coding:
 There are many ways you can help. Here are some ways to help without coding:
 
 
-- You can be help others on [Discord][discord] or [Reddit](https://www.reddit.com/r/logseq).
+- You can help others on [Discord][discord] or [Reddit](https://www.reddit.com/r/logseq).
 - You can [contribute to the official docs](https://github.com/logseq/docs/blob/master/CONTRIBUTING.md).
 - You can [contribute to the official docs](https://github.com/logseq/docs/blob/master/CONTRIBUTING.md).
 - You can confirm bugs on the [issue tracker][issue-tracker] and mention reproducible steps. It helps the core team to get more reports so we can fix the highest priority bugs.
 - You can confirm bugs on the [issue tracker][issue-tracker] and mention reproducible steps. It helps the core team to get more reports so we can fix the highest priority bugs.
 - You can contribute [translations][translations] with a [pull request](#submit-pr).
 - You can contribute [translations][translations] with a [pull request](#submit-pr).
@@ -40,7 +40,7 @@ tasks. We also have a project board to keep track of community contributions
 [Logseq - Develop Together
 [Logseq - Develop Together
 💪](https://github.com/orgs/logseq/projects/5?query=is%3Aopen+sort%3Aupdated-desc).
 💪](https://github.com/orgs/logseq/projects/5?query=is%3Aopen+sort%3Aupdated-desc).
 Another way to help with coding is by extending Logseq with
 Another way to help with coding is by extending Logseq with
-[plugins](https://docs.logseq.com/#/page/Plugins) and submit them to the [marketplace](https://github.com/logseq/marketplace) so that the
+[plugins](https://docs.logseq.com/#/page/Plugins) and submitting them to the [marketplace](https://github.com/logseq/marketplace) so that the
 whole community can benefit.
 whole community can benefit.
 
 
 ## <a name="question"></a> Got a Question or a Problem?
 ## <a name="question"></a> Got a Question or a Problem?
@@ -91,7 +91,7 @@ The template will ask you to include the following with each issue:
 
 
 Before working on your pull request, please check the following:
 Before working on your pull request, please check the following:
 
 
-1. Search [GitHub][search-pr] for related PRs that may effect your submission.
+1. Search [GitHub][search-pr] for related PRs that may affect your submission.
 
 
 2. Be sure that an issue describes the problem you're fixing or the feature
 2. Be sure that an issue describes the problem you're fixing or the feature
 behavior and design you'd like to add.
 behavior and design you'd like to add.
@@ -101,7 +101,7 @@ code without a signed CLA.
 
 
 After doing the above, you are ready to work on your PR! To create a PR, fork
 After doing the above, you are ready to work on your PR! To create a PR, fork
 this repository and then create a branch for the fix. Once you push your code to
 this repository and then create a branch for the fix. Once you push your code to
-your fork, you'll be able to open a PR to the Logseq repository. For more info
+your fork, you'll be able to open a PR to the Logseq repository. For more info,
 you can follow this [GitHub
 you can follow this [GitHub
 guide](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork).
 guide](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork).
 For more github PR guides, see [these
 For more github PR guides, see [these
@@ -111,7 +111,7 @@ guides](https://docs.github.com/en/pull-requests).
 
 
 When submitting a Pull Request (PR) or expecting a subsequent review, please follow these guidelines:
 When submitting a Pull Request (PR) or expecting a subsequent review, please follow these guidelines:
 
 
-1. The PR is ready for review. If you you have work you know how to do, then please keep your changes local until they are ready. If you need help with your PR, feel free to submit with questions.
+1. The PR is ready for review. If you have work you know how to do, then please keep your changes local until they are ready. If you need help with your PR, feel free to submit with questions.
 
 
 2. The PR checks which include tests and [lint checks](https://github.com/logseq/logseq/blob/master/docs/dev-practices.md#linting) are passing.
 2. The PR checks which include tests and [lint checks](https://github.com/logseq/logseq/blob/master/docs/dev-practices.md#linting) are passing.
 
 
@@ -119,7 +119,7 @@ When submitting a Pull Request (PR) or expecting a subsequent review, please fol
 
 
 4. The PR has [test(s)](https://github.com/logseq/logseq/blob/master/docs/dev-practices.md#testing) for features or enhancements. Tests for bug fixes are also appreciated as they help prevent regressions.
 4. The PR has [test(s)](https://github.com/logseq/logseq/blob/master/docs/dev-practices.md#testing) for features or enhancements. Tests for bug fixes are also appreciated as they help prevent regressions.
 
 
-5. The PR has a descriptive title that a user can understand. We use these titles to generate changelogs for the user. Most titles use one these prefixes to categorize the PR e.g. `PREFIX: DESCRIPTION ...`:
+5. The PR has a descriptive title that a user can understand. We use these titles to generate changelogs for the user. Most titles use one of these prefixes to categorize the PR e.g. `PREFIX: DESCRIPTION ...`:
    * `chore` - Misc changes that aren't dev, feat or fix
    * `chore` - Misc changes that aren't dev, feat or fix
    * `dev` - Developer related changes
    * `dev` - Developer related changes
    * `enhance` - Enhancements i.e. changes to existing features
    * `enhance` - Enhancements i.e. changes to existing features
@@ -132,12 +132,12 @@ When submitting a Pull Request (PR) or expecting a subsequent review, please fol
 7. The PR avoids the following changes that are not helpful to the core team:
 7. The PR avoids the following changes that are not helpful to the core team:
    * Unrelated refactoring or heavy refactoring
    * Unrelated refactoring or heavy refactoring
    * Code or doc formatting changes including whitespace changes
    * Code or doc formatting changes including whitespace changes
-   * Dependency updates e.g. in package.json
+   * Dependency updates e.g. in `package.json`
    * Changes that contain multiple unverified resources. This is risky for our users and is a lot of work to verify. A change with one resource that can be verified is acceptable.
    * Changes that contain multiple unverified resources. This is risky for our users and is a lot of work to verify. A change with one resource that can be verified is acceptable.
 
 
 ### PR Additional Links
 ### PR Additional Links
 
 
-* To run Logseq locally, see [this doc](https://github.com/logseq/logseq/blob/master/docs/develop-logseq.md) or [this doc for windows](https://github.com/logseq/logseq/blob/master/docs/develop-logseq-on-windows.md).
+* To run Logseq locally, see [this doc](https://github.com/logseq/logseq/blob/master/docs/develop-logseq.md) or [this doc for Windows](https://github.com/logseq/logseq/blob/master/docs/develop-logseq-on-windows.md).
 * To contribute to translations, please read our [translation contribution guidelines][translations].
 * To contribute to translations, please read our [translation contribution guidelines][translations].
 * See [our development practices doc](https://github.com/logseq/logseq/blob/master/docs/dev-practices.md) to learn how we develop.
 * See [our development practices doc](https://github.com/logseq/logseq/blob/master/docs/dev-practices.md) to learn how we develop.
 * See [the overview doc](CODEBASE_OVERVIEW.md) to get an overview of the codebase.
 * See [the overview doc](CODEBASE_OVERVIEW.md) to get an overview of the codebase.
@@ -150,7 +150,7 @@ changes to be accepted, the CLA must be signed. It's a quick process, we promise
 - For individuals, we have a [simple click-through form][individual-cla].
 - For individuals, we have a [simple click-through form][individual-cla].
 - For corporations, please contact us.
 - For corporations, please contact us.
 
 
-If you have more than one GitHub accounts or multiple email addresses associated with a single GitHub account, you must sign the CLA using the primary email address of the GitHub account used to author Git commits and send pull requests.
+If you have more than one GitHub account or multiple email addresses associated with a single GitHub account, you must sign the CLA using the primary email address of the GitHub account used to author Git commits and send pull requests.
 
 
 The following documents can help you sort out issues with GitHub accounts and multiple email addresses:
 The following documents can help you sort out issues with GitHub accounts and multiple email addresses:
 
 

+ 16 - 10
deps/graph-parser/src/logseq/graph_parser.cljs

@@ -8,7 +8,8 @@
             [logseq.graph-parser.extract :as extract]
             [logseq.graph-parser.extract :as extract]
             [logseq.common.util :as common-util]
             [logseq.common.util :as common-util]
             [logseq.common.config :as common-config]
             [logseq.common.config :as common-config]
-            [logseq.db :as ldb]))
+            [logseq.db :as ldb]
+            [logseq.db.frontend.content :as db-content]))
 
 
 (defn- retract-blocks-tx
 (defn- retract-blocks-tx
   [blocks retain-uuids]
   [blocks retain-uuids]
@@ -141,8 +142,10 @@ Options available:
             (fn [tags]
             (fn [tags]
               (mapv #(-> %
               (mapv #(-> %
                          add-missing-timestamps
                          add-missing-timestamps
+                         ;; don't use build-new-class b/c of timestamps
                          (merge {:block/journal? false
                          (merge {:block/journal? false
                                  :block/format :markdown
                                  :block/format :markdown
+                                 :block/type "class"
                                  :block/uuid (d/squuid)}))
                                  :block/uuid (d/squuid)}))
                     tags)))
                     tags)))
     block))
     block))
@@ -178,6 +181,13 @@ Options available:
                                                k)))
                                                k)))
                               (remove-keys keyword?)))))))
                               (remove-keys keyword?)))))))
         update-block-with-invalid-tags
         update-block-with-invalid-tags
+        ((fn [block']
+           (if (seq (:block/tags block'))
+             (update block :block/content
+                     db-content/content-without-tags
+                     (map :block/original-name (:block/tags block')))
+             block)))
+
         ((fn [block']
         ((fn [block']
            (if (seq (:block/refs block'))
            (if (seq (:block/refs block'))
              (update block' :block/refs
              (update block' :block/refs
@@ -199,9 +209,7 @@ Options available:
 
 
 (defn import-file-to-db-graph
 (defn import-file-to-db-graph
   "Parse file and save parsed data to the given db graph."
   "Parse file and save parsed data to the given db graph."
-  [conn file content {:keys [delete-blocks-fn extract-options skip-db-transact?]
-                      :or {delete-blocks-fn (constantly [])
-                           skip-db-transact? false}
+  [conn file content {:keys [extract-options]
                       :as options}]
                       :as options}]
   (let [format (common-util/get-format file)
   (let [format (common-util/get-format file)
         {:keys [tx ast]}
         {:keys [tx ast]}
@@ -222,11 +230,11 @@ Options available:
                     (common-config/whiteboard? file)
                     (common-config/whiteboard? file)
                     (extract/extract-whiteboard-edn file content extract-options')
                     (extract/extract-whiteboard-edn file content extract-options')
 
 
-                    :else nil)
+                    :else
+                    (println "Skipped file since its format is not supported:" file))
               ;; remove file path relative
               ;; remove file path relative
               pages (map #(dissoc % :block/file :block/properties) pages)
               pages (map #(dissoc % :block/file :block/properties) pages)
               block-ids (map (fn [block] {:block/uuid (:block/uuid block)}) blocks)
               block-ids (map (fn [block] {:block/uuid (:block/uuid block)}) blocks)
-              delete-blocks (delete-blocks-fn @conn (first pages) file block-ids)
               block-refs-ids (->> (mapcat :block/refs blocks)
               block-refs-ids (->> (mapcat :block/refs blocks)
                                   (filter (fn [ref] (and (vector? ref)
                                   (filter (fn [ref] (and (vector? ref)
                                                          (= :block/uuid (first ref)))))
                                                          (= :block/uuid (first ref)))))
@@ -262,12 +270,10 @@ Options available:
               blocks (map #(update-imported-block conn %) blocks)
               blocks (map #(update-imported-block conn %) blocks)
               pages-index (map #(select-keys % [:block/name]) pages)]
               pages-index (map #(select-keys % [:block/name]) pages)]
 
 
-          {:tx (concat refs whiteboard-pages pages-index delete-blocks pages block-ids blocks)
+          {:tx (concat refs whiteboard-pages pages-index pages block-ids blocks)
            :ast ast})
            :ast ast})
         tx' (common-util/fast-remove-nils tx)
         tx' (common-util/fast-remove-nils tx)
-        result (if skip-db-transact?
-                 tx'
-                 (d/transact! conn tx' (select-keys options [:new-graph? :from-disk?])))]
+        result (d/transact! conn tx' (select-keys options [:new-graph? :from-disk?]))]
     {:tx-report result
     {:tx-report result
      :ast ast}))
      :ast ast}))
 
 

+ 5 - 0
fastlane/metadata/android/en-US/full_description.txt

@@ -0,0 +1,5 @@
+Logseq is a knowledge management and collaboration platform. It focuses on privacy, longevity, and user control. Logseq offers a range of powerful tools for knowledge management, collaboration, PDF annotation, and task management with support for multiple file formats, including Markdown and Org-mode, and various features for organizing and structuring your notes.
+
+Logseq's Whiteboard feature lets you organize your knowledge and ideas using a spatial canvas with shapes, drawings, website embeds, and connectors. You can visually group and link your notes and external media (such as videos and images), enabling visual thinkers to compose, remix, annotate, and connect content from their knowledge base and emerging thoughts in a new way.
+
+In addition to its core features, Logseq has a growing ecosystem of plugins and themes that enable a wide range of workflows and customization options. Mobile apps are also available, providing access to most of the features of the desktop application. Whether you're a student, a professional, or anyone who values a clear and organized approach to managing your ideas and notes, Logseq is an excellent choice for anyone looking to improve their productivity and streamline their workflow.

+ 1 - 0
fastlane/metadata/android/en-US/short_description.txt

@@ -0,0 +1 @@
+A privacy-first, open-source platform for knowledge management and collaboration

+ 1 - 0
gulpfile.js

@@ -65,6 +65,7 @@ const common = {
         'node_modules/@highlightjs/cdn-assets/highlight.min.js',
         'node_modules/@highlightjs/cdn-assets/highlight.min.js',
         'node_modules/@isomorphic-git/lightning-fs/dist/lightning-fs.min.js',
         'node_modules/@isomorphic-git/lightning-fs/dist/lightning-fs.min.js',
         'packages/amplify/dist/amplify.js',
         'packages/amplify/dist/amplify.js',
+        'packages/ui/dist/ui.js',
         'node_modules/@logseq/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm',
         'node_modules/@logseq/sqlite-wasm/sqlite-wasm/jswasm/sqlite3.wasm',
       ]).pipe(gulp.dest(path.join(outputPath, 'js'))),
       ]).pipe(gulp.dest(path.join(outputPath, 'js'))),
       () => gulp.src([
       () => gulp.src([

+ 4 - 4
ios/App/App.xcodeproj/project.pbxproj

@@ -519,7 +519,7 @@
 				INFOPLIST_FILE = App/Info.plist;
 				INFOPLIST_FILE = App/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				MARKETING_VERSION = 0.10.5;
+				MARKETING_VERSION = 0.10.6;
 				OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
 				OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq;
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -546,7 +546,7 @@
 				INFOPLIST_FILE = App/Info.plist;
 				INFOPLIST_FILE = App/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				MARKETING_VERSION = 0.10.5;
+				MARKETING_VERSION = 0.10.6;
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq;
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
 				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "";
@@ -571,7 +571,7 @@
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
-				MARKETING_VERSION = 0.10.5;
+				MARKETING_VERSION = 0.10.6;
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_FAST_MATH = YES;
 				MTL_FAST_MATH = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq.ShareViewController;
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq.ShareViewController;
@@ -598,7 +598,7 @@
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				INFOPLIST_KEY_NSHumanReadableCopyright = "";
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
-				MARKETING_VERSION = 0.10.5;
+				MARKETING_VERSION = 0.10.6;
 				MTL_FAST_MATH = YES;
 				MTL_FAST_MATH = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq.ShareViewController;
 				PRODUCT_BUNDLE_IDENTIFIER = com.logseq.logseq.ShareViewController;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PRODUCT_NAME = "$(TARGET_NAME)";

+ 3 - 2
package.json

@@ -74,9 +74,10 @@
         "cljs:lint": "clojure -M:clj-kondo --parallel --lint src --cache false",
         "cljs:lint": "clojure -M:clj-kondo --parallel --lint src --cache false",
         "ios:dev": "cross-env PLATFORM=ios gulp cap",
         "ios:dev": "cross-env PLATFORM=ios gulp cap",
         "android:dev": "cross-env PLATFORM=android gulp cap",
         "android:dev": "cross-env PLATFORM=android gulp cap",
-        "tldraw:build": "yarn --cwd tldraw install",
+        "tldraw:build": "yarn --cwd packages/tldraw install",
         "amplify:build": "yarn --cwd packages/amplify install",
         "amplify:build": "yarn --cwd packages/amplify install",
-        "postinstall": "yarn tldraw:build && yarn amplify:build "
+        "ui:build": "yarn --cwd packages/ui install",
+        "postinstall": "yarn tldraw:build && yarn amplify:build && yarn ui:build"
     },
     },
     "dependencies": {
     "dependencies": {
         "@capacitor/android": "^5.0.0",
         "@capacitor/android": "^5.0.0",

+ 0 - 0
tldraw/.editorconfig → packages/tldraw/.editorconfig


+ 0 - 0
tldraw/.eslintignore → packages/tldraw/.eslintignore


+ 0 - 0
tldraw/.eslintrc → packages/tldraw/.eslintrc


+ 0 - 0
tldraw/.gitattributes → packages/tldraw/.gitattributes


+ 0 - 0
tldraw/.gitignore → packages/tldraw/.gitignore


+ 0 - 0
tldraw/.npmignore → packages/tldraw/.npmignore


+ 0 - 0
tldraw/.prettierrc → packages/tldraw/.prettierrc


+ 0 - 0
tldraw/LICENSE.md → packages/tldraw/LICENSE.md


+ 0 - 0
tldraw/README.md → packages/tldraw/README.md


+ 0 - 0
tldraw/apps/tldraw-logseq/README.md → packages/tldraw/apps/tldraw-logseq/README.md


+ 1 - 1
tldraw/apps/tldraw-logseq/build.mjs → packages/tldraw/apps/tldraw-logseq/build.mjs

@@ -23,7 +23,7 @@ Object.assign(glob, {
 
 
 fs.writeFileSync('dist/package.json', JSON.stringify(glob, null, 2))
 fs.writeFileSync('dist/package.json', JSON.stringify(glob, null, 2))
 
 
-const dest = path.join(__dirname, '/../../../src/main/frontend/tldraw-logseq.js')
+const dest = path.join(__dirname, '/../../../../src/main/frontend/tldraw-logseq.js')
 
 
 if (fs.existsSync(dest)) fs.unlinkSync(dest)
 if (fs.existsSync(dest)) fs.unlinkSync(dest)
 fs.linkSync(path.join(__dirname, '/dist/index.js'), dest)
 fs.linkSync(path.join(__dirname, '/dist/index.js'), dest)

+ 1 - 9
tldraw/apps/tldraw-logseq/package.json → packages/tldraw/apps/tldraw-logseq/package.json

@@ -11,15 +11,6 @@
   },
   },
   "devDependencies": {
   "devDependencies": {
     "@radix-ui/react-context-menu": "^2.1.0",
     "@radix-ui/react-context-menu": "^2.1.0",
-    "@radix-ui/react-dropdown-menu": "^2.0.1",
-    "@radix-ui/react-popover": "^1.0.0",
-    "@radix-ui/react-select": "^1.2.1",
-    "@radix-ui/react-separator": "^1.0.1",
-    "@radix-ui/react-slider": "^1.1.0",
-    "@radix-ui/react-switch": "^1.0.1",
-    "@radix-ui/react-toggle": "^1.0.1",
-    "@radix-ui/react-toggle-group": "^1.0.1",
-    "@radix-ui/react-tooltip": "^1.0.2",
     "@tldraw/core": "2.0.0-alpha.1",
     "@tldraw/core": "2.0.0-alpha.1",
     "@tldraw/react": "2.0.0-alpha.1",
     "@tldraw/react": "2.0.0-alpha.1",
     "@tldraw/vec": "2.0.0-alpha.1",
     "@tldraw/vec": "2.0.0-alpha.1",
@@ -34,6 +25,7 @@
     "perfect-freehand": "^1.2.0",
     "perfect-freehand": "^1.2.0",
     "polished": "^4.0.0",
     "polished": "^4.0.0",
     "postcss": "^8.4.19",
     "postcss": "^8.4.19",
+    "lucide-react": "^0.292.0",
     "react": "^17.0.0",
     "react": "^17.0.0",
     "react-dom": "^17.0.0",
     "react-dom": "^17.0.0",
     "react-virtuoso": "^3.1.3",
     "react-virtuoso": "^3.1.3",

+ 0 - 0
tldraw/apps/tldraw-logseq/postcss.config.js → packages/tldraw/apps/tldraw-logseq/postcss.config.js


+ 0 - 0
tldraw/apps/tldraw-logseq/src/app.tsx → packages/tldraw/apps/tldraw-logseq/src/app.tsx


+ 4 - 2
tldraw/apps/tldraw-logseq/src/components/ActionBar/ActionBar.tsx → packages/tldraw/apps/tldraw-logseq/src/components/ActionBar/ActionBar.tsx

@@ -8,9 +8,11 @@ import { TablerIcon } from '../icons'
 import { Button } from '../Button'
 import { Button } from '../Button'
 import { ToggleInput } from '../inputs/ToggleInput'
 import { ToggleInput } from '../inputs/ToggleInput'
 import { ZoomMenu } from '../ZoomMenu'
 import { ZoomMenu } from '../ZoomMenu'
-import * as Separator from '@radix-ui/react-separator'
 import { LogseqContext } from '../../lib/logseq-context'
 import { LogseqContext } from '../../lib/logseq-context'
 
 
+// @ts-ignore
+const LSUI = window.LSUI
+
 export const ActionBar = observer(function ActionBar(): JSX.Element {
 export const ActionBar = observer(function ActionBar(): JSX.Element {
   const app = useApp<Shape>()
   const app = useApp<Shape>()
   const {
   const {
@@ -65,7 +67,7 @@ export const ActionBar = observer(function ActionBar(): JSX.Element {
         <Button tooltip={t('whiteboard/zoom-out')} onClick={zoomOut} id="tl-zoom-out">
         <Button tooltip={t('whiteboard/zoom-out')} onClick={zoomOut} id="tl-zoom-out">
           <TablerIcon name="minus" />
           <TablerIcon name="minus" />
         </Button>
         </Button>
-        <Separator.Root className="tl-toolbar-separator" orientation="vertical" />
+        <LSUI.Separator orientation="vertical" />
         <ZoomMenu />
         <ZoomMenu />
       </div>
       </div>
 
 

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/ActionBar/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/ActionBar/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/AppUI.tsx → packages/tldraw/apps/tldraw-logseq/src/components/AppUI.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/BlockLink/BlockLink.tsx → packages/tldraw/apps/tldraw-logseq/src/components/BlockLink/BlockLink.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/BlockLink/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/BlockLink/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Button/Button.tsx → packages/tldraw/apps/tldraw-logseq/src/components/Button/Button.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Button/CircleButton.tsx → packages/tldraw/apps/tldraw-logseq/src/components/Button/CircleButton.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Button/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/Button/index.ts


+ 4 - 2
tldraw/apps/tldraw-logseq/src/components/ContextBar/ContextBar.tsx → packages/tldraw/apps/tldraw-logseq/src/components/ContextBar/ContextBar.tsx

@@ -1,4 +1,3 @@
-import * as Separator from '@radix-ui/react-separator'
 import {
 import {
   getContextBarTranslation,
   getContextBarTranslation,
   HTMLContainer,
   HTMLContainer,
@@ -11,6 +10,9 @@ import * as React from 'react'
 import type { Shape } from '../../lib'
 import type { Shape } from '../../lib'
 import { getContextBarActionsForShapes } from './contextBarActionFactory'
 import { getContextBarActionsForShapes } from './contextBarActionFactory'
 
 
+// @ts-ignore
+const LSUI = window.LSUI
+
 const _ContextBar: TLContextBarComponent<Shape> = ({ shapes, offsets, hidden }) => {
 const _ContextBar: TLContextBarComponent<Shape> = ({ shapes, offsets, hidden }) => {
   const app = useApp()
   const app = useApp()
   const rSize = React.useRef<[number, number] | null>(null)
   const rSize = React.useRef<[number, number] | null>(null)
@@ -52,7 +54,7 @@ const _ContextBar: TLContextBarComponent<Shape> = ({ shapes, offsets, hidden })
             <React.Fragment key={idx}>
             <React.Fragment key={idx}>
               <Action />
               <Action />
               {idx < Actions.length - 1 && (
               {idx < Actions.length - 1 && (
-                <Separator.Root className="tl-toolbar-separator" orientation="vertical" />
+                <LSUI.Separator orientation="vertical" />
               )}
               )}
             </React.Fragment>
             </React.Fragment>
           ))}
           ))}

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/ContextBar/contextBarActionFactory.tsx → packages/tldraw/apps/tldraw-logseq/src/components/ContextBar/contextBarActionFactory.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/ContextBar/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/ContextBar/index.ts


+ 7 - 13
tldraw/apps/tldraw-logseq/src/components/ContextMenu/ContextMenu.tsx → packages/tldraw/apps/tldraw-logseq/src/components/ContextMenu/ContextMenu.tsx

@@ -8,9 +8,11 @@ import { KeyboardShortcut } from '../KeyboardShortcut'
 import * as React from 'react'
 import * as React from 'react'
 
 
 import * as ReactContextMenu from '@radix-ui/react-context-menu'
 import * as ReactContextMenu from '@radix-ui/react-context-menu'
-import * as Separator from '@radix-ui/react-separator'
 import { toJS } from 'mobx'
 import { toJS } from 'mobx'
 
 
+// @ts-ignore
+const LSUI = window.LSUI
+
 interface ContextMenuProps {
 interface ContextMenuProps {
   children: React.ReactNode
   children: React.ReactNode
   collisionRef: React.RefObject<HTMLDivElement>
   collisionRef: React.RefObject<HTMLDivElement>
@@ -82,7 +84,7 @@ export const ContextMenu = observer(function ContextMenu({
                     >
                     >
                       <TablerIcon name="layout-align-right" />
                       <TablerIcon name="layout-align-right" />
                     </Button>
                     </Button>
-                    <Separator.Root className="tl-toolbar-separator" orientation="vertical" />
+                    <LSUI.Separator orientation="vertical" />
                     <Button
                     <Button
                       tooltip={t('whiteboard/distribute-horizontally')}
                       tooltip={t('whiteboard/distribute-horizontally')}
                       onClick={() =>
                       onClick={() =>
@@ -111,7 +113,7 @@ export const ContextMenu = observer(function ContextMenu({
                     >
                     >
                       <TablerIcon name="layout-align-bottom" />
                       <TablerIcon name="layout-align-bottom" />
                     </Button>
                     </Button>
-                    <Separator.Root className="tl-toolbar-separator" orientation="vertical" />
+                    <LSUI.Separator orientation="vertical" />
                     <Button
                     <Button
                       tooltip={t('whiteboard/distribute-vertically')}
                       tooltip={t('whiteboard/distribute-vertically')}
                       onClick={() =>
                       onClick={() =>
@@ -202,11 +204,7 @@ export const ContextMenu = observer(function ContextMenu({
             >
             >
               <TablerIcon className="tl-menu-icon" name="clipboard" />
               <TablerIcon className="tl-menu-icon" name="clipboard" />
               {t('whiteboard/paste')}
               {t('whiteboard/paste')}
-              <div className="tl-menu-right-slot">
-                <span className="keyboard-shortcut">
-                  <code>{MOD_KEY}+v</code>
-                </span>
-              </div>
+              <KeyboardShortcut sequence={MOD_KEY+"+v"} />
             </ReactContextMenu.Item>
             </ReactContextMenu.Item>
           )}
           )}
           {app.selectedShapes?.size === 1 && !app.readOnly && (
           {app.selectedShapes?.size === 1 && !app.readOnly && (
@@ -215,11 +213,7 @@ export const ContextMenu = observer(function ContextMenu({
               onClick={() => runAndTransition(() => app.paste(undefined, true))}
               onClick={() => runAndTransition(() => app.paste(undefined, true))}
             >
             >
               {t('whiteboard/paste-as-link')}
               {t('whiteboard/paste-as-link')}
-              <div className="tl-menu-right-slot">
-                <span className="keyboard-shortcut">
-                  <code>{MOD_KEY}+⇧+v</code>
-                </span>
-              </div>
+              <KeyboardShortcut sequence={MOD_KEY+"+⇧+v"} />
             </ReactContextMenu.Item>
             </ReactContextMenu.Item>
           )}
           )}
           {app.selectedShapes?.size > 0 && (
           {app.selectedShapes?.size > 0 && (

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/ContextMenu/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/ContextMenu/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Devtools/Devtools.tsx → packages/tldraw/apps/tldraw-logseq/src/components/Devtools/Devtools.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Devtools/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/Devtools/index.ts


+ 13 - 10
tldraw/apps/tldraw-logseq/src/components/GeometryTools/GeometryTools.tsx → packages/tldraw/apps/tldraw-logseq/src/components/GeometryTools/GeometryTools.tsx

@@ -1,11 +1,13 @@
 import { observer } from 'mobx-react-lite'
 import { observer } from 'mobx-react-lite'
 import type { Side } from '@radix-ui/react-popper'
 import type { Side } from '@radix-ui/react-popper'
 import { ToolButton } from '../ToolButton'
 import { ToolButton } from '../ToolButton'
-import * as Popover from '@radix-ui/react-popover'
 import { TablerIcon } from '../icons'
 import { TablerIcon } from '../icons'
 import React from 'react'
 import React from 'react'
 import { LogseqContext } from '../../lib/logseq-context'
 import { LogseqContext } from '../../lib/logseq-context'
 
 
+// @ts-ignore
+const LSUI = window.LSUI
+
 interface GeometryToolsProps extends React.HTMLAttributes<HTMLElement> {
 interface GeometryToolsProps extends React.HTMLAttributes<HTMLElement> {
   popoverSide?: Side
   popoverSide?: Side
   activeGeometry?: string
   activeGeometry?: string
@@ -51,8 +53,8 @@ export const GeometryTools = observer(function GeometryTools({
   const activeTool = activeGeometry ? geometries.find(geo => geo.id === activeGeometry) : shapes
   const activeTool = activeGeometry ? geometries.find(geo => geo.id === activeGeometry) : shapes
 
 
   return (
   return (
-    <Popover.Root>
-      <Popover.Trigger asChild>
+    <LSUI.Popover>
+      <LSUI.PopoverTrigger asChild>
         <div {...rest} className="tl-geometry-tools-pane-anchor">
         <div {...rest} className="tl-geometry-tools-pane-anchor">
           <ToolButton {...activeTool} tooltipSide={popoverSide} />
           <ToolButton {...activeTool} tooltipSide={popoverSide} />
           {chevron && (
           {chevron && (
@@ -63,9 +65,13 @@ export const GeometryTools = observer(function GeometryTools({
             />
             />
           )}
           )}
         </div>
         </div>
-      </Popover.Trigger>
+      </LSUI.PopoverTrigger>
 
 
-      <Popover.Content className="tl-popover-content" side={popoverSide} sideOffset={15}>
+      <LSUI.PopoverContent
+        className="p-0 w-auto"
+        side={popoverSide}
+        sideOffset={15}
+        collisionBoundary={document.querySelector('.logseq-tldraw')}>
         <div
         <div
           className={`tl-toolbar tl-geometry-toolbar ${
           className={`tl-toolbar tl-geometry-toolbar ${
             ['left', 'right'].includes(popoverSide) ? 'flex-col' : 'flex-row'
             ['left', 'right'].includes(popoverSide) ? 'flex-col' : 'flex-row'
@@ -76,15 +82,12 @@ export const GeometryTools = observer(function GeometryTools({
               key={props.id}
               key={props.id}
               id={props.id}
               id={props.id}
               icon={props.icon}
               icon={props.icon}
-              tooltip={activeGeometry ? props.tooltip : ''}
               handleClick={setGeometry}
               handleClick={setGeometry}
               tooltipSide={popoverSide}
               tooltipSide={popoverSide}
             />
             />
           ))}
           ))}
         </div>
         </div>
-
-        <Popover.Arrow className="tl-popover-arrow" />
-      </Popover.Content>
-    </Popover.Root>
+      </LSUI.PopoverContent>
+    </LSUI.Popover>
   )
   )
 })
 })

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/GeometryTools/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/GeometryTools/index.ts


+ 4 - 4
tldraw/apps/tldraw-logseq/src/components/KeyboardShortcut/KeyboardShortcut.tsx → packages/tldraw/apps/tldraw-logseq/src/components/KeyboardShortcut/KeyboardShortcut.tsx

@@ -3,14 +3,14 @@ import * as React from 'react'
 
 
 export const KeyboardShortcut = ({
 export const KeyboardShortcut = ({
   action,
   action,
-  ...props
-}: { action: string } & React.HTMLAttributes<HTMLElement>) => {
+  sequence
+}: { action?: string, sequence?: string | string[] } & React.HTMLAttributes<HTMLElement>) => {
   const { renderers } = React.useContext(LogseqContext)
   const { renderers } = React.useContext(LogseqContext)
   const Shortcut = renderers?.KeyboardShortcut
   const Shortcut = renderers?.KeyboardShortcut
 
 
   return (
   return (
-    <div className="tl-menu-right-slot" {...props}>
-      <Shortcut action={action} />
+    <div className="tl-menu-right-slot">
+      <Shortcut action={action} sequence={sequence} />
     </div>
     </div>
   )
   )
 }
 }

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/KeyboardShortcut/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/KeyboardShortcut/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Minimap/Minimap.tsx → packages/tldraw/apps/tldraw-logseq/src/components/Minimap/Minimap.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Minimap/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/Minimap/index.ts


+ 39 - 0
packages/tldraw/apps/tldraw-logseq/src/components/PopoverButton/PopoverButton.tsx

@@ -0,0 +1,39 @@
+import type { Side, Align } from '@radix-ui/react-popper'
+
+// @ts-ignore
+const LSUI = window.LSUI
+
+interface PopoverButton extends React.HTMLAttributes<HTMLButtonElement> {
+  side: Side // default side
+  align?: Align
+  alignOffset?: number
+  label: React.ReactNode
+  children: React.ReactNode
+  border?: boolean
+}
+
+export function PopoverButton({ side, align, alignOffset, label, children, border, ...rest }: PopoverButton) {
+  return (
+    <LSUI.Popover>
+      <LSUI.PopoverTrigger
+        {...rest}
+        data-border={border}
+        className="tl-button tl-popover-trigger-button"
+      >
+        {label}
+      </LSUI.PopoverTrigger>
+
+      <LSUI.PopoverContent
+        className="w-auto p-1"
+        align={align}
+        alignOffset={alignOffset}
+        side={side}
+        sideOffset={15}
+        collisionBoundary={document.querySelector('.logseq-tldraw')}
+      >
+        {children}
+        <LSUI.PopoverArrow className="popper-arrow" />
+      </LSUI.PopoverContent>
+    </LSUI.Popover>
+  )
+}

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/PopoverButton/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/PopoverButton/index.ts


+ 5 - 4
tldraw/apps/tldraw-logseq/src/components/PrimaryTools/PrimaryTools.tsx → packages/tldraw/apps/tldraw-logseq/src/components/PrimaryTools/PrimaryTools.tsx

@@ -6,9 +6,11 @@ import { ToolButton } from '../ToolButton'
 import { GeometryTools } from '../GeometryTools'
 import { GeometryTools } from '../GeometryTools'
 import { ColorInput } from '../inputs/ColorInput'
 import { ColorInput } from '../inputs/ColorInput'
 import { ScaleInput } from '../inputs/ScaleInput'
 import { ScaleInput } from '../inputs/ScaleInput'
-import * as Separator from '@radix-ui/react-separator'
 import { LogseqContext } from '../../lib/logseq-context'
 import { LogseqContext } from '../../lib/logseq-context'
 
 
+// @ts-ignore
+const LSUI = window.LSUI
+
 export const PrimaryTools = observer(function PrimaryTools() {
 export const PrimaryTools = observer(function PrimaryTools() {
   const app = useApp()
   const app = useApp()
   const {
   const {
@@ -51,7 +53,7 @@ export const PrimaryTools = observer(function PrimaryTools() {
           id="move"
           id="move"
           icon={app.isIn('move.panning') ? 'hand-grab' : 'hand-stop'}
           icon={app.isIn('move.panning') ? 'hand-grab' : 'hand-stop'}
         />
         />
-        <Separator.Root className="tl-toolbar-separator" orientation="horizontal" />
+        <LSUI.Separator orientation="horizontal" />
         <ToolButton
         <ToolButton
           handleClick={() => app.selectTool('logseq-portal')}
           handleClick={() => app.selectTool('logseq-portal')}
           tooltip={t('whiteboard/add-block-or-page')}
           tooltip={t('whiteboard/add-block-or-page')}
@@ -89,8 +91,7 @@ export const PrimaryTools = observer(function PrimaryTools() {
           icon="text"
           icon="text"
         />
         />
         <GeometryTools activeGeometry={activeGeomId} setGeometry={handleToolClick} />
         <GeometryTools activeGeometry={activeGeomId} setGeometry={handleToolClick} />
-        <Separator.Root
-          className="tl-toolbar-separator"
+        <LSUI.Separator
           orientation="horizontal"
           orientation="horizontal"
           style={{ margin: '0 -4px' }}
           style={{ margin: '0 -4px' }}
         />
         />

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/PrimaryTools/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/PrimaryTools/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/QuickLinks/QuickLinks.tsx → packages/tldraw/apps/tldraw-logseq/src/components/QuickLinks/QuickLinks.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/QuickLinks/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/QuickLinks/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/QuickSearch/QuickSearch.tsx → packages/tldraw/apps/tldraw-logseq/src/components/QuickSearch/QuickSearch.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/QuickSearch/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/QuickSearch/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/StatusBar/StatusBar.tsx → packages/tldraw/apps/tldraw-logseq/src/components/StatusBar/StatusBar.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/StatusBar/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/StatusBar/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/ToolButton/ToolButton.tsx → packages/tldraw/apps/tldraw-logseq/src/components/ToolButton/ToolButton.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/ToolButton/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/ToolButton/index.ts


+ 31 - 0
packages/tldraw/apps/tldraw-logseq/src/components/Tooltip/Tooltip.tsx

@@ -0,0 +1,31 @@
+import type { Side } from '@radix-ui/react-popper'
+
+// @ts-ignore
+const LSUI = window.LSUI
+
+export interface TooltipProps {
+  children: React.ReactNode
+  side?: Side
+  sideOffset?: number
+  content?: React.ReactNode
+}
+
+export function Tooltip({ side, content, sideOffset = 10, ...rest }: TooltipProps) {
+  return content ? (
+    <LSUI.TooltipProvider delayDuration={300}>
+      <LSUI.Tooltip>
+        <LSUI.TooltipTrigger asChild>{rest.children}</LSUI.TooltipTrigger>
+          <LSUI.TooltipContent
+            sideOffset={sideOffset}
+            side={side}
+            {...rest}
+          >
+            {content}
+            <LSUI.TooltipArrow className="popper-arrow" />
+          </LSUI.TooltipContent>
+      </LSUI.Tooltip>
+    </LSUI.TooltipProvider>
+  ) : (
+    <>{rest.children}</>
+  )
+}

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/Tooltip/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/Tooltip/index.ts


+ 19 - 25
tldraw/apps/tldraw-logseq/src/components/ZoomMenu/ZoomMenu.tsx → packages/tldraw/apps/tldraw-logseq/src/components/ZoomMenu/ZoomMenu.tsx

@@ -1,9 +1,9 @@
-import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'
 import { useApp } from '@tldraw/react'
 import { useApp } from '@tldraw/react'
 import { KeyboardShortcut } from '../KeyboardShortcut'
 import { KeyboardShortcut } from '../KeyboardShortcut'
-import { MOD_KEY } from '@tldraw/core'
 import { observer } from 'mobx-react-lite'
 import { observer } from 'mobx-react-lite'
-import * as React from 'react'
+
+// @ts-ignore
+const LSUI = window.LSUI
 
 
 export const ZoomMenu = observer(function ZoomMenu(): JSX.Element {
 export const ZoomMenu = observer(function ZoomMenu(): JSX.Element {
   const app = useApp()
   const app = useApp()
@@ -12,59 +12,53 @@ export const ZoomMenu = observer(function ZoomMenu(): JSX.Element {
   }
   }
 
 
   return (
   return (
-    <DropdownMenuPrimitive.Root>
-      <DropdownMenuPrimitive.Trigger className="tl-button text-sm px-2 important" id="tl-zoom">
+    <LSUI.DropdownMenu>
+      <LSUI.DropdownMenuTrigger className="tl-button text-sm px-2 important" id="tl-zoom">
         {(app.viewport.camera.zoom * 100).toFixed(0) + '%'}
         {(app.viewport.camera.zoom * 100).toFixed(0) + '%'}
-      </DropdownMenuPrimitive.Trigger>
-      <DropdownMenuPrimitive.Content
+      </LSUI.DropdownMenuTrigger>
+      <LSUI.DropdownMenuContent
         onCloseAutoFocus={e => e.preventDefault()}
         onCloseAutoFocus={e => e.preventDefault()}
-        className="tl-menu"
         id="zoomPopup"
         id="zoomPopup"
         sideOffset={12}
         sideOffset={12}
       >
       >
-        <DropdownMenuPrimitive.Item
-          className="tl-menu-item"
+        <LSUI.DropdownMenuItem
           onSelect={preventEvent}
           onSelect={preventEvent}
           onClick={app.api.zoomToFit}
           onClick={app.api.zoomToFit}
         >
         >
           Zoom to drawing
           Zoom to drawing
           <KeyboardShortcut action="whiteboard/zoom-to-fit" />
           <KeyboardShortcut action="whiteboard/zoom-to-fit" />
-        </DropdownMenuPrimitive.Item>
-        <DropdownMenuPrimitive.Item
-          className="tl-menu-item"
+        </LSUI.DropdownMenuItem>
+        <LSUI.DropdownMenuItem
           onSelect={preventEvent}
           onSelect={preventEvent}
           onClick={app.api.zoomToSelection}
           onClick={app.api.zoomToSelection}
           disabled={app.selectedShapesArray.length === 0}
           disabled={app.selectedShapesArray.length === 0}
         >
         >
           Zoom to fit selection
           Zoom to fit selection
           <KeyboardShortcut action="whiteboard/zoom-to-selection" />
           <KeyboardShortcut action="whiteboard/zoom-to-selection" />
-        </DropdownMenuPrimitive.Item>
-        <DropdownMenuPrimitive.Item
-          className="tl-menu-item"
+        </LSUI.DropdownMenuItem>
+        <LSUI.DropdownMenuItem
           onSelect={preventEvent}
           onSelect={preventEvent}
           onClick={app.api.zoomIn}
           onClick={app.api.zoomIn}
         >
         >
           Zoom in
           Zoom in
           <KeyboardShortcut action="whiteboard/zoom-in" />
           <KeyboardShortcut action="whiteboard/zoom-in" />
-        </DropdownMenuPrimitive.Item>
-        <DropdownMenuPrimitive.Item
-          className="tl-menu-item"
+        </LSUI.DropdownMenuItem>
+        <LSUI.DropdownMenuItem
           onSelect={preventEvent}
           onSelect={preventEvent}
           onClick={app.api.zoomOut}
           onClick={app.api.zoomOut}
         >
         >
           Zoom out
           Zoom out
           <KeyboardShortcut action="whiteboard/zoom-out" />
           <KeyboardShortcut action="whiteboard/zoom-out" />
-        </DropdownMenuPrimitive.Item>
-        <DropdownMenuPrimitive.Item
-          className="tl-menu-item"
+        </LSUI.DropdownMenuItem>
+        <LSUI.DropdownMenuItem
           onSelect={preventEvent}
           onSelect={preventEvent}
           onClick={app.api.resetZoom}
           onClick={app.api.resetZoom}
         >
         >
           Reset zoom
           Reset zoom
           <KeyboardShortcut action="whiteboard/reset-zoom" />
           <KeyboardShortcut action="whiteboard/reset-zoom" />
-        </DropdownMenuPrimitive.Item>
-      </DropdownMenuPrimitive.Content>
-    </DropdownMenuPrimitive.Root>
+        </LSUI.DropdownMenuItem>
+      </LSUI.DropdownMenuContent>
+    </LSUI.DropdownMenu>
   )
   )
 })
 })
 
 

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/ZoomMenu/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/ZoomMenu/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/icons/TablerIcon.tsx → packages/tldraw/apps/tldraw-logseq/src/components/icons/TablerIcon.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/icons/index.ts → packages/tldraw/apps/tldraw-logseq/src/components/icons/index.ts


+ 9 - 9
tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx → packages/tldraw/apps/tldraw-logseq/src/components/inputs/ColorInput.tsx

@@ -1,11 +1,12 @@
 import type { Side } from '@radix-ui/react-popper'
 import type { Side } from '@radix-ui/react-popper'
-import * as Slider from '@radix-ui/react-slider'
 import { Color, isBuiltInColor, debounce } from '@tldraw/core'
 import { Color, isBuiltInColor, debounce } from '@tldraw/core'
 import { TablerIcon } from '../icons'
 import { TablerIcon } from '../icons'
 import { PopoverButton } from '../PopoverButton'
 import { PopoverButton } from '../PopoverButton'
 import { Tooltip } from '../Tooltip'
 import { Tooltip } from '../Tooltip'
 import React from 'react'
 import React from 'react'
 import { LogseqContext } from '../../lib/logseq-context'
 import { LogseqContext } from '../../lib/logseq-context'
+// @ts-ignore
+const LSUI = window.LSUI
 
 
 interface ColorInputProps extends React.HTMLAttributes<HTMLButtonElement> {
 interface ColorInputProps extends React.HTMLAttributes<HTMLButtonElement> {
   color?: string
   color?: string
@@ -59,7 +60,6 @@ export function ColorInput({
     <PopoverButton
     <PopoverButton
       {...rest}
       {...rest}
       border
       border
-      arrow
       side={popoverSide}
       side={popoverSide}
       label={
       label={
         <Tooltip content={t('whiteboard/color')} side={popoverSide} sideOffset={14}>
         <Tooltip content={t('whiteboard/color')} side={popoverSide} sideOffset={14}>
@@ -94,14 +94,14 @@ export function ColorInput({
               />
               />
             </div>
             </div>
           </div>
           </div>
-          <label htmlFor="tl-custom-color-input" className="cursor-pointer">
+          <label htmlFor="tl-custom-color-input" className="text-xs cursor-pointer">
             {t('whiteboard/select-custom-color')}
             {t('whiteboard/select-custom-color')}
           </label>
           </label>
         </div>
         </div>
 
 
         {setOpacity && (
         {setOpacity && (
           <div className="mx-1 my-2">
           <div className="mx-1 my-2">
-            <Slider.Root
+            <LSUI.Slider
               defaultValue={[opacity ?? 0]}
               defaultValue={[opacity ?? 0]}
               onValueCommit={value => setOpacity(value[0])}
               onValueCommit={value => setOpacity(value[0])}
               max={1}
               max={1}
@@ -109,11 +109,11 @@ export function ColorInput({
               aria-label={t('whiteboard/opacity')}
               aria-label={t('whiteboard/opacity')}
               className="tl-slider-root"
               className="tl-slider-root"
             >
             >
-              <Slider.Track className="tl-slider-track">
-                <Slider.Range className="tl-slider-range" />
-              </Slider.Track>
-              <Slider.Thumb className="tl-slider-thumb" />
-            </Slider.Root>
+              <LSUI.SliderTrack className="tl-slider-track">
+                <LSUI.SliderRange className="tl-slider-range" />
+              </LSUI.SliderTrack>
+              <LSUI.SliderThumb className="tl-slider-thumb" />
+            </LSUI.Slider>
           </div>
           </div>
         )}
         )}
       </div>
       </div>

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/inputs/NumberInput.tsx → packages/tldraw/apps/tldraw-logseq/src/components/inputs/NumberInput.tsx


+ 1 - 1
tldraw/apps/tldraw-logseq/src/components/inputs/ScaleInput.tsx → packages/tldraw/apps/tldraw-logseq/src/components/inputs/ScaleInput.tsx

@@ -50,7 +50,7 @@ export function ScaleInput({ scaleLevel, compact, popoverSide, ...rest }: ScaleI
       options={sizeOptions}
       options={sizeOptions}
       value={scaleLevel}
       value={scaleLevel}
       popoverSide={popoverSide}
       popoverSide={popoverSide}
-      chevron={!compact}
+      compact={compact}
       onValueChange={v => {
       onValueChange={v => {
         app.api.setScaleLevel(v)
         app.api.setScaleLevel(v)
       }}
       }}

+ 75 - 0
packages/tldraw/apps/tldraw-logseq/src/components/inputs/SelectInput.tsx

@@ -0,0 +1,75 @@
+import * as React from 'react'
+import { Tooltip } from '../Tooltip'
+import { ChevronDown } from 'lucide-react'
+import type { Side } from '@radix-ui/react-popper'
+
+// @ts-ignore
+const LSUI = window.LSUI
+
+export interface SelectOption {
+  value: string
+  label: React.ReactNode
+}
+
+interface SelectInputProps extends React.HTMLAttributes<HTMLElement> {
+  options: SelectOption[]
+  value: string
+  tooltip?: React.ReactNode
+  popoverSide?: Side
+  compact?: boolean
+  onValueChange: (value: string) => void
+}
+
+export function SelectInput({
+  options,
+  tooltip,
+  popoverSide,
+  compact = false,
+  value,
+  onValueChange,
+  ...rest
+}: SelectInputProps) {
+  const [isOpen, setIsOpen] = React.useState(false)
+  return (
+    <div {...rest}>
+      <LSUI.Select
+        open={isOpen}
+        onOpenChange={setIsOpen}
+        value={value}
+        onValueChange={onValueChange}
+      >
+        <Tooltip content={tooltip} side={popoverSide}>
+          <LSUI.SelectTrigger
+            className={`tl-select-trigger ${compact ? "compact" : ""}`}>
+            <LSUI.SelectValue />
+            {!compact && (
+              <LSUI.SelectIcon asChild>
+                <ChevronDown className="h-4 w-4 opacity-50"/>
+              </LSUI.SelectIcon>
+            )}
+          </LSUI.SelectTrigger>
+        </Tooltip>
+
+        <LSUI.SelectContent
+          className="min-w-min"
+          side={popoverSide}
+          position="popper"
+          sideOffset={14}
+          align="center"
+          onKeyDown={e => e.stopPropagation()}
+        >
+          {options.map(option => {
+            return (
+              <LSUI.SelectItem
+                key={option.value}
+                value={option.value}
+              >
+                {option.label}
+              </LSUI.SelectItem>
+            )
+          })}
+        </LSUI.SelectContent>
+      </LSUI.Select>
+    </div>
+  )
+}

+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/inputs/ShapeLinksInput.tsx → packages/tldraw/apps/tldraw-logseq/src/components/inputs/ShapeLinksInput.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/components/inputs/TextInput.tsx → packages/tldraw/apps/tldraw-logseq/src/components/inputs/TextInput.tsx


+ 15 - 14
tldraw/apps/tldraw-logseq/src/components/inputs/ToggleGroupInput.tsx → packages/tldraw/apps/tldraw-logseq/src/components/inputs/ToggleGroupInput.tsx

@@ -1,7 +1,9 @@
-import * as ToggleGroup from '@radix-ui/react-toggle-group'
 import { TablerIcon } from '../icons'
 import { TablerIcon } from '../icons'
 import { Tooltip } from '../Tooltip'
 import { Tooltip } from '../Tooltip'
 
 
+// @ts-ignore
+const LSUI = window.LSUI
+
 export interface ToggleGroupInputOption {
 export interface ToggleGroupInputOption {
   value: string
   value: string
   icon: string
   icon: string
@@ -22,8 +24,7 @@ interface ToggleGroupMultipleInputProps extends React.HTMLAttributes<HTMLElement
 
 
 export function ToggleGroupInput({ options, value, onValueChange }: ToggleGroupInputProps) {
 export function ToggleGroupInput({ options, value, onValueChange }: ToggleGroupInputProps) {
   return (
   return (
-    <ToggleGroup.Root
-      className="tl-toggle-group-input"
+    <LSUI.ToggleGroup
       type="single"
       type="single"
       value={value}
       value={value}
       onValueChange={onValueChange}
       onValueChange={onValueChange}
@@ -31,19 +32,19 @@ export function ToggleGroupInput({ options, value, onValueChange }: ToggleGroupI
       {options.map(option => {
       {options.map(option => {
         return (
         return (
           <Tooltip content={option.tooltip} key={option.value}>
           <Tooltip content={option.tooltip} key={option.value}>
-            <div className="inline-block">
-              <ToggleGroup.Item
-                className="tl-toggle-group-input-button"
+            <div className="inline-flex">
+              <LSUI.ToggleGroupItem
+                className="tl-button"
                 value={option.value}
                 value={option.value}
                 disabled={option.value === value}
                 disabled={option.value === value}
               >
               >
                 <TablerIcon name={option.icon} />
                 <TablerIcon name={option.icon} />
-              </ToggleGroup.Item>
+              </LSUI.ToggleGroupItem>
             </div>
             </div>
           </Tooltip>
           </Tooltip>
         )
         )
       })}
       })}
-    </ToggleGroup.Root>
+    </LSUI.ToggleGroup>
   )
   )
 }
 }
 
 
@@ -53,23 +54,23 @@ export function ToggleGroupMultipleInput({
   onValueChange,
   onValueChange,
 }: ToggleGroupMultipleInputProps) {
 }: ToggleGroupMultipleInputProps) {
   return (
   return (
-    <ToggleGroup.Root
-      className="tl-toggle-group-input"
+    <LSUI.ToggleGroup
+      className="inline-flex"
       type="multiple"
       type="multiple"
       value={value}
       value={value}
       onValueChange={onValueChange}
       onValueChange={onValueChange}
     >
     >
       {options.map(option => {
       {options.map(option => {
         return (
         return (
-          <ToggleGroup.Item
-            className="tl-toggle-group-input-button"
+          <LSUI.ToggleGroupItem
+            className="tl-button"
             key={option.value}
             key={option.value}
             value={option.value}
             value={option.value}
           >
           >
             <TablerIcon name={option.icon} />
             <TablerIcon name={option.icon} />
-          </ToggleGroup.Item>
+          </LSUI.ToggleGroupItem>
         )
         )
       })}
       })}
-    </ToggleGroup.Root>
+    </LSUI.ToggleGroup>
   )
   )
 }
 }

+ 7 - 5
tldraw/apps/tldraw-logseq/src/components/inputs/ToggleInput.tsx → packages/tldraw/apps/tldraw-logseq/src/components/inputs/ToggleInput.tsx

@@ -1,5 +1,7 @@
 import { Tooltip } from '../Tooltip'
 import { Tooltip } from '../Tooltip'
-import * as Toggle from '@radix-ui/react-toggle'
+
+// @ts-ignore
+const LSUI = window.LSUI
 
 
 interface ToggleInputProps extends React.HTMLAttributes<HTMLElement> {
 interface ToggleInputProps extends React.HTMLAttributes<HTMLElement> {
   toggle?: boolean
   toggle?: boolean
@@ -18,14 +20,14 @@ export function ToggleInput({
 }: ToggleInputProps) {
 }: ToggleInputProps) {
   return (
   return (
     <Tooltip content={tooltip}>
     <Tooltip content={tooltip}>
-      <div className="inline-block">
-        <Toggle.Root
+      <div className="inline-flex">
+        <LSUI.Toggle
           {...rest}
           {...rest}
           data-toggle={toggle}
           data-toggle={toggle}
-          className={'tl-toggle-input' + (className ? ' ' + className : '')}
+          className={'tl-button' + (className ? ' ' + className : '')}
           pressed={pressed}
           pressed={pressed}
           onPressedChange={onPressedChange}
           onPressedChange={onPressedChange}
-        ></Toggle.Root>
+        />
       </div>
       </div>
     </Tooltip>
     </Tooltip>
   )
   )

+ 0 - 0
tldraw/apps/tldraw-logseq/src/hooks/useCameraMoving.ts → packages/tldraw/apps/tldraw-logseq/src/hooks/useCameraMoving.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/hooks/useCopy.ts → packages/tldraw/apps/tldraw-logseq/src/hooks/useCopy.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/hooks/useDrop.ts → packages/tldraw/apps/tldraw-logseq/src/hooks/useDrop.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/hooks/usePaste.ts → packages/tldraw/apps/tldraw-logseq/src/hooks/usePaste.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/hooks/useQuickAdd.ts → packages/tldraw/apps/tldraw-logseq/src/hooks/useQuickAdd.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/index.ts → packages/tldraw/apps/tldraw-logseq/src/index.ts


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/index.ts → packages/tldraw/apps/tldraw-logseq/src/lib/index.ts


+ 2 - 1
tldraw/apps/tldraw-logseq/src/lib/logseq-context.ts → packages/tldraw/apps/tldraw-logseq/src/lib/logseq-context.ts

@@ -38,7 +38,8 @@ export interface LogseqContextValue {
       }
       }
     }>
     }>
     KeyboardShortcut: React.FC<{
     KeyboardShortcut: React.FC<{
-      action: string
+      action?: string
+      sequence?: string | string[]
     }>
     }>
   }
   }
   handlers: {
   handlers: {

+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/preview-manager.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/preview-manager.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/BindingIndicator.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/BindingIndicator.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/BoxShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/BoxShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/DotShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/DotShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/EllipseShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/EllipseShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/GroupShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/GroupShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/HTMLShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/HTMLShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/HighlighterShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/HighlighterShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/IFrameShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/IFrameShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/ImageShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/ImageShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/LineShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/LineShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/LogseqPortalShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/LogseqPortalShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/PdfShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PdfShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/PenShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PenShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/PencilShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PencilShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/PolygonShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/PolygonShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/TextShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/TextShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/TweetShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/TweetShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/VideoShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/VideoShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/YouTubeShape.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/YouTubeShape.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/arrow/Arrow.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/arrow/Arrow.tsx


+ 0 - 0
tldraw/apps/tldraw-logseq/src/lib/shapes/arrow/ArrowHead.tsx → packages/tldraw/apps/tldraw-logseq/src/lib/shapes/arrow/ArrowHead.tsx


Неке датотеке нису приказане због велике количине промена