diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f0f7daf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,16 @@
+.DS_Store
+node_modules
+build
+dist
+.svelte-kit
+.env
+!.env.example
+vite.config.js.timestamp-*
+vite.config.ts.timestamp-*
+pb_data
+/pb_data
+.vscode
+.svelte-kit
+*.lockb
+*lock.yaml
+__pycache__
\ No newline at end of file
diff --git a/README.md b/README.md
index 956d46e..e0fd841 100644
--- a/README.md
+++ b/README.md
@@ -1,30 +1,23 @@
+## in10search Tab Manager AI
-##in10search
+- Horizontal Tabs in Browser Sidepanel with Search
+## Ideas for Future Development
-####GEAR: Google with Enhanced Auto-loading Results
+- Ask ChatGPT About Text Content of All Open Tabs
+- readability extract article, cite
-####READ: Reading-Mode with Entity Analysis and Definitions
+- scroll and highlight the query words on result
+- tree tab view and history view
+- autogen suggested [Tab Groups](https://developer.chrome.com/docs/extensions/reference/tabGroups/)
-####WORD: Wikipedia On-page Research Definition
+- auto keywords generator and search query builder related keywords
+- backup & close a read-it-later list
-
-####SWAG: Swipe Webcam Arm Gestures
-
-
-
-####CATS: Ctrl+F Across-all Tabs Search
-
-
-
-####VAST: Voice Activated Search Trigger
-
-
-
-####HITS: Historical Interactive Timeline for Session
+- show current url & title when full screen
diff --git a/cats/alltabfind-popup.html b/cats/alltabfind-popup.html
deleted file mode 100644
index bfec618..0000000
--- a/cats/alltabfind-popup.html
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
- Search Tabs
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/cats/alltabfind.js b/cats/alltabfind.js
deleted file mode 100644
index 495af47..0000000
--- a/cats/alltabfind.js
+++ /dev/null
@@ -1,215 +0,0 @@
-//browser action dropdown with chrome.api permissions
-
-//on popup load
-var d = document;
-var textStart = "Start typing to find all the words in the content of open tabs.";
-
-d.addEventListener('DOMContentLoaded', function() {
- //fill with pre-existing text
- if (!localStorage["searchText"])
- localStorage["searchText"] = "";
-
- if (localStorage["searchText"].length > 0) {
- d.getElementById("inSearch").value = localStorage["searchText"];
- onSearchType();
- } else {
- d.getElementById("tabDisplay").innerHTML = "";
- d.getElementById("tabMessage").innerHTML = textStart;
- }
-
- //focus search box and have it auto process keys
- var searchBox = d.getElementById("inSearch");
-
-
-
- searchBox.onkeyup = function() {
-
- clearTimeout(window.searchBoxThrottle);
-
- window.searchBoxThrottle = setTimeout(onSearchType, 500);
-
- };
-
-
- searchBox.focus();
- searchBox.select();
-});
-
-//on typing into search box, query all the open tabs
-function onSearchType() {
- localStorage["searchText"] = d.getElementById("inSearch").value.trim();
-
- if (localStorage["searchText"].length == 0) {
- d.getElementById("tabDisplay").innerHTML = "";
- d.getElementById("tabMessage").innerHTML = textStart;
- return;
- }
-
- //scrape all tabs html, inject content-level script into each tab that scrapes its html, returns into callback
- chrome.windows.getAll({ populate: true }, function(winArray) {
- for (var w in winArray) {
- chrome.tabs.getAllInWindow(winArray[w].id,
- function(tabs) {
- for (var i in tabs) {
- chrome.tabs.executeScript(tabs[i].id, {
- code: "chrome.extension.sendMessage({type: 'getHTML', tabId: " + tabs[i].id +
- ", title: document.title, content: document.body.innerHTML});"
- });
- }
- }
- );
- }
-
- //after tabs processed
- setTimeout(function() {
- var tabMessage = d.getElementById("tabMessage");
-
- //if results found
- if (d.getElementById("tabDisplay").innerHTML.length > 0) {
-
- //TODO all windows?
- //shade current tab
- chrome.tabs.query({ active: true, currentWindow: true }, function(tabCurrent) {
- if (d.getElementById("tab" + tabCurrent[0].id) != null)
- d.getElementById("tab" + tabCurrent[0].id).className += " currentTab";
-
- });
-
- //create a Move all tabs link
- var a = d.createElement('a');
- a.setAttribute('href', '#');
- a.innerText = "Move all results to new window";
- tabMessage.innerHTML = "";
- tabMessage.appendChild(a);
-
- //process Move all tabs click
- a.addEventListener("click", function() {
- var tabDivs = document.getElementById("tabDisplay").getElementsByClassName("tabDiv");
- var tabIds = [];
-
- for (var i = 0; i < tabDivs.length; i++)
- if (tabDivs[i].hasAttribute("id"))
- tabIds.push(parseFloat(tabDivs[i].id.substring(3)));
-
- chrome.windows.create({ tabId: tabIds[0], focused: true }, function(win) {
- chrome.tabs.move(tabIds, { windowId: win.id, index: -1 });
- });
- });
-
-
-
-
- } else { //if no results found
- if (d.getElementById("inSearch").value.length > 0)
- tabMessage.innerHTML = "No results were found.";
- else
- tabMessage.innerHTML = textStart;
- }
- }, 300);
- });
-}
-
-
-//on tab result click, go to that tab
-function onClickTabResult(e) {
- var tabID = parseFloat(e.target.id.substring(3));
- var searchText = localStorage["searchText"];
-
- chrome.tabs.get(tabID, function(tab) {
- chrome.windows.get(tab.windowId, function(win) {
- chrome.windows.update(win.id, { focused: true })
- });
- });
-
-
- chrome.tabs.update(tabID, { active: true });
-
- var searchSplit = searchText.trim().split(" ");
-
- //highlight on page the last word searched for
- chrome.tabs.executeScript(tabID, {
- code: "window.find('" + searchSplit[searchSplit.length - 1] + "', false, false, true, false, true, false);"
- });
-}
-
-
-
-
-/**** CHROME API ****/
-
-//process content text for each tab
-chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
- if (request.type == "getHTML") {
- var tabId = request.tabId;
- var title = request.title;
- var tabDisplay = d.getElementById("tabDisplay");
-
- //strip HTML of tags
- var content = title + " " + request.content
- .replace(/
-
-
-
-
-