* feat: add tag folders support basics
* feat: add draggability to tags
* feat: add drag & drop draft
* feat: fold folders
* fix: do not select on fold / unfold tags
* style: clean the isValidTag call
* feat: add native folder toggle
* feat: add touch mobile support
* ui: add nicer design & icons
* style: render full-width tag items
* feat: nicer looking dropzone
* style: fix arguments
* fix: tag template rendering in list items
* feat: tag can be dragged over the whole item
* fix: cancel / reset title after save
* fix: disable drag completely when needed
* fix: invalid tag parents
* feat: add paying feature
* feat: with paid feature tooltip
* feat: tag has a plus feature
* feat: add premium modal
* style: simplif code
* refactor: extract feature_state & simplif code
* fix: icons and icons svg
* style: remove comment
* feat: tag folders naming
* feat: use the feature notification
* fix: tag folders copy
* style: variable names
* style: remove & clean comments
* refactor: remove is-mobile library
* feat: tags folder experimental (#10)
* feat: hide native folders behind experimental flag
* fix: better tags resizing
* fix: merge global window
* style: rename params
* refactor: remove level of indirection in feature toggle
* feat: recursively add tags to note on create (#9)
* fix: use add tags folder hierarchy & isTemplateItem (#13)
* fix: use new snjs add tag hierarchy
* fix: use new snjs isTemplateItem
* feat: tags folder premium (#774)
* feat: upgrade premium in tags section
refactor: move TagsSection to react
feat: show premium on Tag section
feat: keep drag and drop features always active
fix: drag & drop tweak with premium
feat: premium messages
fix: remove fill in svg icons
fix: change tag list color (temporary)
style: remove dead code
refactor: clarify names and modules
fix: draggable behind feature toggle
feat: add button in TagSection & design
* feat: fix features loading with app state (#775)
* fix: distinguish between app launch and start
* fix: update state for footer too
* fix: wait for application launch event
Co-authored-by: Laurent Senta <laurent@singulargarden.com>
* feat: tags folder with folder text design (#776)
* feat: add folder text
* fix: sn stylekit colors
* fix: root drop zone
* chore: upgrade stylekit
* fix: hide dropzone when feature is disabled
* chore: bump versions now that they are released
Co-authored-by: Mo <me@bitar.io>
* feat: tags folder design review (#785)
* fix: upgrade design after review
* fix: tweak dropzone
* fix: sync after assign parent
* fix: tsc error on build
* fix: vertical center the fold arrows
* fix: define our own hoist for react-dnd
* feat: hide fold when there are no folders
* fix: show children usability + resize UI
* fix: use old colors for now, theme compat
* fix: tweak alignment and add title
* fix: meta offset with folders
* fix: tweak tag size
* fix: observable setup
* fix: use link-off icon on dropzone
* fix: more tweak on text sizes
Co-authored-by: Mo <me@bitar.io>
* feat: hide note contents if the protection expires when the protected note is open and wasn't edited for a while
* feat: handle session expiration for opened protected note for both plain advanced editors
* fix: if after canceling session expiry modal only one unprotected note stays selected, show its contents in the editor
* refactor: handle session expiration for opened protected note (move the logic to web client)
* feat: handle the case of selecting "Don't remember" option in session expiry dialog
* test (WIP): add unit tests for protecting opened note after the session has expired
* test: add remaining unit tests
* refactor: move the opened note protection logic to "editor_view"
* refactor: reviewer comments
- don't rely on user signed-in/out status to require authentication for protected note
- remove unnecessary async/awaits
- better wording on ui
* refactor: reviewer's comments:
- use snjs method to check if "Don't remember" option is selected in authentication modal
- move the constant to snjs
- fix eslint error
* refactor: avoid `any` type for `appEvent` payload
* test: add unit tests
* chore: update function name
* refactor: use simpler protection session event types
* refactor: protected access terminology
* refactor: start counting idle timer after every edit (instead of counting by interval in spite of edits)
* test: unit tests
* style: don't give extra brightness to the "View Note"/"Authenticate" button on hover/focus
* chore: bump snjs version
* chore: put snjs "beta" version
* fix: run protection timeout when the note is marked as protected
* chore: snjs version bump
* refactor: immediately lock the note if it's marked as "Protected"
* refactor: rename component, directive and some props
* refactor: remove extra check
* refactor: rename the method
* chore: update snjs version
Co-authored-by: Mo Bitar <me@bitar.io>
* feat: hide note contents if the protection expires when the protected note is open and wasn't edited for a while
* feat: handle session expiration for opened protected note for both plain advanced editors
* fix: if after canceling session expiry modal only one unprotected note stays selected, show its contents in the editor
* refactor: handle session expiration for opened protected note (move the logic to web client)
* feat: handle the case of selecting "Don't remember" option in session expiry dialog
* test (WIP): add unit tests for protecting opened note after the session has expired
* test: add remaining unit tests
* refactor: move the opened note protection logic to "editor_view"
* refactor: reviewer comments
- don't rely on user signed-in/out status to require authentication for protected note
- remove unnecessary async/awaits
- better wording on ui
* refactor: reviewer's comments:
- use snjs method to check if "Don't remember" option is selected in authentication modal
- move the constant to snjs
- fix eslint error
* refactor: avoid `any` type for `appEvent` payload
* test: add unit tests
* chore: update function name
* refactor: use simpler protection session event types
* refactor: protected access terminology
* refactor: start counting idle timer after every edit (instead of counting by interval in spite of edits)
* test: unit tests
* style: don't give extra brightness to the "View Note"/"Authenticate" button on hover/focus
* chore: bump snjs version
Co-authored-by: Mo Bitar <me@bitar.io>
* feat: toggleable extensions
* fix: return all themes for quick settings
* chore: bump snjs deps
* feat: Use Switch component for toggle in Quick Settings Menu
* feat: Add toggleableComponents to footer_view
* refactor: Change "components" to "toggleableComponents"
* feat: Add checked state to component toggle in quick settings menu
* feat: Add new icons
* Revert "feat: Add new icons"
This reverts commit 0acb403fe846dbb2e48fd22de35c3568c3cb4453.
* feat: Add new icons for account menu
* feat: Add new Icons
* feat: Add "currentPane" state to prefs view
* feat: Update account menu to new design
* feat: Add input component with icon & toggle
* fix: sync icon & function
* fix: Fix eye icon
* feat: Create re-usable checkbox
feat: Add "merge local" option
* feat: Allow using className on IconButton
* feat: Add disabled state on input
feat: Make toggle circle
* refactor: Move checkbox to components
* feat: Handle invalid email/password error
* feat: Implement new design for Create Account
* feat: Implement new account menu design
* feat: Add disabled option to IconButton
* feat: Set account menu pane from other component
* feat: Add 2fa account menu pane
feat: Add lock icon
* feat: Remove unnecessary 2FA menu pane
feat: Reset current menu pane on clickOutside
* feat: Change "Log in" to "Sign in"
* feat: Remove sync from footer
* feat: Change "Login" to "Sign in"
feat: Add spinner to "Syncing..."
refactor: Use then-catch-finally for sync
* feat: Use common enableCustomServer state
* feat: Animate account menu closing
* fix: Reset menu pane only after it's closed
* feat: Add keyDown handler to InputWithIcon
* feat: Handle Enter press in inputs
* Update app/assets/javascripts/components/InputWithIcon.tsx
Co-authored-by: Antonella Sgarlatta <antsgar@gmail.com>
* Update app/assets/javascripts/components/InputWithIcon.tsx
Co-authored-by: Antonella Sgarlatta <antsgar@gmail.com>
* refactor: Use server state from AccountMenuState
* Update app/assets/javascripts/components/AccountMenu/CreateAccount.tsx
Co-authored-by: Antonella Sgarlatta <antsgar@gmail.com>
* Update app/assets/javascripts/components/AccountMenu/ConfirmPassword.tsx
Co-authored-by: Antonella Sgarlatta <antsgar@gmail.com>
* feat: Use common AdvancedOptions
* feat: Add "eye-off" icon and toggle state
* feat: Allow undefined values
* refactor: Remove enableCustomServer state
* feat: Persist server option state
* feat: Add bottom-100 and cursor-auto util classes
refactor: Use bottom-100 and cursor-auto classes
* refactor: Invert ternary operator
* refactor: Remove unused imports
* refactor: Use toggled as prop instead of state
* refactor: Change "Log in/out" to "Sign in/out"
* refactor: Change "Login" to "Sign in"
* refactor: Remove hardcoded width/height
* refactor: Use success class
* feat: Remove hardcoded width & height from svg
* fix: Fix chevron-down icon
Co-authored-by: Antonella Sgarlatta <antsgar@gmail.com>
Co-authored-by: Antonella Sgarlatta <antonella@standardnotes.org>
* feat: implement UI for logging out
* feat: use old style dialogs for logout confirmation
* feat: implement manage sessions
* feat: implement session logout success dialog
* feat: use snjs alert for revoking sessions confirmation
* fix: make OtherSessionsLogout easier to read
* feat: store web version in local storage
* feat: pass web app version to snjs application when creating WebApplication
* refactor: pass version in application constructor, remove unnecessary method
* refactor: move global variables declarations to separate files to avoid declaring them in all places where they are used
* refactor: better way to use global variables
* chore: add comment
* chore: make global constants pascal case
* chore: version bump for snjs
* chore: yarn.lock with correct snjs version
* chore: bump snjs version