Tabmanager.io Changelog
# Scheduled Release
  - Update: search for all tabs in Saved Sessions
  - Feature: decode urls suspended with The Great Suspender
  - Update: keep set window names on chrome restore

# Release v2.0.1 (Bugfix)
  - Add: db transaction source during upgrade
  - Add: polyfill support for older browser versions
  - Fix: uncaught promise error when fetching meta for closed window
  - Fix: invalid window created in state during update after close (thanks Justin)
  - Fix: MV3 service worker sometimes unresponsive workaround attempt (Chromium bug)

# Release v2.0.0
  - Change: default active window titles uses shortform, e.g. "window 1"
  - Feature: add toolbar button to collapse all windows
  - Update: UI updates
  - Fix: first group created in current window when first tab in restored window is in a tab group
  - Change: move "close selected tabs" button placement
  - Fix: content workspace drop target should always be 100 % of layout regardless of windows height
  - Update: reduce manager initial load time
  - Change: export active session windows export filename
  - Remove: deprecated session model
  - Fix: root session duplicate in export
  - Fix: aggregated events can occur out of order (event-queue debounce optimization)
  - Feature: show grouped tabs in history session windows components
  - Feature: show grouped tabs in saved session windows components
  - Feature: show pinned tabs in history session windows tabs components
  - Feature: show pinned tabs in saved session windows tabs components
  - Fix: order records by createdAt date when timestamp are equal
  - Update: normalize session models across the app
  - Change: Saved Sessions state structure
  - Change: use aggregate-root for saved sessions and windows
  - Update: update DB version to migrate sessionIds with null value to string to index

# Release v1.9.6 (Bugfix)
  - Fix: missing group tests
  - Fix: typo breaking group active tabs

# Release v1.9.5
  - Update: continue refactoring to support saved tab properties (groups, pinned)
  - Fix: failure to restore groups after sync.
  - Fix: SessionWindows not casted to Windows.

# Release v1.9.4 (Bugfix)
  - Fix: window sync failure when groups are invalid type
  - Fix: temporary no access to tabGroups directly after browser startup
  - Fix: tabs.group called with invalid groupId
  - Change: remove/filter noisy logs

# Release v1.9.3
  - Update: add info breadcrumbs with error logs
  - Change: remove timeout to only dismiss restore notification on success/failure
  - Fix: restore-history-session notification closed before completed
  - Fix: restore-session notification never dismissed
  - Feature: restore tabGroups with session/window
  - Feature: save tabGroups with session/window

# Release v1.9.2
  - Change: always send ready event during app init
  - Update: optimize initial application load/render
  - Fix: catch error during app init
  - Fix: missing record sync error notification on client
  - Fix: unselect all tabs with header button if a tab is selected before select all
  - Update: cloud-sync module
  - Fix: move multiple tabs to last index result in wrong index position

# Release v1.9.1
  - Fix: mismatch between tabIds in window and tab entities state
  - Update: sync check when worker becomes active

# Release v1.9.0
  - Feature: Add drag & drop support for tabGroups in and between windows
  - Feature: Chrome tabGroups support in active session windows
  - Feature: Tab popover menu option to move tabs to New window
  - Feature: Win header option to select all tabs
  - Update: optimize Tabs component re-renders
  - Change: remove "move tabs to new window" from toolbar - now in the Tab more menu
  - Change: remove "remove tabs" button from toolbar
  - Change: reduce column min width to support multi-columns on smaller screens
  - Fix: reselector factory instance using createSelectors outside of scope
  - Fix: selected tab displayed as unselected on active
  - Fix: older chrome version fail to save session because of setIcon deprecated API
  - Fix: worker handlers sometimes not registered before client request
  - Fix: moving tabs to a target-index between the tabs within the same window moves to wrong index
  - Fix: css modules hash causes lazy components render issue
  - Fix: debounced tab events timing issue
  - Fix: manager tab should not be discarded or suspended on suspend
  - Fix: popupover menu hidden beneath topbar

# Release v1.8.11
  - Update: clean up stale records in cloud storage
  - Fix: Manifest V3 Chromium issues

# Release v1.8.10
  - Fix: fallback when getting current window and tab
  - Fix: throwing error in command-handler does not log stack-trace

# Release v1.8.9
  - Change: order of history and saved icons in sidebar
  - Feature: close matching filtered tabs on search
  - Feature: remove tabs by url

# Release v1.8.8
  - Update: packages
  - Fix: fail to bring focus back client after auth if sign-in in separate window
  - Fix: importing session-records without windows fail

# Release v1.8.7
  - Fix: disable onStartup and onInstalled events as a workaround for: https://bugs.chromium.org/p/chromium/issues/detail?id=1271154

# Release v1.8.6
  - Change: active tab indicator styling in window list for visibility
  - Feature: configure shortcuts settings option
  - Fix: await execute to ensure we catch any potential errors
  - Feature: show/scroll-to a specific tab in active session
  - Fix: error: message channel closed before a response was received
  - Change: focus existing client window and tab if set to open in new window
  - Update: app layout styles

# Release v1.8.5
  - Fix: shouldn't throw when session hashes are equal

# Release v1.8.4
  - Fix: issue resulting from certain browsers have windows without tabs during startup
  - Update: form controller input field validation
  - Fix: window restore fails when trying to update window with invalid title

# Release v1.8.3
  - Feature: sort dropdown-menu to saved session sidelist panel
  - Fix: saved sessions sidelist-item date title overflow
  - Fix: more-button becomes hidden while dropdown-menu is open
  - Move saved sessions sidelist-item buttons into more menu
  - Feature: success/error notification on session file import
  - Fix: revokeObjectURL not accessible in service worker

# Release v1.8.2
  - Change: abort and log error when auto-saving session without windows
  - Fix: expired user token refresh issue

# Release v1.8.1
  - Feature: suspend tabs button to window header
  - Change: order to clean up old sessions before auto-save
  - Change: page name from Windows to Active Session
  - Fix: exporter download-link creation fails in service-worker

# Release v1.8.0
  - Fix: not setting focus to active client tab after sign-in
  - Change: sign-in to call external domain for redirect auth
  - Update: webextension-polyfill module
  - Update: extension Manifest to V3
  - Change: default root sessionId
  - Change: throw error if no WindowRecord is found during restore
  - Fix: tab-replaced called on local window that doesn't exist
  - Feature: import sessions
  - Feature: export sessions
  - Fix: always generate id when creating a new SessionRecord
  - Change: notifications autoHideDuration to be visible longer
  - Fix: csv to windows converter setting wrong window title
  - Change: initialize db earlier during load
  - Change: refactor window/session service layer to reduce duplicate code
  - Update: convert between active windows and saved session windows

# Release v1.6.9
  - Change: prevent closing any open client when browser is starting
  - Fix: windows entities missing tabs property
  - Feature: loading text indicator to suspended tabs
  - Update: cloud sync

# Release v1.6.8
  - Feature: edit-WindowRecord-title header button
  - Fix: existing sessionId not set on WindowRecord update
  - Feature: windows and tabs count to topbar
  - Update: packages

# Release v1.6.6
  - Change: account topbar icon size
  - Feature: select session snapshot before restoring in extension menu
  - Feature: restore sessions and windows from extension menu
  - Feature: total tabs count badge to extension action icon
  - Feature: display sync status topbar icon

# Release v1.6.5
  - Change: autoHideDuration for restore session notifications
  - Feature: preserve height & width properties when saving and restoring session windows

# Release v1.6.4
  - Feature: search focus command to input placeholder
  - Feature: show tab count in session history page sidelist menu
  - Feature: show tab count in restore/open session extension menu
  - Fix: error on TAB_REPLACED event when window doesnt exist

# Release v1.6.3
  - Update: extension browser polyfill module
  - Fix: trying to set state for removed window
  - Fix: some windows are not saving correctly

# Release v1.6.2
  - Change: hide overflow for window and header
  - Change: dropdown menues max-width to support longer names
  - Fix: edit window-title-dialog shows current window title
  - Fix: ignore cancelled-popup-request errors

# Release v1.6.1
  - Move autosave session toggle to left corner
  - Fix: tabs with undefined urls shouldn't break search
  - Fix: current active tab should set to false if created or updated tab is active
  - Fix: error tracking issues - downgrade to last working version
  - Fix: ignore popup closed error
  - Fix: sidebar border is covered by selected element in dark mode on MacOS
  - Fix: error on ARROW_UP key when first tab is focused and search-filter is active
  - Update: packages

# Release v1.6.0
  - Feature: style indicator for when tab is active in window
  - Fix: escape regex for all input strings
  - Remove shadow styles from win header and tabs
  - Feature: debounce search input
  - Change: sidebar & topbar border theme colors
  - Feature: expend/collapse sidebar

# Release v1.5.9
  - Feature: expand/collapse windows header button
  - Update: export window-records
  - Change app styles
  - Feature: show uninstall form link on install

# Release v1.5.8
  - Update: packages
  - Change: extension description
  - Update: build script

# Release v1.5.7
  - Fix: get selected tabs selector should only return tab elements
  - Feature: sort window tabs
  - Fix: windows grid column-width for large screens

# Release v1.5.5
  - Feature: current active window header icon in list shows active color
  - Change: dark theme window colors
  - Change: max session limit

# Release v1.5.4
  - Rename Save Session to Save all Windows
  - Feature: show tab count in window header

# Release v1.5.3
  - Change: multi-select tabs is always on
  - Update: settings dialog styles
  - Update: extension manifest
  - Change: remove session from history by offset instead of date

# Release v1.5.2
  - Feature: menu option to move WindowRecord to another session
  - Feature: WindowRecord header more-menu button
  - Feature: remove WindowRecord header button

# Release v1.5.1
  - Fix: not passing sessionId with payload when requesting history session restore
  - Fix: dialog calling undefined function

# Release v1.5.0
  - Feature: save tabs to WindowRecord using tab more-menu
  - Fix: prevent updating hidden records if visible ids array is empty
  - Fix: backward slash in search query breaks search
  - Fix: SessionRecord cloud sync issue
  - Feature: close active window on save when setting is enabled
  - Feature: clear search input field on command focus
  - Fix: no first tab when manager is the only tab in window
  - Update: packages

# Release v1.4.2
  - Feature: focus win header on shift+tab when tab is focused
  - Fix: db .where and .orderBy can not be combined

# Release v1.4.1
  - Fix: spammy logger recieves all messages for client and background
  - Fix: confirmation dialog doesn't close on accept

# Release v1.4.0
  - Change: win grid column max-width
  - Feature: close selected tab/tabs on delete/backspace
  - Feature: outline tab on focus and focus within
  - Feature: merge all windows toolbar button
  - Fix: default title not set
  - Change: prevent unmounting loaded pages
  - Feature: filter archive sidelist by windows or sessions
  - Change: sidebar panel buttons tooltip labels
  - Change: display confirmation dialog before removing session-record
  - Change: tabs windows count layout
  - Feature: scroll position container optimization
  - Fix: transaction broken in saveNew method
  - Feature: remove session-record
  - Feature: get session-records filtered by search
  - Feature: save all windows as session

# Release v1.3.3
  - Fix: cloud sync issues

# Release v1.3.2
  - Change: specify UUID instead of depending on db auto-generated UUID
  - Fix: dependOn breaks build
  - Change: entry dependencies to minize bundle sizes

# Release v1.3.1
  - Fix: quickly adding and removing window timing issue
  - Update: sessions page styles

# Release v1.3.0
  - Fix: reset input field after file upload
  - Change: disable notifications when sessions are removed
  - Fix: stale session-recorder alarms
  - Fix: catch all errors during db init
  - Feature: notifications for import/export success/failure
  - Fix: missing winId result in undefined string
  - Feature: selected tab actions to window header
  - Fix: detaching tab doesn't clear selection
  - Feature: import windows
  - Feature: export all windows as csv option
  - Feature: export windows
  - Fix: current windowId is returned in array when windowIds is empty
  - Change: optimize loading client-state during load
  - Fix: client-state-store moduleNameMapper path
  - Fix: lodash.merge wont merge class instance with object
  - Update: fallback strategies to get current window (browser specific)
  - Feature: listActiveWindowFirst settings option
  - Feature: unsuspend tabs extension-menu option
  - Change: restore session windows sequentially instead of async
  - Fix: session-recorder error not caught during app init
  - Feature: session restore success/failure notification

# Release v1.2.1
  - Change: always try and clean-up stale sessions in recorder
  - Change: stop session-recorder on error
  - Feature: notifications on sessions actions
  - Update: auth service & config

# Release v1.2.0
  - Change: do not log error when trying to close open client tabs
  - Fix: some clients have no active windows - add fallback strategies
  - Change: info text on suspended tabs
  - Feature: suspend tabs notifications
  - Feature: suspend tabs from window more menu
  - Fix: can't discard already discarded tabs
  - Fix: missing re-throw causing error to be swallowed
  - Feature: display success/error browser menu icon on save
  - Feature: save-window extension menu option
  - Change: use window title as default if not set
  - Fix: tabs.discard in chrome doesn't take an array of tabIds
  - Feature: show discard tabs option in extension menu
  - Change: export individual service functions to utilize tree-shaking
  - Change: default autoHide duration for notifications
  - Feature: show error notification when restoring window session fails
  - Fix: some service errors are not passed to client
  - Fix: reduce events emitted during startup/load
  - Update: session-recorder service
  - Update: client windows service to handle new background service response
  - Fix: grid page content not adjusting to content height
  - Update: packages

# Release v1.1.12
  - Change: show confirmation-dialog before removing record window tabs
  - Fix: restore specific session window fails
  - Change: unselect any selected tabs on search input focus
  - Fix: prevent toggling selected tab on more-button-menu click
  - Fix: rem style font-sizing for text and icons

# Release v1.1.11
  - Update: suspend tab logic
  - Update: suspend tab template

# Release v1.1.10
  - Change: session-list items design
  - Feature: unselect any selected tabs on topbar click
  - Feature: select tab on more-button-click
  - Fix: source-maps reference webpack:// protocol instead of chrome-extension://
  - Change: extension reloader
  - Fix: material-ui deprecated warnings
  - Update: packages

# Release v1.1.9
  - Change: remove stale recored sessions on every save
  - Change: show today in group-header if today's date
  - Feature: show session-list sticky group date headers
  - Fix: getAll should have default limit argument
  - Feature: show restore session option in extension menu
  - Fix: logging breadcrumb severity should be error when error level is set

# Release v1.1.8
  - Feature: cloud sync
  - Feature: auth sign-in
  - Feature: app level notifications
  - Fix: popup-menu should not overflow bottom viewport
  - Feature: restore suspended tab on click
  - Change: session-recorder max limit
  - Update: packages

# Release v1.1.7
  - Change: win header colors in light/dark mode
  - Change: window colors in light/dark mode
  - Change: app layout colors in light/dark mode
  - Feature: new light/dark theme colors

# Release v1.1.6
  - Fix: WindowRecord not removed when last tab is removed
  - Fix: sessions not loaded on reload
  - Fix: window-records not loaded on reload
  - Fix: window references invalid id when tab is removed from list
  - Feature: remove WindowRecord tab button

# Release v1.1.5
  - Feature: error tracking
  - Change: lazy load Tooltip component optimization
  - Fix: empty popup menu loaded when no windows

# Release v1.1.4
  - Change: container width to optimize layout
  - Change: scrollbar always visible to reduce reflow on startup
  - Fix: remove tab cause all tab components to re-render
  - Fix: hiding scrollbar result in render reflow
  - Fix: prevent saving client-tab
  - Feature: show snackbar error on save windows failed

# Release v1.1.3
  - Fix: prevent form submit in save-window dialog
  - Change: refactor code to utilize tree-shaking to reduce bundle size
  - Change: close more-menu on menu click
  - Feature: merge windows menu option
  - Feature: remove-duplicate-tabs menu option
  - Feature: group-tabs-by-domain menu option
  - Fix: click listener receiving double click events
  - Fix: can't close popup from anchor when open
  - Feature: show more-button in win-header
  - Fix: scroll optimization for content

# Release v1.1.1
  - Feature: windows drag & drop
  - Fix: suspended tabs not restoring on active
  - Feature: restore windows with suspended tabs
  - Feature: window accessibility keyboard navigation
  - Feature: accessibility improvements

# Release v1.1.0
  - Update: session date validation before save
  - Feature: save window dialog
  - Feature: light/dark color themes
  - Fix: multiple clients open

# Release v1.0.2
  - Change: filter out duplicate tabs during merge-save
  - Fix: duplicate tabs created in window on archive restore
  - Fix: archive sidelist item title text overflow
  - Change: session-recorder timer default time
  - Feature: setting for creating client as window or pinned
  - Feature: settings page
  - Change: layout grid defaults

# Release v1.0.0
  - Initial release