{"id":23868,"date":"2026-05-13T00:51:24","date_gmt":"2026-05-13T00:51:24","guid":{"rendered":"https:\/\/umang.pk\/2026\/05\/13\/%d9%be%d9%84%d8%a7%d8%b2%d9%85%d9%88-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%da%a9%d8%b1%d9%88%d9%85-%d8%a7%db%8c%da%a9%d8%b3%d9%b9\/"},"modified":"2026-05-13T00:51:34","modified_gmt":"2026-05-13T00:51:34","slug":"%d9%be%d9%84%d8%a7%d8%b2%d9%85%d9%88-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%da%a9%d8%b1%d9%88%d9%85-%d8%a7%db%8c%da%a9%d8%b3%d9%b9","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/05\/13\/%d9%be%d9%84%d8%a7%d8%b2%d9%85%d9%88-%da%a9%d8%a7-%d8%a7%d8%b3%d8%aa%d8%b9%d9%85%d8%a7%d9%84-%da%a9%d8%b1%d8%aa%db%92-%db%81%d9%88%d8%a6%db%92-%da%a9%d8%b1%d9%88%d9%85-%d8%a7%db%8c%da%a9%d8%b3%d9%b9\/","title":{"rendered":"\u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06cc\u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 [Full Handbook]"},"content":{"rendered":"\n<div id=\"\">\n<p>\u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06c1\u0644\u06a9\u06d2 \u0648\u0632\u0646 \u0648\u0627\u0644\u06d2 \u0679\u0648\u0644\u0632 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0646\u06af \u06a9\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u0648 \u0628\u06c1\u062a\u0631 \u0627\u0648\u0631 \u0630\u0627\u062a\u06cc \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0634\u0645\u0648\u0644 \u067e\u0627\u0633 \u0648\u0631\u0688\u0632 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u0627\u060c \u0635\u0641\u062d\u0627\u062a \u06a9\u0627 \u062a\u0631\u062c\u0645\u06c1 \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u0627\u0646 \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679\u0633 \u0645\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u06c1\u0631 \u0631\u0648\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u0627\u06a9\u06be\u0648\u06ba \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u0646\u06d2 Chrome \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u0634\u0627\u0626\u0639 \u06a9\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0628\u0644\u0688\u0646\u06af \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u067e \u06a9\u06d2 \u062e\u06cc\u0627\u0644 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0622\u067e \u06a9\u0648 \u062c\u062f\u06cc\u062f \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 TypeScript\u060c React \u0627\u0648\u0631 Plasmo \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0627\u06cc\u06a9 \u0634\u0627\u0626\u0639 \u0634\u062f\u06c1 Chrome \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0628\u062a\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u062c\u0648 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0633\u06cc\u0679 \u0627\u067e \u0627\u0648\u0631 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0628\u0648\u0627\u0626\u0644\u0631 \u067e\u0644\u06cc\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062a\u062d\u0631\u06cc\u0631\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u067e\u0631 \u062a\u0648\u062c\u06c1 \u0645\u0631\u06a9\u0648\u0632 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4<\/p>\n<p>\u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0648 \u0627\u0635\u0644 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 API \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627 \u062c\u0648 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0679\u06cc\u0628 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a\u060c \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0633 \u0628\u0646\u0627\u0646\u0627\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u0628\u06be\u06cc\u062c\u0646\u0627\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0648\u0631\u06a9\u0646\u06af \u06a9\u0648\u0688\u060c \u0622\u067e \u06a9\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06cc \u0633\u0627\u062e\u062a \u06a9\u0627 \u0627\u06cc\u06a9 \u0630\u06c1\u0646\u06cc \u0645\u0627\u0688\u0644\u060c \u0627\u0648\u0631 \u06c1\u0631 \u0648\u06c1 \u0686\u06cc\u0632 \u06c1\u0648\u06af\u06cc \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0622\u0626\u06cc\u0688\u06cc\u0627 \u06a9\u0648 Chrome \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u0634\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-what-is-plasmo\">\u067e\u0644\u0627\u0632\u0645\u0627 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/h2>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u067e\u0646 \u0633\u0648\u0631\u0633 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u06cc\u06ba \u062c\u06cc\u0633\u06d2 Create React App \u06cc\u0627 Next.js\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 <code>manifest.json<\/code> \u0641\u0627\u0626\u0644\u06cc\u06ba \u0644\u06a9\u06be\u06cc\u06ba\u060c \u0628\u0644\u0688 \u0679\u0648\u0644\u0632 \u06a9\u0648 \u062c\u0648\u0691\u06cc\u06ba\u060c \u0627\u0648\u0631 TypeScript \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0631\u062f \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u0644\u0627\u0632\u0645\u0648 \u0627\u0633 \u0633\u0628 \u06a9\u0627 \u062e\u06cc\u0627\u0644 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>TypeScript \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0648\u0631\u06a9\u0646\u06af \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0633\u06a9\u06cc\u0641\u0648\u0644\u0688 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0645\u0627\u0646\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u062a\u0634\u06a9\u06cc\u0644 \u0634\u062f\u06c1 \u0631\u062f \u0639\u0645\u0644\u06d4 \u06cc\u06c1 \u062a\u0645\u06c1\u0627\u0631\u0627 \u06c1\u06d2 <code>package.json<\/code> \u0627\u0648\u0631 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u06cc\u06ba <code>manifest.json<\/code> \u06a9\u0631\u0648\u0645 \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062e\u0648\u062f \u0627\u0633 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0632\u06cc\u062f \u0628\u0631\u0622\u06ba\u060c \u0627\u06af\u0631 \u0622\u067e \u0627\u067e\u0646\u06cc \u0633\u0648\u0631\u0633 \u0641\u0627\u0626\u0644\u0632 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0639\u0645\u06cc\u0631 \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u060c \u0627\u0648\u0631 \u0645\u06a9\u0645\u0644 \u0642\u0633\u0645 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u0628\u0634\u0645\u0648\u0644 Chrome \u06a9\u06cc \u0627\u067e\u0646\u06cc API \u0627\u0642\u0633\u0627\u0645\u060c \u0628\u0627\u06a9\u0633 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u062a\u0635\u0648\u0631 \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0686\u06be\u067e\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0627 \u0622\u067e \u0627\u0628 \u0628\u06be\u06cc \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u061f <code>chrome.tabs<\/code>\u060c <code>chrome.runtime<\/code>\u0622\u067e \u0628\u0627\u0642\u06cc Chrome API \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0628\u0648\u0631\u0646\u06af \u0633\u06c1\u0627\u0631\u0648\u06ba \u0633\u06d2 \u0686\u06be\u0679\u06a9\u0627\u0631\u0627 \u067e\u0627 \u0644\u06cc\u06ba \u062a\u0648 \u0622\u067e \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-what-you-will-build\">\u06a9\u06cc\u0627 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u0627 \u06c1\u06d2<\/h2>\n<p>\u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0645\u06cc\u06ba <strong>\u06af\u0631\u0648\u067e\u0631 \u06a9\u0648 \u062a\u06be\u067e\u062a\u06be\u067e\u0627\u0626\u06cc\u06ba\u06d4<\/strong> \u0634\u0631\u0648\u0639 \u0633\u06d2 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u06af\u0631\u0648\u067e \u06a9\u0631\u06a9\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0645\u0646\u0638\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-example-use-case\">\u0645\u062b\u0627\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0633<\/h3>\n<p>\u062a\u0635\u0648\u0631 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 20 \u0679\u06cc\u0628\u0632 \u06a9\u06be\u0644\u06d2 \u06c1\u06cc\u06ba: 5 GitHub \u0633\u06d2\u060c 4 YouTube \u0633\u06d2\u060c 3 Stack Overflow \u0633\u06d2\u060c \u0627\u0648\u0631 8 \u062f\u0648\u0633\u0631\u06cc \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679\u0633 \u0633\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u06a9\u0644\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06c1\u0631 \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u0646\u06af\u06cc\u0646 \u06af\u0631\u0648\u067e \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0627\u0646 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-what-you-will-learn\">\u06a9\u06cc\u0627 \u0633\u06cc\u06a9\u06be\u0646\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u062a\u06cc\u0646 \u0634\u0639\u0628\u0648\u06ba \u0645\u06cc\u06ba \u062a\u062c\u0631\u0628\u06c1 \u062d\u0627\u0635\u0644 \u06c1\u0648\u06af\u0627:<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 <strong>\u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u06cc\u06ba<\/strong>: \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0646 \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 (\u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679\u060c \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679\u060c \u067e\u0627\u067e \u0627\u067e)\u060c \u0627\u0648\u0631 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u06a9\u0648 \u0644\u0648\u0688 \u0627\u0648\u0631 \u0679\u06cc\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627 <strong>\u06a9\u0631\u0648\u0645 API<\/strong>: \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 <code>chrome.tabs<\/code> \u0628\u0631\u0627\u0624\u0632\u0631 \u0679\u06cc\u0628\u0632 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c <code>chrome.tabGroups<\/code> \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0633 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0628\u0646\u0627\u0626\u06cc\u06ba <code>chrome.runtime<\/code> \u0627\u06cc\u06a9 \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u06cc\u0633\u0631\u0627 <strong>\u062c\u062f\u06cc\u062f \u0648\u06cc\u0628 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0679\u0648\u0644\u0632<\/strong>: \u0679\u0627\u0626\u067e \u0633\u06cc\u0641 JavaScript \u06a9\u06d2 \u0644\u06cc\u06d2 TypeScript\u060c \u067e\u0627\u067e \u0627\u067e UI \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u062f \u0639\u0645\u0644\u060c \u0627\u0648\u0631 \u067e\u0644\u0627\u0632\u0645\u0648 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u062c\u0648 \u0627\u0646 \u0633\u0628 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0627\u0626\u0637<\/h2>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0646 \u0634\u0639\u0628\u0648\u06ba \u0645\u06cc\u06ba \u0645\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06af\u0631 \u0622\u067e \u0628\u0646\u06cc\u0627\u062f\u06cc JavaScript \u06cc\u0627 TypeScript \u0633\u06d2 \u0631\u0627\u0636\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 HTML \u0627\u0648\u0631 CSS \u06a9\u06cc \u0639\u0645\u0648\u0645\u06cc \u0633\u0645\u062c\u06be \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0633\u0628 \u0633\u06d2 \u0622\u0633\u0627\u0646 \u062a\u062c\u0631\u0628\u06c1 \u062d\u0627\u0635\u0644 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<p>React \u06a9\u0627 \u06a9\u0686\u06be \u0639\u0644\u0645 \u0645\u062f\u062f\u06af\u0627\u0631 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0636\u0631\u0648\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06c1\u0645 \u062c\u0648 \u067e\u0627\u067e \u0627\u067e \u062c\u0632\u0648 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u0648\u06c1 \u0627\u062a\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0628\u06be\u06cc \u0627\u0633 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u06a9\u06cc \u0637\u0631\u0641\u060c \u0622\u067e \u06a9\u0648 Node.js \u0648\u0631\u0698\u0646 18 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0627\u0648\u067e\u0631 (\u06cc\u06c1\u0627\u06ba \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba)\u060c \u06af\u0648\u06af\u0644 \u06a9\u0631\u0648\u0645\u060c \u0627\u06cc\u06a9 \u06a9\u0648\u0688 \u0627\u06cc\u0688\u06cc\u0679\u0631 (VS \u06a9\u0648\u0688 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1)\u060c \u0627\u0648\u0631 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc\u062c\u0631 pnpm \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-verify-your-setup\">\u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0633\u0628 \u06a9\u0686\u06be \u0627\u0646\u0633\u0679\u0627\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-bash\">node --version\n# Should output v18.0.0 or higher\n\nnpm --version\n# Should output 9.0.0 or higher\n<\/code><\/pre>\n<h3 id=\"heading-getting-help\">\u0645\u062f\u062f \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u062f\u0631\u067e\u06cc\u0634 \u06c1\u06d2\u060c \u062a\u0648 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0645\u06a9\u0645\u0644 \u06a9\u0648\u0688 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u060c \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u06ba\u060c \u06cc\u0627 \u06c1\u0645\u0627\u0631\u06d2 \u06a9\u0645\u06cc\u0648\u0646\u0679\u06cc \u0641\u0648\u0631\u0645\u0632 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0637\u0644\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-ready-to-begin\">\u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u061f<\/h3>\n<p>\u0627\u06af\u0644\u06d2 \u062d\u0635\u06d2 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0627\u067e\u0646\u0627 \u062a\u0631\u0642\u06cc\u0627\u062a\u06cc \u0645\u0627\u062d\u0648\u0644 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u0627\u067e\u0646\u0627 \u067e\u06c1\u0644\u0627 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba!<\/p>\n<h2 id=\"heading-project-setup\">\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a<\/h2>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0627\u06cc\u06a9 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0633\u06a9\u06cc\u0641\u0648\u0644\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u06d2 \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0641\u0627\u0626\u0644\u06cc\u06ba \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e Plasmo \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u062a\u0645\u0627\u0645 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0633\u0679\u0627\u0631\u0679\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u067e\u0646\u06cc \u0636\u0631\u0648\u0631\u06cc\u0627\u062a \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0627\u0633\u06d2 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u0628\u0646\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u06cc\u0627 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-step-1-install-pnpm-recommended\">\u0645\u0631\u062d\u0644\u06c1 1: pnpm \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba (\u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1)<\/h2>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u06cc \u0633\u0631\u06a9\u0627\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0633\u0641\u0627\u0631\u0634 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <strong>pnpm<\/strong> \u062a\u06cc\u0632 \u062a\u0646\u0635\u06cc\u0628 \u0627\u0648\u0631 \u0688\u0633\u06a9 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u06d2 \u0628\u06c1\u062a\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">pnpm --version\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0648\u0631\u0698\u0646 \u0646\u0645\u0628\u0631 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u0631\u062d\u0644\u06c1 2 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/\u067e\u0644\u0627\u0632\u0645\u0648-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644-\u06a9\u0631\u062a\u06d2-\u06c1\u0648\u0626\u06d2-\u06a9\u0631\u0648\u0645-\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646-\u06a9\u06cc\u0633\u06d2-\u062a\u06cc\u0627\u0631-\u06a9\u0631\u06cc\u06ba\u06d4.png\" alt=\"pnpm --version \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0679\u0631\u0645\u06cc\u0646\u0644 \u0622\u0624\u0679 \u067e\u0679 pnpm \u0648\u0631\u0698\u0646 \u0646\u0645\u0628\u0631 \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 &quot;\u06a9\u0645\u0627\u0646\u0688 \u0646\u06c1\u06cc\u06ba \u0645\u0644\u0627&#8221; \u06a9\u0627 \u067e\u06cc\u063a\u0627\u0645 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">npm install -g pnpm\n<\/code><\/pre>\n<h2 id=\"heading-step-2-create-your-extension-project\">\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u06cc\u06a9 \u062a\u0648\u0633\u06cc\u0639\u06cc \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h2>\n<p>\u0646\u06cc\u0627 \u067e\u0644\u0627\u0632\u0645\u0648 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">pnpm create plasmo tab-grouper\n<\/code><\/pre>\n<p>\u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-plaintext\">&#x1f7e3; Creating a new Plasmo extension\n&#x1f4c1; Project name: tab-grouper\n? Extension description: (Give your extension a nice description)\n? Author name: (Your Name)\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u067e\u0644\u0627\u0632\u0645\u0648 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0627\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0627\u0633\u06a9\u0627\u0641\u0648\u0644\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u062a\u0641\u0635\u06cc\u0644 \u0627\u0648\u0631 \u0645\u0635\u0646\u0641 \u06a9\u0627 \u0646\u0627\u0645 \u062f\u0631\u062c \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u062c\u0648 \u0686\u0627\u06c1\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1778633482_272_\u067e\u0644\u0627\u0632\u0645\u0648-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644-\u06a9\u0631\u062a\u06d2-\u06c1\u0648\u0626\u06d2-\u06a9\u0631\u0648\u0645-\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646-\u06a9\u06cc\u0633\u06d2-\u062a\u06cc\u0627\u0631-\u06a9\u0631\u06cc\u06ba\u06d4.png\" alt=\"\u0679\u0631\u0645\u06cc\u0646\u0644 \u0622\u0624\u0679 \u067e\u0679 \u062c\u0633 \u0645\u06cc\u06ba \u067e\u0644\u0627\u0632\u0645\u0648 \u0633\u06a9\u06cc\u0641\u0648\u0644\u0688\u0646\u06af \u0627\u06cc\u06a9 \u0646\u0626\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0631 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h3 id=\"heading-step-3-navigate-to-your-project\">\u0645\u0631\u062d\u0644\u06c1 3: \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-bash\">cd tab-grouper\n<\/code><\/pre>\n<h3 id=\"heading-step-4-explore-what-was-created\">\u0645\u0631\u062d\u0644\u06c1 4: \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u06cc\u0627 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/h3>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a\u06d4<\/p>\n<pre><code class=\"language-bash\">ls -la\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627:<\/p>\n<pre><code class=\"language-plaintext\">tab-grouper\/\n\u251c\u2500\u2500 .git\/                 # Git repository (already initialized!)\n\u251c\u2500\u2500 .github\/              # GitHub Actions workflows\n\u251c\u2500\u2500 assets\/\n\u2502   \u2514\u2500\u2500 icon.png          # Default Plasmo icon \n\u251c\u2500\u2500 node_modules\/         # Dependencies (already installed!)\n\u251c\u2500\u2500 package.json          # Project configuration\n\u251c\u2500\u2500 popup.tsx             # Default popup \n\u251c\u2500\u2500 .prettierrc.cjs       # Code formatting rules\n\u251c\u2500\u2500 .gitignore            # Git ignore rules\n\u251c\u2500\u2500 README.md             # Default readme\n\u2514\u2500\u2500 tsconfig.json         # TypeScript configuration\n<\/code><\/pre>\n<p>\u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u0648 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p><strong>asset\/icon.png<\/strong>: \u06cc\u06c1 \u06a9\u0631\u0648\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u0626\u06cc\u06a9\u0646 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>package.json<\/strong>: \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0622\u067e \u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>popup.tsx<\/strong>: \u06cc\u06c1 \u0648\u06c1 UI \u06c1\u06d2 \u062c\u0648 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>tsconfig.json<\/strong>: TypeScript \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2 \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u062f\u0631\u0633\u062a \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-step-5-test-the-default-extension\">\u0645\u0631\u062d\u0644\u06c1 5: \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0633\u0628 \u06a9\u0686\u06be \u0679\u06be\u06cc\u06a9 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <strong>\u067e\u06c1\u0644\u06d2<\/strong> \u0622\u067e \u0627\u0633\u06d2 \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06a9\u06d2 \u0627\u06cc\u0633\u0627 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">pnpm dev\n<\/code><\/pre>\n<p>\u0622\u067e \u0627\u0633 \u0637\u0631\u062d \u0622\u0624\u0679 \u067e\u0679 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">&#x1f7e3; Plasmo v0.90.5\n&#x1f534; The Browser Extension Framework\n&#x1f535; INFO   | Starting the extension development server...\n&#x1f535; INFO   | Building for target: chrome-mv3\n&#x1f535; INFO   | Loaded environment variables from: []\n&#x1f7e2; DONE   | Extension re-packaged in 1842ms! &#x1f680;\n\nView Extension:\n&#x1f4e6; build\/chrome-mv3-dev\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u06cc \u062a\u0648\u0633\u06cc\u0639 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u0633 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0648\u0646\u0688\u0648 \u06a9\u0648 \u06a9\u06be\u0644\u0627 \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u0641\u0627\u0626\u0644 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u0646\u06c1\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-6-load-the-extension-in-chrome\">\u0645\u0631\u062d\u0644\u06c1 6: \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u0628 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u0644\u0648\u0688 \u06a9\u0631\u06a9\u06d2 \u0627\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p>\u06af\u0648\u06af\u0644 \u06a9\u0631\u0648\u0645 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u062d\u0631\u06cc\u06a9 <code>chrome:\/\/extensions\/<\/code><\/p>\n<\/li>\n<li>\n<p>\u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba <strong>\u0688\u0648\u06cc\u0644\u067e\u0631 \u0645\u0648\u0688<\/strong> (\u0627\u0648\u067e\u0631 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u0679\u0648\u06af\u0644 \u06a9\u0631\u06cc\u06ba)<\/p>\n<\/li>\n<li>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>&quot;\u063a\u06cc\u0631 \u067e\u06cc\u06a9 \u0634\u062f\u06c1&#8221;<\/strong><\/p>\n<\/li>\n<li>\n<p>\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba <code>build\/chrome-mv3-dev<\/code> \u0641\u0648\u0644\u0688\u0631<\/p>\n<\/li>\n<li>\n<p>&quot;\u0641\u0648\u0644\u0688\u0631 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba&#8221; \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1778633482_565_\u067e\u0644\u0627\u0632\u0645\u0648-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644-\u06a9\u0631\u062a\u06d2-\u06c1\u0648\u0626\u06d2-\u06a9\u0631\u0648\u0645-\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646-\u06a9\u06cc\u0633\u06d2-\u062a\u06cc\u0627\u0631-\u06a9\u0631\u06cc\u06ba\u06d4.gif\" alt=\"\u0627\u06cc\u0646\u06cc\u0645\u06cc\u0679\u0688 GIF \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u067e\u06cc\u062c \u0688\u06cc\u0648\u0644\u067e\u0631 \u0645\u0648\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u0627\u0646 \u0632\u067e \u0634\u062f\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062a\u0648\u0633\u06cc\u0639 \u0627\u0628 \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<ol>\n<li>\n<p>\u06a9\u0631\u0648\u0645 \u0679\u0648\u0644 \u0628\u0627\u0631 \u0645\u06cc\u06ba \u067e\u0632\u0644 \u067e\u06cc\u0633 \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>&quot;\u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af&#8221; \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u067e\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0648\u0633\u06cc\u0639\u06cc \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u0627\u06cc\u06a9 \u0688\u06cc\u0641\u0627\u0644\u0679 \u067e\u0627\u067e \u0627\u067e \u06cc\u06c1 \u06a9\u06c1\u062a\u0627 \u06c1\u0648\u0627 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627 &quot;\u067e\u0644\u0627\u0633\u0645\u0648 \u0645\u06cc\u06ba \u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f!&#8221;<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1778633484_212_\u067e\u0644\u0627\u0632\u0645\u0648-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644-\u06a9\u0631\u062a\u06d2-\u06c1\u0648\u0626\u06d2-\u06a9\u0631\u0648\u0645-\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646-\u06a9\u06cc\u0633\u06d2-\u062a\u06cc\u0627\u0631-\u06a9\u0631\u06cc\u06ba\u06d4.png\" alt=\"\u0688\u06cc\u0641\u0627\u0644\u0679 \u067e\u0644\u0627\u0632\u0645\u0648 \u067e\u0627\u067e \u0627\u067e \u06a9\u0631\u0648\u0645 \u0679\u0648\u0644 \u0628\u0627\u0631 \u067e\u0627\u067e \u0627\u067e \u0645\u06cc\u06ba \u067e\u0644\u0627\u0632\u0645\u0648 \u067e\u06cc\u063a\u0627\u0645 \u0645\u06cc\u06ba \u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u062a\u0648\u0633\u06cc\u0639 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0627\u0628 \u0622\u067e \u0627\u0633\u06d2 \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-8-update-extension-information\">\u0645\u0631\u062d\u0644\u06c1 8: \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06a9\u06be\u0644\u0627 <code>package.json<\/code> \u0622\u067e \u06a9\u06d2 \u0627\u06cc\u0688\u06cc\u0679\u0631 \u0645\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0628\u0646\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0627\u0645\u060c \u0648\u0631\u0698\u0646\u060c \u062a\u0641\u0635\u06cc\u0644\u060c \u0627\u0646\u062d\u0635\u0627\u0631\u060c \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u067e\u0679\u06d4<\/p>\n<p>\u0627\u0648\u067e\u0631 \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0644\u0627\u0626\u0646 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-json\">{\n  \"name\": \"tab-grouper\",\n  \"displayName\": \"tab-grouper\",\n  \"version\": \"0.0.0\",\n  \"description\": \"A basic Plasmo extension.\",\n<\/code><\/pre>\n<p>\u0627\u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-json\">{\n  \"name\": \"tab-grouper\",\n  \"displayName\": \"Tab Grouper\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A simple Chrome extension - group tabs by domain\",\n<\/code><\/pre>\n<p>\u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-9-add-required-permissions-critical\">\u0645\u0631\u062d\u0644\u06c1 9: \u0645\u0637\u0644\u0648\u0628\u06c1 \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba (\u0627\u06c1\u0645!)<\/h3>\n<p><strong>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u0642\u062f\u0645 \u06c1\u06d2\u06d4<\/strong> \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u062c\u0627\u0632\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648\u060c \u062a\u0648\u0633\u06cc\u0639 \u062f\u0631\u062c \u0630\u06cc\u0644 \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<pre><code class=\"language-plaintext\">TypeError: Cannot read properties of undefined (reading 'query')\n<\/code><\/pre>\n<p>Chrome \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u06a9\u0648 \u06cc\u06c1 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 APIs \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0645\u06cc\u06ba <code>package.json<\/code>\u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>\"manifest\"<\/code> \u067e\u0627\u0631\u0679 \u0679\u0627\u0626\u0645 \u0646\u0648\u06a9\u0631\u06cc.<\/p>\n<p>\u06cc\u06c1 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-json\">\"manifest\": {\n  \"host_permissions\": [\n    \"https:\/\/*\/*\"\n  ]\n}\n<\/code><\/pre>\n<p>\u0633\u06d2 \u0628\u062f\u0644\u06cc\u06ba:<\/p>\n<pre><code class=\"language-json\">\"manifest\": {\n  \"permissions\": [\n    \"tabs\",\n    \"tabGroups\"\n  ]\n}\n<\/code><\/pre>\n<p>\u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>tabs<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2 \u062a\u0648 \u0622\u067e \u0679\u06cc\u0628 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba (\u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 <code>chrome.tabs.query()<\/code>)\u060c \u0627\u0648\u0631 <code>tabGroups<\/code> \u0622\u067e \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0633 \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba (\u0627\u06af\u0644\u0627 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2)\u06d4 <code>chrome.tabGroups.update()<\/code>)\u06d4<\/p>\n<h3 id=\"heading-finding-the-right-permissions-for-your-own-extensions\">\u0627\u067e\u0646\u06cc \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba:<\/h3>\n<p>\u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u067e\u0631\u0645\u06cc\u0634\u0646\u0632 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062a\u0645\u0627\u0645 \u062f\u0633\u062a\u06cc\u0627\u0628 \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u0627\u0648\u0631 \u06a9\u0646 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u063a\u06cc\u0631 \u0645\u0642\u0641\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 API \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u0627 \u0635\u0641\u062d\u06c1 \u0645\u0637\u0644\u0648\u0628\u06c1 \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u06be\u06cc \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c chrome.tabs API \u0635\u0641\u062d\u06c1 \u06c1\u06d2\u06d4 <code>\"tabs\"<\/code> \u0627\u062c\u0627\u0632\u062a<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u067e\u0644\u0627\u0632\u0645\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0634\u0627\u0645\u0644 \u06a9\u06cc \u062c\u0627\u0626\u06cc\u06ba \u0628\u0630\u0631\u06cc\u0639\u06c1: <code>package.json<\/code>.<\/p>\n<p>\u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631: <code>undefined<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 Chrome APIs \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u063a\u0644\u0637\u06cc\u0627\u06ba \u06c1\u0648 \u0631\u06c1\u06cc \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u063a\u0627\u0626\u0628 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-10-verify-hot-reload-works\">\u0645\u0631\u062d\u0644\u06c1 10: \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06c1\u0627\u0679 \u0631\u06cc \u0644\u0648\u0688 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u062c\u0628 \u0622\u067e \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u067e\u0644\u0627\u0632\u0645\u0648 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0639\u0644\u0648\u0645 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0627 \u0679\u0631\u0645\u06cc\u0646\u0644 \u06a9\u06c1\u0627\u06ba \u06c1\u06d2\u06d4 <code>pnpm dev<\/code> \u06cc\u06c1 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0628\u0686\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>package.json<\/code> \u0622\u067e \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u06a9\u0686\u06be \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<pre><code class=\"language-plaintext\">&#x1f504; Reloading extension...\n&#x2705; Ready in 0.8s\n<\/code><\/pre>\n<p>\u0622\u067e \u06a9\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0627\u0628 \u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4 \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u0679\u0627\u0633\u06a9 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0644\u0648\u0688\u060c \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0633\u0631\u0648\u0631 \u06c1\u0627\u0679 \u0631\u06cc \u0644\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0645\u0637\u0644\u0648\u0628\u06c1 \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062c\u0628 \u0622\u067e \u0627\u06af\u0644\u06d2 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0622\u06af\u06d2 \u0628\u0691\u06be\u06cc\u06ba \u062a\u0648 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u0646\u06d2 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0644\u0648\u0688 \u06c1\u0648\u0646\u06d2 \u062f\u06cc\u06ba\u06d4 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-section-summary\">\u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1<\/h3>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u06d2 pnpm \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u0646\u0626\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0633\u06a9\u0627\u0641\u0648\u0644\u0688 \u06a9\u06cc\u0627: <code>pnpm create plasmo<\/code>\u06c1\u0645 \u0646\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u06cc\u0627\u060c \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u0633\u0631\u0648\u0631 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u0627\u060c \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 Chrome \u0645\u06cc\u06ba \u0644\u0648\u0688 \u06a9\u06cc\u0627\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0645\u06cc\u0679\u0627 \u0688\u06cc\u0679\u0627 \u0627\u0648\u0631 \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627\u06d4<\/p>\n<p><strong>\u0627\u06af\u0644\u0627:<\/strong> \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-understanding-the-background-script\">\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627<\/h2>\n<p>\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u067e\u0679 \u062a\u0648\u0633\u06cc\u0639 \u06a9\u0627 \u0645\u0631\u06a9\u0632 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0645\u0633\u0644\u0633\u0644 \u067e\u0631\u062f\u06d2 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0646\u0637\u0642 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba\u060c \u06a9\u0648\u0688 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u06af\u0631\u0648\u067e \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-is-a-background-script\">\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/h3>\n<p>\u067e\u0627\u067e \u0627\u067e \u0628\u0646\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0648\u062c\u0648\u062f \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0686\u0644\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u0633\u0646 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u0646\u0627\u060c \u0628\u0646\u062f \u06a9\u0631\u0646\u0627\u060c \u06cc\u0627 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u0627\u060c \u0627\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0639\u0627\u0645\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u0628\u06be\u06cc\u062c \u06a9\u0631 \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u0688 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u067e\u0627\u067e \u0627\u067e \u0635\u0631\u0641 \u0627\u06cc\u06a9 UI \u06c1\u06d2 \u062c\u0648 \u067e\u0627\u067e \u0627\u067e \u0633\u06d2 \u0628\u0627\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-1-create-backgroundts\">\u0645\u0631\u062d\u0644\u06c1 1: background.ts \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u06cc \u0633\u06c1\u0627\u0631\u0648\u06ba \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u062a\u0627\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0646\u0627\u0645\u06cc \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba <code>background.ts<\/code> \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062c\u0691 \u067e\u0631 (\u0627\u06af\u0644\u06cc \u0633\u0637\u062d \u067e\u0631) <code>popup.tsx<\/code>):<\/p>\n<pre><code class=\"language-typescript\">export {}\n\n\/\/ Background script - runs in the background and handles tab grouping logic\n\nconsole.log(\"Tab Grouper background script loaded!\")\n\n\/\/ Listen for messages from the popup\nchrome.runtime.onMessage.addListener((message, sender, sendResponse) => {\n  if (message.type === \"GROUP_TABS\") {\n    groupTabsByDomain()\n    sendResponse({ success: true })\n  }\n  return true\n})\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>export {}<\/code> \u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u0648 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u0627\u067e \u0641\u0627\u0626\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u067e \u06a9\u0648 \u0639\u0627\u0644\u0645\u06cc \u0645\u062a\u063a\u06cc\u0631 \u0627\u0639\u0644\u0627\u0645\u06cc\u06c1 \u06a9\u06d2 \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u063a\u0644\u0637\u06cc\u0627\u06ba \u0645\u0644 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06c1 <code>console.log<\/code> \u0627\u0633 \u0633\u06d2 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 (\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 DevTools \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2)\u06d4 <code>chrome.runtime.onMessage<\/code> \u0627\u06cc\u06a9 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u067e\u0627\u067e \u0627\u067e \u0633\u06d2 \u06c1\u062f\u0627\u06cc\u0627\u062a \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>\"GROUP_TABS\"<\/code> \u062c\u0628 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c \u06af\u0631\u0648\u067e\u0646\u06af \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0645\u06cc\u06ba \u067e\u06cc\u063a\u0627\u0645 \u0631\u0633\u0627\u0646\u06cc \u06a9\u06d2 \u0627\u0633 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u0632\u06cc\u062f \u062c\u0627\u0646 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-2-implement-tab-grouping-logic\">\u0645\u0631\u062d\u0644\u06c1 2: \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u0628 \u067e\u06cc\u063a\u0627\u0645 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u0627\u06cc\u06a9 \u0628\u0646\u06cc\u0627\u062f\u06cc \u06af\u0631\u0648\u067e\u0646\u06af \u0641\u0646\u06a9\u0634\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">async function groupTabsByDomain() {\n  try {\n    \/\/ Step 1: Get all tabs in the current window\n    const tabs = await chrome.tabs.query({ currentWindow: true })\n\n    \/\/ Step 2: Create a Map to organize tabs by domain\n    const domainGroups = new Map<string chrome.tabs.tab=\"\">()\n\n    \/\/ Step 3: Loop through each tab and group by domain\n    tabs.forEach(tab => {\n      \/\/ Skip tabs without URLs\n      if (!tab.url) return\n\n      \/\/ Extract the domain from the URL\n      const domain = getDomainFromUrl(tab.url)\n\n      \/\/ Skip invalid domains (like chrome:\/\/ pages)\n      if (!domain) return\n\n      \/\/ Add tab to the appropriate domain group\n      if (!domainGroups.has(domain)) {\n        domainGroups.set(domain, [])\n      }\n      domainGroups.get(domain)!.push(tab)\n    })\n\n    \/\/ Step 4: Create tab groups for each domain (only if 2+ tabs)\n    for (const [domain, domainTabs] of domainGroups) {\n      \/\/ Skip domains with only 1 tab\n      if (domainTabs.length < 2) continue\n\n      \/\/ Get all tab IDs\n      const tabIds = domainTabs\n        .map(t => t.id!)\n        .filter(id => id !== undefined)\n\n      if (tabIds.length === 0) continue\n\n      \/\/ Create the tab group\n      const groupId = await chrome.tabs.group({ tabIds })\n\n      \/\/ Customize the group with a title and color\n      await chrome.tabGroups.update(groupId, {\n        title: domain,\n        color: getColorForDomain(domain) \/\/ Randomized Tab Group colors.\n      })\n    }\n\n    console.log(`Successfully grouped ${domainGroups.size} domains`)\n  } catch (error) {\n    console.error(\"Error grouping tabs:\", error)\n  }\n}\n<\/string><\/code><\/pre>\n<p>\u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0648\u0646\u0688\u0648 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0679\u06cc\u0628\u0632 \u0633\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u067e\u06be\u0631 \u0627\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062f\u06c1\u0631\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Map<\/code> \u0688\u0648\u0645\u06cc\u0646 \u0646\u0627\u0645 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u062a\u0645\u0627\u0645 \u0679\u06cc\u0628\u0632 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06cc \u0628\u0627\u0644\u0679\u06cc\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u06c1\u0645 \u0646\u0642\u0634\u06d2 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0639\u0627\u062f\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>chrome.tabs.group()<\/code> \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0679\u06cc\u0628 \u0648\u0627\u0644\u06d2 \u0688\u0648\u0645\u06cc\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0639\u0646\u0648\u0627\u0646\u0627\u062a \u0627\u0648\u0631 \u0631\u0646\u06af\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0622\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06af\u0631\u0648\u067e\u0633 \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0679\u06cc\u0628 \u0648\u0627\u0644\u06d2 \u0688\u0648\u0645\u06cc\u0646\u0632 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u06cc\u06a9 \u0679\u06cc\u0628 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06af\u0631\u0648\u067e \u06a9\u0631\u0646\u0627 \u06a9\u0648\u0626\u06cc \u0645\u0639\u0646\u06cc \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u062a\u0627\u06d4<\/p>\n<h3 id=\"heading-step-3-extract-domain-helper\">\u0645\u0631\u062d\u0644\u06c1 3: \u0688\u0648\u0645\u06cc\u0646 \u0645\u062f\u062f\u06af\u0627\u0631 \u06a9\u0648 \u0646\u06a9\u0627\u0644\u06cc\u06ba\u06d4<\/h3>\n<p>\u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0633\u06d2 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0646\u0627\u0645 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u062f\u062f\u06af\u0627\u0631 \u0641\u0646\u06a9\u0634\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">function getDomainFromUrl(url: string): string | null {\n  try {\n    const urlObj = new URL(url)\n\n    \/\/ Skip Chrome internal pages (chrome:\/\/, chrome-extension:\/\/)\n    if (urlObj.protocol === \"chrome:\" || urlObj.protocol === \"chrome-extension:\") {\n      return null\n    }\n\n    \/\/ Remove \"www.\" prefix and return the hostname\n    return urlObj.hostname.replace(\/^www.\/, \"\")\n  } catch {\n    \/\/ Return null if URL is invalid\n    return null\n  }\n}\n<\/code><\/pre>\n<p><code>new URL(url)<\/code>    \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0627\u0631\u0648\u06ba \u0645\u06cc\u06ba \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0631\u0648\u0679\u0648\u06a9\u0648\u0644 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631\u0648\u0645 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0635\u0641\u062d\u0627\u062a \u06a9\u0648 \u0641\u0644\u0679\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2: <code>chrome:\/\/extensions<\/code> \u0627\u0648\u0631 <code>chrome:\/\/settings<\/code>\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u06c1 <code>.replace(\/^www.\/, \"\")<\/code> \u06af\u0627\u0631\u0646\u0679\u06cc <code>www.github.com<\/code> \u0627\u0648\u0631 <code>github.com<\/code> \u0627\u0646\u06c1\u06cc\u06ba \u062f\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u06af\u0631\u0648\u067e\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0679\u0631\u0627\u0626\u06cc \u06a9\u06cc\u0686 \u0645\u06cc\u06ba \u0644\u067e\u06cc\u0679 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062e\u0631\u0627\u0628 URLs \u06a9\u0648 \u0622\u0633\u0627\u0646\u06cc \u0633\u06d2 \u0648\u0627\u067e\u0633 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>null<\/code> \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0635\u0644 \u0645\u06cc\u06ba: <code>https:\/\/www.github.com\/user\/repo<\/code> \u0628\u0646 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>github.com<\/code>\u060c <code>https:\/\/youtube.com\/watch?v=123<\/code> \u0628\u0646 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>youtube.com<\/code>\u0627\u0648\u0631 <code>chrome:\/\/extensions<\/code> \u0631\u067e\u0648\u0631\u0679 <code>null<\/code>.<\/p>\n<h3 id=\"heading-step-4-color-assignment-helper\">\u0645\u0631\u062d\u0644\u06c1 4: \u06a9\u0644\u0631 \u0627\u0633\u0627\u0626\u0646\u0645\u0646\u0679 \u0627\u0633\u0633\u0679\u0646\u0679<\/h3>\n<p>\u06c1\u0631 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u0631\u0646\u06af \u0645\u0642\u0631\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">function getColorForDomain(domain: string): chrome.tabGroups.ColorEnum {\n  \/\/ Available colors in Chrome\n  const colors: chrome.tabGroups.ColorEnum[] = [\n    \"blue\", \"red\", \"yellow\", \"green\", \"pink\", \"purple\", \"cyan\", \"orange\"\n  ]\n\n  \/\/ Create a simple hash from the domain name\n  let hash = 0\n  for (let i = 0; i < domain.length; i++) {\n    hash = domain.charCodeAt(i) + ((hash << 5) - hash)\n  }\n\n  \/\/ Return a color based on the hash\n  return colors[Math.abs(hash) % colors.length]\n}\n<\/code><\/pre>\n<p>\u06a9\u0631\u0648\u0645 \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0679\u06be \u0631\u0646\u06af\u0648\u06ba \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646 \u06a9\u0648 \u062a\u0635\u0627\u062f\u0641\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0641\u0648\u06cc\u0636 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 (\u062c\u0648 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u0646 \u06a9\u0648 \u06af\u0631\u0648\u067e \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba)\u060c \u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u0648 \u0639\u062f\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06c1\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0648\u0688\u06cc\u0648\u0644\u0648 \u0622\u067e\u0631\u06cc\u0679\u0631 \u06a9\u0648 \u06a9\u0644\u0631 \u0627\u0631\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u0642\u0644 \u0627\u0646\u0688\u06cc\u06a9\u0633 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0646\u062a\u06cc\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2\u06d4 <code>github.com<\/code> \u062c\u0628 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0633\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0631\u0646\u06af \u0645\u0644\u06d2 \u06af\u0627\u060c \u0645\u062e\u062a\u0644\u0641 \u0688\u0648\u0645\u06cc\u0646\u0632 \u06a9\u06d2 \u0645\u062e\u062a\u0644\u0641 \u0631\u0646\u06af \u0645\u0644\u0646\u06d2 \u06a9\u0627 \u0627\u0645\u06a9\u0627\u0646 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-complete-backgroundts-file\">background.ts \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645\u0644 <code>background.ts<\/code> \u06cc\u06c1 \u0627\u0633 \u0637\u0631\u062d \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<pre><code class=\"language-typescript\">export {}\n\nconsole.log(\"Tab Grouper background script loaded!\")\n\nchrome.runtime.onMessage.addListener((message, sender, sendResponse) => {\n  if (message.type === \"GROUP_TABS\") {\n    groupTabsByDomain()\n    sendResponse({ success: true })\n  }\n  return true\n})\n\nasync function groupTabsByDomain() {\n  try {\n    const tabs = await chrome.tabs.query({ currentWindow: true })\n    const domainGroups = new Map<string chrome.tabs.tab=\"\">()\n\n    tabs.forEach(tab => {\n      if (!tab.url) return\n      const domain = getDomainFromUrl(tab.url)\n      if (!domain) return\n\n      if (!domainGroups.has(domain)) {\n        domainGroups.set(domain, [])\n      }\n      domainGroups.get(domain)!.push(tab)\n    })\n\n    for (const [domain, domainTabs] of domainGroups) {\n      if (domainTabs.length < 2) continue\n\n      const tabIds = domainTabs\n        .map(t => t.id!)\n        .filter(id => id !== undefined)\n\n      if (tabIds.length === 0) continue\n\n      const groupId = await chrome.tabs.group({ tabIds })\n\n      await chrome.tabGroups.update(groupId, {\n        title: domain,\n        color: getColorForDomain(domain)\n      })\n    }\n\n    console.log(`Successfully grouped ${domainGroups.size} domains`)\n  } catch (error) {\n    console.error(\"Error grouping tabs:\", error)\n  }\n}\n\nfunction getDomainFromUrl(url: string): string | null {\n  try {\n    const urlObj = new URL(url)\n    if (urlObj.protocol === \"chrome:\" || urlObj.protocol === \"chrome-extension:\") {\n      return null\n    }\n    return urlObj.hostname.replace(\/^www.\/, \"\")\n  } catch {\n    return null\n  }\n}\n\nfunction getColorForDomain(domain: string): chrome.tabGroups.ColorEnum {\n  const colors: chrome.tabGroups.ColorEnum[] = [\n    \"blue\", \"red\", \"yellow\", \"green\", \"pink\", \"purple\", \"cyan\", \"orange\"\n  ]\n\n  let hash = 0\n  for (let i = 0; i < domain.length; i++) {\n    hash = domain.charCodeAt(i) + ((hash << 5) - hash)\n  }\n\n  return colors[Math.abs(hash) % colors.length]\n}\n<\/string><\/code><\/pre>\n<h3 id=\"heading-testing-the-background-script\">\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06cc \u0627\u0633\u06a9\u0631\u067e\u0679 \u0679\u06cc\u0633\u0679\u0646\u06af<\/h3>\n<p>\u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u067e\u0686\u06be\u0644\u06d2 \u062d\u0635\u06d2 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba \u0627\u06af\u0631 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">pnpm dev\n<\/code><\/pre>\n<p>\u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0644\u0648\u0688 \u06c1\u0648\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba: <code>chrome:\/\/extensions<\/code>\"\u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644\" \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba <strong>\"\u0633\u0631\u0648\u0633 \u0648\u0631\u06a9\u0631\"<\/strong> \u0644\u0646\u06a9<\/p>\n<p>\u062c\u0628 DevTools \u06a9\u0646\u0633\u0648\u0644 \u06a9\u06be\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 'Tab Grouper \u06a9\u06d2 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0644\u0648\u0688 \u06c1\u0648\u0627!' \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0633\u0628 \u06a9\u0686\u06be \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u0627\u067e \u0627\u067e \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06cc \u0633\u06cc \u0648\u0646\u0688\u0648 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u0648\u0642\u062a \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0635\u0627\u0631\u0641 \u06a9\u0631\u0648\u0645 \u0679\u0648\u0644 \u0628\u0627\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0638\u0627\u06c1\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9\u0634\u0646 \u0628\u0679\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0688\u0633\u067e\u0644\u06d2 \u0633\u06cc\u0679\u0646\u06af\u0632 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u0631\u06cc \u0627\u06cc\u06a9\u0679 \u067e\u0631 \u0645\u0628\u0646\u06cc \u067e\u0627\u067e \u0627\u067e \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u062c\u0648 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0679\u06cc\u0628 \u06a9\u06d2 \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0633\u06d2 \u06af\u0631\u0648\u067e\u0646\u06af \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0622\u067e \u0628\u06be\u0627\u06af\u062a\u06d2 \u06c1\u06cc\u06ba <code>pnpm create plasmo<\/code>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 <code>popup.tsx<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u062e\u0648\u0634 \u0622\u0626\u0646\u062f \u067e\u06cc\u063a\u0627\u0645 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u06c1\u0631<\/strong> \u0627\u0633 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u06a9\u0646\u06a9\u0627\u0644 \u06a9\u06d2 \u0645\u0646\u062f\u0631\u062c\u0627\u062a \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-tsx\">import { useState, useEffect } from \"react\"\n\nfunction IndexPopup() {\n  const [tabCount, setTabCount] = useState(0)\n  const [groupCount, setGroupCount] = useState(0)\n  const [isGrouping, setIsGrouping] = useState(false)\n\n  return (\n    <p>\n      <h2>Tab Grouper<\/h2>\n      <button>Group Tabs<\/button>\n    <\/p>\n  )\n}\n\nexport default IndexPopup\n<\/code><\/pre>\n<p>\u062c\u0628 \u0622\u067e \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u062a\u0648 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u062a\u06cc\u0646 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0645\u062a\u063a\u06cc\u0631 \u06a9\u06be\u0644\u06d2 \u06c1\u0648\u0626\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u0645\u0648\u062c\u0648\u062f\u06c1 \u06af\u0631\u0648\u067e\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f\u060c \u0627\u0648\u0631 \u0622\u06cc\u0627 \u06af\u0631\u0648\u067e\u0646\u06af \u0622\u067e\u0631\u06cc\u0634\u0646 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u062c\u0627\u0631\u06cc \u06c1\u06d2 \u06cc\u0627 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u062e\u0631\u06cc \u0622\u067e \u06a9\u0648 \u0628\u0679\u0646 \u06a9\u0648 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0644\u0648\u0688\u0646\u06af \u06a9\u06cc \u062d\u06cc\u062b\u06cc\u062a \u062f\u06a9\u06be\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0635\u0627\u0631\u0641 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0645\u062a\u0639\u062f\u062f \u06af\u0631\u0648\u067e\u0633 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u0646\u06c1 \u06a9\u0631 \u0633\u06a9\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-2-load-statistics\">\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u0628 \u06c1\u0645 \u067e\u0627\u067e \u0627\u067e \u06a9\u06be\u0644\u0646\u06d2 \u067e\u0631 \u0679\u06cc\u0628\u0632 \u0627\u0648\u0631 \u06af\u0631\u0648\u067e\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u0637\u0642 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06d2 \u0627\u0646\u062f\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba: <code>IndexPopup<\/code> \u062a\u0642\u0631\u06cc\u0628 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f\u060c \u0631\u06cc\u0627\u0633\u062a\u06cc \u0627\u0639\u0644\u0627\u0646:<\/p>\n<pre><code class=\"language-tsx\">\/\/ Load tab statistics when popup opens\nuseEffect(() => {\n  loadStats()\n}, [])\n\nasync function loadStats() {\n  const tabs = await chrome.tabs.query({ currentWindow: true })\n  const groups = await chrome.tabGroups.query({\n    windowId: chrome.windows.WINDOW_ID_CURRENT\n  })\n\n  setTabCount(tabs.length)\n  setGroupCount(groups.length)\n}\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>useEffect<\/code> \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0627\u0646\u062d\u0635\u0627\u0631 \u0635\u0641 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 <code>[]<\/code> \u062c\u0628 \u062c\u0632\u0648 \u06a9\u0648 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0646\u0635\u0628 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc \u062c\u0628 \u0628\u06be\u06cc \u067e\u0627\u067e \u0627\u067e \u06a9\u06be\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 <code>loadStats<\/code>\u0645\u0648\u062c\u0648\u062f\u06c1 \u0648\u0646\u0688\u0648 \u0645\u06cc\u06ba \u0679\u06cc\u0628\u0632 \u0627\u0648\u0631 \u06af\u0631\u0648\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0631\u0648\u0645 \u0633\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u067e\u06be\u0631 \u0634\u0645\u0627\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633\u0679\u06cc\u0679 \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-3-trigger-tab-grouping\">\u0645\u0631\u062d\u0644\u06c1 3: \u0679\u0631\u06af\u0631 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u06af\u0631\u0648\u067e \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0645\u06cc\u06ba \u067e\u06cc\u063a\u0627\u0645 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-tsx\">async function handleGroupTabs() {\n  setIsGrouping(true)\n\n  \/\/ Send message to background script\n  await chrome.runtime.sendMessage({ type: \"GROUP_TABS\" })\n\n  \/\/ Refresh statistics\n  await loadStats()\n  setIsGrouping(false)\n}\n<\/code><\/pre>\n<p><code>chrome.runtime.sendMessage<\/code>    \u0645\u06cc\u06ba \u067e\u06c1\u0646\u0686\u0627\u062a\u0627 \u06c1\u0648\u06ba\u06d4 <code>{ type: \"GROUP_TABS\" }<\/code> \u0633\u0627\u0645\u0639\u06cc\u0646 \u06a9\u0648 \u067e\u06cc\u063a\u0627\u0645 \u0628\u06be\u06cc\u062c\u0627 \u062c\u0648 \u06c1\u0645 \u0646\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06c1\u06d2\u06d4 <code>background.ts<\/code>.<\/p>\n<p>\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06af\u0631\u0648\u067e \u06a9\u06cc \u06af\u0646\u062a\u06cc \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u062c\u0627\u0626\u06d2\u060c \u067e\u06be\u0631 \u0628\u0679\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-4-build-the-ui\">\u0645\u0631\u062d\u0644\u06c1 4: UI \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p>\u067e\u0644\u06cc\u0633 \u06c1\u0648\u0644\u0688\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>return<\/code> \u0627\u06cc\u06a9 \u0628\u06cc\u0627\u0646 \u062c\u0633 \u06a9\u0627 \u0645\u06a9\u0645\u0644 \u0627\u0646\u062f\u0627\u0632 \u0648\u0627\u0644\u0627 \u0648\u0631\u0698\u0646 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-tsx\">return (\n  <div style=\"{{\" width:=\"\" padding:=\"\" fontfamily:=\"\" blinkmacsystemfont=\"\" ui=\"\" sans-serif=\"\">\n    {\/* Header *\/}\n    <div style=\"{{\" marginbottom:=\"\">\n      <h2 style=\"{{\" margin:=\"\" fontsize:=\"\" fontweight:=\"\">\n        &#x1f5c2; Tab Grouper\n      <\/h2>\n      <p style=\"{{\" margin:=\"\" fontsize:=\"\" color:=\"\">\n        Organize your tabs by domain\n      <\/p>\n    <\/div>\n\n    {\/* Statistics *\/}\n    \n\n    {\/* Group Button *\/}\n    <button onclick=\"{handleGroupTabs}\" disabled=\"{isGrouping}\" style=\"{{\" width:=\"\" padding:=\"\" fontsize:=\"\" fontweight:=\"\" color:=\"\" background:=\"\" isgrouping=\"\" :=\"\" border:=\"\" borderradius:=\"\" cursor:=\"\" transition:=\"\">\n      {isGrouping ? \"Grouping...\" : \"&#x1f5c2; Group Tabs by Domain\"}\n    <\/button>\n\n    {\/* Footer *\/}\n    <p>\n      &#x1f4a1; <strong>Tip:<\/strong> This will group all tabs in this window by their website domain.\n    <\/p>\n  <\/div>\n)\n<\/code><\/pre>\n<p>UI \u0686\u0627\u0631 \u062d\u0635\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2: \u0627\u06cc\u06a9 \u062a\u0648\u0633\u06cc\u0639 \u0634\u062f\u06c1 \u0639\u0646\u0648\u0627\u0646 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u062a\u0641\u0635\u06cc\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u06c1\u06cc\u0688\u0631\u060c \u0627\u06cc\u06a9 \u0634\u0645\u0627\u0631\u06cc\u0627\u062a\u06cc \u0628\u0627\u06a9\u0633 \u062c\u0648 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0679\u06cc\u0628 \u0627\u0648\u0631 \u06af\u0631\u0648\u067e \u06a9\u06cc \u06af\u0646\u062a\u06cc \u06a9\u0648 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0627\u06cc\u06a9\u0634\u0646 \u0628\u0679\u0646 (\u062c\u0648 \u0639\u0645\u0644 \u06a9\u06d2 \u062c\u0627\u0631\u06cc \u0631\u06c1\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06af\u0631\u06d2 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0645\u062a\u0646 \"\u06af\u0631\u0648\u067e...\" \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627)\u060c \u0627\u0648\u0631 \u0646\u06cc\u0686\u06d2 \u0627\u06cc\u06a9 \u0679\u067e \u0628\u0627\u06a9\u0633\u06d4<\/p>\n<p>\u06cc\u06c1 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u0633\u0627\u062f\u06af\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646 \u0644\u0627\u0626\u0646 \u0627\u0633\u0679\u0627\u0626\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u0645\u0645\u06a9\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 CSS \u0645\u0627\u0688\u06cc\u0648\u0644\u0632\u060c \u0679\u06cc\u0644 \u0648\u0646\u0688\u060c \u06cc\u0627 \u0627\u0633\u0679\u0627\u0626\u0644 \u06a9\u06d2 \u0627\u062c\u0632\u0627\u0621 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645\u0644 <code>popup.tsx<\/code> \u06cc\u06c1 \u0627\u0633 \u0637\u0631\u062d \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2:<\/p>\n<pre><code class=\"language-tsx\">import { useState, useEffect } from \"react\"\n\nfunction IndexPopup() {\n  const [tabCount, setTabCount] = useState(0)\n  const [groupCount, setGroupCount] = useState(0)\n  const [isGrouping, setIsGrouping] = useState(false)\n\n  useEffect(() => {\n    loadStats()\n  }, [])\n\n  async function loadStats() {\n    const tabs = await chrome.tabs.query({ currentWindow: true })\n    const groups = await chrome.tabGroups.query({\n      windowId: chrome.windows.WINDOW_ID_CURRENT\n    })\n\n    setTabCount(tabs.length)\n    setGroupCount(groups.length)\n  }\n\n  async function handleGroupTabs() {\n    setIsGrouping(true)\n    await chrome.runtime.sendMessage({ type: \"GROUP_TABS\" })\n    await loadStats()\n    setIsGrouping(false)\n  }\n\n  return (\n    <div style=\"{{\" width:=\"\" padding:=\"\" fontfamily:=\"\" blinkmacsystemfont=\"\" ui=\"\" sans-serif=\"\">\n      <div style=\"{{\" marginbottom:=\"\">\n        <h2 style=\"{{\" margin:=\"\" fontsize:=\"\" fontweight:=\"\">\n          &#x1f5c2; Tab Grouper\n        <\/h2>\n        <p style=\"{{\" margin:=\"\" fontsize:=\"\" color:=\"\">\n          Organize your tabs by domain\n        <\/p>\n      <\/div>\n\n      \n\n      <button onclick=\"{handleGroupTabs}\" disabled=\"{isGrouping}\" style=\"{{\" width:=\"\" padding:=\"\" fontsize:=\"\" fontweight:=\"\" color:=\"\" background:=\"\" isgrouping=\"\" :=\"\" border:=\"\" borderradius:=\"\" cursor:=\"\" transition:=\"\">\n        {isGrouping ? \"Grouping...\" : \"&#x1f5c2; Group Tabs by Domain\"}\n      <\/button>\n\n      <p>\n        &#x1f4a1; <strong>Tip:<\/strong> This will group all tabs in this window by their website domain.\n      <\/p>\n    <\/div>\n  )\n}\n\nexport default IndexPopup\n<\/code><\/pre>\n<h2 id=\"heading-testing-your-extension\">\u062a\u0648\u0633\u06cc\u0639 \u06a9\u06cc \u062c\u0627\u0646\u0686<\/h2>\n<p>\u0627\u0628 \u062c\u0628 \u06a9\u06c1 \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0627\u0648\u0631 \u067e\u0627\u067e \u0627\u067e UI \u062f\u0648\u0646\u0648\u06ba \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0648\u0642\u062a \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u0633\u0628 \u06a9\u0686\u06be \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-1-make-sure-the-dev-server-is-running\">\u0645\u0631\u062d\u0644\u06c1 1: \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0688\u06cc\u0648 \u0633\u0631\u0648\u0631 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u06af\u0631 <code>pnpm dev<\/code> \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u067e\u0686\u06be\u0644\u06d2 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0628\u06be\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">pnpm run dev # or pnpm dev\n<\/code><\/pre>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u0627\u067e\u0646\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0627\u0633 \u0637\u0631\u062d \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2: <code>build\/chrome-mv3-dev<\/code> \u0627\u0648\u0631 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-2-load-the-extension-in-chrome\">\u0645\u0631\u062d\u0644\u06c1 2: \u06a9\u0631\u0648\u0645 \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u0633 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba: <code>chrome:\/\/extensions\/<\/code>\u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba <strong>\u0688\u0648\u06cc\u0644\u067e\u0631 \u0645\u0648\u0688<\/strong>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\u067e\u06cc\u06a9 \u06a9\u06be\u0648\u0644 \u062f\u06cc\u0627 \u0633\u0627\u0645\u0627\u0646<\/strong>\u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba <code>build\/chrome-mv3-dev<\/code> \u0641\u0648\u0644\u0688\u0631<\/p>\n<p>\u0644\u0648\u0688 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u06a9\u0648 \"\u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0631 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644\"\u060c \u0648\u0631\u0698\u0646 \"1.0.0\"\u060c \u0627\u0648\u0631 \u0641\u0639\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0646\u0638\u0631 \u0622\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-3-pin-the-extension\">\u0645\u0631\u062d\u0644\u06c1 3: \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u067e\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06a9\u0631\u0648\u0645 \u0679\u0648\u0644 \u0628\u0627\u0631 \u0645\u06cc\u06ba \u067e\u0632\u0644 \u067e\u06cc\u0633 \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u060c '\u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644' \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u0646 \u0622\u0626\u06cc\u06a9\u0648\u0646 \u06a9\u0648 \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u0626\u06cc\u06a9\u0646 \u0627\u0628 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0679\u0648\u0644 \u0628\u0627\u0631 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-4-test-the-extension\">\u0645\u0631\u062d\u0644\u06c1 4: \u062a\u0648\u0633\u06cc\u0639\u06cc \u062c\u0627\u0646\u0686<\/h3>\n<h4 id=\"heading-test-1-open-multiple-tabs\">\u0679\u06cc\u0633\u0679 1: \u0645\u062a\u0639\u062f\u062f \u0679\u06cc\u0628\u0632 \u06a9\u06be\u0648\u0644\u0646\u0627<\/h4>\n<p>\u0645\u0648\u0627\u062f \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06af\u0631\u0648\u067e \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0639\u062f\u062f \u0688\u0648\u0645\u06cc\u0646\u0632 \u0645\u06cc\u06ba \u0645\u062a\u0639\u062f\u062f \u0679\u06cc\u0628\u0632 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4<\/p>\n<ol>\n<li>\n<p><code>https:\/\/github.com\/topics<\/code>\u060c <code>https:\/\/github.com\/trending<\/code>\u060c <code>https:\/\/github.com\/explore<\/code><\/p>\n<\/li>\n<li>\n<p><code>https:\/\/www.youtube.com\/<\/code>    \u0627\u0648\u0631 <code>https:\/\/www.youtube.com\/trending<\/code><\/p>\n<\/li>\n<li>\n<p><code>https:\/\/stackoverflow.com\/questions<\/code>    \u0627\u0648\u0631 <code>https:\/\/stackoverflow.com\/tags<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u06a9\u0645 \u0627\u0632 \u06a9\u0645 7 \u0679\u06cc\u0628\u0632 \u06a9\u06be\u0644\u06d2 \u0631\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-test-2-group-the-tabs\">\u0679\u06cc\u0633\u0679 2: \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af<\/h4>\n<p>\u0679\u06cc\u0628 \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc \u06a9\u0648 \u067e\u06be\u06cc\u0644\u0627\u0626\u06cc\u06ba \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u067e\u0627\u067e \u0627\u067e \u0646\u0638\u0631 \u0622\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u06be\u0644\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f (7 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1) \u0627\u0648\u0631 \u06af\u0631\u0648\u067e\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f (\u0634\u0627\u06cc\u062f 0) \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba <strong>\"\u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u06af\u0631\u0648\u067e \u06a9\u0631\u06cc\u06ba\"<\/strong> \u0646\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0631\u0646\u06af\u06cc\u0646 \u06af\u0631\u0648\u067e\u0633 \u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0645\u0646\u0638\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h4 id=\"heading-test-3-verify-groups\">\u0679\u06cc\u0633\u0679 3: \u06af\u0631\u0648\u067e \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642<\/h4>\n<p>\u062c\u0628 \u0622\u067e \u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 GitHub \u0679\u06cc\u0628\u0632 \u06a9\u0648 \"github.com\" \u062c\u06cc\u0633\u06d2 \u0644\u06cc\u0628\u0644 \u0627\u0648\u0631 \u0645\u0633\u062a\u0642\u0644 \u0631\u0646\u06af\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06af\u0631\u0648\u067e \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0627\u0648\u0631 YouTube \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0628\u06be\u06cc \u0627\u0633\u06cc \u0637\u0631\u062d \u06af\u0631\u0648\u067e \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u062f\u0648\u0628\u0627\u0631\u06c1 expand \u0622\u0626\u06cc\u06a9\u0648\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0628 \u0622\u067e \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u06af\u0631\u0648\u067e\u0633 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f 2 \u06c1\u06d2 \u0627\u0648\u0631 \u0679\u06cc\u0628\u0632 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0648\u06c1\u06cc \u0631\u06c1\u06d2 \u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-step-5-debug-the-extension\">\u0645\u0631\u062d\u0644\u06c1 5: \u062a\u0648\u0633\u06cc\u0639\u06cc \u0688\u06cc\u0628\u06af<\/h3>\n<p>\u0627\u06af\u0631 \u06cc\u06c1 \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0648\u060c Chrome \u06a9\u06d2 DevTools \u0622\u067e \u06a9\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u062f\u0648\u0633\u062a \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u067e\u0679\u0633 \u06a9\u0627 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1\u0627\u06ba \u062c\u0627\u0626\u06cc\u06ba: <code>chrome:\/\/extensions\/<\/code>\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06af\u0644\u0627 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\"\u0633\u0631\u0648\u0633 \u0648\u0631\u06a9\u0631\"<\/strong> \u0644\u0646\u06a9<\/p>\n<p>\u062c\u0628 DevTools \u06a9\u0646\u0633\u0648\u0644 \u06a9\u06be\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \"\u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u0644\u0648\u0688 \u0634\u062f\u06c1\" \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627\u06d4 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u0633\u0631\u062e \u0631\u0646\u06af \u0645\u06cc\u06ba \u067e\u0631\u0646\u0679 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u067e\u0627\u067e \u0627\u067e \u06a9\u0627 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u062f\u0627\u0626\u06cc\u06ba \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\"\u067e\u0627\u067e \u0627\u067e \u0645\u0639\u0627\u0626\u0646\u06c1\"<\/strong>. \u0627\u0633 \u0633\u06d2 DevTools \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u067e\u0627\u067e \u0627\u067e \u06a9\u06be\u0644 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0646\u0633\u0648\u0644 \u0679\u06cc\u0628 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/strong>\u062e\u0631\u0627\u0628\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0646\u0633\u0648\u0644 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u0648\u0645\u06cc\u0646 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0679\u06cc\u0628 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u0628\u06be\u06cc\u062c\u06d2 \u062c\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba (\u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0627\u067e \u0627\u067e \u06a9\u0646\u0633\u0648\u0644 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u0679\u06cc\u0628 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2)\u06d4 <code>sendMessage<\/code> \u0646\u0627\u06a9\u0627\u0645\u06cc)\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u06af\u0631\u0648\u067e \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/strong>\u062f\u0648 \u0628\u0627\u0631 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2: <code>tabs<\/code> \u0627\u0648\u0631 <code>tabGroups<\/code> \u0627\u062a\u06be\u0627\u0631\u0679\u06cc <code>package.json<\/code> \u0645\u06cc\u06ba \u0646\u06d2 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u06cc\u0627 \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06a9\u06cc\u0627\u06d4<\/p>\n<p><strong>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u067e\u06cc\u063a\u0627\u0645 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 'Extension chrome:\/\/...' \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06cc\u06d4<\/strong>\u06cc\u06c1 \u0645\u062a\u0648\u0642\u0639 \u0631\u0648\u06cc\u06c1 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0631\u0648\u0645 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0635\u0641\u062d\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0639\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06cc\u06d4 \u06a9\u0648\u0688 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0686\u06be\u0648\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-6-hot-reloading\">\u0645\u0631\u062d\u0644\u06c1 6: \u06af\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688\u0646\u06af<\/h3>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u06d2 \u0641\u0648\u0627\u0626\u062f \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06af\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688\u0646\u06af \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u06be\u0644\u0627 <code>popup.tsx<\/code>\u06c1\u06cc\u0688\u0631 \u0627\u06cc\u0645\u0648\u062c\u06cc \u06a9\u0648  \u0633\u06d2  \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p>\u0627\u067e \u0688\u06cc\u0679 \u0634\u062f\u06c1 \u0627\u06cc\u0645\u0648\u062c\u06cc \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0626\u06cc\u06a9\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u06af\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06a9\u0631\u0646\u0627 \u0641\u0627\u0626\u062f\u06c1 \u0645\u0646\u062f \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06d2 \u06a9\u0631 \u062a\u0631\u0642\u06cc \u06a9\u0648 \u062a\u06cc\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u06a9\u06cc \u0628\u0627\u0642\u06cc \u0645\u062b\u0627\u0644\u0648\u06ba \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u0645 \u0622\u06c1\u0646\u06af \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u0627\u06cc\u0645\u0648\u062c\u06cc \u06a9\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-7-test-edge-cases\">\u0645\u0631\u062d\u0644\u06c1 7: \u0679\u06cc\u0633\u0679 \u0627\u06cc\u062c \u06a9\u06cc\u0633\u0632<\/h3>\n<p>\u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0646\u062f \u0645\u0646\u0638\u0631\u0646\u0627\u0645\u0648\u06ba \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0627\u0646 \u06a9\u0648 \u0627\u062d\u0633\u0646 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0679\u06cc\u0628 \u06a9\u06d2 \u0633\u0648\u0627 \u062a\u0645\u0627\u0645 \u0628\u0646\u062f \u06a9\u0631 \u062f\u0648\u06ba \u0627\u0648\u0631 \"\u06af\u0631\u0648\u067e \u0679\u06cc\u0628\u0632\" \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631 \u062f\u0648\u06ba \u062a\u0648 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u06af\u0631\u0648\u067e \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u0648\u0645\u06cc\u0646 \u0633\u06d2 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u062f\u0648 \u0679\u06cc\u0628\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0641\u062a\u062a\u0627\u062d\u06cc <code>chrome:\/\/extensions<\/code> \u0627\u0648\u0631 <code>chrome:\/\/settings<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u0635\u0641\u062d\u06c1 \u06a9\u0648 \u067e\u06be\u0631 \u0641\u0644\u0679\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc \u06a9\u0648 \u0628\u06be\u06cc \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0627\u06cc\u06a9 \u0679\u06cc\u0628 \u06c1\u06d2\u06d4 <code>reddit.com<\/code> \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 <code>freecodecamp.org<\/code>\u06c1\u0631 \u0688\u0648\u0645\u06cc\u0646 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u06af\u0631\u0648\u067e \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-8-production-build\">\u0645\u0631\u062d\u0644\u06c1 8: \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631<\/h3>\n<p>\u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba \u062a\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<pre><code class=\"language-bash\">pnpm run build\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0632\u0648\u06ba \u0648\u0631\u0698\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>build\/chrome-mv3-prod<\/code>Minified JavaScript\u060c \u06a9\u0648\u0626\u06cc \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0635\u0631\u0641 \u06a9\u0648\u0688\u060c \u0627\u0648\u0631 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0686\u06be\u0648\u0679\u06d2 \u0633\u0627\u0626\u0632\u06d4<\/p>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06cc\u06c1\u0627\u06ba \u062c\u0627\u0626\u06cc\u06ba: <code>chrome:\/\/extensions\/<\/code>\u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0648\u0631\u0698\u0646 \u06a9\u0648 \u0627\u0646 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u060c \"\u0644\u0648\u0688 \u0627\u0646 \u0632\u067e\" \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 <code>build\/chrome-mv3-prod<\/code>. \u0634\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u062c\u0627\u0646\u0686 \u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627 \u06c1\u06d2 (100KB \u0633\u06d2 \u06a9\u0645)\u060c \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u06a9\u0633\u06cc \u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0628\u06cc\u06a9\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u067e\u0631\u0648\u0633\u06cc\u0633 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-next-steps-and-extension-ideas\">\u0627\u06af\u0644\u06d2 \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0627\u0648\u0631 \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06d2 \u062e\u06cc\u0627\u0644\u0627\u062a<\/h2>\n<p>\u0622\u067e \u06a9\u06cc \u067e\u06c1\u0644\u06cc \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0628\u0646\u0627\u0646\u06d2 \u067e\u0631 \u0645\u0628\u0627\u0631\u06a9\u0628\u0627\u062f!<\/p>\n<p>\u0627\u0628 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u062c\u062f\u06cc\u062f \u0679\u0648\u0644\u0632 \u062c\u06cc\u0633\u06d2 TypeScript\u060c React \u0627\u0648\u0631 Plasmo \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0627\u06cc\u06a9 \u0648\u0631\u06a9\u0646\u06af \u0679\u0648\u0644 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0644\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u06af\u0631\u0648\u067e \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u067e\u0646 \u0679\u06cc\u0628\u0632 \u0627\u0648\u0631 \u06af\u0631\u0648\u067e\u0633 \u067e\u0631 \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0627\u0639\u062f\u0627\u062f\u0648\u0634\u0645\u0627\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0648\u0633\u06cc\u0639 \u0627\u06cc\u06a9 \u0645\u0636\u0628\u0648\u0637 \u0628\u0646\u06cc\u0627\u062f \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0622\u06af\u06d2 \u06a9\u06c1\u0627\u06ba \u0644\u06d2 \u062c\u0627\u0646\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1\u0627\u06ba \u06a9\u0686\u06be \u0622\u0626\u06cc\u0688\u06cc\u0627\u0632 \u06c1\u06cc\u06ba:<\/p>\n<h3 id=\"heading-1-auto-grouping\">1. \u062e\u0648\u062f\u06a9\u0627\u0631 \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc<\/h3>\n<p>\u0628\u0679\u0646 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0646\u06cc\u0627 \u0679\u06cc\u0628 \u06a9\u06be\u0644\u0646\u06d2 \u067e\u0631 \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06af\u0631\u0648\u067e \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062a\u0645 \u06c1\u0648 <code>chrome.tabs.onCreated<\/code> \u0648\u0627\u0642\u0639\u06c1 <code>background.ts<\/code> \u0627\u0648\u0631 \u0679\u0631\u06af\u0631 <code>groupTabsByDomain()<\/code> \u0635\u0641\u062d\u06c1 \u06a9\u0627 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0644\u0648\u0688 \u06c1\u0648\u0646\u06d2 \u0645\u06cc\u06ba \u062a\u06be\u0648\u0691\u06cc \u062a\u0627\u062e\u06cc\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ In background.ts\nchrome.tabs.onCreated.addListener(async (tab) => {\n  \/\/ Wait a bit for the URL to load\n  setTimeout(() => {\n    groupTabsByDomain()\n  }, 2000)\n})\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0648\u0627\u0642\u0639\u06c1 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba\u060c \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0679\u0627\u0626\u0645\u0646\u06af\u060c \u0627\u0648\u0631 \u0627\u0633 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u062d\u062a\u0627\u0637 \u0633\u0648\u0686 \u067e\u0631 \u0627\u062b\u0631 \u0627\u0646\u062f\u0627\u0632 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0628 \u0639\u0645\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u0627\u06af\u0644\u0627 \u0645\u0631\u062d\u0644\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0633 \u0637\u0631\u062d \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0639\u0627\u0644 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-2-keyboard-shortcuts\">2. \u06a9\u06cc \u0628\u0648\u0631\u0688 \u0634\u0627\u0631\u0679 \u06a9\u0679\u0633<\/h3>\n<p>\u06a9\u06cc \u0628\u0648\u0631\u0688 \u0634\u0627\u0631\u0679 \u06a9\u0679 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06a9\u06d2\u060c \u0622\u067e \u067e\u0627\u067e \u0627\u067e \u06a9\u06be\u0648\u0644\u06d2 \u0628\u063a\u06cc\u0631 \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0636\u0627\u0641\u06c1 <code>commands<\/code> \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679 \u0633\u06cc\u06a9\u0634\u0646 <code>package.json<\/code>:<\/p>\n<pre><code class=\"language-json\">\"manifest\": {\n  \"commands\": {\n    \"group-tabs\": {\n      \"suggested_key\": {\n        \"default\": \"Ctrl+Shift+G\",\n        \"mac\": \"Command+Shift+G\"\n      },\n      \"description\": \"Group tabs by domain\"\n    }\n  }\n}\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u062d\u06a9\u0645 \u0633\u0646\u06cc\u06ba\u06d4 <code>background.ts<\/code>:<\/p>\n<pre><code class=\"language-typescript\">chrome.commands.onCommand.addListener((command) => {\n  if (command === \"group-tabs\") {\n    groupTabsByDomain()\n  }\n})\n<\/code><\/pre>\n<h3 id=\"heading-3-category-based-grouping\">3. \u0632\u0645\u0631\u06c1 \u067e\u0631 \u0645\u0628\u0646\u06cc \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc<\/h3>\n<p>\u062e\u0627\u0645 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0632\u0645\u0631\u06c1 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u06af\u0631\u0648\u067e \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e GitHub\u060c Stack Overflow\u060c \u0627\u0648\u0631 npm \u06a9\u0648 \"Dev\" \u06af\u0631\u0648\u067e \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-typescript\">const categories = {\n  social: [\"facebook.com\", \"twitter.com\", \"instagram.com\"],\n  shopping: [\"amazon.com\", \"ebay.com\", \"etsy.com\"],\n  dev: [\"github.com\", \"stackoverflow.com\", \"npmjs.com\"]\n}\n\nfunction getCategoryForDomain(domain: string): string {\n  for (const [category, domains] of Object.entries(categories)) {\n    if (domains.includes(domain)) {\n      return category\n    }\n  }\n  return \"other\"\n}\n<\/code><\/pre>\n<h3 id=\"heading-4-options-page\">4. \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u06a9\u0627 \u0635\u0641\u062d\u06c1<\/h3>\n<p>\u067e\u0644\u0627\u0632\u0645\u0648 \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06d2 \u0635\u0641\u062d\u0627\u062a \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>options.tsx<\/code> \u0641\u0627\u0626\u0644<\/p>\n<p>\u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0635\u0627\u0631\u0641 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc \u06a9\u0648 \u0679\u0648\u06af\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0688\u0648\u0645\u06cc\u0646 \u0627\u0648\u0631 \u0632\u0645\u0631\u06c1 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u0627 \u0627\u067e\u0646\u06d2 \u0632\u0645\u0631\u06d2 \u06a9\u06cc \u0646\u0642\u0634\u06c1 \u0633\u0627\u0632\u06cc \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0631\u0648\u0645 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c API \u0627\u0648\u0631 \u0645\u0633\u062a\u0642\u0644 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u062a\u0631\u062c\u06cc\u062d\u0627\u062a \u06a9\u0627 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u062a\u0639\u0627\u0631\u0641\u06d4<\/p>\n<pre><code class=\"language-tsx\">function OptionsPage() {\n  return (\n    <p>\n      \n      <label>\n        <input type=\"checkbox\"\/>\n        Enable auto-grouping\n      <\/label>\n      <label>\n        <input type=\"checkbox\"\/>\n        Group by category instead of domain\n      <\/label>\n    <\/p>\n  )\n}\n<\/code><\/pre>\n<h3 id=\"heading-5-tab-age-tracking\">5\u06d4 \u0639\u0645\u0631 \u0633\u06d2 \u0628\u0627\u062e\u0628\u0631 \u0631\u06c1\u0646\u06d2 \u067e\u0631 \u0679\u06cc\u067e \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0622\u067e \u0679\u0631\u06cc\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0631 \u0679\u06cc\u0628 \u06a9\u0628 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 \u06a9\u0648\u0646 \u0633\u06d2 \u0633\u0637\u062d\u06cc \u0679\u06cc\u0628 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u0641\u062a\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0639\u0631\u0635\u06d2 \u0645\u06cc\u06ba \u0686\u06be\u0648\u0627 \u0646\u06c1\u06cc\u06ba \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u06cc\u06c1 \u0679\u06cc\u0628 \u062d\u0641\u0638\u0627\u0646 \u0635\u062d\u062a \u06a9\u06cc \u062d\u0648\u0635\u0644\u06c1 \u0627\u0641\u0632\u0627\u0626\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Track tab creation times\nconst tabCreationTimes = new Map<number number=\"\">()\n\nchrome.tabs.onCreated.addListener((tab) => {\n  if (tab.id) {\n    tabCreationTimes.set(tab.id, Date.now())\n  }\n})\n\n\/\/ Find old tabs (e.g., > 7 days)\nfunction getOldTabs(): chrome.tabs.Tab[] {\n  const sevenDaysAgo = Date.now() - (7 * 24 * 60 * 60 * 1000)\n  return tabs.filter(tab => {\n    const created = tabCreationTimes.get(tab.id!)\n    return created && created < sevenDaysAgo\n  })\n}\n<\/number><\/code><\/pre>\n<h3 id=\"heading-6-search-within-groups\">6. \u06af\u0631\u0648\u067e\u0648\u06ba \u0645\u06cc\u06ba \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u067e\u0627\u067e \u0627\u067e \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0631\u0686 \u0628\u0627\u06a9\u0633 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06a9\u06be\u0644\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0639\u0646\u0648\u0627\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0641\u0644\u0679\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u0679\u06cc\u0628 \u067e\u0631 \u062c\u0627\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-tsx\">const [searchQuery, setSearchQuery] = useState(\"\")\n\nconst filteredTabs = tabs.filter(tab =>\n  tab.title?.toLowerCase().includes(searchQuery.toLowerCase())\n)\n<\/code><\/pre>\n<h3 id=\"heading-7-exportimport-groups\">7. \u0628\u0631\u0622\u0645\u062f\/\u062f\u0631\u0622\u0645\u062f \u06af\u0631\u0648\u067e\u0633<\/h3>\n<p>\u0622\u067e \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e \u06a9\u0648 JSON \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0628\u062d\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u06d2 \u0633\u06cc\u0634\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0645\u062d\u0641\u0648\u0638 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-typescript\">\/\/ Export\nasync function exportGroups() {\n  const groups = await chrome.tabGroups.query({})\n  const data = JSON.stringify(groups)\n  const blob = new Blob([data], { type: 'application\/json' })\n  const url = URL.createObjectURL(blob)\n  chrome.downloads.download({ url, filename: 'tab-groups.json' })\n}\n\n\/\/ Import\nasync function importGroups(file: File) {\n  const text = await file.text()\n  const groups = JSON.parse(text)\n  \/\/ Restore groups...\n}\n<\/code><\/pre>\n<h3 id=\"heading-8-group-statistics-dashboard\">8. \u06af\u0631\u0648\u067e \u0634\u0645\u0627\u0631\u06cc\u0627\u062a \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688<\/h3>\n<p>\u062a\u0648\u0633\u06cc\u0639 \u0634\u062f\u06c1 \u067e\u0627\u067e \u0627\u067e \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u062a\u062c\u0632\u06cc\u0627\u062a\u060c \u0622\u062c \u06a9\u06be\u0644\u06d2 \u06c1\u0648\u0626\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u06cc \u06a9\u0644 \u062a\u0639\u062f\u0627\u062f\u060c \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062f\u06cc\u06a9\u06be\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0688\u0648\u0645\u06cc\u0646\u0632\u060c \u0627\u0648\u0631 \u0628\u06c1\u062a \u06a9\u0686\u06be \u062f\u06a9\u06be\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-tsx\">function Statistics() {\n  const [stats, setStats] = useState({\n    totalTabs: 0,\n    totalGroups: 0,\n    mostUsedDomain: \"\",\n    tabsToday: 0\n  })\n\n  return (\n    <div>\n      <h3>Browsing Statistics<\/h3>\n      <p>Total tabs opened today: {stats.tabsToday}<\/p>\n      <p>Most visited domain: {stats.mostUsedDomain}<\/p>\n    <\/div>\n  )\n}\n<\/code><\/pre>\n<h2 id=\"heading-learning-resources\">\u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0645\u0648\u0627\u062f<\/h2>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0645\u0632\u06cc\u062f \u06af\u06c1\u0631\u0627\u0626\u06cc \u0645\u06cc\u06ba \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648\u060c \u0622\u0641\u06cc\u0634\u0644 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0628\u06c1\u062a \u0627\u0686\u06be\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 APIs \u06a9\u0627 \u062a\u0641\u0635\u06cc\u0644 \u0633\u06d2 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>GitHub \u067e\u0631 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06cc \u062f\u0631\u062c\u0646\u0648\u06ba \u0645\u062b\u0627\u0644\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u067e\u0644\u0627\u0632\u0645\u0648 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u067e\u0644\u0627\u0632\u0645\u0648 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0627\u0648\u0631 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0630\u062e\u06cc\u0631\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0646\u0642\u0637\u06c1 \u0622\u063a\u0627\u0632 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06a9\u0645\u06cc\u0648\u0646\u0679\u06cc Plasmo Discord \u067e\u0631 \u0633\u0631\u06af\u0631\u0645 \u06c1\u06d2\u06d4<\/p>\n<p>React \u0627\u0648\u0631 TypeScript \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0628\u0637\u0648\u0631 \u062d\u0648\u0627\u0644\u06c1 \u0645\u0648\u0627\u062f \u0628\u06a9 \u0645\u0627\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 React TypeScript cheatsheet \u0645\u0641\u06cc\u062f \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u06a9\u0648 \u06a9\u0633\u06cc \u062e\u0627\u0635 \u0642\u0633\u0645 \u06a9\u06d2 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06cc\u0642\u06cc\u0646 \u0646\u06c1 \u06c1\u0648\u06d4<\/p>\n<p>\u06a9\u0645\u06cc\u0648\u0646\u0679\u06cc \u0633\u067e\u0648\u0631\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u0679\u06cc\u06a9 \u0627\u0648\u0648\u0631 \u0641\u0644\u0648 <code>chrome-extension<\/code> \u0679\u06cc\u06af\u0632 \u06a9\u06cc \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 Reddit \u06a9\u06cc r\/chrome_extensions \u0633\u0648\u0627\u0644\u0627\u062a \u067e\u0648\u0686\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u06cc \u062c\u06af\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-deploying-to-chrome-web-store\">\u06a9\u0631\u0648\u0645 \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u0628 \u062c\u0628 \u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u0627\u067e\u0646\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062a\u06cc\u0627\u0631 \u0627\u0648\u0631 \u062c\u0627\u0646\u0686 \u0644\u06cc \u06c1\u06d2\u060c \u0627\u0633\u06d2 \u0634\u0627\u0626\u0639 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1\u0627\u06ba \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-youll-need\">\u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2<\/h3>\n<p>\u0627\u0634\u0627\u0639\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0627\u0648\u0631 \u062a\u062c\u0631\u0628\u06c1 \u0634\u062f\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u060c \u0627\u06cc\u06a9 Google \u0627\u06a9\u0627\u0624\u0646\u0679\u060c US$5 \u06a9\u06cc \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u06cc \u0688\u0648\u06cc\u0644\u067e\u0631 \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u0641\u06cc\u0633\u060c \u0627\u0648\u0631 \u06a9\u0686\u06be \u0627\u0633\u0679\u0648\u0631 \u0627\u062b\u0627\u062b\u06d2 \u062c\u06cc\u0633\u06d2 \u0622\u0626\u06cc\u06a9\u0646\u0632\u060c \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633\u060c \u0627\u0648\u0631 \u062a\u062d\u0631\u06cc\u0631\u06cc \u062a\u0641\u0635\u06cc\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>$5 \u0641\u06cc\u0633 \u0627\u06cc\u06a9 \u0648\u0642\u062a\u06cc \u0686\u0627\u0631\u062c \u06c1\u06d2 (\u0633\u0627\u0644\u0627\u0646\u06c1 \u0686\u0627\u0631\u062c \u0646\u06c1\u06cc\u06ba) \u062c\u0633\u06d2 Google \u0688\u0648\u06cc\u0644\u067e\u0631 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u067e\u0627\u0645 \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0644\u0627\u0645\u062d\u062f\u0648\u062f \u062a\u0648\u0633\u06cc\u0639\u06cc \u06af\u0630\u0627\u0631\u0634\u0627\u062a \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba \u0627\u0648\u0631 Google Payments \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-1-create-a-production-build\">\u0645\u0631\u062d\u0644\u06c1 1: \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u0644\u0688 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">cd tab-grouper-tutorial\nnpm run build\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u06c1\u062a\u0631 \u0648\u0631\u0698\u0646 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>build\/chrome-mv3-prod\/<\/code>. \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0686\u06be\u0648\u0679\u06d2 \u0641\u0627\u0626\u0644 \u0633\u0627\u0626\u0632\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 JavaScript \u0627\u0648\u0631 CSS \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0635\u0631\u0641 \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u06a9\u0646\u0633\u0648\u0644 \u0644\u0627\u06af\u0632 \u06a9\u0648 \u06c1\u0679\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062a\u06cc\u0632 \u062a\u0631 \u0644\u0648\u0688\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062b\u0627\u062b\u0648\u06ba \u06a9\u0648 \u0628\u06c1\u062a\u0631 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 <code>build\/chrome-mv3-prod\/<\/code> \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0639\u0645\u0644 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0646\u06a9\u0627\u0644\u06cc \u06af\u0626\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0645\u0627\u0645 \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u067e\u06be\u0631 \u062c\u0627\u0646\u0686\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-2-create-store-assets\">\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u0633\u0679\u0648\u0631 \u06a9\u06d2 \u0627\u062b\u0627\u062b\u06d2 \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<h4 id=\"heading-extension-icons\">\u0622\u0626\u06cc\u06a9\u0646 \u06a9\u0648 \u067e\u06be\u06cc\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/h4>\n<p>\u0645\u062c\u06be\u06d2 \u062a\u06cc\u0646 \u0633\u0627\u0626\u0632 \u0645\u06cc\u06ba \u0634\u0628\u06cc\u06c1\u06cc\u06ba \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06cc\u06ba\u06d4 <strong>128\u00d7128 \u067e\u06a9\u0633\u0644\u0632<\/strong> \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u0633\u0679\u0648\u0631 \u0644\u0633\u0679\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 (\u0636\u0631\u0648\u0631\u06cc) <strong>48\u00d748<\/strong> \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u067e\u06cc\u062c \u06a9\u06d2 \u0644\u06cc\u06d2 <strong>16\u00d716<\/strong> \u0641\u06cc\u0648\u06cc\u06a9\u0648\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4<\/p>\n<p>\u062a\u0645\u0627\u0645 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0634\u0641\u0627\u0641 \u067e\u0633 \u0645\u0646\u0638\u0631 \u0648\u0627\u0644\u06cc PNG \u0641\u0627\u0626\u0644\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0648 \u0633\u0627\u062f\u06c1 \u0627\u0648\u0631 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0631\u06a9\u06be\u06cc\u06ba\u060c \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0686\u06be\u0648\u0679\u06d2 \u0633\u0627\u0626\u0632 \u0645\u06cc\u06ba \u0628\u06be\u06cc\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 16\u00d716 \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u0645\u062a\u0646 \u0646\u06c1 \u0688\u0627\u0644\u06cc\u06ba\u06d4<\/p>\n<p>\u0641\u06af\u0645\u0627 \u0645\u0641\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0686\u06be\u0627 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u06a9\u06cc\u0646\u0648\u0627 \u06cc\u0627 \u062c\u06cc\u0645\u067e\u06d4<\/p>\n<h4 id=\"heading-screenshots\">\u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679<\/h4>\n<p>1280\u00d7800 \u06cc\u0627 640\u00d7400 \u067e\u06a9\u0633\u0644\u0632 (PNG \u06cc\u0627 JPEG) \u06a9\u06d2 1 \u0633\u06d2 5 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u06a9\u0648 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0645\u0648\u06a9 \u0627\u067e\u0633\u06d4 \u0627\u0639\u062f\u0627\u062f \u0648 \u0634\u0645\u0627\u0631 \u06a9\u06d2 \u067e\u0627\u067e \u0627\u067e\u060c \u06af\u0631\u0648\u067e \u0634\u062f\u06c1 \u0679\u06cc\u0628\u0632\u060c \u0627\u0648\u0631 \u0631\u06cc\u0627\u0633\u062a\u0648\u06ba \u0633\u06d2 \u067e\u06c1\u0644\u06d2\/\u0628\u0639\u062f \u0645\u06cc\u06ba \u0633\u0628\u06be\u06cc \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06c1\u0645 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0646\u0645\u0627\u06cc\u0627\u06ba \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0634\u0631\u06cc\u062d\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u06a9\u06cc\u0627 \u062f\u06cc\u06a9\u06be \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h4 id=\"heading-promotional-images-optional\">\u067e\u0631\u0648\u0645\u0648\u0634\u0646\u0644 \u062a\u0635\u0648\u06cc\u0631 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h4>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u0646\u0645\u0627\u06cc\u0627\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u0686\u06be\u0648\u0679\u06cc \u0679\u0627\u0626\u0644\u06cc\u06ba (440\u00d7280)\u060c \u0628\u0691\u06cc \u0679\u0627\u0626\u0644\u06cc\u06ba (920\u00d7680)\u060c \u06cc\u0627 \u0645\u0627\u0631\u06a9\u06cc \u0627\u0645\u06cc\u062c\u0632 (1400\u00d7560) \u0628\u06be\u06cc \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2 \u062c\u0628 Google \u0622\u067e \u06a9\u06cc \u062a\u0648\u0633\u06cc\u0639 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06d2\u06d4<\/p>\n<h4 id=\"heading-demo-video-optional\">\u0688\u06cc\u0645\u0648 \u0648\u06cc\u0688\u06cc\u0648 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc)<\/h4>\n<p>\u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u06cc\u0648\u0679\u06cc\u0648\u0628 \u0648\u06cc\u0688\u06cc\u0648 (30-60 \u0633\u06cc\u06a9\u0646\u0688) \u062c\u0648 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u0648 \u0639\u0645\u0644\u06cc \u0634\u06a9\u0644 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u0622\u067e \u06a9\u06d2 \u062a\u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06cc \u0634\u0631\u062d \u06a9\u0648 \u0646\u0645\u0627\u06cc\u0627\u06ba \u0637\u0648\u0631 \u067e\u0631 \u0628\u0691\u06be\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06d2 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0633\u06d2 \u0644\u0646\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-3-write-your-store-listing\">\u0645\u0631\u062d\u0644\u06c1 3: \u0627\u067e\u0646\u06cc \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<p><strong>\u062a\u0648\u0633\u06cc\u0639 \u06a9\u0627 \u0646\u0627\u0645<\/strong> (45 \u062d\u0631\u0648\u0641 \u06a9\u06cc \u062d\u062f): \u0648\u0627\u0636\u062d \u0627\u0648\u0631 \u0648\u0636\u0627\u062d\u062a\u06cc \u0628\u0646\u06cc\u06ba\u06d4 \"\u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0646\u06af - \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0645\u0646\u0638\u0645 \u06a9\u0631\u06cc\u06ba\" \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0637\u0644\u0648\u0628\u06c1 \u0627\u0644\u0641\u0627\u0638 \u06a9\u0648 \u0628\u06be\u0631\u06cc\u06ba \u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0648\u0642\u0627\u0641 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u062e\u0644\u0627\u0635\u06c1<\/strong> (132 \u062d\u0631\u0648\u0641 \u06a9\u06cc \u062d\u062f): \u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0627 \u062a\u0639\u0627\u0631\u0641\u06d4 \"\u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u06a9\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0638\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06a9\u0644\u06a9 \u06af\u0631\u0648\u067e \u0628\u0646\u062f\u06cc \u0622\u067e \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u0648 \u0635\u0627\u0641 \u0627\u0648\u0631 \u0646\u062a\u06cc\u062c\u06c1 \u062e\u06cc\u0632 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4\"<\/p>\n<p><strong>\u062a\u0641\u0635\u06cc\u0644\u06cc \u0648\u0636\u0627\u062d\u062a<\/strong> (16,000 \u062d\u0631\u0648\u0641 \u06a9\u06cc \u062d\u062f): \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u060c \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1\u060c \u067e\u062a\u06c1 \u06a9\u06cc \u0631\u0627\u0632\u062f\u0627\u0631\u06cc\u060c \u0627\u0648\u0631 \u0631\u0627\u0628\u0637\u06d2 \u06a9\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u06a9\u0686\u06be \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679\u0633 \u06c1\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u0627\u06cc\u0688\u062c\u0633\u0679 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba:<\/p>\n<pre><code class=\"language-markdown\">## What is Tab Grouper?\n\nTab Grouper automatically organizes your browser tabs by grouping them based on their website domain. No more hunting through dozens of tabs - everything is neatly organized.\n\n## Features\n\n- &#x2705; One-click tab grouping\n- &#x2705; Automatic color-coding by domain\n- &#x2705; Real-time statistics\n- &#x2705; Works with all websites\n- &#x2705; Lightweight and fast\n\n## How to Use\n\n1. Click the Tab Grouper icon in your toolbar\n2. Click \"Group Tabs by Domain\"\n3. Your tabs are instantly organized\n\n## Why You Need This\n\nIf you regularly have numerous tabs open, finding the right one can waste valuable time. Tab Grouper solves this by automatically organizing tabs into colored groups, making navigation quick and straightforward.\n\n## Privacy\n\nThis extension does not collect any personal data. It only accesses tab information locally to perform grouping. No data is sent to external servers.\n\n## Support\n\nFound a bug or have a suggestion? Contact us at support@example.com\n<\/code><\/pre>\n<p><strong>\u0632\u0645\u0631\u06c1<\/strong>: \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u06cc\u062f\u0627\u0648\u0631\u06cc<\/strong> \u0679\u06cc\u067e \u06af\u0631\u0648\u067e\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0641\u06c1\u0631\u0633\u062a \u06a9\u0648 \u0644\u0648\u06a9\u0644\u0627\u0626\u0632 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u062f\u0648\u0633\u0631\u06cc \u0632\u0628\u0627\u0646\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-4-register-as-a-chrome-web-store-developer\">\u0645\u0631\u062d\u0644\u06c1 4: \u06a9\u0631\u0648\u0645 \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0631\u062c\u0633\u0679\u0631 \u06c1\u0648\u06ba\u06d4<\/h3>\n<p>\u06a9\u0631\u0648\u0645 \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u0688\u06cc\u0648\u0644\u067e\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u060c \u0627\u067e\u0646\u06d2 \u06af\u0648\u06af\u0644 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u0633\u0627\u0626\u0646 \u0627\u0646 \u06a9\u0631\u06cc\u06ba\u060c \u0688\u06cc\u0648\u0644\u067e\u0631 \u06a9\u0627 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0642\u0628\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 $5 \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u0641\u06cc\u0633 \u0627\u062f\u0627 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0627 \u0627\u06a9\u0627\u0624\u0646\u0679 \u0645\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u0679\u06cc\u0648\u06cc\u0679 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-step-5-submit-your-extension\">\u0645\u0631\u062d\u0644\u06c1 5: \u0627\u06cc\u06a9 \u062a\u0648\u0633\u06cc\u0639 \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<p>\u0688\u0648\u06cc\u0644\u067e\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0633\u06d2 <strong>\"\u0646\u06cc\u0627 \u0622\u0626\u0679\u0645\"<\/strong> \u0627\u067e\u0646\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u0633\u06d2 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc \u06a9\u0645\u067e\u0631\u06cc\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>build\/chrome-mv3-prod\/<\/code> \u0627\u06cc\u06a9 \u0641\u0648\u0644\u0688\u0631 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u06cc\u0627 \u067e\u0644\u0627\u0632\u0645\u0648 \u06a9\u06cc \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u0645\u0627\u0646\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\"># Option 1: Manual zip\ncd build\/chrome-mv3-prod\nzip -r ..\/..\/tab-grouper.zip .\n\n# Option 2: Use Plasmo package command\ncd tab-grouper-tutorial\nnpm run package\n<\/code><\/pre>\n<p>\u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0627\u0633\u0679\u0648\u0631 \u0644\u0633\u0679\u0646\u06af \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0686\u0627\u0631\u0648\u06ba \u062d\u0635\u06d2 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a<\/strong> (\u0646\u0627\u0645\u060c \u062e\u0644\u0627\u0635\u06c1\u060c \u062a\u0641\u0635\u06cc\u0644\u060c \u0632\u0645\u0631\u06c1\u060c \u0632\u0628\u0627\u0646) <strong>\u06af\u0631\u0627\u0641\u06a9 \u0627\u062b\u0627\u062b\u06d2<\/strong> ( \u0634\u0628\u06cc\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633) <strong>\u0631\u0627\u0632\u062f\u0627\u0631\u06cc \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2<\/strong> (\u0646\u06cc\u0686\u06d2 \u0645\u0644\u0627\u062d\u0638\u06c1 \u06a9\u0631\u06cc\u06ba) \u0627\u0648\u0631 <strong>\u062a\u0642\u0633\u06cc\u0645<\/strong> (\u0645\u0631\u0626\u06cc\u062a\u060c \u0645\u0642\u0627\u0645\u060c \u0642\u06cc\u0645\u062a)\u06d4<\/p>\n<h4 id=\"heading-single-purpose-description\">\u0648\u0627\u062d\u062f \u0645\u0642\u0635\u062f \u06a9\u0627 \u0628\u06cc\u0627\u0646<\/h4>\n<p>\u06a9\u0631\u0648\u0645 \u06a9\u0648 \u06c1\u0631 \u0627\u06cc\u06a9 \u062a\u0648\u0633\u06cc\u0639 \u06a9\u0627 \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f\u060c \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u0645\u0642\u0635\u062f \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba: \"\u06cc\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0628\u0631\u0627\u0624\u0632\u0631 \u0679\u06cc\u0628\u0632 \u06a9\u0648 \u0627\u0646 \u06a9\u06d2 \u0688\u0648\u0645\u06cc\u0646 \u0646\u0627\u0645\u0648\u06ba \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u06af\u0631\u0648\u067e \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0645\u062a\u0639\u062f\u062f \u06a9\u06be\u0644\u06d2 \u0679\u06cc\u0628\u0632 \u06a9\u0627 \u0645\u0624\u062b\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-permission-justification\">\u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f<\/h4>\n<p>\u0622\u067e \u06a9\u0648 \u06c1\u0631 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u0627\u062a\u06be\u0627\u0631\u0679\u06cc \u06a9\u0627 \u062c\u0648\u0627\u0632 \u067e\u06cc\u0634 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>tabs<\/code>: \"\u0679\u06cc\u0628 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0627\u0648\u0631 \u0639\u0646\u0648\u0627\u0646\u0627\u062a \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u0627\u0648\u0631 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u06af\u0631\u0648\u067e \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0628 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4\" \u06a9\u06d2 \u0644\u06cc\u06d2 <code>tabGroups<\/code>: \"\u06a9\u0633\u06cc \u062a\u0646\u0638\u06cc\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0633 \u0628\u0646\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0646 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u06cc\u0628 \u06af\u0631\u0648\u067e\u0633 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u06d4\"<\/p>\n<h4 id=\"heading-privacy-policy\">\u0631\u0627\u0632\u062f\u0627\u0631\u06cc \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc<\/h4>\n<p>\u0627\u06af\u0631\u0686\u06c1 Tab Grouper \u0630\u0627\u062a\u06cc \u0688\u06cc\u0679\u0627 \u0627\u06a9\u0679\u06be\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0631\u0648\u0645 \u06a9\u0648 \u0631\u0627\u0632\u062f\u0627\u0631\u06cc \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u067e\u0691 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc GitHub \u0635\u0641\u062d\u06c1 \u06cc\u0627 \u0630\u0627\u062a\u06cc \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679 \u067e\u0631 \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0633\u06d2 \u0644\u0646\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u0679\u06cc\u0645\u067e\u0644\u06cc\u0679 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-markdown\"># Privacy Policy for Tab Grouper\n\n## Data Collection\nTab Grouper does not collect, store, or transmit any personal data.\n\n## Permissions\n- **tabs**: Used only to read tab URLs for grouping purposes\n- **tabGroups**: Used only to create and manage tab groups\n\n## Local Processing\nAll tab grouping happens locally in your browser. No data is sent to external servers.\n\n## Contact\nFor questions: your-email@example.com\n\nLast updated: [Current Date]\n<\/code><\/pre>\n<h3 id=\"heading-step-6-submit-for-review\">\u0645\u0631\u062d\u0644\u06c1 6: \u062c\u0627\u0626\u0632\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<p>\u062c\u0645\u0639 \u06a9\u0631\u0627\u0626\u06cc\u06ba \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u0686\u06cc\u06a9 \u0644\u0633\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba:<\/p>\n<ul>\n<li>\n<p>\u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u06cc\u0627 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631<\/p>\n<\/li>\n<li>\n<p>\u062a\u0645\u0627\u0645 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062f\u06c1 \u0627\u0633\u0679\u0648\u0631 \u0627\u062b\u0627\u062b\u06d2 (\u0622\u0626\u06cc\u06a9\u0646 + \u0627\u06cc\u06a9 \u06cc\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633)<\/p>\n<\/li>\n<li>\n<p>\u0648\u0636\u0627\u062d\u062a\u06cc\u06ba \u0648\u0627\u0636\u062d \u0627\u0648\u0631 \u062f\u0631\u0633\u062a \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u062c\u0627\u0632\u062a \u062c\u0627\u0626\u0632 \u06c1\u06d2<\/p>\n<\/li>\n<li>\n<p>\u0631\u0627\u0632\u062f\u0627\u0631\u06cc \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0648\u0633\u06cc\u0639 \u06a9\u06d2 \u0646\u0627\u0645 \u0648\u0636\u0627\u062d\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u062c\u0628 \u0622\u067e \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba \u062a\u0648 \u0627\u06af\u0644\u0627 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\"\u062c\u0627\u0626\u0632\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0645\u0639 \u06a9\u0631\u0648\u0627\u0626\u06cc\u06ba\"<\/strong>\u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06af\u0644\u0627 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\"\u0634\u0627\u0626\u0639 \u06a9\u0631\u06cc\u06ba\"<\/strong>. \u062a\u0648\u0633\u06cc\u0639 \u06c1\u0645\u0627\u0631\u06cc \u0646\u0638\u0631\u062b\u0627\u0646\u06cc \u06a9\u06cc \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<h3 id=\"heading-step-7-the-review-process\">\u0645\u0631\u062d\u0644\u06c1 7: \u0639\u0645\u0644 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u06d4<\/h3>\n<p>\u0633\u0627\u062f\u06c1 \u06af\u0630\u0627\u0631\u0634\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 1-3 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u062f\u0646\u0648\u06ba \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0622\u067e \u06a9\u06cc \u062a\u0648\u0633\u06cc\u0639 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u06cc\u0627 \u0622\u067e \u06a9\u06cc \u067e\u06c1\u0644\u06cc \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u0641\u062a\u06c1 \u0644\u06af \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0628\u06cc\u0627\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u062c\u0627\u0632\u062a\u06cc\u06ba \u062c\u0627\u0626\u0632 \u06c1\u06cc\u06ba\u060c \u06a9\u0648\u0626\u06cc \u0645\u06cc\u0644\u0648\u06cc\u0626\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06cc\u06c1 \u06a9\u06c1 \u0641\u06c1\u0631\u0633\u062a Chrome \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0627\u067e\u0646\u06d2 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u0645\u06cc\u06ba \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u0627\u0626\u0632\u06c1 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u2192 \u062c\u0627\u0626\u0632\u06c1 \u0645\u06cc\u06ba \u2192 \u0645\u0646\u0638\u0648\u0631 \u06cc\u0627 \u0645\u0633\u062a\u0631\u062f\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06c1\u0645 \u0622\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u06a9\u06cc \u0645\u062e\u0635\u0648\u0635 \u0648\u062c\u0648\u06c1\u0627\u062a \u0627\u0648\u0631 \u06c1\u062f\u0627\u06cc\u0627\u062a \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p>\u0645\u0633\u062a\u0631\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0648\u062c\u0648\u06c1\u0627\u062a \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0641\u06cc \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc\u06ba\u060c \u06af\u0645\u0631\u0627\u06c1 \u06a9\u0646 \u0648\u0636\u0627\u062d\u062a\u06cc\u06ba\u060c \u0631\u0627\u0632\u062f\u0627\u0631\u06cc \u06a9\u06cc \u06af\u0645\u0634\u062f\u06c1 \u067e\u0627\u0644\u06cc\u0633\u06cc\u0627\u06ba\u060c \u0627\u0648\u0631 \u0636\u0631\u0648\u0631\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0645\u0633\u062a\u0631\u062f \u0627\u06cc \u0645\u06cc\u0644 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u067e\u0646\u06cc \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-8-after-approval\">\u0645\u0631\u062d\u0644\u06c1 8: \u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u06d2 \u0628\u0639\u062f<\/h3>\n<p>\u0645\u0646\u0638\u0648\u0631\u06cc \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062a\u0648\u0633\u06cc\u0639 \u06a9\u0648 \u0686\u0627\u0644\u0648 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>https:\/\/chrome.google.com\/webstore\/detail\/[extension-id]<\/code>. \u0633\u0648\u0634\u0644 \u0645\u06cc\u0688\u06cc\u0627 \u067e\u0631 \u0644\u0646\u06a9 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u06a9\u06d2\u060c \u0628\u0644\u0627\u06af \u067e\u0648\u0633\u0679 \u0644\u06a9\u06be \u06a9\u0631\u060c Reddit (r\/chrome\u060c r\/chrome_extensions) \u067e\u0631 \u067e\u0648\u0633\u0679 \u06a9\u0631\u06a9\u06d2\u060c \u06cc\u0627 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06c1\u0646\u0679 \u06a9\u0648 \u062c\u0645\u0639 \u06a9\u0631 \u06a9\u06d2 \u0688\u0631\u0627\u0626\u06cc\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0688\u0648\u06cc\u0644\u067e\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u062c\u0627\u0631\u06cc \u062a\u062c\u0632\u06cc\u0627\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u06a9\u0644 \u0627\u0648\u0631 \u06c1\u0641\u062a\u06c1 \u0648\u0627\u0631 \u0627\u0646\u0633\u0679\u0627\u0644\u0632\u060c \u062a\u062c\u0632\u06cc\u06d2 \u0627\u0648\u0631 \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc\u060c \u0646\u0642\u0648\u0634\u060c \u0627\u0648\u0631 \u0627\u0646 \u0627\u0646\u0633\u0679\u0627\u0644\u0632\u06d4 \u0628\u0627\u0642\u0627\u0639\u062f\u06af\u06cc \u0633\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u067e\u06c1\u0644\u06d2 \u06c1\u0641\u062a\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646. \u062c\u0627\u0626\u0632\u0648\u06ba \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062f\u06cc\u06ba (\u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0641\u06cc)\u060c \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0645\u062b\u0628\u062a \u062a\u0627\u062b\u0631\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646 \u06a9\u0627 \u0634\u06a9\u0631\u06cc\u06c1 \u0627\u062f\u0627 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u06cc \u062a\u0627\u0632\u06c1 \u06a9\u0627\u0631\u06cc\u0648\u06ba \u06a9\u0648 \u062a\u0631\u062c\u06cc\u062d \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0631\u067e\u0648\u0631\u0679 \u06a9\u0631\u062f\u06c1 \u06a9\u06cc\u0691\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-9-publishing-updates\">\u0645\u0631\u062d\u0644\u06c1 9: \u0627\u067e \u0688\u06cc\u0679\u0633 \u0634\u0627\u0626\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06a9\u06cc\u0691\u06d2 \u0679\u06be\u06cc\u06a9 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u06cc\u0627 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u0648\u0631\u0698\u0646 \u0646\u0645\u0628\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>package.json<\/code> (Semantic versioning \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u2014 \u0628\u06af \u0641\u06a9\u0633\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06cc\u0686\u060c \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0639\u0645\u0648\u0644\u06cc \u067e\u06cc\u0686\u060c \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u0648 \u062a\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0691\u06d2)\u060c \u0686\u0644\u0627\u0626\u06cc\u06ba <code>npm run build<\/code>\u0627\u067e\u0646\u06d2 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0688\u06cc\u0634 \u0628\u0648\u0631\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0626\u06d2 \u067e\u06cc\u06a9\u062c\u0632 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u067e\u06cc\u06a9\u062c<\/strong> \u0679\u06cc\u06af \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u0627 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 24 \u06af\u06be\u0646\u0679\u0648\u06ba \u06a9\u06d2 \u0627\u0646\u062f\u0631\u06d4<\/p>\n<h3 id=\"heading-step-10-managing-your-extension-long-term\">\u0645\u0631\u062d\u0644\u06c1 10: \u0637\u0648\u06cc\u0644 \u0645\u062f\u062a\u06cc \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06cc \u062f\u06cc\u06a9\u06be \u0628\u06be\u0627\u0644<\/h3>\n<p>Chrome \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u062a\u062c\u0632\u06cc\u0627\u062a \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u06af\u0631 \u0622\u067e \u0645\u0632\u06cc\u062f \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e Google Analytics \u06a9\u0648 \u0628\u06be\u06cc \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0635\u0627\u0631\u0641 \u06a9\u06d2 \u062a\u0639\u0627\u0648\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u062a\u0641\u0635\u06cc\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u06cc \u0645\u06cc\u0644 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u06cc\u0627 GitHub \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0627 \u0635\u0641\u062d\u06c1\u060c \u062f\u0648\u0646\u0648\u06ba \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0622\u067e \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0641\u0635\u06cc\u0644 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u062a\u0628\u062f\u06cc\u0644\u06cc \u0644\u0627\u06af \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u0627 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648 \u06a9\u06c1 \u06a9\u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0628 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a \u0627\u0648\u0631 \u062c\u0627\u0626\u0632\u0648\u06ba \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062f\u06cc\u0646\u0627 \u0627\u06cc\u06a9 \u0648\u0641\u0627\u062f\u0627\u0631 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u0628\u0646\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0637\u0648\u06cc\u0644 \u0633\u0641\u0631 \u0637\u06d2 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u062f\u0648\u0633\u0631\u0648\u06ba \u06a9\u0648 \u0622\u067e \u06a9\u06cc \u062a\u0648\u0633\u06cc\u0639 \u06a9\u06cc \u0633\u0641\u0627\u0631\u0634 \u06a9\u0631\u06d2 \u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-troubleshooting-common-publishing-issues\">\u0639\u0627\u0645 \u0627\u0634\u0627\u0639\u062a \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0627 \u0627\u0632\u0627\u0644\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p><strong>\u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \"\u067e\u06cc\u06a9\u06cc\u062c \u063a\u0644\u0637 \u06c1\u06d2\"\u06d4<\/strong>: \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0645\u0648\u0627\u062f \u06a9\u0645\u067e\u0631\u06cc\u0633\u0688 \u06c1\u06cc\u06ba\u06d4 <code>build\/chrome-mv3-prod\/<\/code> \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u060c \u0641\u0648\u0644\u0688\u0631 \u06c1\u06cc \u0646\u06c1\u06cc\u06ba\u06d4 <code>manifest.json<\/code> \u06cc\u06c1 \u062f\u0631\u0633\u062a JSON \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062a\u0631\u062f\u06cc\u062f: \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/strong>: '\u0627\u062c\u0627\u0632\u062a \u06a9\u0627 \u062c\u0648\u0627\u0632' \u0641\u06cc\u0644\u0688 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0646 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u06c1\u0631 \u0627\u062c\u0627\u0632\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0648\u0646 \u0633\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06cc\u06ba \u06af\u06cc\u06d4<\/p>\n<p><strong>\u0627\u0646\u06a9\u0627\u0631: \u0648\u0627\u062d\u062f \u0645\u0642\u0635\u062f \u0648\u0627\u0636\u062d \u0646\u06c1\u06cc\u06ba\u06d4<\/strong>: \u0627\u06cc\u06a9 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u0645\u0631\u06a9\u0632\u06cc \u0641\u0646\u06a9\u0634\u0646 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u0645\u0631\u06a9\u0648\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e\u0646\u06d2 \u0648\u0627\u062d\u062f \u0645\u0642\u0635\u062f \u0648\u0627\u0644\u06d2 \u0628\u06cc\u0627\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0644\u0627\u0646\u0686 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06d2 \u06a9\u0645 \u0627\u0646\u0633\u0679\u0627\u0644 \u0631\u06cc\u0679<\/strong>: \u06cc\u06c1 \u0627\u06a9\u062b\u0631 \u062e\u0631\u0627\u0628 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u06c1\u0644\u0627 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u0679 \u06c1\u06d2 \u062c\u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0635\u0627\u0631\u0641\u06cc\u0646 \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u062a\u0648\u0633\u06cc\u0639 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0645\u0633\u0626\u0644\u06c1 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0686\u0646\u062f \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u062c\u0627\u0626\u0632\u06d2 \u0644\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u0628\u06be\u06cc \u0646\u0626\u06d2 \u0622\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0691\u0627 \u0641\u0631\u0642 \u067e\u0691 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-alternative-distribution\">\u0645\u062a\u0628\u0627\u062f\u0644 \u062a\u0642\u0633\u06cc\u0645<\/h3>\n<p>\u06a9\u0631\u0648\u0645 \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0639\u0648\u0627\u0645\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0679\u0648\u0644 \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u0631\u062c\u0633\u0679\u0631\u0688 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/strong> \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 (\u0635\u0631\u0641 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0631\u0648\u0627\u0628\u0637 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc\u060c \u062a\u0644\u0627\u0634 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0646\u06c1\u06cc\u06ba) \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0622\u067e \u06a9\u0648 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 Google Workspace \u062a\u0646\u0638\u06cc\u0645 \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06d4 <strong>\u0646\u062c\u06cc<\/strong> \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06cc\u06ba\u06d4 \u0633\u06cc\u0644\u0641 \u06c1\u0648\u0633\u0679\u0646\u06af \u0627\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u0644\u0648\u0688\u0646\u06af \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0633\u06d2 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0645\u0648\u0688 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u0635\u0631\u0641 \u0628\u06c1\u062a \u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0645\u0644\u06cc \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-congratulations\">\u0645\u0628\u0627\u0631\u06a9 \u06c1\u0648!<\/h2>\n<p>\u062e\u0627\u0644\u06cc \u0641\u0648\u0644\u0688\u0631 \u0633\u06d2\u060c \u0645\u06cc\u06ba \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u0633\u06d2 \u0644\u0627\u0626\u06cc\u0648 \u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u067e\u0631 \u06af\u06cc\u0627\u06d4 \u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba\u060c \u0645\u06cc\u06ba \u0646\u06d2 \u0633\u06cc\u06a9\u06be\u0627 \u06a9\u06c1 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u06a9\u06cc \u0633\u0627\u062e\u062a \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u062a\u06cc \u06c1\u06d2\u060c \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0627\u0633\u06a9\u0631\u067e\u0679\u0633 \u0627\u0648\u0631 \u067e\u0627\u067e \u0627\u067e \u06a9\u0633 \u0637\u0631\u062d \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06a9\u0631\u0648\u0645 \u0679\u06cc\u0628 API \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u0628\u0644\u0634\u0646\u06af \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u0639\u0645\u0644 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 API \u06cc\u0627 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0622\u067e \u062c\u0648 \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0686\u06cc\u0632 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0648\u06c1 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u0630\u06c1\u0646\u06cc \u0645\u0627\u0688\u0644 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u06cc\u060c \u062c\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0622\u0626\u06cc\u0688\u06cc\u0627 \u067e\u0631 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc \u062c\u0633\u06d2 \u0622\u067e \u0622\u06af\u06d2 \u0628\u0646\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u062a\u06d2 \u0631\u06c1\u06cc\u06ba\u060c \u0633\u06cc\u06a9\u06be\u062a\u06d2 \u0631\u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062a\u0631\u0633\u06cc\u0644 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba!<\/p>\n<\/p><\/div>\n<p><script async src=\"https:\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"><\/script><script async src=\"\/\/www.instagram.com\/embed.js\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u06a9\u0631\u0648\u0645 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u06c1\u0644\u06a9\u06d2 \u0648\u0632\u0646 \u0648\u0627\u0644\u06d2 \u0679\u0648\u0644\u0632 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0646\u06af \u06a9\u06d2 \u062a\u062c\u0631\u0628\u06d2 \u06a9\u0648 \u0628\u06c1\u062a\u0631 \u0627\u0648\u0631 \u0630\u0627\u062a\u06cc \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0634\u0645\u0648\u0644 \u067e\u0627\u0633 \u0648\u0631\u0688\u0632 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u0627\u060c \u0635\u0641\u062d\u0627\u062a \u06a9\u0627 \u062a\u0631\u062c\u0645\u06c1 \u06a9\u0631\u0646\u0627\u060c \u0627\u0648\u0631 \u0627\u0646 \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679\u0633 \u0645\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u06c1\u0631 \u0631\u0648\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u0627\u06a9\u06be\u0648\u06ba \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u0646\u06d2 Chrome \u0648\u06cc\u0628 \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u0634\u0627\u0626\u0639 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":23869,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-23868","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/23868","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=23868"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/23868\/revisions"}],"predecessor-version":[{"id":23870,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/23868\/revisions\/23870"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/23869"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=23868"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=23868"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=23868"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}