Skip to content

Instantly share code, notes, and snippets.

@volkanunsal
Last active October 31, 2025 06:09
Show Gist options
  • Save volkanunsal/d1c57ee8199c70c5a575c32b51527d10 to your computer and use it in GitHub Desktop.
Save volkanunsal/d1c57ee8199c70c5a575c32b51527d10 to your computer and use it in GitHub Desktop.

NotebookLM Hacks

NotebookLM Hacks is a userscript that enhances the user experience of Google NotebookLM. It adds various features and improvements to make notebook management easier and more efficient.

Key Features

📊 Project Management

  • Hide featured notebooks sections for cleaner interface
  • Search notebooks by title and description
  • Filter to show only duplicate notebooks
  • Display total notebook count
  • Right-click notebooks to open in new tab

🎬 Video Audio Tracking

  • Track daily video generation limits (20/day at 6 AM reset)
  • Track daily audio generation limits (20/day at 6 AM reset)
  • Display remaining video and audio counts in header

📚 Artifact Library

  • Filter artifacts by type (Notes, Audio, Video)
  • Sort artifacts alphabetically (A-Z, Z-A)
  • Smart header that hides during mindmap viewing

⌨️ Keyboard Shortcuts

  • "/" - Focus search input
  • "n" - Create new notebook
  • "f" - Toggle fullscreen in mindmap
  • "Esc" - Clear search, close mindmap, or collapse source panel

🎨 Ui Improvements

  • Auto-collapse source panel when entering notebooks
  • Expanded query box and chat layout
  • Vertical chip arrangement for better space usage
  • Remove promotional badges and callouts

Getting Started

🔧 Installation

  1. Install Tampermonkey browser extension
  2. Click on the "Raw" button of the script below.
  3. Visit notebooklm.google.com to see the magic! ✨

🚀 Quick Start

  • Search notebooks: Use the search box in the top-right
  • Find duplicates: Click "Show Duplicates" button
  • Keyboard shortcuts: Press "/" to search, "n" for new notebook
  • Right-click notebooks: Opens them in a new tab
  • Filter artifacts: Use the icon buttons (Notes/Audio/Video)
  • Sort artifacts: Use A-Z or Z-A buttons

⚡ Pro Tips

  • The notebook counter shows your total count at a glance
  • Video and audio counters track your daily 20-item limits
  • Source panel auto-collapses when you enter notebooks
  • Use "f" key for fullscreen mindmaps
  • "Esc" key is your universal back/close button
// @ts-nocheck
// ==UserScript==
// @name NotebookLM Hacks
// @namespace https://github.com/volkanunsal
// @version 2025-09-24
// @description Disable featured notebooks, add search field, intercept context menu, and more.
// @author Volkan Unsal
// @downloadURL https://gist.githubusercontent.com/volkanunsal/d1c57ee8199c70c5a575c32b51527d10/raw/notebook-lm-hacks.user.js
// @updateURL https://gist.githubusercontent.com/volkanunsal/d1c57ee8199c70c5a575c32b51527d10/raw/notebook-lm-hacks.user.js
// @match https://notebooklm.google.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=google.com
// @grant GM_addStyle
// @grant GM_registerMenuCommand
// @grant GM_openInTab
// ==/UserScript==
"use strict";(()=>{var h=class{constructor(t={}){this.namespace=t.namespace,this.prefix=[this.namespace,t.prefix].filter(Boolean).join(" "),this.enabled=t.enabled!==!1,this.timestamp=t.timestamp!==!1,this.timestampFormat=t.timestampFormat||"locale"}getTimestamp(){let t=new Date;return this.timestampFormat==="ISO"?t.toISOString():t.toLocaleString()}formatMessage(t,...l){let d=[this.prefix];return this.timestamp&&d.push(`[${this.getTimestamp()}]`),d.push(`[${t.toUpperCase()}]`),[d.join(" "),...l]}debug(...t){this.enabled&&console.debug(...this.formatMessage("debug",...t))}info(...t){this.enabled&&console.info(...this.formatMessage("info",...t))}warn(...t){this.enabled&&console.warn(...this.formatMessage("warn",...t))}error(...t){this.enabled&&console.error(...this.formatMessage("error",...t))}log(...t){this.enabled&&console.log(...this.formatMessage("log",...t))}custom(t,...l){this.enabled&&console.log(...this.formatMessage(t,...l))}group(t,l){if(!this.enabled)return l();console.group(`${this.prefix} ${t}`);try{l()}finally{console.groupEnd()}}groupCollapsed(t,l){if(!this.enabled)return l();console.groupCollapsed(`${this.prefix} ${t}`);try{l()}finally{console.groupEnd()}}table(t,l){this.enabled&&(this.info("Table data:"),console.table(t,l))}time(t){this.enabled&&console.time(`${this.prefix} ${t}`)}timeEnd(t){this.enabled&&console.timeEnd(`${this.prefix} ${t}`)}timeLog(t){this.enabled&&console.timeLog(`${this.prefix} ${t}`)}enable(){this.enabled=!0}disable(){this.enabled=!1}setPrefix(t){this.prefix=t}};function R(u={}){return new h(u)}(function(){"use strict";let u=R({prefix:"[NotebookLMHacks]",namespace:"UserScript"}),t={DEBOUNCE_DELAY:200,HEADER_WAIT_TIMEOUT:100,UPSELL_CHECK_DELAY:1200,CLEANUP_TIMEOUT:2e3,VIDEO_RESET_HOUR:6,DEFAULT_VIDEO_COUNT:20,DEFAULT_AUDIO_COUNT:20,THROTTLE_LIMIT:50,SOURCE_PANEL_DELAY:500,MINDMAP_DRAG_DELAY:100,THEME:{PRIMARY:"#1976d2",PRIMARY_LIGHT:"#e3f2fd",WARNING:"#d39b00",BORDER:"#ccc",BORDER_LIGHT:"#e0e0e0",TEXT_SECONDARY:"#666",TEXT_PRIMARY:"#000",BACKGROUND_WHITE:"white",BACKGROUND_LIGHT:"#f5f5f5",BACKGROUND_HEADER:"#f8f9fa",SHADOW:"rgba(0,0,0,0.06)"},MESSAGES:{VIDEO_LIMIT_REACHED:"Video",AUDIO_LIMIT_REACHED:"Audio"},SELECTORS:{PROJECT_BUTTON_DESCRIPTION:".project-button-description",PROJECT_BUTTON_TITLE:".project-button-title",NOTEBOOK_COUNT_LABEL:".notebook-count-label",PRODUCER_VIDEO_DIALOG:"producer-video-dialog",PRODUCER_AUDIO_DIALOG:"producer-audio-dialog",STUDIO_PANEL:".studio-panel",ARTIFACT_LIBRARY:"artifact-library",ARTIFACT_LIBRARY_ITEM_OR_NOTE:"artifact-library-note, artifact-library-item",GROUP_BUTTON:".group-button",CREATE_NOTEBOOK_BUTTON:".create-new-action-button",CUSTOMIZATION_OPTIONS:'[aria-label="Open customization options"]',PROJECTS_HEADER:".projects-header",NOTEBOOK_SEARCH_INPUT:".notebook-search-input",PROJECT_RIGHT_PANEL:".project-right-panel",ARTIFACT_LIBRARY_CONTAINER:".artifact-library-container",ARTIFACT_LIBRARY_HEADER:".artifact-library-header",COLLAPSE_SOURCE_PANEL_BUTTON:'.source-panel:not(.panel-collapsed) button[jslog="243454;track:generic_click,impression"]',MINDMAP_VIEWER:"mindmap-viewer",MINDMAP_CONTAINER:"svg",PROJECT_BUTTON:".my-projects-container project-button",PROJECT_BUTTON_BOX:".project-button-box",VIDEO_COUNT_LABEL:".video-count-label",AUDIO_COUNT_LABEL:".audio-count-label",BASIC_CREATE_ARTIFACT_BUTTON:"basic-create-artifact-button",CREATE_LABEL_CONTAINER:".create-label-container",CREATE_ARTIFACT_BUTTON_CONTAINER:".create-artifact-button-container",DISABLED_TILE:".disabled-tile",UPSELL_MESSAGE:".upsell-message-container"},URLS:{NOTEBOOK_PATTERN:/https:\/\/notebooklm\.google\.com\/notebook\/([^\/]+)/}},l={debounce(i,e){let o;return function(...r){let n=()=>{o=void 0,i.apply(this,r)};o&&clearTimeout(o),o=setTimeout(n,e)}},throttle(i,e=250){let o,r;return function(...n){r?(o&&clearTimeout(o),o=setTimeout(()=>{r&&Date.now()-r>=e&&(i.apply(this,n),r=Date.now())},e-(Date.now()-r))):(i.apply(this,n),r=Date.now())}},waitForElement(i,e,o=t.HEADER_WAIT_TIMEOUT){let r=document.querySelector(i);r?e(r):setTimeout(()=>this.waitForElement(i,e,o),o)},createElement(i,e={}){let o=document.createElement(i);return e.className&&(o.className=e.className),e.textContent&&(o.textContent=e.textContent),e.cssText&&(o.style.cssText=e.cssText),e.attributes&&Object.entries(e.attributes).forEach(([r,n])=>{o.setAttribute(r,n)}),o},createSVGIcon(i){let e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttribute("viewBox","0 0 24 24");let r={description:"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z",audiotrack:"M12,3V13.55C11.41,13.21 10.73,13 10,13A3,3 0 0,0 7,16A3,3 0 0,0 10,19A3,3 0 0,0 13,16V7H18V5H12V3Z",videocam:"M17,10.5V7A1,1 0 0,0 16,6H4A1,1 0 0,0 3,7V17A1,1 0 0,0 4,18H16A1,1 0 0,0 17,17V13.5L21,17.5V6.5L17,10.5Z",sort_by_alpha:"M11.15,3.4L10.55,5H9.45L8.85,3.4H7.55L9,7H10L11.45,3.4M9.75,4.15L10.2,5.25H9.3L9.75,4.15M19,17H22L18.5,21H22V22H18V21L21.5,17H19V16H22V17M13,9H21V11H13V9M13,13H21V15H13V13M13,5H21V7H13V5Z"}[i]||"M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2Z",n=document.createElementNS("http://www.w3.org/2000/svg","path");return n.setAttribute("d",r),e.appendChild(n),e}},d={initializeCount(i,e){let o=new Date,r=new Date(o);r.setHours(t.VIDEO_RESET_HOUR,0,0,0),o.getHours()>=t.VIDEO_RESET_HOUR&&r.setDate(r.getDate()+1);let n=localStorage.getItem(`${i}CountLastReset`),a=localStorage.getItem(`${i}Count`);(!n||!a||new Date(parseInt(n)).getTime()<r.getTime()-1440*60*1e3)&&(localStorage.setItem(`${i}Count`,e.toString()),localStorage.setItem(`${i}CountLastReset`,Date.now().toString()))},getCount(i,e){return parseInt(localStorage.getItem(`${i}Count`)||e.toString())},decrementCount(i){let e=i==="video"?t.DEFAULT_VIDEO_COUNT:t.DEFAULT_AUDIO_COUNT,o=this.getCount(i,e),r=Math.max(0,o-1);localStorage.setItem(`${i}Count`,r.toString());let n=i==="video"?"videos left":"audios left";return this.updateCountDisplay(i,n),r},updateCountDisplay(i,e){let o=`${i.toUpperCase()}_COUNT_LABEL`,r=t.SELECTORS[o],n=document.querySelector(r);if(n){let a=i==="video"?t.DEFAULT_VIDEO_COUNT:t.DEFAULT_AUDIO_COUNT,s=this.getCount(i,a);n.textContent=`${s} ${e}`,n.style.color=s===0?t.THEME.WARNING:t.THEME.TEXT_SECONDARY}},createCountLabel(i,e){let o=i==="video"?t.DEFAULT_VIDEO_COUNT:t.DEFAULT_AUDIO_COUNT,r=this.getCount(i,o);return l.createElement("span",{className:`${i}-count-label`,textContent:`${r} ${e}`,cssText:`
font-size: 0.9rem;
font-weight: 500;
color: ${r===0?t.THEME.WARNING:t.THEME.TEXT_SECONDARY};
`})}},p={initialize(){d.initializeCount("video",t.DEFAULT_VIDEO_COUNT)},get(){return d.getCount("video",t.DEFAULT_VIDEO_COUNT)},decrement(){return d.decrementCount("video")},updateDisplay(){d.updateCountDisplay("video","videos left")},createLabel(){return d.createCountLabel("video","videos left")}},C={initialize(){d.initializeCount("audio",t.DEFAULT_AUDIO_COUNT)},get(){return d.getCount("audio",t.DEFAULT_AUDIO_COUNT)},decrement(){return d.decrementCount("audio")},updateDisplay(){d.updateCountDisplay("audio","audios left")},createLabel(){return d.createCountLabel("audio","audios left")}},S={handleTrackVideoOverviewClicks:i=>{let e=i.target,o=e.closest(t.SELECTORS.BASIC_CREATE_ARTIFACT_BUTTON),r=o?.querySelector(t.SELECTORS.CREATE_LABEL_CONTAINER);if(u.log("handleTrackVideoOverviewClicks: 10.",{target:e,basicCreateArtifactButton:o,createLabelContainer:r}),r&&!e.closest(t.SELECTORS.CUSTOMIZATION_OPTIONS)&&r.textContent.includes("Video Overview")&&(u.log("handleTrackVideoOverviewClicks: 20.",{createLabelContainer:r}),!e.closest(t.SELECTORS.CREATE_ARTIFACT_BUTTON_CONTAINER)?.classList.contains(t.SELECTORS.DISABLED_TILE.replace(".","")))){u.log("handleTrackVideoOverviewClicks: 30.",{createLabelContainer:r});let s=setTimeout(()=>{let E=document.querySelector(t.SELECTORS.UPSELL_MESSAGE),T=E?.textContent.includes(t.MESSAGES.VIDEO_LIMIT_REACHED);u.log("handleTrackVideoOverviewClicks: 35.",{upsellMessageContainer:E,doesUpsellMessageExist:T}),!T&&(u.log("handleTrackVideoOverviewClicks: 40.",{createLabelContainer:r}),p.decrement())},t.UPSELL_CHECK_DELAY),c=new MutationObserver(()=>{(!document.querySelector(t.SELECTORS.STUDIO_PANEL)||!document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY))&&(u.log("handleTrackVideoOverviewClicks: 50.",{studioPanel:document.querySelector(t.SELECTORS.STUDIO_PANEL),artifactLibrary:document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY)}),clearTimeout(s),c.disconnect())})}},handleTrackAudioOverviewClicks:i=>{let e=i.target,o=e.closest(t.SELECTORS.BASIC_CREATE_ARTIFACT_BUTTON),r=o?.querySelector(t.SELECTORS.CREATE_LABEL_CONTAINER);if(u.log("handleTrackAudioOverviewClicks: 10.",{target:e,basicCreateArtifactButton:o,createLabelContainer:r}),r&&!e.closest(t.SELECTORS.CUSTOMIZATION_OPTIONS)&&r.textContent.includes("Audio Overview")&&(u.log("handleTrackAudioOverviewClicks: 20.",{createLabelContainer:r}),!e.closest(t.SELECTORS.CREATE_ARTIFACT_BUTTON_CONTAINER)?.classList.contains(t.SELECTORS.DISABLED_TILE.replace(".","")))){u.log("handleTrackAudioOverviewClicks: 30.",{createLabelContainer:r});let s=setTimeout(()=>{let E=document.querySelector(t.SELECTORS.UPSELL_MESSAGE),T=E?.textContent.includes(t.MESSAGES.AUDIO_LIMIT_REACHED);u.log("handleTrackAudioOverviewClicks: 35.",{upsellMessageContainer:E,doesUpsellMessageExist:T}),!T&&(u.log("handleTrackAudioOverviewClicks: 40.",{createLabelContainer:r}),C.decrement())},t.UPSELL_CHECK_DELAY),c=new MutationObserver(()=>{(!document.querySelector(t.SELECTORS.STUDIO_PANEL)||!document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY))&&(u.log("handleTrackAudioOverviewClicks: 50.",{studioPanel:document.querySelector(t.SELECTORS.STUDIO_PANEL),artifactLibrary:document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY)}),c.disconnect(),clearTimeout(s))})}},handleTrackGenerateButtonClicks:i=>{let e=i.target;e?.closest(t.SELECTORS.PRODUCER_VIDEO_DIALOG)&&p.decrement(),e?.closest(t.SELECTORS.PRODUCER_AUDIO_DIALOG)&&C.decrement()},trackVideoOverviewClicks(){let i=document.querySelector(t.SELECTORS.STUDIO_PANEL);i&&(i.removeEventListener("click",this.handleTrackVideoOverviewClicks),i.removeEventListener("click",this.handleTrackAudioOverviewClicks),i.addEventListener("click",this.handleTrackVideoOverviewClicks),i.addEventListener("click",this.handleTrackAudioOverviewClicks)),document.removeEventListener("click",this.handleTrackGenerateButtonClicks),document.addEventListener("click",this.handleTrackGenerateButtonClicks)},interceptContextMenu(){document.addEventListener("contextmenu",i=>{let o=i.target?.closest(t.SELECTORS.PROJECT_BUTTON);if(u.log("Right-click detected on:",o),o){i.preventDefault();let r=o.querySelector(t.SELECTORS.PROJECT_BUTTON_BOX);if(u.log("Project button box found:",r),r){let n=r.getAttribute("aria-labelledby")?.replace(/-title$/,"");n&&GM_openInTab(`https://notebooklm.google.com/notebook/${n}`)}}})}},m={apply(){GM_addStyle(".featured-projects-container, .project-view-toggle-container, .project-actions-container,.chat-panel-start-note-buttons { display: none !important; }"),GM_addStyle(".welcome-page-container { inline-size: 97vw !important; }"),GM_addStyle(".query-box { height: 120px !important; }"),GM_addStyle(`
follow-up {
width: 100% !important;
}
scroll-carousel {
display: flex !important;
flex-direction: column !important;
align-items: flex-end !important;
justify-content: flex-end !important;
align-content: stretch !important;
}
mat-chip-listbox .mdc-evolution-chip-set__chips {
flex-direction: column !important;
}
`),GM_addStyle(".cdk-overlay-backdrop { pointer-events: none !important; } .cdk-overlay-dark-backdrop { background: none !important; } .public-sharing-promo-badge-container, .ao-i18n-callout.mat-label-medium.ng-star-inserted { display: none !important; }")}},O={modules:{},init(){m.apply(),p.initialize(),C.initialize(),this.modules={projectPanel:new A,artifactLibrary:new f,keyboardShortcuts:new L,routeWatcher:new _,contextMenu:new b},Object.values(this.modules).forEach(i=>{i.init&&i.init()}),S.trackVideoOverviewClicks()}};class A{init(){this.createProjectRightPanel()}createProjectRightPanel(){l.waitForElement(t.SELECTORS.PROJECTS_HEADER,e=>{let o=document.querySelector(t.SELECTORS.NOTEBOOK_SEARCH_INPUT),r=document.querySelector(t.SELECTORS.PROJECT_RIGHT_PANEL);if(!(o&&r&&e.contains(r))){o&&o.remove(),r&&r.remove();try{let{rightPanel:n,searchInput:a}=this.createRightPanelElements();this.setupHeader(e,n),this.attachSearchCallback(a)}catch(n){console.error("Failed to create project right panel:",n)}}})}createRightPanelElements(){let e=l.createElement("div",{className:"project-right-panel",cssText:"display: flex; align-items: center; gap: 12px;"}),o=this.createNotebookCountLabel(),r=this.createSeparator(),n=p.createLabel(),a=this.createSeparator(),s=C.createLabel(),c=this.createDuplicateFilterButton(),E=this.createSearchInput();return e.appendChild(o),e.appendChild(r),e.appendChild(n),e.appendChild(a),e.appendChild(s),e.appendChild(c),e.appendChild(E),{rightPanel:e,searchInput:E}}setupHeader(e,o){e.style.cssText=`
display: flex;
align-items: center;
justify-content: space-between;
position: sticky;
top: 0;
z-index: 951;
background-color: white;
`,e.appendChild(o)}createNotebookCountLabel(){let e=this.countNotebooks();return l.createElement("span",{className:"notebook-count-label",textContent:`${e} notebooks`,cssText:`
font-size: 0.9rem;
font-weight: 500;
color: ${t.THEME.TEXT_SECONDARY};
padding-right: 8px;
`})}createSeparator(){return l.createElement("div",{className:"vertical-separator",cssText:`
width: 1px;
height: 16px;
background-color: ${t.THEME.BORDER};
margin: 0 4px;
`})}countNotebooks(){return document.querySelectorAll(t.SELECTORS.PROJECT_BUTTON).length}updateNotebookCount(){let e=document.querySelector(t.SELECTORS.NOTEBOOK_COUNT_LABEL);if(e){let o=this.countNotebooks();e.textContent=`${o} notebooks`}}createSearchInput(){return l.createElement("input",{className:"notebook-search-input",attributes:{type:"search",placeholder:"Search notebooks","aria-label":"Search notebooks"},cssText:`
padding: 8px 12px;
border: 1px solid ${t.THEME.BORDER};
border-radius: 20px;
font-size: 1rem;
outline: none;
transition: border-color 0.2s;
margin-left: 0;
box-shadow: 0 1px 4px ${t.THEME.SHADOW};
`})}createDuplicateFilterButton(){let e=!1,o=l.createElement("button",{textContent:"Show Duplicates",className:"duplicate-filter-button",cssText:`
padding: 6px 12px;
border: 1px solid ${t.THEME.BORDER};
border-radius: 16px;
font-size: 0.85rem;
background: ${t.THEME.BACKGROUND_WHITE};
cursor: pointer;
transition: all 0.2s;
outline: none;
`});return o.addEventListener("click",()=>{e=!e;try{e?(this.showOnlyDuplicates(),this.updateButtonState(o,!0)):(this.showAllProjects(),this.updateButtonState(o,!1),this.clearSearchInput())}catch(r){console.error("Error in duplicate filter:",r)}}),o}attachSearchCallback(e){let r=l.debounce(n=>{let s=n.target.value.toLowerCase();document.querySelectorAll(t.SELECTORS.PROJECT_BUTTON).forEach(E=>{let T=E,g=E.querySelector(t.SELECTORS.PROJECT_BUTTON_TITLE),I=E.querySelector(t.SELECTORS.PROJECT_BUTTON_DESCRIPTION),N=g?.textContent?.toLowerCase()||"",y=I?.textContent?.toLowerCase().replace(/\s+/g," ")||"";T.style.display=N.includes(s)||y.includes(s)?"block":"none"})},t.DEBOUNCE_DELAY);e.addEventListener("input",r),e.addEventListener("focus",()=>{e.style.borderColor=t.THEME.PRIMARY}),e.addEventListener("blur",()=>{e.style.borderColor=t.THEME.BORDER})}showOnlyDuplicates(){let e=document.querySelectorAll(t.SELECTORS.PROJECT_BUTTON),o={};e.forEach(n=>{let c=n.querySelector(t.SELECTORS.PROJECT_BUTTON_TITLE)?.innerText?.trim()||"";c&&(o[c]=(o[c]||0)+1)});let r=Object.keys(o).filter(n=>o[n]>1);e.forEach(n=>{let a=n,E=n.querySelector(t.SELECTORS.PROJECT_BUTTON_TITLE)?.innerText?.trim()||"";a.style.display=r.includes(E)?"block":"none"})}showAllProjects(){document.querySelectorAll(t.SELECTORS.PROJECT_BUTTON).forEach(o=>{let r=o;r.style.display="block"})}updateButtonState(e,o){o?(e.textContent="Show All",e.style.backgroundColor=t.THEME.PRIMARY_LIGHT,e.style.color=t.THEME.TEXT_PRIMARY,e.style.borderColor=t.THEME.PRIMARY):(e.textContent="Show Duplicates",e.style.backgroundColor=t.THEME.BACKGROUND_WHITE,e.style.color=t.THEME.TEXT_PRIMARY,e.style.borderColor=t.THEME.BORDER)}clearSearchInput(){let e=document.querySelector(t.SELECTORS.NOTEBOOK_SEARCH_INPUT);if(e){let o=e;o.value=""}}}class f{init(){this.createArtifactLibraryActions()}createArtifactLibraryActions(){}watchForMindmapViewer(e){let o=!1,r=new MutationObserver(()=>{let a=document.querySelector(t.SELECTORS.MINDMAP_VIEWER),s=document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY_CONTAINER);if(a&&!o)e.style.display="none",o=!0;else if(!a&&o){if(s&&s.parentElement){e.remove();let c=this.createArtifactLibraryHeader();s.parentElement.insertBefore(c,s),e=c}o=!1}});document.querySelector(t.SELECTORS.MINDMAP_VIEWER)&&(e.style.display="none",o=!0),r.observe(document.body,{childList:!0,subtree:!0})}createArtifactLibraryHeader(){let e=l.createElement("div",{className:"artifact-library-header",cssText:`
display: flex;
justify-content: space-between;
align-items: flex-end;
padding: 12px;
background: ${t.THEME.BACKGROUND_WHITE};
border-bottom: 1px solid ${t.THEME.BORDER_LIGHT};
gap: 16px;
`}),o=this.createFilterSection(),r=this.createSortSection();return e.appendChild(o),e.appendChild(r),e}createFilterSection(){let e=l.createElement("div",{className:"filter-section",cssText:`
display: flex;
flex-direction: column;
gap: 6px;
align-items: flex-start;
`}),o=l.createElement("div",{className:"filter-button-group",cssText:`
display: flex;
border: 1px solid ${t.THEME.BORDER};
border-radius: 20px;
overflow: hidden;
background: ${t.THEME.BACKGROUND_WHITE};
`}),r=[{name:"Notes",icon:"description",filter:"notes",showText:!1},{name:"Audio",icon:"audiotrack",filter:"audio",showText:!1},{name:"Video",icon:"videocam",filter:"video",showText:!1}],n=null;return r.forEach((a,s)=>{let c=this.createGroupButton({...a,isFirst:s===0,isLast:s===r.length-1});c.addEventListener("click",()=>{n===a.filter?(n=null,this.showAllArtifacts(),this.resetFilterButtonStates(o)):(n=a.filter,this.applyFilter(a.filter),this.updateFilterButtonState(o,c))}),o.appendChild(c)}),e.appendChild(o),e}createSortSection(){let e=l.createElement("div",{className:"sort-section",cssText:`
display: flex;
flex-direction: column;
gap: 6px;
align-items: flex-end;
`}),o=l.createElement("div",{className:"sort-button-group",cssText:`
display: flex;
border: 1px solid ${t.THEME.BORDER};
border-radius: 20px;
overflow: hidden;
background: ${t.THEME.BACKGROUND_WHITE};
`}),r=[{name:"A-Z",direction:"asc"},{name:"Z-A",direction:"desc"}],n=null;return r.forEach((a,s)=>{let c=this.createGroupButton({text:a.name,isFirst:s===0,isLast:s===r.length-1,showText:!0});c.addEventListener("click",()=>{n===a.direction?(n=null,this.restoreOriginalOrder(),this.resetSortButtonStates(o)):(n=a.direction,this.sortArtifacts(a.direction),this.updateSortButtonState(o,c))}),o.appendChild(c)}),e.appendChild(o),e}createGroupButton({text:e,icon:o,isFirst:r,isLast:n,showText:a=!0}){let s="0";r&&n?s="20px":r?s="20px 0 0 20px":n&&(s="0 20px 20px 0");let c=l.createElement("button",{className:"group-button",cssText:`
display: flex;
align-items: center;
gap: 6px;
padding: 6px 12px;
border: none;
border-radius: ${s};
background: ${t.THEME.BACKGROUND_WHITE};
color: ${t.THEME.TEXT_SECONDARY};
font-size: 0.85rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
outline: none;
border-right: ${n?"none":`1px solid ${t.THEME.BORDER_LIGHT}`};
`});if(o){let E=l.createSVGIcon(o);E.style.cssText="width: 16px; height: 16px; fill: currentColor;",c.appendChild(E)}return e&&a&&c.appendChild(document.createTextNode(e)),this.attachHoverEffects(c),c}attachHoverEffects(e){e.addEventListener("mouseenter",()=>{e.classList.contains("active")||(e.style.backgroundColor=t.THEME.BACKGROUND_LIGHT),e.style.color=t.THEME.PRIMARY}),e.addEventListener("mouseleave",()=>{e.classList.contains("active")||(e.style.backgroundColor=t.THEME.BACKGROUND_WHITE,e.style.color=t.THEME.TEXT_SECONDARY)})}applyFilter(e){let o=document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY);if(!o)return;o.querySelectorAll(t.SELECTORS.ARTIFACT_LIBRARY_ITEM_OR_NOTE).forEach(n=>{let a=!1;switch(e){case"notes":a=n.tagName.toLowerCase()==="artifact-library-note";break;case"audio":if(n.tagName.toLowerCase()==="artifact-library-item"){let s=n.querySelector("mat-icon");a=!!(s&&s.textContent.trim()==="audio_magic_eraser")}break;case"video":if(n.tagName.toLowerCase()==="artifact-library-item"){let s=n.querySelector("mat-icon");a=!!(s&&s.textContent.trim()==="subscriptions")}break}n.style.display=a?"":"none"})}showAllArtifacts(){let e=document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY);if(!e)return;e.querySelectorAll(t.SELECTORS.ARTIFACT_LIBRARY_ITEM_OR_NOTE).forEach(r=>{r.style.display=""})}sortArtifacts(e){let o=document.querySelector(t.SELECTORS.ARTIFACT_LIBRARY);if(!o)return;let r=Array.from(o.querySelectorAll(t.SELECTORS.ARTIFACT_LIBRARY_ITEM_OR_NOTE)),n=r[0]?.parentNode;n&&(r.sort((a,s)=>{let c=this.extractSortOrder(a),E=this.extractSortOrder(s);return e==="asc"?c-E:E-c}),r.forEach(a=>n.appendChild(a)))}extractSortOrder(e){let r=(e.className||"").match(/ng-tns-c\d+-(\d+)/);return r?parseInt(r[1],10):0}updateFilterButtonState(e,o){this.resetFilterButtonStates(e),o.classList.add("active"),o.style.backgroundColor=t.THEME.PRIMARY_LIGHT,o.style.color=t.THEME.TEXT_SECONDARY}resetFilterButtonStates(e){e.querySelectorAll(t.SELECTORS.GROUP_BUTTON).forEach(r=>{r.classList.remove("active"),r.style.backgroundColor=t.THEME.BACKGROUND_WHITE,r.style.color=t.THEME.TEXT_SECONDARY})}updateSortButtonState(e,o){this.resetSortButtonStates(e),o.classList.add("active"),o.style.backgroundColor=t.THEME.PRIMARY_LIGHT,o.style.color=t.THEME.PRIMARY}resetSortButtonStates(e){e.querySelectorAll(t.SELECTORS.GROUP_BUTTON).forEach(r=>{r.classList.remove("active"),r.style.backgroundColor=t.THEME.BACKGROUND_WHITE,r.style.color=t.THEME.TEXT_SECONDARY})}restoreOriginalOrder(){this.sortArtifacts("desc")}}class _{init(){let e=window.location.href,o=()=>{window.location.href!==e&&(e=window.location.href,this.checkAndClickSourcePanelButton(),setTimeout(()=>{O.modules.projectPanel.createProjectRightPanel(),O.modules.projectPanel.updateNotebookCount(),O.modules.artifactLibrary.createArtifactLibraryActions(),S.trackVideoOverviewClicks(),p.updateDisplay(),C.updateDisplay()},100))};this.checkAndClickSourcePanelButton(),window.addEventListener("popstate",o),this.overrideHistoryMethods(o),this.observeURLChanges(o)}checkAndClickSourcePanelButton(){let e=window.location.href.match(t.URLS.NOTEBOOK_PATTERN);if(e){let o=e[1];u.log(`On notebook page: ${o}`),setTimeout(()=>{let r=document.querySelector(t.SELECTORS.COLLAPSE_SOURCE_PANEL_BUTTON);r?(u.log("Clicking source panel button"),r.click()):u.log("Source panel button not found")},t.SOURCE_PANEL_DELAY)}}overrideHistoryMethods(e){let o=history.pushState,r=history.replaceState;history.pushState=function(...n){o.apply(this,n),setTimeout(e,100)},history.replaceState=function(...n){r.apply(this,n),setTimeout(e,100)}}observeURLChanges(e){new MutationObserver(e).observe(document.body,{childList:!0,subtree:!0})}}class L{init(){document.addEventListener("keydown",e=>{this.handleKeyDown(e)})}handleKeyDown(e){if(e.key==="/"&&!this.isInputFocused(e.target)){e.preventDefault();let o=document.querySelector(t.SELECTORS.NOTEBOOK_SEARCH_INPUT);o&&o.focus()}e.key==="Escape"&&this.handleEscapeKey(e),e.key==="f"&&document.querySelector(t.SELECTORS.MINDMAP_VIEWER)&&!this.isInputFocused(e.target)&&this.handleFullscreenToggle(e),e.key==="n"&&!this.isInputFocused(e.target)&&this.handleNewNotebook(e)}isInputFocused(e){return e.matches("input, textarea, [contenteditable]")}handleEscapeKey(e){e.target.matches(t.SELECTORS.NOTEBOOK_SEARCH_INPUT)?(e.target.value="",e.target.dispatchEvent(new Event("input",{bubbles:!0})),e.target.blur()):document.querySelector(t.SELECTORS.MINDMAP_VIEWER)&&!this.isInputFocused(e.target)?(e.preventDefault(),this.clickMindmapCloseButton()):document.querySelector(t.SELECTORS.COLLAPSE_SOURCE_PANEL_BUTTON)&&(e.preventDefault(),u.log("Escape pressed, checking source panel button"),O.modules.routeWatcher.checkAndClickSourcePanelButton())}handleFullscreenToggle(e){e.preventDefault();let o=document.querySelector('button[jslog="250220;track:generic_click,impression"]'),r=document.querySelector('button[jslog="250221;track:generic_click,impression"]');o?o.click():r&&r.click()}handleNewNotebook(e){e.preventDefault();let o=document.querySelector(t.SELECTORS.CREATE_NOTEBOOK_BUTTON);o&&o.click()}clickMindmapCloseButton(){let e=document.querySelector('button[jslog="250221;track:generic_click,impression"]');e||(e=document.querySelector('button[jslog="243458;track:generic_click,impression"]')),e&&e.click()}}class b{init(){this.setupContextMenuIntercept(),this.setupTampermonkeyMenu()}setupContextMenuIntercept(){u.log("Setting up context menu interception"),S.interceptContextMenu()}setupTampermonkeyMenu(){let e=null;document.addEventListener("contextmenu",o=>{e=o.target}),GM_registerMenuCommand("Open Notebook in New Tab",()=>{if(e){let o=e.closest(t.SELECTORS.PROJECT_BUTTON)?.querySelector(t.SELECTORS.PROJECT_BUTTON_BOX);if(o){let r=o.getAttribute("aria-labelledby")?.replace(/-title$/,"");r&&GM_openInTab(`https://notebooklm.google.com/notebook/${r}`)}}e=null})}}O.init()})();})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment