aboutsummaryrefslogtreecommitdiffstats
path: root/apps/browser-extension/src (follow)
Commit message (Collapse)AuthorAgeFilesLines
* fix: Hide shared lists where user is a viewer in Manage Lists dialog (#2164)Mohamed Bassem2025-11-231-24/+26
| | | | | | | | | | Users with viewer role cannot add/remove bookmarks from lists, so these lists should not appear in the Manage Lists dialog across all platforms (web, mobile, and extension). Changes: - Web: Updated BookmarkListSelector to filter out viewer lists - Mobile: Updated manage_lists.tsx to filter out viewer lists - Extension: Updated ListsSelector to filter out viewer lists Co-authored-by: Claude <noreply@anthropic.com>
* feat(extension): Add custom header support for extension (#2111)Mohamed Bassem2025-11-096-7/+204
| | | Fixes #1287
* feat(extension): Allow writing notes directly in the extension (#2104)Mohamed Bassem2025-11-083-0/+132
| | | | | | | | | | | | | | | | | | | | | | * feat(extension): add notes editor to bookmark hoarded screen Adds the ability to directly add and edit notes for bookmarks in the browser extension's hoarded screen (the page shown after saving a bookmark). Changes: - Created Textarea UI component for the browser extension - Created NoteEditor component that uses useUpdateBookmark hook - Added Notes section to BookmarkSavedPage, displayed between the header and tags - Notes auto-save when the user clicks away from the textarea (onBlur) - Shows saving state and error messages to the user This brings feature parity with the web app's notes functionality. * add explicit button * more fixes --------- Co-authored-by: Claude <noreply@anthropic.com>
* feat(extension): add tab bookmark badge indicator (#1745)qixing-jk2025-11-0312-142/+792
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: add tab bookmark count badge indicator - implement getApiClient function to create and cache TRPC client - add tab activation listener to check bookmark count - display badge with count and appropriate color based on results - handle errors by showing error indicator in badge * feat: add show count badge setting to extension - Add showCountBadge setting to settings schema and default values - Implement toggle button in OptionsPage for count badge visibility - Modify background script to respect showCountBadge setting - Add logging for archive count check in background script Closes #486 * feat(background): refactor tab badge update logic - Extract badge setting logic into reusable `setBadge` function - Create `getTabCount` function to fetch bookmark count and existence - Implement `checkAndUpdateIcon` function to centralize icon update logic - Add support for tab updates via `chrome.tabs.onUpdated` listener - Improve error handling with consistent badge display * feat(background): implement badge caching system - Add badge cache initialization and periodic cleanup - Implement cache get/set operations for badge status - Update setBadge function to use cached values when available - Modify badge display logic to check cache before making API calls * feat(badgeCache): add debug logging for cache operations - Add console logs to track cache initialization, purging, and operations - Move debug log in checkAndUpdateIcon to better position * feat: add badge refresh on bookmark creation and deletion - implement message types for badge refresh communication - update background script to handle REFRESH_BADGE messages - modify SavePage to send message on successful bookmark creation - modify BookmarkSavedPage to send message on successful deletion - add clearBadgeStatusSWR utility function import and usage * perf(badge-cache): decrease purge alarm interval The badge cache purge alarm was previously set to run every 60 minutes. This change reduces the interval to 10 minutes to ensure more frequent cache cleanup and better memory management. * feat(background): clean up API client and badge cache on invalid settings - add cleanupApiClient function to trpc utils - modify checkSettingsState to handle async operations - clear API client and badge status when settings are invalid - update settings subscription to handle async operations * feat: reset settings to include showCountBadge flag when logout When deleting API key, ensure showCountBadge is also reset to false to maintain consistent state in the options page configuration. * refactor: use BOOKMARK_REFRESH_BADGE instead of separate created/deleted types * perf(badgeCache): replace alarm-based purge with on-demand expiration check - Remove periodic alarm system for cache purging - Add lastPurgeTimestamp tracking for efficient cache maintenance - Update manifest to remove unnecessary alarms permission - Modify background script to use new on-demand purge mechanism - Clean up related alarm listener and initialization code * feat: Replace count badge button with toggle switch - add new Switch component based on Radix UI - update OptionsPage to use Switch for count badge setting * feat: Add horizontal rule separator in options page - Add `<hr />` element between sections for better visual separation - Improve UI organization in the OptionsPage component * feat(badgeCache): implement persistent last purge timestamp storage - Replace in-memory timestamp with chrome.storage persistence - Add getter/setter functions for last purge timestamp - Update checkAndPurgeIfNeeded to use persistent storage * refactor(badgeCache): Improve type safety and storage utilities - Add BadgeCacheEntry and BadgeCacheStorage types - Extract storage operations to dedicated utility functions - Improve code organization and documentation - Enhance type safety throughout badge cache operations * feat(extension): add context menu options to clear cache - introduce new context menu items for cache management - add clear current site cache functionality - add clear all cache functionality - conditionally show cache menu items based on showCountBadge setting - pass settings to context menu registration/removal functions * feat(extension): add configurable badge cache expiration time - introduce `badgeCacheExpireMs` setting with 1-hour default - update settings schema and default values - add input field in OptionsPage for cache time configuration - modify badgeCache to use dynamic expiration time from settings - improve cache logging for better debugging visibility * Revert "feat: reset settings to include showCountBadge flag when logout" This reverts commit cf071e9dd50f1a1ac0a8dd3b68a4359ecc30c783. # Conflicts: # apps/browser-extension/src/OptionsPage.tsx * refactor(extension): extract badge cache expiration constant Extract DEFAULT_BADGE_CACHE_EXPIRE_MS constant to central location in settings.ts and reuse it across badgeCache.ts and OptionsPage.tsx. Remove duplicate constant definitions and ensure consistent default value usage. * refactor(extension): standardize showCountBadge default via shared constant - introduce DEFAULT_SHOW_COUNT_BADGE in settings schema - replace hardcoded defaults with constant in schema and OptionsPage - maintain backward compatibility with existing boolean type * feat(extension): simplify context menu removal logic - remove redundant `settings` parameter from `removeContextMenus` - replace selective menu removal with `chrome.contextMenus.removeAll()` - update function call to match new signature * refactor(extension): rename site-related cache terms to page for clarity - update context menu title from "Clear Current Site Cache" to "Clear Current Page Cache" - rename `clearCurrentSiteCache()` to `clearCurrentPageCache()` - adjust related comments, logs, and docstrings for consistency * refactor(extension): improve tab event handler parameter naming - rename `activeInfo` to `tabActiveInfo` in `onActivated` listener - rename `changeInfo` to `tabId` in `onUpdated` listener * refactor(extension): add isHttpUrl utility and refactor server address validation - introduce reusable `isHttpUrl` function in new `url.ts` utility module - replace inline protocol check with utility call in NotConfiguredPage * feat(extension): filter out non-HTTP URLs from badge count updates - add `isHttpUrl` import and check in badge update validation - skip badge updates for non-HTTP URLs to prevent invalid requests * feat(extension): filter out non-HTTP URLs from bookmark creation Add validation using isHttpUrl utility to ensure only HTTP/HTTPS URLs are processed when creating bookmarks from current tab. * chore: remove .ts extension from internal import statements * feat(extension): validate and trim server address input in NotConfiguredPage - use trimmed input for validation and state updates - ensure consistent handling of trailing slashes in server address * feat(extension): prevent non-HTTP(S) URL bookmark creation with validation - Add URL validation in background script to filter out non-HTTP(S) URLs before creating link-type bookmarks, logging warnings for invalid URLs. - Enhance SavePage component with explicit error messages for: - Missing tab URLs - Unsupported URL schemes (non-HTTP(S)) - Improve error display by rendering messages immediately when errors occur instead of waiting for status changes. * feat(extension): clear existing context menus before registration This ensures no duplicate menu items are created when the extension reinitializes or settings are updated. * feat(extension): display "+" suffix for default bookmarks per page count Add logic to append "+" suffix when badge count matches DEFAULT_NUM_BOOKMARKS_PER_PAGE to indicate potential overflow. * fix(extension): ensure API client cleanup on settings state change Clean up API client before handling settings state to prevent stale connections when address or API key is missing. * fix(extension): clear badge text when tab is invalid or incomplete Ensure badge is reset when URL is non-HTTP or tab status is not complete. * feat(extension): improve badge revalidation for stale cached data - simplify badge setting from cached data - add background revalidation for non-fresh cache - ensure badge updates when stale cache is detected * feat(extension): refresh active tab badges after cache clearance Added logic to update badge icons for all active tabs when clearing the badge status cache, ensuring UI consistency across the extension. * feat: add null checks for tab URL and ID in REFRESH_BADGE handler Add defensive programming to prevent runtime errors when processing REFRESH_BADGE messages with missing or invalid tab properties. * feat(extension): replace badge status SWR clear with full cache refresh Replace selective SWR badge status clearing with a complete cache refresh to ensure consistent badge state across all active tabs. Updates the `clearBadgeStatusSWR()` call to use the more comprehensive `clearAllCache()` method and improves related documentation. * feat(extension): add validation & error handling for API client - add null check and error throw in `getTabCount` when API client fails - ensure badge is cleared when API client is unavailable - refactor `getApiClient` to use destructured settings - fix potential undefined access in TRPC client initialization * feat(extension): replace isExisted with exactMatch for precise bookmark info - modify getTabCount to return exactMatch instead of isExisted - update BadgeCacheEntry type to use ZBookmark|null for exactMatch - adjust setBadge and setBadgeStatusSWR to handle new exactMatch format - ensure backward compatibility by converting exactMatch to boolean * refactor(background): rename getTabCount to getBookmarkStatusForUrl - improve function naming to better reflect return value - update JSDoc to clarify return object structure - adjust all function calls to use new name * feat(extension): add "View page in Karakeep" context menu option - introduce new `VIEW_PAGE_IN_KARAKEEP` menu item for extension action - extend `handleContextMenuClick` to support optional tab parameter - add `searchCurrentUrl` function to handle URL-based searches - implement exact match and search fallback logic with proper URL encoding - ensure error handling and validation for invalid URLs * feat(extension): reorder menu items and extend page context support - Move 'Add to Karakeep' menu creation before conditional block - Add 'page' context to 'View this page in Karakeep' menu item * feat(extension): add toggle to enable/disable badge caching - introduce `useBadgeCache` setting in schema and defaults - add switch control in OptionsPage to toggle cache usage - conditionally render cache expire time input based on toggle - make badge cache operations respect the toggle setting - hide cache-related context menu items when caching disabled - skip cache operations in background when disabled - prevent cache checks and purges when caching is off * fix(extension): handle cache miss in bookmark search flow Previously, the search flow would silently fail (no-op) when the cache missed. Now, it falls back to fetching the bookmark status directly from the server when no cached data is available. Also refactored to avoid redundant settings fetch and improve code readability. * refactor(badge): implement generic cache utility and refactor badge cache * Remove dedicated cache type definitions in favor of generic solution * Create reusable cache utility with L1/L2 (memory/storage) support * Simplify badge cache implementation using new generic cache * Remove redundant SWR-specific functions and consolidate logic * Improve type safety and error handling in cache operations * Eliminate deprecated cache management functions and types * refactor(extension): replace custom cache with TanStack Query for badge status - Remove custom SWR cache implementation - Add TanStack Query persistence with Chrome storage - Update badge status logic to use QueryClient - Add storage persister utility for Chrome - Update TRPC client initialization with QueryClient - Add required TanStack Query persistence dependencies * fix(extension): add missing `useBadgeCache` config and refactor cache logic - restore accidentally removed `useBadgeCache` setting from refactor - update cache invalidation logic to include `useBadgeCache` changes - modify QueryClient config to respect `useBadgeCache` toggle - improve settings comparison logic for better reuse detection * fix(extension): use dynamic key for TanStack query cache persistence Previously used hardcoded string 'TANSTACK_QUERY_CACHE_KEY' instead of the defined constant, which could lead to inconsistent storage access. * fix(cache): propagate fetch errors to avoid caching failed badge status Previously, API errors would return an empty status, causing cache to store invalid results. Now errors are thrown so the cache treats them as misses. * fix(extension): guard chrome storage and respect cache disable setting - use `globalThis.chrome` to avoid runtime errors in non-extension contexts - skip persistence when `useBadgeCache=false` and clear existing cache - add `maxAge` and `buster` to prevent stale/incompatible data restoration * refactor(badgeCache): remove redundant null check for searchBookmarks data Remove unnecessary if (!data) guard since searchBookmarks query is guaranteed to return a non-nullable response due to its Zod schema. Use direct access to data.bookmarks and simplify empty state check with bookmarksLength. * fix(badgeCache): throw error on misconfiguration instead of caching empty Prevent cache poisoning by throwing when API client is not configured. This ensures setup errors are visible rather than silently cached as 0. * fix(badgeCache): add fallback to fetchBadgeStatus when QueryClient missing Prevents null returns by falling back to direct fetch when QueryClient is unavailable, ensuring badge remains responsive. * feat(extension): add yellow badge for URLs ignoring anchor and trailing slash - implement partial URL matching logic in badge status calculation - introduce `BadgeMatchType` enum for different match scenarios - update badge color scheme (green=exact, yellow=partial, red=none) - refactor badge status interface and setBadge function signature - handle edge cases for null badge status in error scenarios * feat: support partial bookmark matches in badge status check - use partial match fallback when exact match is unavailable - update target URL generation to handle both match types - ensure consistent bookmark ID reference in preview URL * refactor: improve error handling and badge status logic * wrap `removeContextMenus()` in try-catch block to prevent crashes when context menus API fails * simplify badge setting logic by removing redundant status check * fix `getBadgeStatus()` return type to always resolve with `BadgeStatus` * update import path for `urlsMatchIgnoringAnchorAndTrailingSlash` * clarify comments for URL matching logic and edge cases * perf: parallelize active-tab badge refresh after cache clear Avoid serial waits across windows/tabs by using Promise.all to process active tab IDs concurrently. Replaces nested loops with flatMap and filter for cleaner extraction of active tab IDs. * fix(badge): isolate cache config to badge queries only Move cache time configuration from global QueryClient to badge-specific queries to prevent unintended caching in other query operations. * fix: Invalid configuration check should verify if either field is missing. Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix(trpc): include address in cache buster to isolate persisted caches Prevents restoring stale data from a different server after switching address by scoping the cache buster to the current backend address. * feat(trpc): ensure proper client cleanup on config changes - add client removal from persistent storage when address/apiKey invalid - ensure cache wipe when switching context with address/apiKey changes - simplify persister creation by using default chrome.storage.local - make storage parameter optional in createChromeStorage * fix bad merge * simplify badge by dropping the count * more fixes * more fix --------- Co-authored-by: Mohamed Bassem <me@mbassem.com>
* feat: Add source field to track bookmark creation sources (#2037)Mohamed Bassem2025-10-121-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: Add source field to track bookmark creation sources Add a new 'source' field to the bookmarks table to track where bookmarks were created from. Possible values: api, web, cli, mobile, singlefile, rss. Changes: - Add source field to bookmarks table schema - Update Zod schemas to include source field - Update tRPC createBookmark procedure to store source - Update all callsites to pass appropriate source value: - api: Default to "api" if not provided - singlefile: Set to "singlefile" - rss: Set to "rss" in feedWorker - cli: Set to "cli" - mobile: Set to "mobile" in all mobile app bookmark creation - browser-extension: Set to "web" - web: Set to "web" in all web app bookmark creation - Create migration file for database schema change Fixes #2036 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Mohamed Bassem <MohamedBassem@users.noreply.github.com> * feat: Add extension source type for browser extension - Add 'extension' to bookmark source enum - Update browser extension to use 'extension' instead of 'web' Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com> * fix CI * fix CI * fix the migration file * add import source * make source nullish --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>
* feat: Add tag search and pagination (#1987)Mohamed Bassem2025-09-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: Add tag search and use in the homepage * use paginated query in the all tags view * wire the load more buttons * add skeleton to all tags page * fix attachedby aggregation * fix loading states * fix hasNextPage * use action buttons for load more buttons * migrate the tags auto complete to the search api * Migrate the tags editor to the new search API * Replace tag merging dialog with tag auto completion * Merge both search and list APIs * fix tags.list * add some tests for the endpoint * add relevance based sorting * change cursor * update the REST API * fix review comments * more fixes * fix lockfile * i18n * fix visible tags
* feat(extension): add current tab title while saving from extension (#1930)Abel2025-09-131-0/+1
| | | Co-authored-by: Yabo Liu (ext.) <yabo.liu@partner.bmw.com>
* fix: fix tag flicker caused by tag sortingMohamed Bassem2025-09-071-14/+10
|
* fix(extension): constrain height to prevent viewport overflow (#1580) (#1895)qixing-jk2025-09-073-20/+222
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix(extension): constrain height to prevent viewport overflow (#1580) Fixes #1580 * refactor(extension): move height control to consumer components Remove default height from base PopoverContent to avoid affecting reusability. Consumers now explicitly set height via `--radix-popover-content-available-height` when needed. * feat(extension): introduce dynamic popover height handling - add new `DynamicPopoverContent` component with adaptive height logic - replace `PopoverContent` with `DynamicPopoverContent` in `ListsSelector` - replace `PopoverContent` with `DynamicPopoverContent` in `TagsSelector` - remove fixed height constraint for shorter content - maintain backward compatibility with `dynamicHeight` prop * feat(extension): improve dynamic popover height handling and styling - set default max-height using CSS variable for consistent initial state - remove redundant else branch in height calculation logic - add overflow-y-auto to enable scrolling when content exceeds available space * feat(extension): replace useEffect with useLayoutEffect for dynamic height The change ensures proper measurement of the popover content height before the browser paints, preventing layout shifts and improving rendering performance. * feat(extension): enhance dynamic height adjustment with debounce & resize handling - add debounce support via custom `useDebounce` hook to optimize performance - implement window resize handler to recalculate height on viewport changes - improve height calculation with buffer zone and fallback mechanisms - refactor code structure with utility functions for better maintainability - update prop documentation and add new `debounceMs` prop - enhance ref handling with merged refs callback - split className into logical groups for better readability - add proper TypeScript types and error handling for height calculations * feat(tags-selector): move create tag option above existing tags (#1840) - add CommandSeparator import - restructure CommandGroup to display create option first - remove redundant CommandGroup wrapper for create option Resolves #1840
* feat(extension): Add theme and dynamic icon support (#1894)qixing-jk2025-09-075-31/+219
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: add theme selection support to browser extension - integrate theme settings with plugin settings storage - add theme selector dropdown to options page - implement custom ThemeProvider using plugin settings - include new Select UI component for theme selection * feat(extension): add dynamic icon theme switching (#1100) Add updateIcon() function to dynamically change extension icon based on selected theme (light/dark/system). Update icon on initial load and when settings change to reflect current theme preference. Closes #1100 * fix(extension): switch dark mode strategy from media to selector This allows manual control over dark mode via class toggling rather than relying on the OS/browser preference. * fix(extension): move icon update logic to content script The `window` object is inaccessible in the background script, causing icon updates to fail. This change relocates the icon update logic to the content script where `window.matchMedia` is available. - Remove `updateIcon` function from background script - Add icon update logic to `ThemeProvider` component - Consolidate theme and icon updates in single effect * feat(settings): make theme field required in settings schema Remove optional flag from theme field to enforce presence in settings validation schema. * deps: Upgrade the extension deps * minor fixes --------- Co-authored-by: MohamedBassem <me@mbassem.com>
* feat: Render human tags before AI tags (#1740)haappi2025-08-201-10/+14
|
* feat(extension): add a keyboard shortcut to save page (#1532)Steven Conaway2025-06-071-22/+55
|
* refactor: Move bookmark utils from shared-react to sharedMohamed Bassem2025-05-311-1/+1
|
* chore: rename missing files/conf from Hoarder to Karakeep (#1280)adripo2025-04-213-16/+16
| | | | | | | | | * refactor: Rename remaining project configuration from Hoarder to Karakeep * some fixes --------- Co-authored-by: Mohamed Bassem <me@mbassem.com>
* chore: Rename hoarder packages to karakeepMohamedBassem2025-04-1210-11/+11
|
* fix(extension): Update extension logo and nameMohamedBassem2025-04-061-2/+2
|
* fix(extension): Fix handling for empty storage. #10MohamedBassem2025-03-121-13/+36
|
* fix(extension): Fix extension setting hook not firing on setting change. #10MohamedBassem2025-03-091-9/+36
|
* feat: add URL protocol validation to extension and mobile app (#996)Ahmad Mujahid2025-02-091-0/+10
|
* fix: Nested Lists do not fit well in browser extension window #535 (#553)kamtschatka2024-12-222-2/+2
| | | increased size to have the same size as the input field that triggers it
* feature: Allow to disable default password login after SSO is configured. ↵kamtschatka2024-10-121-5/+1
| | | | | | | | | | Fixes #406 (#502) * [Feature Request] Allow to disable default password log in after SSO is configured #406 changed the flag to also disallow logging in via password The extensions will also no longer be allowed to log in via username/password then * [Feature Request] Allow to disable default password log in after SSO is configured #406 added the error message for OAuth
* feature: Persevere the source URL of clipped texts from the extension.MohamedBassem2024-10-051-1/+1
| | | | Fixes #448
* feature(extension): Allow login directly with an API keykamtschatka2024-09-211-8/+86
| | | | | | | | | | * [Feature request] NextAuth Providers for OAuth/SSO #92 Added API key based authentication to the extension to make the extension usable when OAuth is in use * Minor UI tweak --------- Co-authored-by: MohamedBassem <me@mbassem.com>
* fix(extension): Upgrade crxjs to 2.0 to add support for firefoxMohamedBassem2024-08-181-1/+3
|
* [extension] Add context menu item in the browser extension. Fixes #155 (#278)kamtschatka2024-08-183-20/+81
| | | | | | | | | | | | * Add context menu item in the browser extension #155 Added a context menu entry to add links directly to hoarder * Formalize protocol between extension and service worker, add support for text/images beside links * fix build --------- Co-authored-by: MohamedBassem <me@mbassem.com>
* feature(cli): Allow updating tags/lists from CLI (#211)kamtschatka2024-07-271-2/+2
| | | | | | | | | | | | * Improve the CLI #209 added the possibility to assign tags to bookmarks while creating added the possibility to assign a newly created to a list right away added the possibility to add and remove tags from bookmarks * minor tweaks --------- Co-authored-by: MohamedBassem <me@mbassem.com>
* refactor: added the bookmark type to the database (#256)kamtschatka2024-07-011-1/+2
| | | | | | | | | | | | | | | | | * refactoring asset types Extracted out functions to silently delete assets and to update them after crawling Generalized the mapping of assets to bookmark fields to make extending them easier * Added the bookmark type to the database Introduced an enum to have better type safety cleaned up the code and based some code on the type directly * add BookmarkType.UNKNWON * lint and remove unused function --------- Co-authored-by: MohamedBassem <me@mbassem.com>
* feature(extension): Add a context menu to open your hoarder saves. Fixes ↵kamtschatka2024-06-092-0/+60
| | | | | | | | | | | | | | | | | #188 (#206) * Feature request: Browser extension "Open your Hoarder saves" #188 Adds a context menu entry when a hoarder instance is configured and removes it again, if it is not configured anymore * Feature request: Browser extension "Open your Hoarder saves" #188 moved storage related functions to settings.ts fixed issues with context menu registration * only fire callback when the settings change --------- Co-authored-by: kamtschatka <simon.schatka@gmx.at> Co-authored-by: MohamedBassem <me@mbassem.com>
* feature(extension): Allow adding tags and lists to newly hoarded bookmarksMohamedBassem2024-04-2310-8/+548
|
* ui(extension): Use shadcn and better dark mode supportMohamedBassem2024-04-2312-95/+320
|
* fix: Delete the API key on logout from phone or extensionMohamedBassem2024-04-094-43/+11
|
* feature: Extract hook logic into separate package and add a new action bar ↵MohamedBassem2024-04-071-10/+10
| | | | in bookmark preview
* format: Add missing lint and format, and format the entire repoMohamedBassem2024-03-309-21/+31
|
* ui(extension): Update logo and bump versionMohamedBassem2024-03-291-4/+3
|
* fix(extension): Fix ugly looking popup in dark mode. Fixes #30MohamedBassem2024-03-271-2/+2
|
* fix: Fix allow links with trailing slashes in extension configuration. Fixes #18MohamedBassem2024-03-271-1/+1
|
* lint: Lint and format the entire repo with the new configsMohamedBassem2024-03-144-3/+4
|
* structure: Create apps dir and copy tooling dir from t3-turbo repoMohamedBassem2024-03-1416-0/+586