diff --git a/.eslintcache b/.eslintcache index f79ca21..02d4341 100644 --- a/.eslintcache +++ b/.eslintcache @@ -1 +1 @@ -[{"/projects/vite-vue3-chrome-extension-v3/define.config.mjs":"1","/projects/vite-vue3-chrome-extension-v3/manifest.chrome.config.ts":"2","/projects/vite-vue3-chrome-extension-v3/manifest.config.ts":"3","/projects/vite-vue3-chrome-extension-v3/manifest.firefox.config.ts":"4","/projects/vite-vue3-chrome-extension-v3/postcss.config.cjs":"5","/projects/vite-vue3-chrome-extension-v3/scripts/getInstalledBrowsers.ts":"6","/projects/vite-vue3-chrome-extension-v3/scripts/launch.ts":"7","/projects/vite-vue3-chrome-extension-v3/src/background/index.ts":"8","/projects/vite-vue3-chrome-extension-v3/src/components/AppFooter.vue":"9","/projects/vite-vue3-chrome-extension-v3/src/components/AppHeader.vue":"10","/projects/vite-vue3-chrome-extension-v3/src/components/LocaleSwitch.vue":"11","/projects/vite-vue3-chrome-extension-v3/src/components/RouterLinkUp.vue":"12","/projects/vite-vue3-chrome-extension-v3/src/components/TestComponent.vue":"13","/projects/vite-vue3-chrome-extension-v3/src/components/ThemeSwitch.vue":"14","/projects/vite-vue3-chrome-extension-v3/src/components/state/DisplayError.vue":"15","/projects/vite-vue3-chrome-extension-v3/src/components/state/LoadingSpinner.vue":"16","/projects/vite-vue3-chrome-extension-v3/src/components/state/tailwind-empty-state.vue":"17","/projects/vite-vue3-chrome-extension-v3/src/composables/useBrowserStorage.ts":"18","/projects/vite-vue3-chrome-extension-v3/src/composables/useLocale.ts":"19","/projects/vite-vue3-chrome-extension-v3/src/composables/useTheme.ts":"20","/projects/vite-vue3-chrome-extension-v3/src/content-script/index.ts":"21","/projects/vite-vue3-chrome-extension-v3/src/devtools/index.ts":"22","/projects/vite-vue3-chrome-extension-v3/src/offscreen/index.ts":"23","/projects/vite-vue3-chrome-extension-v3/src/stores/options.store.ts":"24","/projects/vite-vue3-chrome-extension-v3/src/stores/test.store.ts":"25","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/app.vue":"26","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/index.ts":"27","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/index.vue":"28","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/playground.vue":"29","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/404.vue":"30","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/about.vue":"31","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/change-log.vue":"32","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/features.vue":"33","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/help.vue":"34","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/privacy-policy.vue":"35","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/terms-of-service.vue":"36","/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/app.vue":"37","/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/index.ts":"38","/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/pages/index.vue":"39","/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/tailwind.config.cjs":"40","/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/app.vue":"41","/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/index.ts":"42","/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/pages/index.vue":"43","/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/app.vue":"44","/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/index.ts":"45","/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/pages/index.vue":"46","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/app.vue":"47","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/index.ts":"48","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/install.vue":"49","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/update.vue":"50","/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/app.vue":"51","/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/index.ts":"52","/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/pages/index.vue":"53","/projects/vite-vue3-chrome-extension-v3/src/utils/i18n.ts":"54","/projects/vite-vue3-chrome-extension-v3/src/utils/notifications.ts":"55","/projects/vite-vue3-chrome-extension-v3/src/utils/pinia.ts":"56","/projects/vite-vue3-chrome-extension-v3/src/utils/router/index.ts":"57","/projects/vite-vue3-chrome-extension-v3/tailwind.config.cjs":"58","/projects/vite-vue3-chrome-extension-v3/vite.chrome.config.ts":"59","/projects/vite-vue3-chrome-extension-v3/vite.config.ts":"60","/projects/vite-vue3-chrome-extension-v3/vite.firefox.config.ts":"61"},{"size":1112,"mtime":1728034043273,"results":"62","hashOfConfig":"63"},{"size":263,"mtime":1735237362006,"results":"64","hashOfConfig":"65"},{"size":1582,"mtime":1735137822651,"results":"66","hashOfConfig":"65"},{"size":624,"mtime":1735137864757,"results":"67","hashOfConfig":"65"},{"size":82,"mtime":1726155148248,"results":"68","hashOfConfig":"69"},{"size":8989,"mtime":1726155148248,"results":"70","hashOfConfig":"71"},{"size":3127,"mtime":1726155148248,"results":"72","hashOfConfig":"71"},{"size":1166,"mtime":1726155148248,"results":"73","hashOfConfig":"65"},{"size":1935,"mtime":1726155148248,"results":"74","hashOfConfig":"75"},{"size":1507,"mtime":1735140306044,"results":"76","hashOfConfig":"75"},{"size":840,"mtime":1726155148248,"results":"77","hashOfConfig":"75"},{"size":281,"mtime":1726155148248,"results":"78","hashOfConfig":"75"},{"size":1093,"mtime":1726155148248,"results":"79","hashOfConfig":"75"},{"size":320,"mtime":1726155148248,"results":"80","hashOfConfig":"75"},{"size":258,"mtime":1726155148248,"results":"81","hashOfConfig":"75"},{"size":239,"mtime":1726155148248,"results":"82","hashOfConfig":"75"},{"size":101532,"mtime":1728036011342,"results":"83","hashOfConfig":"75"},{"size":976,"mtime":1726155148248,"results":"84","hashOfConfig":"65"},{"size":688,"mtime":1726950851117,"results":"85","hashOfConfig":"65"},{"size":565,"mtime":1726950874467,"results":"86","hashOfConfig":"65"},{"size":677,"mtime":1735238917335,"results":"87","hashOfConfig":"65"},{"size":737,"mtime":1726155148248,"results":"88","hashOfConfig":"65"},{"size":201,"mtime":1726155148248,"results":"89","hashOfConfig":"65"},{"size":451,"mtime":1726155148248,"results":"90","hashOfConfig":"65"},{"size":540,"mtime":1726155148248,"results":"91","hashOfConfig":"65"},{"size":326,"mtime":1726155148252,"results":"92","hashOfConfig":"75"},{"size":815,"mtime":1735233706778,"results":"93","hashOfConfig":"65"},{"size":1643,"mtime":1735140348914,"results":"94","hashOfConfig":"95"},{"size":127,"mtime":1726155148252,"results":"96","hashOfConfig":"95"},{"size":369,"mtime":1726155148252,"results":"97","hashOfConfig":"95"},{"size":916,"mtime":1726155148252,"results":"98","hashOfConfig":"95"},{"size":683,"mtime":1726155148252,"results":"99","hashOfConfig":"95"},{"size":5861,"mtime":1726155148252,"results":"100","hashOfConfig":"95"},{"size":936,"mtime":1726155148252,"results":"101","hashOfConfig":"95"},{"size":1644,"mtime":1726155148252,"results":"102","hashOfConfig":"95"},{"size":1772,"mtime":1726155148252,"results":"103","hashOfConfig":"95"},{"size":326,"mtime":1726155148252,"results":"104","hashOfConfig":"75"},{"size":690,"mtime":1735238078403,"results":"105","hashOfConfig":"65"},{"size":138,"mtime":1726155148252,"results":"106","hashOfConfig":"95"},{"size":126,"mtime":1726155148252,"results":"107","hashOfConfig":"69"},{"size":326,"mtime":1726155148252,"results":"108","hashOfConfig":"75"},{"size":683,"mtime":1735233706782,"results":"109","hashOfConfig":"65"},{"size":136,"mtime":1726155148252,"results":"110","hashOfConfig":"95"},{"size":326,"mtime":1726155148252,"results":"111","hashOfConfig":"75"},{"size":681,"mtime":1735233706782,"results":"112","hashOfConfig":"65"},{"size":1972,"mtime":1726155148252,"results":"113","hashOfConfig":"95"},{"size":338,"mtime":1726155148252,"results":"114","hashOfConfig":"75"},{"size":701,"mtime":1735233706782,"results":"115","hashOfConfig":"65"},{"size":457,"mtime":1726155148252,"results":"116","hashOfConfig":"95"},{"size":861,"mtime":1735140746638,"results":"117","hashOfConfig":"95"},{"size":326,"mtime":1726155148252,"results":"118","hashOfConfig":"75"},{"size":679,"mtime":1735233706782,"results":"119","hashOfConfig":"65"},{"size":132,"mtime":1726155148255,"results":"120","hashOfConfig":"95"},{"size":389,"mtime":1726155148255,"results":"121","hashOfConfig":"65"},{"size":270,"mtime":1726155148255,"results":"122","hashOfConfig":"65"},{"size":72,"mtime":1726155148255,"results":"123","hashOfConfig":"65"},{"size":359,"mtime":1735235417031,"results":"124","hashOfConfig":"65"},{"size":368,"mtime":1726155148255,"results":"125","hashOfConfig":"69"},{"size":2750,"mtime":1735237601582,"results":"126","hashOfConfig":"65"},{"size":4956,"mtime":1735238744750,"results":"127","hashOfConfig":"65"},{"size":2693,"mtime":1726155148255,"results":"128","hashOfConfig":"65"},{"filePath":"129","messages":"130","suppressedMessages":"131","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1vd611",{"filePath":"132","messages":"133","suppressedMessages":"134","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"r77nd",{"filePath":"135","messages":"136","suppressedMessages":"137","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"138","messages":"139","suppressedMessages":"140","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"141","messages":"142","suppressedMessages":"143","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"f2xqpk",{"filePath":"144","messages":"145","suppressedMessages":"146","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1som8f0",{"filePath":"147","messages":"148","suppressedMessages":"149","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"150","messages":"151","suppressedMessages":"152","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"153","messages":"154","suppressedMessages":"155","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1q2on9q",{"filePath":"156","messages":"157","suppressedMessages":"158","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"159","messages":"160","suppressedMessages":"161","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"162","messages":"163","suppressedMessages":"164","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"165","messages":"166","suppressedMessages":"167","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"168","messages":"169","suppressedMessages":"170","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"171","messages":"172","suppressedMessages":"173","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"174","messages":"175","suppressedMessages":"176","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"177","messages":"178","suppressedMessages":"179","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"180","messages":"181","suppressedMessages":"182","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"183","messages":"184","suppressedMessages":"185","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"186","messages":"187","suppressedMessages":"188","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"189","messages":"190","suppressedMessages":"191","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"192","messages":"193","suppressedMessages":"194","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"195","messages":"196","suppressedMessages":"197","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"198","messages":"199","suppressedMessages":"200","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"201","messages":"202","suppressedMessages":"203","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"204","messages":"205","suppressedMessages":"206","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"207","messages":"208","suppressedMessages":"209","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"210","messages":"211","suppressedMessages":"212","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"d5et6z",{"filePath":"213","messages":"214","suppressedMessages":"215","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"216","messages":"217","suppressedMessages":"218","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"219","messages":"220","suppressedMessages":"221","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"222","messages":"223","suppressedMessages":"224","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"225","messages":"226","suppressedMessages":"227","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"228","messages":"229","suppressedMessages":"230","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"231","messages":"232","suppressedMessages":"233","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"234","messages":"235","suppressedMessages":"236","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"237","messages":"238","suppressedMessages":"239","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"240","messages":"241","suppressedMessages":"242","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"243","messages":"244","suppressedMessages":"245","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"246","messages":"247","suppressedMessages":"248","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"249","messages":"250","suppressedMessages":"251","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"252","messages":"253","suppressedMessages":"254","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"255","messages":"256","suppressedMessages":"257","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"258","messages":"259","suppressedMessages":"260","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"261","messages":"262","suppressedMessages":"263","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"264","messages":"265","suppressedMessages":"266","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"267","messages":"268","suppressedMessages":"269","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"270","messages":"271","suppressedMessages":"272","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"273","messages":"274","suppressedMessages":"275","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"276","messages":"277","suppressedMessages":"278","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"279","messages":"280","suppressedMessages":"281","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"282","messages":"283","suppressedMessages":"284","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"285","messages":"286","suppressedMessages":"287","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"288","messages":"289","suppressedMessages":"290","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"291","messages":"292","suppressedMessages":"293","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"294","messages":"295","suppressedMessages":"296","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"297","messages":"298","suppressedMessages":"299","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"300","messages":"301","suppressedMessages":"302","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"303","messages":"304","suppressedMessages":"305","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"306","messages":"307","suppressedMessages":"308","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"309","messages":"310","suppressedMessages":"311","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/projects/vite-vue3-chrome-extension-v3/define.config.mjs",[],[],"/projects/vite-vue3-chrome-extension-v3/manifest.chrome.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/manifest.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/manifest.firefox.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/postcss.config.cjs",[],[],"/projects/vite-vue3-chrome-extension-v3/scripts/getInstalledBrowsers.ts",[],["312","313"],"/projects/vite-vue3-chrome-extension-v3/scripts/launch.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/background/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/AppFooter.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/AppHeader.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/LocaleSwitch.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/RouterLinkUp.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/TestComponent.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/ThemeSwitch.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/state/DisplayError.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/state/LoadingSpinner.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/state/tailwind-empty-state.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/composables/useBrowserStorage.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/composables/useLocale.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/composables/useTheme.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/content-script/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/devtools/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/offscreen/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/stores/options.store.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/stores/test.store.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/playground.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/404.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/about.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/change-log.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/features.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/help.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/privacy-policy.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/terms-of-service.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/tailwind.config.cjs",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/install.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/update.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/i18n.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/notifications.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/pinia.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/router/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/tailwind.config.cjs",[],[],"/projects/vite-vue3-chrome-extension-v3/vite.chrome.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/vite.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/vite.firefox.config.ts",[],[],{"ruleId":"314","severity":2,"message":"315","line":77,"column":13,"nodeType":"316","messageId":"317","endLine":77,"endColumn":15,"suggestions":"318","suppressions":"319"},{"ruleId":"314","severity":2,"message":"315","line":83,"column":13,"nodeType":"316","messageId":"317","endLine":83,"endColumn":15,"suggestions":"320","suppressions":"321"},"no-empty","Empty block statement.","BlockStatement","unexpected",["322"],["323"],["324"],["325"],{"messageId":"326","data":"327","fix":"328","desc":"329"},{"kind":"330","justification":"331"},{"messageId":"326","data":"332","fix":"333","desc":"329"},{"kind":"330","justification":"331"},"suggestComment",{"type":"334"},{"range":"335","text":"336"},"Add comment inside empty block statement.","directive","",{"type":"334"},{"range":"337","text":"336"},"block",[2014,2014]," /* empty */ ",[2157,2157]] \ No newline at end of file +[{"/projects/vite-vue3-chrome-extension-v3/define.config.mjs":"1","/projects/vite-vue3-chrome-extension-v3/manifest.chrome.config.ts":"2","/projects/vite-vue3-chrome-extension-v3/manifest.config.ts":"3","/projects/vite-vue3-chrome-extension-v3/manifest.firefox.config.ts":"4","/projects/vite-vue3-chrome-extension-v3/postcss.config.cjs":"5","/projects/vite-vue3-chrome-extension-v3/scripts/getInstalledBrowsers.ts":"6","/projects/vite-vue3-chrome-extension-v3/scripts/launch.ts":"7","/projects/vite-vue3-chrome-extension-v3/src/background/index.ts":"8","/projects/vite-vue3-chrome-extension-v3/src/components/AppFooter.vue":"9","/projects/vite-vue3-chrome-extension-v3/src/components/AppHeader.vue":"10","/projects/vite-vue3-chrome-extension-v3/src/components/LocaleSwitch.vue":"11","/projects/vite-vue3-chrome-extension-v3/src/components/RouterLinkUp.vue":"12","/projects/vite-vue3-chrome-extension-v3/src/components/TestComponent.vue":"13","/projects/vite-vue3-chrome-extension-v3/src/components/ThemeSwitch.vue":"14","/projects/vite-vue3-chrome-extension-v3/src/components/state/DisplayError.vue":"15","/projects/vite-vue3-chrome-extension-v3/src/components/state/LoadingSpinner.vue":"16","/projects/vite-vue3-chrome-extension-v3/src/components/state/tailwind-empty-state.vue":"17","/projects/vite-vue3-chrome-extension-v3/src/composables/useBrowserStorage.ts":"18","/projects/vite-vue3-chrome-extension-v3/src/composables/useLocale.ts":"19","/projects/vite-vue3-chrome-extension-v3/src/composables/useTheme.ts":"20","/projects/vite-vue3-chrome-extension-v3/src/content-script/index.ts":"21","/projects/vite-vue3-chrome-extension-v3/src/devtools/index.ts":"22","/projects/vite-vue3-chrome-extension-v3/src/offscreen/index.ts":"23","/projects/vite-vue3-chrome-extension-v3/src/stores/options.store.ts":"24","/projects/vite-vue3-chrome-extension-v3/src/stores/test.store.ts":"25","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/app.vue":"26","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/index.ts":"27","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/index.vue":"28","/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/playground.vue":"29","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/404.vue":"30","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/about.vue":"31","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/change-log.vue":"32","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/features.vue":"33","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/help.vue":"34","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/privacy-policy.vue":"35","/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/terms-of-service.vue":"36","/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/app.vue":"37","/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/index.ts":"38","/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/pages/index.vue":"39","/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/app.vue":"40","/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/index.ts":"41","/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/pages/index.vue":"42","/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/app.vue":"43","/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/index.ts":"44","/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/pages/index.vue":"45","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/app.vue":"46","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/index.ts":"47","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/install.vue":"48","/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/update.vue":"49","/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/app.vue":"50","/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/index.ts":"51","/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/pages/index.vue":"52","/projects/vite-vue3-chrome-extension-v3/src/utils/i18n.ts":"53","/projects/vite-vue3-chrome-extension-v3/src/utils/notifications.ts":"54","/projects/vite-vue3-chrome-extension-v3/src/utils/pinia.ts":"55","/projects/vite-vue3-chrome-extension-v3/src/utils/router/index.ts":"56","/projects/vite-vue3-chrome-extension-v3/tailwind.config.cjs":"57","/projects/vite-vue3-chrome-extension-v3/vite.chrome.config.ts":"58","/projects/vite-vue3-chrome-extension-v3/vite.config.ts":"59","/projects/vite-vue3-chrome-extension-v3/vite.firefox.config.ts":"60"},{"size":1094,"mtime":1735239795034,"results":"61","hashOfConfig":"62"},{"size":263,"mtime":1735237362006,"results":"63","hashOfConfig":"64"},{"size":1582,"mtime":1735137822651,"results":"65","hashOfConfig":"64"},{"size":624,"mtime":1735137864757,"results":"66","hashOfConfig":"64"},{"size":71,"mtime":1739193226915,"results":"67","hashOfConfig":"68"},{"size":8989,"mtime":1726155148248,"results":"69","hashOfConfig":"70"},{"size":3127,"mtime":1726155148248,"results":"71","hashOfConfig":"70"},{"size":1150,"mtime":1739193226915,"results":"72","hashOfConfig":"64"},{"size":1935,"mtime":1726155148248,"results":"73","hashOfConfig":"74"},{"size":1507,"mtime":1735140306044,"results":"75","hashOfConfig":"74"},{"size":840,"mtime":1726155148248,"results":"76","hashOfConfig":"74"},{"size":281,"mtime":1726155148248,"results":"77","hashOfConfig":"74"},{"size":1093,"mtime":1726155148248,"results":"78","hashOfConfig":"74"},{"size":320,"mtime":1726155148248,"results":"79","hashOfConfig":"74"},{"size":258,"mtime":1726155148248,"results":"80","hashOfConfig":"74"},{"size":239,"mtime":1726155148248,"results":"81","hashOfConfig":"74"},{"size":101532,"mtime":1728036011342,"results":"82","hashOfConfig":"74"},{"size":3072,"mtime":1739203931849,"results":"83","hashOfConfig":"64"},{"size":698,"mtime":1739193226922,"results":"84","hashOfConfig":"64"},{"size":575,"mtime":1739193226923,"results":"85","hashOfConfig":"64"},{"size":677,"mtime":1735238917335,"results":"86","hashOfConfig":"64"},{"size":737,"mtime":1726155148248,"results":"87","hashOfConfig":"64"},{"size":201,"mtime":1726155148248,"results":"88","hashOfConfig":"64"},{"size":471,"mtime":1739193226923,"results":"89","hashOfConfig":"64"},{"size":540,"mtime":1726155148248,"results":"90","hashOfConfig":"64"},{"size":326,"mtime":1726155148252,"results":"91","hashOfConfig":"74"},{"size":815,"mtime":1735233706778,"results":"92","hashOfConfig":"64"},{"size":1643,"mtime":1735140348914,"results":"93","hashOfConfig":"94"},{"size":127,"mtime":1726155148252,"results":"95","hashOfConfig":"94"},{"size":369,"mtime":1726155148252,"results":"96","hashOfConfig":"94"},{"size":916,"mtime":1726155148252,"results":"97","hashOfConfig":"94"},{"size":683,"mtime":1726155148252,"results":"98","hashOfConfig":"94"},{"size":5861,"mtime":1726155148252,"results":"99","hashOfConfig":"94"},{"size":936,"mtime":1726155148252,"results":"100","hashOfConfig":"94"},{"size":1644,"mtime":1726155148252,"results":"101","hashOfConfig":"94"},{"size":1772,"mtime":1726155148252,"results":"102","hashOfConfig":"94"},{"size":326,"mtime":1726155148252,"results":"103","hashOfConfig":"74"},{"size":690,"mtime":1735238078403,"results":"104","hashOfConfig":"64"},{"size":138,"mtime":1726155148252,"results":"105","hashOfConfig":"94"},{"size":326,"mtime":1726155148252,"results":"106","hashOfConfig":"74"},{"size":683,"mtime":1735233706782,"results":"107","hashOfConfig":"64"},{"size":136,"mtime":1726155148252,"results":"108","hashOfConfig":"94"},{"size":326,"mtime":1726155148252,"results":"109","hashOfConfig":"74"},{"size":681,"mtime":1735233706782,"results":"110","hashOfConfig":"64"},{"size":1972,"mtime":1726155148252,"results":"111","hashOfConfig":"94"},{"size":338,"mtime":1726155148252,"results":"112","hashOfConfig":"74"},{"size":701,"mtime":1735233706782,"results":"113","hashOfConfig":"64"},{"size":457,"mtime":1726155148252,"results":"114","hashOfConfig":"94"},{"size":861,"mtime":1735140746638,"results":"115","hashOfConfig":"94"},{"size":326,"mtime":1735239655772,"results":"116","hashOfConfig":"74"},{"size":679,"mtime":1735239655788,"results":"117","hashOfConfig":"64"},{"size":132,"mtime":1735239655792,"results":"118","hashOfConfig":"94"},{"size":389,"mtime":1726155148255,"results":"119","hashOfConfig":"64"},{"size":270,"mtime":1726155148255,"results":"120","hashOfConfig":"64"},{"size":72,"mtime":1726155148255,"results":"121","hashOfConfig":"64"},{"size":359,"mtime":1735235417031,"results":"122","hashOfConfig":"64"},{"size":213,"mtime":1739193226930,"results":"123","hashOfConfig":"68"},{"size":2759,"mtime":1735414593065,"results":"124","hashOfConfig":"64"},{"size":5629,"mtime":1739193226930,"results":"125","hashOfConfig":"64"},{"size":2787,"mtime":1736449282558,"results":"126","hashOfConfig":"64"},{"filePath":"127","messages":"128","suppressedMessages":"129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"fxupcv",{"filePath":"130","messages":"131","suppressedMessages":"132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"aix2t",{"filePath":"133","messages":"134","suppressedMessages":"135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"136","messages":"137","suppressedMessages":"138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"139","messages":"140","suppressedMessages":"141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1gkmmfe",{"filePath":"142","messages":"143","suppressedMessages":"144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"ovsz9y",{"filePath":"145","messages":"146","suppressedMessages":"147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"148","messages":"149","suppressedMessages":"150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"151","messages":"152","suppressedMessages":"153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"c28lwa",{"filePath":"154","messages":"155","suppressedMessages":"156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"157","messages":"158","suppressedMessages":"159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"160","messages":"161","suppressedMessages":"162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"163","messages":"164","suppressedMessages":"165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"166","messages":"167","suppressedMessages":"168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"169","messages":"170","suppressedMessages":"171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"172","messages":"173","suppressedMessages":"174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"175","messages":"176","suppressedMessages":"177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"178","messages":"179","suppressedMessages":"180","errorCount":0,"fatalErrorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"181","messages":"182","suppressedMessages":"183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"184","messages":"185","suppressedMessages":"186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"187","messages":"188","suppressedMessages":"189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"190","messages":"191","suppressedMessages":"192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"193","messages":"194","suppressedMessages":"195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"196","messages":"197","suppressedMessages":"198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"199","messages":"200","suppressedMessages":"201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"202","messages":"203","suppressedMessages":"204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"205","messages":"206","suppressedMessages":"207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"208","messages":"209","suppressedMessages":"210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"t0qov8",{"filePath":"211","messages":"212","suppressedMessages":"213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"214","messages":"215","suppressedMessages":"216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"217","messages":"218","suppressedMessages":"219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"220","messages":"221","suppressedMessages":"222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"223","messages":"224","suppressedMessages":"225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"226","messages":"227","suppressedMessages":"228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"229","messages":"230","suppressedMessages":"231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"232","messages":"233","suppressedMessages":"234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"235","messages":"236","suppressedMessages":"237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"238","messages":"239","suppressedMessages":"240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"241","messages":"242","suppressedMessages":"243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"244","messages":"245","suppressedMessages":"246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"247","messages":"248","suppressedMessages":"249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"250","messages":"251","suppressedMessages":"252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"253","messages":"254","suppressedMessages":"255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"256","messages":"257","suppressedMessages":"258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"259","messages":"260","suppressedMessages":"261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"262","messages":"263","suppressedMessages":"264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"265","messages":"266","suppressedMessages":"267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"268","messages":"269","suppressedMessages":"270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"271","messages":"272","suppressedMessages":"273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"274","messages":"275","suppressedMessages":"276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"277","messages":"278","suppressedMessages":"279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"280","messages":"281","suppressedMessages":"282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"283","messages":"284","suppressedMessages":"285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"286","messages":"287","suppressedMessages":"288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"289","messages":"290","suppressedMessages":"291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"292","messages":"293","suppressedMessages":"294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"295","messages":"296","suppressedMessages":"297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"298","messages":"299","suppressedMessages":"300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"301","messages":"302","suppressedMessages":"303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"304","messages":"305","suppressedMessages":"306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/projects/vite-vue3-chrome-extension-v3/define.config.mjs",[],[],"/projects/vite-vue3-chrome-extension-v3/manifest.chrome.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/manifest.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/manifest.firefox.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/postcss.config.cjs",[],[],"/projects/vite-vue3-chrome-extension-v3/scripts/getInstalledBrowsers.ts",[],["307","308"],"/projects/vite-vue3-chrome-extension-v3/scripts/launch.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/background/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/AppFooter.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/AppHeader.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/LocaleSwitch.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/RouterLinkUp.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/TestComponent.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/ThemeSwitch.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/state/DisplayError.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/state/LoadingSpinner.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/components/state/tailwind-empty-state.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/composables/useBrowserStorage.ts",["309","310","311","312","313","314","315"],[],"/projects/vite-vue3-chrome-extension-v3/src/composables/useLocale.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/composables/useTheme.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/content-script/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/devtools/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/offscreen/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/stores/options.store.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/stores/test.store.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/action-popup/pages/playground.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/404.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/about.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/change-log.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/features.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/help.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/privacy-policy.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/common/pages/terms-of-service.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/content-script-iframe/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/devtools-panel/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/options-page/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/install.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/setup/pages/update.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/app.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/ui/side-panel/pages/index.vue",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/i18n.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/notifications.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/pinia.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/src/utils/router/index.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/tailwind.config.cjs",[],[],"/projects/vite-vue3-chrome-extension-v3/vite.chrome.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/vite.config.ts",[],[],"/projects/vite-vue3-chrome-extension-v3/vite.firefox.config.ts",[],[],{"ruleId":"316","severity":2,"message":"317","line":77,"column":13,"nodeType":"318","messageId":"319","endLine":77,"endColumn":15,"suggestions":"320","suppressions":"321"},{"ruleId":"316","severity":2,"message":"317","line":83,"column":13,"nodeType":"318","messageId":"319","endLine":83,"endColumn":15,"suggestions":"322","suppressions":"323"},{"ruleId":"324","severity":1,"message":"325","line":3,"column":30,"nodeType":"326","messageId":"327","endLine":3,"endColumn":33,"suggestions":"328"},{"ruleId":"324","severity":1,"message":"325","line":3,"column":43,"nodeType":"326","messageId":"327","endLine":3,"endColumn":46,"suggestions":"329"},{"ruleId":"324","severity":1,"message":"325","line":3,"column":49,"nodeType":"326","messageId":"327","endLine":3,"endColumn":52,"suggestions":"330"},{"ruleId":"331","severity":1,"message":"332","line":19,"column":7,"nodeType":"333","messageId":"334","endLine":19,"endColumn":18,"suggestions":"335"},{"ruleId":"324","severity":1,"message":"325","line":26,"column":34,"nodeType":"326","messageId":"327","endLine":26,"endColumn":37,"suggestions":"336"},{"ruleId":"324","severity":1,"message":"325","line":26,"column":46,"nodeType":"326","messageId":"327","endLine":26,"endColumn":49,"suggestions":"337"},{"ruleId":"324","severity":1,"message":"325","line":36,"column":26,"nodeType":"326","messageId":"327","endLine":36,"endColumn":29,"suggestions":"338"},"no-empty","Empty block statement.","BlockStatement","unexpected",["339"],["340"],["341"],["342"],"@typescript-eslint/no-explicit-any","Unexpected any. Specify a different type.","TSAnyKeyword","unexpectedAny",["343","344"],["345","346"],["347","348"],"no-console","Unexpected console statement. Only these console methods are allowed: info, warn, error.","MemberExpression","limited",["349"],["350","351"],["352","353"],["354","355"],{"messageId":"356","data":"357","fix":"358","desc":"359"},{"kind":"360","justification":"361"},{"messageId":"356","data":"362","fix":"363","desc":"359"},{"kind":"360","justification":"361"},{"messageId":"364","fix":"365","desc":"366"},{"messageId":"367","fix":"368","desc":"369"},{"messageId":"364","fix":"370","desc":"366"},{"messageId":"367","fix":"371","desc":"369"},{"messageId":"364","fix":"372","desc":"366"},{"messageId":"367","fix":"373","desc":"369"},{"messageId":"374","data":"375","fix":"376","desc":"377"},{"messageId":"364","fix":"378","desc":"366"},{"messageId":"367","fix":"379","desc":"369"},{"messageId":"364","fix":"380","desc":"366"},{"messageId":"367","fix":"381","desc":"369"},{"messageId":"364","fix":"382","desc":"366"},{"messageId":"367","fix":"383","desc":"369"},"suggestComment",{"type":"384"},{"range":"385","text":"386"},"Add comment inside empty block statement.","directive","",{"type":"384"},{"range":"387","text":"386"},"suggestUnknown",{"range":"388","text":"389"},"Use `unknown` instead, this will force you to explicitly, and safely assert the type is correct.","suggestNever",{"range":"390","text":"391"},"Use `never` instead, this is useful when instantiating generic type parameters that you don't need to know the type of.",{"range":"392","text":"389"},{"range":"393","text":"391"},{"range":"394","text":"389"},{"range":"395","text":"391"},"removeConsole",{"propertyName":"396"},{"range":"397","text":"361"},"Remove the console.log().",{"range":"398","text":"389"},{"range":"399","text":"391"},{"range":"400","text":"389"},{"range":"401","text":"391"},{"range":"402","text":"389"},{"range":"403","text":"391"},"block",[2014,2014]," /* empty */ ",[2157,2157],[73,76],"unknown",[73,76],"never",[86,89],[86,89],[92,95],[92,95],"log",[683,729],[794,797],[794,797],[806,809],[806,809],[1136,1139],[1136,1139]] \ No newline at end of file diff --git a/README.md b/README.md index c459556..cf72c64 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![build](https://github.com/mubaidr/vite-vue3-browser-extension-v3/actions/workflows/build.yml/badge.svg)](https://github.com/mubaidr/vite-vue3-browser-extension-v3/actions/workflows/build.yml) -A [Vite](https://vitejs.dev/) powered WebExtension ([Chrome](https://developer.chrome.com/docs/extensions/reference/), [FireFox](https://addons.mozilla.org/en-US/developers/), etc.) starter template based on `manifest 3`, `vue3` and `vite` and alot more preconfigured. +A [Vite](https://vitejs.dev/) powered WebExtension ([Chrome](https://developer.chrome.com/docs/extensions/reference/), [FireFox](https://addons.mozilla.org/en-US/developers/), etc.) starter template based on `manifest 3`, `vue3` and `vite` and a lot more pre-configured. ## Screenshots @@ -40,7 +40,7 @@ A [Vite](https://vitejs.dev/) powered WebExtension ([Chrome](https://developer.c - Error Boundary - Empty State - Notifications using `notivue` -- Store for options preconfigured etc +- Store for options pre-configured etc - Composables for - i18n - Theme @@ -48,7 +48,8 @@ A [Vite](https://vitejs.dev/) powered WebExtension ([Chrome](https://developer.c - Loading - Error handling - `useBrowserStorage` for extension settings and user options management -- Preconfigured Pinia Store (optional perisitent and non-persistent) + - +- pre-configured Pinia Store (optional persistent and non-persistent) - System wide - Easily extendable - Type safe @@ -96,6 +97,38 @@ _Please create an issue if you feel some feature is missing or could be improved └── package.json # Project dependencies and scripts ``` +## Examples + +### `useBrowserStorage` + +```ts + +// Example usage +const exampleUsage = () => { + // Using sync storage + const { data: syncSettings } = useBrowserSyncStorage('settings', { + theme: 'dark', + notifications: true, + preferences: { + language: 'en', + fontSize: 14 + } + }) + + // Using local storage + const { data: userProfile } = useBrowserLocalStorage('profile', { + name: 'John Doe', + lastLogin: null, + favorites: ['item1', 'item2'] + }) + + // The data ref can be used directly in templates or watched + console.log(syncSettings.value.theme) // 'dark' + console.log(userProfile.value.name) // 'John Doe' +} + +``` + ## Development tools ### Vite Plugins @@ -189,8 +222,8 @@ I am a full stack developer. I am open to work. If you are looking for a develop - - + + - - + + - - + +
mubaidr @@ -233,8 +266,8 @@ I am a full stack developer. I am open to work. If you are looking for a develop hi2code
justorez @@ -242,7 +275,7 @@ I am a full stack developer. I am open to work. If you are looking for a develop Null
diff --git a/package.json b/package.json index 3c0a9f3..0388522 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "dependencies": { - "marked": "^15.0.6", + "marked": "^15.0.7", "notivue": "^2.4.5", "pinia": "^2.3.1", "vue": "^3.5.13", - "vue-i18n": "^11.1.0", + "vue-i18n": "^11.1.1", "vue-router": "^4.5.0", "webextension-polyfill": "^0.12.0" }, @@ -12,17 +12,17 @@ "devDependencies": { "@crxjs/vite-plugin": "^2.0.0-beta.28", "@eslint/compat": "^1.2.6", - "@eslint/js": "^9.19.0", + "@eslint/js": "^9.20.0", "@iconify-json/carbon": "^1.2.6", - "@iconify-json/lucide": "^1.2.25", + "@iconify-json/lucide": "^1.2.26", "@iconify-json/mdi": "^1.2.3", "@iconify-json/ph": "^1.2.2", "@iconify-json/svg-spinners": "^1.2.2", "@intlify/unplugin-vue-i18n": "^6.0.3", "@tailwindcss/forms": "^0.5.10", - "@tailwindcss/postcss": "^4.0.4", + "@tailwindcss/postcss": "^4.0.5", "@tailwindcss/typography": "^0.5.16", - "@tailwindcss/vite": "^4.0.4", + "@tailwindcss/vite": "^4.0.5", "@types/eslint": "^9.6.1", "@types/eslint__js": "~8.42.3", "@types/node": "^22.13.1", @@ -37,15 +37,15 @@ "cross-env": "^7.0.3", "daisyui": "^5.0.0-beta.7", "dotenv": "^16.4.7", - "eslint": "^9.19.0", + "eslint": "^9.20.0", "eslint-plugin-vue": "^9.32.0", "get-installed-browsers": "^0.1.7", "globals": "^15.14.0", "postcss": "^8.5.1", - "prettier": "^3.4.2", + "prettier": "^3.5.0", "prettier-plugin-tailwindcss": "^0.6.11", "sass": "^1.84.0", - "tailwindcss": "^4.0.4", + "tailwindcss": "^4.0.5", "terser": "^5.38.1", "tsx": "^4.19.2", "typescript": "^5.7.3", @@ -74,14 +74,18 @@ "overrides": {}, "peerDependencyRules": { "allowAny": [], - "allowedDeprecatedVersions": { - "sourcemap-codec": "1.4.8" - }, "allowedVersions": { "node-fetch": "*" }, "ignoreMissing": [] - } + }, + "onlyBuiltDependencies": [ + "@parcel/watcher", + "esbuild", + "protobufjs", + "spawn-sync", + "vue-demi" + ] }, "private": true, "repository": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6940e8d..9a11b65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: marked: - specifier: ^15.0.6 - version: 15.0.6 + specifier: ^15.0.7 + version: 15.0.7 notivue: specifier: ^2.4.5 version: 2.4.5(@nuxt/kit@3.13.0(rollup@4.34.4))(@nuxt/schema@3.13.0(rollup@4.34.4))(defu@6.1.4) @@ -21,8 +21,8 @@ importers: specifier: ^3.5.13 version: 3.5.13(typescript@5.7.3) vue-i18n: - specifier: ^11.1.0 - version: 11.1.0(vue@3.5.13(typescript@5.7.3)) + specifier: ^11.1.1 + version: 11.1.1(vue@3.5.13(typescript@5.7.3)) vue-router: specifier: ^4.5.0 version: 4.5.0(vue@3.5.13(typescript@5.7.3)) @@ -35,16 +35,16 @@ importers: version: 2.0.0-beta.28 '@eslint/compat': specifier: ^1.2.6 - version: 1.2.6(eslint@9.19.0(jiti@2.4.2)) + version: 1.2.6(eslint@9.20.0(jiti@2.4.2)) '@eslint/js': - specifier: ^9.19.0 - version: 9.19.0 + specifier: ^9.20.0 + version: 9.20.0 '@iconify-json/carbon': specifier: ^1.2.6 version: 1.2.6 '@iconify-json/lucide': - specifier: ^1.2.25 - version: 1.2.25 + specifier: ^1.2.26 + version: 1.2.26 '@iconify-json/mdi': specifier: ^1.2.3 version: 1.2.3 @@ -56,19 +56,19 @@ importers: version: 1.2.2 '@intlify/unplugin-vue-i18n': specifier: ^6.0.3 - version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0(jiti@2.4.2))(rollup@4.34.4)(typescript@5.7.3)(vue-i18n@11.1.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) + version: 6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.20.0(jiti@2.4.2))(rollup@4.34.4)(typescript@5.7.3)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) '@tailwindcss/forms': specifier: ^0.5.10 - version: 0.5.10(tailwindcss@4.0.4) + version: 0.5.10(tailwindcss@4.0.5) '@tailwindcss/postcss': - specifier: ^4.0.4 - version: 4.0.4 + specifier: ^4.0.5 + version: 4.0.5 '@tailwindcss/typography': specifier: ^0.5.16 - version: 0.5.16(tailwindcss@4.0.4) + version: 0.5.16(tailwindcss@4.0.5) '@tailwindcss/vite': - specifier: ^4.0.4 - version: 4.0.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.7.0)) + specifier: ^4.0.5 + version: 4.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.7.0)) '@types/eslint': specifier: ^9.6.1 version: 9.6.1 @@ -112,11 +112,11 @@ importers: specifier: ^16.4.7 version: 16.4.7 eslint: - specifier: ^9.19.0 - version: 9.19.0(jiti@2.4.2) + specifier: ^9.20.0 + version: 9.20.0(jiti@2.4.2) eslint-plugin-vue: specifier: ^9.32.0 - version: 9.32.0(eslint@9.19.0(jiti@2.4.2)) + version: 9.32.0(eslint@9.20.0(jiti@2.4.2)) get-installed-browsers: specifier: ^0.1.7 version: 0.1.7 @@ -127,17 +127,17 @@ importers: specifier: ^8.5.1 version: 8.5.1 prettier: - specifier: ^3.4.2 - version: 3.4.2 + specifier: ^3.5.0 + version: 3.5.0 prettier-plugin-tailwindcss: specifier: ^0.6.11 - version: 0.6.11(prettier@3.4.2) + version: 0.6.11(prettier@3.5.0) sass: specifier: ^1.84.0 version: 1.84.0 tailwindcss: - specifier: ^4.0.4 - version: 4.0.4 + specifier: ^4.0.5 + version: 4.0.5 terser: specifier: ^5.38.1 version: 5.38.1 @@ -149,7 +149,7 @@ importers: version: 5.7.3 typescript-eslint: specifier: ^8.23.0 - version: 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) unplugin-auto-import: specifier: ^19.0.0 version: 19.0.0(@nuxt/kit@3.13.0(rollup@4.34.4))(@vueuse/core@12.5.0(typescript@5.7.3))(rollup@4.34.4) @@ -747,6 +747,10 @@ packages: resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.11.0': + resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -759,8 +763,8 @@ packages: resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.19.0': - resolution: {integrity: sha512-rbq9/g38qjfqFLOVPvwjIvFFdNziEC5S65jmjPw5r6A//QH+W91akh9irMwjDN8zKUTak6W9EsAv4m/7Wnw0UQ==} + '@eslint/js@9.20.0': + resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.5': @@ -1014,8 +1018,8 @@ packages: '@iconify-json/carbon@1.2.6': resolution: {integrity: sha512-Oat/TUfu1Cpg/inoi6ZIVvNjWoKQJFugpDB6LqpahENf4f2pZKMOUR2B9MCQlje77iRRI5nWQzvUO2kJlXFStw==} - '@iconify-json/lucide@1.2.25': - resolution: {integrity: sha512-OsHihLfqdjxwoLWDEnGesrYbCG6VCCoLvmb1U6UJhggsppW+D3DUY/LhhcppZM4Yw3AM4USDIn/gkzqjdRYgEw==} + '@iconify-json/lucide@1.2.26': + resolution: {integrity: sha512-arD/8mK0lRxFY2LgLf345NhWVWiOtV8sOxJuLnq4QRz3frMiOwVwGxEgp5Xe/bRGzxO2CxxCBok0bPRpCkYZQQ==} '@iconify-json/mdi@1.2.3': resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==} @@ -1044,24 +1048,24 @@ packages: vue-i18n: optional: true - '@intlify/core-base@11.1.0': - resolution: {integrity: sha512-5KFrnfgcv4cVWzA1RC4HqMHYEWSD/69GQU7wpKJ2l6mA6ggqEjb9NJN5VJNJvP2mU5y8MAGwXLAJXJo5sbIkMQ==} + '@intlify/core-base@11.1.1': + resolution: {integrity: sha512-bb8gZvoeKExCI2r/NVCK9E4YyOkvYGaSCPxVZe8T0jz8aX+dHEOZWxK06Z/Y9mWRkJfBiCH4aOhDF1yr1t5J8Q==} engines: {node: '>= 16'} '@intlify/message-compiler@11.0.0-rc.1': resolution: {integrity: sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==} engines: {node: '>= 16'} - '@intlify/message-compiler@11.1.0': - resolution: {integrity: sha512-UuV1YwWPBNgL4uqtC1vZPHF2QtYYqVeCDIsbV6JC6Vv90UWmEiU77U7EZmNVVV7DepT83Ow5MaF1CiWI77b61w==} + '@intlify/message-compiler@11.1.1': + resolution: {integrity: sha512-4iEsUZ3aF7jXY19CJFN5VP+pPyLITD9FVsjB13z9TU1UxaZLlFsmNhvRxlPDSOfHAP5RpNF2QKKdZ3DHVf4Yzw==} engines: {node: '>= 16'} '@intlify/shared@11.0.0-rc.1': resolution: {integrity: sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==} engines: {node: '>= 16'} - '@intlify/shared@11.1.0': - resolution: {integrity: sha512-DvpNSxiMrFqYMaGSRDDnQgO/L0MqNH4KWw9CUx8LRHHIdWp08En9DpmSRNpauUOxKpHAhyJJxx92BHZk9J84EQ==} + '@intlify/shared@11.1.1': + resolution: {integrity: sha512-2kGiWoXaeV8HZlhU/Nml12oTbhv7j2ufsJ5vQaa0VTjzUmZVdd/nmKFRAOJ/FtjO90Qba5AnZDwsrY7ZND5udA==} engines: {node: '>= 16'} '@intlify/unplugin-vue-i18n@6.0.3': @@ -1433,89 +1437,89 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1' - '@tailwindcss/node@4.0.4': - resolution: {integrity: sha512-VLFq80IyoV1hsHPcCm1mmlyPyUT6NlovQLoO2y7PGm84mW94ZrNJ7ax5H6K4M7Aj/fdMfem5IX7Ka+LXWZpDGg==} + '@tailwindcss/node@4.0.5': + resolution: {integrity: sha512-ffTz4DX1cgr4XPuqjhm32YV6Lyx58R1CxAAnSFTamg6wXwfk3oWdb6exgAbGesPzvUgicTO0gwUdQGSsg4nNog==} - '@tailwindcss/oxide-android-arm64@4.0.4': - resolution: {integrity: sha512-hiGUA8d15ynH/LdurQNObnuTjri7i4ApAzhesusNxoz4br7vhZ6QO5CFgniYAYNZvf8Q8wCTBg0nj61RalBeVQ==} + '@tailwindcss/oxide-android-arm64@4.0.5': + resolution: {integrity: sha512-kK/ik8aIAKWDIEYDZGUCJcnU1qU5sPoMBlVzPvtsUqiV6cSHcnVRUdkcLwKqTeUowzZtjjRiamELLd9Gb0x5BQ==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.0.4': - resolution: {integrity: sha512-vTca+ysNl8BYmYJTni9pLC+L3S4bvrj0ai1eUV3yYXYa5Cpugr5Fni6ylV0gcTZOyETm2RCCJ/0azU6MgqE6HA==} + '@tailwindcss/oxide-darwin-arm64@4.0.5': + resolution: {integrity: sha512-vkbXFv0FfAEbrSa5NBjFEE+xi06ha7mxuxjY8LRn7d7/tBGrAZOEJnnsEbB6M1+x2pGRTjjei0XyTIXdVCglJA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.0.4': - resolution: {integrity: sha512-rxPWb5AQJ/aAM/5UDCjaQaMYIcrZHe/Dr9xZu9+P9nJf3WAweNsGi+e+SW9EYGRiF3hkBtP2dvxVNAkTiEbNQQ==} + '@tailwindcss/oxide-darwin-x64@4.0.5': + resolution: {integrity: sha512-PedA64rHBXEa4e6abBWE4Yj4gHulfPb5T+rBNnX+WGkjjge5Txa2oS99TLmJ5BPDkXXqz/Ba7oweWIDDG7i5NQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.0.4': - resolution: {integrity: sha512-UOnRHzlS5V5cxaMgBo6rk1E92tTDUtO/falc9vOpNiRdWhNcofYNN9zvZP63Wuo5FC6/XCyAnJo6OXUm18TwrQ==} + '@tailwindcss/oxide-freebsd-x64@4.0.5': + resolution: {integrity: sha512-silz3nuZdEYDfic3v/ooVUQChj9hbxDSee43GCQNwr/iD9L4K/JsZtoNqr0w69pUkvWcKINOGOG0r7WqUqkAeg==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.4': - resolution: {integrity: sha512-0Ry9Qfnf22rmJwHxsCFmHQIl5RZw+yOUUGHaqNT42REL8r308cU/bi4UqdrjqVRfAlu51gOGxTRf2NRueczuIA==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.5': + resolution: {integrity: sha512-ElneG75XS64B9I2G83A/Hc7EtNVOD5xahs7avq0aeW7mEX6CtMc8m8RCXMn3jGhz8enFE52l6QU0wO7iVkEtXQ==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.0.4': - resolution: {integrity: sha512-5a7WD30nVdI7Rl1ohZ0Ojj9t5yRnZkJBizvh3uIW52h9UeNpon8TfoknF6rU/TwD32dQ0Cjo5CcCHtQ2wW9PCA==} + '@tailwindcss/oxide-linux-arm64-gnu@4.0.5': + resolution: {integrity: sha512-8yoXpWTeIFaByUaKy2qRAppznLVaDHP9xYCAbS3FG7+uUwHi8CHE4TcomM7eyamo0U7dbUIDgKMGoAX5s2iVrA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.0.4': - resolution: {integrity: sha512-m6s5jKSqos07l6NtHFd49Ljcaw4jIWHE7jq6eNPNz9SCzQqRzs4esP1t7jH8UljQ7JffKOl7yZPwK5Nf+irliw==} + '@tailwindcss/oxide-linux-arm64-musl@4.0.5': + resolution: {integrity: sha512-BDlVSiiJ08GRz9KKnXgaPFs2fkukPF3pym6uK3oWEKW45jKlVGgybLqulcV5nLEqREOuyq4Rn4vnZss4/bbQ/g==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.0.4': - resolution: {integrity: sha512-K5dBjGHzby9eyUBwy9YHFhKY+5i8fzIBZM1NBWp6L2xpM7OzW9WJDgNcgESkZami9g+EozkQLt3ZmMZHAieXkw==} + '@tailwindcss/oxide-linux-x64-gnu@4.0.5': + resolution: {integrity: sha512-DYgieNDRkTy69bWPgdsc47nAXa74P63P/RetUwYM9vYj5USyOfHCEcqIthkCuYw3dXKBhjgwe697TmL2g2jpAw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.0.4': - resolution: {integrity: sha512-J8sskt+fA5ooq+kxy0Tf4E2TRWZD9Y8j3K+pnBwp9zdilLmSd8OHrB3e0/rO78KveZ6BE9ae75cKOWrT6wONmw==} + '@tailwindcss/oxide-linux-x64-musl@4.0.5': + resolution: {integrity: sha512-z2RzUvOQl0ZqrZqmCFP53tJbBXQ3UmLD/E6J7+q0e+4VaFnXCcIYTfQbHgI8f3fash+q6gK80Ko/ywEQ+bvv6Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-win32-arm64-msvc@4.0.4': - resolution: {integrity: sha512-flFaaMc77NQbz0Fq73wBs9EH2lX1Oc2Z/3JuxoewpnGHpAGJ/j05tvBNMyTaGrKcHvf/+dk+mCDxb6+PmzGgnQ==} + '@tailwindcss/oxide-win32-arm64-msvc@4.0.5': + resolution: {integrity: sha512-ho1dJ4o5Q8nAOxdMkbfBu5aSqI+/bzQ0jEeHcXaEdEJzf2fSWs3HY7bIKtE6vQS8c4SmSBvls7IhGPuJxNg+2Q==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.0.4': - resolution: {integrity: sha512-WzMA0aL/24/JyNrv2Yhr/Og24QGRPWJMjRyCJ4HRoGMs6/8svOQKrnnZ/9LUFwn56irAndFBjWWnlaqykH+g5Q==} + '@tailwindcss/oxide-win32-x64-msvc@4.0.5': + resolution: {integrity: sha512-yjw6JhtyDXr+G0aZrj3L3NlEV7CobSqOdPyfo6G3d91WEZ5b8PyGm86IAreX08Jp9DChGXEd53gWysVpWCTs+w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.0.4': - resolution: {integrity: sha512-vPpu30KFLiGyPOoElkYt8WRvzGKVrrOz49KpfiGGtnQGmyUpL8VCbJzzEEcpKT5BpaaQidhFok+OXscf6hHjOQ==} + '@tailwindcss/oxide@4.0.5': + resolution: {integrity: sha512-iWGyOCu0TuzvCBisWbGv2K9+7QCfE0ztgtrZOvb9iF7V7ChVkD15Obe3HevZrhjngAc34jDA+OMSuSvkrpTy4A==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.0.4': - resolution: {integrity: sha512-Up8fB+DUhy8qvDqlHgZAWaL5iVEbypcuOjzlW4K6EyU+aGEvXK0/wrcKBKOTvg3KKP5givJMexJ0aG1hDPOuRg==} + '@tailwindcss/postcss@4.0.5': + resolution: {integrity: sha512-U7IPb+KMASETtUvISwePM+1h+jLQspXf2ncfX/LmP/4AaH7b7DJQhqXzDCaJQd/MIh54dRUO93i9q4+Xm7dlVg==} '@tailwindcss/typography@0.5.16': resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' - '@tailwindcss/vite@4.0.4': - resolution: {integrity: sha512-zrWGbluPeXeoetUQoDFmt1dQIeiOBThfznla7zPIqST69rMmiDD4SZwJrHVoL5CvXz06AYQXz/M/jELSakL7Rg==} + '@tailwindcss/vite@4.0.5': + resolution: {integrity: sha512-/i4hjLTUYVjUG0MTUviQP3HR/hzwyzv8Sq4sz2pnsNuf+FIjjhJB0vcnIMH1KIX0k8ozD6CBv2Dl76tlm/JFFA==} peerDependencies: vite: ^5.2.0 || ^6 @@ -2395,8 +2399,8 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.19.0: - resolution: {integrity: sha512-ug92j0LepKlbbEv6hD911THhoRHmbdXt2gX+VDABAW/Ir7D3nqKdv5Pf5vtlyY6HQMTEP2skXY43ueqTCWssEA==} + eslint@9.20.0: + resolution: {integrity: sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -3112,8 +3116,8 @@ packages: make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - marked@15.0.6: - resolution: {integrity: sha512-Y07CUOE+HQXbVDCGl3LXggqJDbXDP2pArc2C1N1RRMN0ONiShoSsIInMd5Gsxupe7fKLpgimTV+HOJ9r7bA+pg==} + marked@15.0.7: + resolution: {integrity: sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==} engines: {node: '>= 18'} hasBin: true @@ -3541,8 +3545,8 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + prettier@3.5.0: + resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} engines: {node: '>=14'} hasBin: true @@ -3896,8 +3900,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tailwindcss@4.0.4: - resolution: {integrity: sha512-/ezDLEkOLf1lXkr9F2iI5BHJbexJpty5zkV2B8bGHCqAdbc9vk85Jgdkq+ZOvNkNPa3yAaqJ8DjRt584Bc84kw==} + tailwindcss@4.0.5: + resolution: {integrity: sha512-DZZIKX3tA23LGTjHdnwlJOTxfICD1cPeykLLsYF1RQBI9QsCR3i0szohJfJDVjr6aNRAIio5WVO7FGB77fRHwg==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} @@ -4275,8 +4279,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - vue-i18n@11.1.0: - resolution: {integrity: sha512-UgtYUe99mLfo7ya5TJSsJcgJZaqIunwXjff5UA03xRry0VtgN4zIUbuoycK9/ZZQJg5Cmr6V6zq+u0H0P0hlNw==} + vue-i18n@11.1.1: + resolution: {integrity: sha512-0P6DkKy96R4Wh2sIZJEHw8ivnlD1pnB6Ib/eldoF1SUpQutfKZv6aMqZwICS1gW0rwq24ZSXw7y3jW+PRVYqWA==} engines: {node: '>= 16'} peerDependencies: vue: ^3.0.0 @@ -4908,16 +4912,16 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.0(eslint@9.19.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.20.0(jiti@2.4.2))': dependencies: - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.6(eslint@9.19.0(jiti@2.4.2))': + '@eslint/compat@1.2.6(eslint@9.20.0(jiti@2.4.2))': optionalDependencies: - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) '@eslint/config-array@0.19.1': dependencies: @@ -4931,6 +4935,10 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.11.0': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -4961,7 +4969,7 @@ snapshots: '@eslint/js@8.57.1': {} - '@eslint/js@9.19.0': {} + '@eslint/js@9.20.0': {} '@eslint/object-schema@2.1.5': {} @@ -5381,7 +5389,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/lucide@1.2.25': + '@iconify-json/lucide@1.2.26': dependencies: '@iconify/types': 2.0.0 @@ -5412,7 +5420,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@intlify/bundle-utils@10.0.0(vue-i18n@11.1.0(vue@3.5.13(typescript@5.7.3)))': + '@intlify/bundle-utils@10.0.0(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))': dependencies: '@intlify/message-compiler': 11.0.0-rc.1 '@intlify/shared': 11.0.0-rc.1 @@ -5424,33 +5432,33 @@ snapshots: source-map-js: 1.2.1 yaml-eslint-parser: 1.2.3 optionalDependencies: - vue-i18n: 11.1.0(vue@3.5.13(typescript@5.7.3)) + vue-i18n: 11.1.1(vue@3.5.13(typescript@5.7.3)) - '@intlify/core-base@11.1.0': + '@intlify/core-base@11.1.1': dependencies: - '@intlify/message-compiler': 11.1.0 - '@intlify/shared': 11.1.0 + '@intlify/message-compiler': 11.1.1 + '@intlify/shared': 11.1.1 '@intlify/message-compiler@11.0.0-rc.1': dependencies: '@intlify/shared': 11.0.0-rc.1 source-map-js: 1.2.1 - '@intlify/message-compiler@11.1.0': + '@intlify/message-compiler@11.1.1': dependencies: - '@intlify/shared': 11.1.0 + '@intlify/shared': 11.1.1 source-map-js: 1.2.1 '@intlify/shared@11.0.0-rc.1': {} - '@intlify/shared@11.1.0': {} + '@intlify/shared@11.1.1': {} - '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.19.0(jiti@2.4.2))(rollup@4.34.4)(typescript@5.7.3)(vue-i18n@11.1.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))': + '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.20.0(jiti@2.4.2))(rollup@4.34.4)(typescript@5.7.3)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.19.0(jiti@2.4.2)) - '@intlify/bundle-utils': 10.0.0(vue-i18n@11.1.0(vue@3.5.13(typescript@5.7.3))) - '@intlify/shared': 11.1.0 - '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.0)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + '@intlify/bundle-utils': 10.0.0(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3))) + '@intlify/shared': 11.1.1 + '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.1)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)) '@rollup/pluginutils': 5.1.4(rollup@4.34.4) '@typescript-eslint/scope-manager': 8.18.2 '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.7.3) @@ -5464,7 +5472,7 @@ snapshots: unplugin: 1.16.0 vue: 3.5.13(typescript@5.7.3) optionalDependencies: - vue-i18n: 11.1.0(vue@3.5.13(typescript@5.7.3)) + vue-i18n: 11.1.1(vue@3.5.13(typescript@5.7.3)) transitivePeerDependencies: - '@vue/compiler-dom' - eslint @@ -5472,14 +5480,14 @@ snapshots: - supports-color - typescript - '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.0)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))': + '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.1)(@vue/compiler-dom@3.5.13)(vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))': dependencies: '@babel/parser': 7.26.3 optionalDependencies: - '@intlify/shared': 11.1.0 + '@intlify/shared': 11.1.1 '@vue/compiler-dom': 3.5.13 vue: 3.5.13(typescript@5.7.3) - vue-i18n: 11.1.0(vue@3.5.13(typescript@5.7.3)) + vue-i18n: 11.1.1(vue@3.5.13(typescript@5.7.3)) '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -5775,87 +5783,87 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@tailwindcss/forms@0.5.10(tailwindcss@4.0.4)': + '@tailwindcss/forms@0.5.10(tailwindcss@4.0.5)': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 4.0.4 + tailwindcss: 4.0.5 - '@tailwindcss/node@4.0.4': + '@tailwindcss/node@4.0.5': dependencies: enhanced-resolve: 5.18.1 jiti: 2.4.2 - tailwindcss: 4.0.4 + tailwindcss: 4.0.5 - '@tailwindcss/oxide-android-arm64@4.0.4': + '@tailwindcss/oxide-android-arm64@4.0.5': optional: true - '@tailwindcss/oxide-darwin-arm64@4.0.4': + '@tailwindcss/oxide-darwin-arm64@4.0.5': optional: true - '@tailwindcss/oxide-darwin-x64@4.0.4': + '@tailwindcss/oxide-darwin-x64@4.0.5': optional: true - '@tailwindcss/oxide-freebsd-x64@4.0.4': + '@tailwindcss/oxide-freebsd-x64@4.0.5': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.4': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.5': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.0.4': + '@tailwindcss/oxide-linux-arm64-gnu@4.0.5': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.0.4': + '@tailwindcss/oxide-linux-arm64-musl@4.0.5': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.0.4': + '@tailwindcss/oxide-linux-x64-gnu@4.0.5': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.0.4': + '@tailwindcss/oxide-linux-x64-musl@4.0.5': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.0.4': + '@tailwindcss/oxide-win32-arm64-msvc@4.0.5': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.0.4': + '@tailwindcss/oxide-win32-x64-msvc@4.0.5': optional: true - '@tailwindcss/oxide@4.0.4': + '@tailwindcss/oxide@4.0.5': optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.0.4 - '@tailwindcss/oxide-darwin-arm64': 4.0.4 - '@tailwindcss/oxide-darwin-x64': 4.0.4 - '@tailwindcss/oxide-freebsd-x64': 4.0.4 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.4 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.4 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.4 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.4 - '@tailwindcss/oxide-linux-x64-musl': 4.0.4 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.4 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.4 - - '@tailwindcss/postcss@4.0.4': + '@tailwindcss/oxide-android-arm64': 4.0.5 + '@tailwindcss/oxide-darwin-arm64': 4.0.5 + '@tailwindcss/oxide-darwin-x64': 4.0.5 + '@tailwindcss/oxide-freebsd-x64': 4.0.5 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.5 + '@tailwindcss/oxide-linux-arm64-gnu': 4.0.5 + '@tailwindcss/oxide-linux-arm64-musl': 4.0.5 + '@tailwindcss/oxide-linux-x64-gnu': 4.0.5 + '@tailwindcss/oxide-linux-x64-musl': 4.0.5 + '@tailwindcss/oxide-win32-arm64-msvc': 4.0.5 + '@tailwindcss/oxide-win32-x64-msvc': 4.0.5 + + '@tailwindcss/postcss@4.0.5': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.0.4 - '@tailwindcss/oxide': 4.0.4 + '@tailwindcss/node': 4.0.5 + '@tailwindcss/oxide': 4.0.5 lightningcss: 1.29.1 postcss: 8.5.1 - tailwindcss: 4.0.4 + tailwindcss: 4.0.5 - '@tailwindcss/typography@0.5.16(tailwindcss@4.0.4)': + '@tailwindcss/typography@0.5.16(tailwindcss@4.0.5)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 4.0.4 + tailwindcss: 4.0.5 - '@tailwindcss/vite@4.0.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.7.0))': + '@tailwindcss/vite@4.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.7.0))': dependencies: - '@tailwindcss/node': 4.0.4 - '@tailwindcss/oxide': 4.0.4 + '@tailwindcss/node': 4.0.5 + '@tailwindcss/oxide': 4.0.5 lightningcss: 1.29.1 - tailwindcss: 4.0.4 + tailwindcss: 4.0.5 vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(lightningcss@1.29.1)(sass@1.84.0)(terser@5.38.1)(tsx@4.19.2)(yaml@2.7.0) '@trysound/sax@0.2.0': {} @@ -5893,15 +5901,15 @@ snapshots: dependencies: '@types/node': 22.13.1 - '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.23.0 - '@typescript-eslint/type-utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.23.0 - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -5910,14 +5918,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/types': 8.23.0 '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.23.0 debug: 4.4.0 - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -5932,12 +5940,12 @@ snapshots: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 - '@typescript-eslint/type-utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -5975,13 +5983,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.19.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.23.0 '@typescript-eslint/types': 8.23.0 '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -6852,16 +6860,16 @@ snapshots: dependencies: eslint: 8.57.1 - eslint-plugin-vue@9.32.0(eslint@9.19.0(jiti@2.4.2)): + eslint-plugin-vue@9.32.0(eslint@9.20.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.19.0(jiti@2.4.2)) - eslint: 9.19.0(jiti@2.4.2) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) + eslint: 9.20.0(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.0.16 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@9.19.0(jiti@2.4.2)) + vue-eslint-parser: 9.4.3(eslint@9.20.0(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -6923,14 +6931,14 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.19.0(jiti@2.4.2): + eslint@9.20.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.19.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.20.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.1 - '@eslint/core': 0.10.0 + '@eslint/core': 0.11.0 '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.19.0 + '@eslint/js': 9.20.0 '@eslint/plugin-kit': 0.2.5 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 @@ -7674,7 +7682,7 @@ snapshots: make-error@1.3.6: {} - marked@15.0.6: {} + marked@15.0.7: {} marky@1.2.5: {} @@ -8069,11 +8077,11 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-tailwindcss@0.6.11(prettier@3.4.2): + prettier-plugin-tailwindcss@0.6.11(prettier@3.5.0): dependencies: - prettier: 3.4.2 + prettier: 3.5.0 - prettier@3.4.2: {} + prettier@3.5.0: {} pretty-ms@9.2.0: dependencies: @@ -8424,7 +8432,7 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 - tailwindcss@4.0.4: {} + tailwindcss@4.0.5: {} tapable@2.2.1: {} @@ -8506,12 +8514,12 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.23.0(eslint@9.19.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.19.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -8827,10 +8835,10 @@ snapshots: dependencies: vue: 3.5.13(typescript@5.7.3) - vue-eslint-parser@9.4.3(eslint@9.19.0(jiti@2.4.2)): + vue-eslint-parser@9.4.3(eslint@9.20.0(jiti@2.4.2)): dependencies: debug: 4.4.0 - eslint: 9.19.0(jiti@2.4.2) + eslint: 9.20.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -8840,10 +8848,10 @@ snapshots: transitivePeerDependencies: - supports-color - vue-i18n@11.1.0(vue@3.5.13(typescript@5.7.3)): + vue-i18n@11.1.1(vue@3.5.13(typescript@5.7.3)): dependencies: - '@intlify/core-base': 11.1.0 - '@intlify/shared': 11.1.0 + '@intlify/core-base': 11.1.1 + '@intlify/shared': 11.1.1 '@vue/devtools-api': 6.6.4 vue: 3.5.13(typescript@5.7.3) diff --git a/src/composables/useBrowserStorage.ts b/src/composables/useBrowserStorage.ts index b308106..ab6f764 100644 --- a/src/composables/useBrowserStorage.ts +++ b/src/composables/useBrowserStorage.ts @@ -1,88 +1,100 @@ import { ref, watch, nextTick } from "vue" + function mergeDeep(defaults: any, source: any): any { - // Merge the default options with the stored options - const output = { ...defaults } // Start with defaults + // Merge the default options with the stored options + const output = { ...defaults } // Start with defaults - Object.keys(defaults).forEach((key) => { - const defaultValue = defaults[key] - const sourceValue = source?.[key] + Object.keys(defaults).forEach((key) => { + const defaultValue = defaults[key] + const sourceValue = source?.[key] - if (isObject(defaultValue) && sourceValue != null) { - // Recursively merge nested objects - output[key] = mergeDeep(defaultValue, sourceValue) - } else if (checkType(defaultValue, sourceValue)) { - output[key] = sourceValue - } else { - // If the type is different, use the default value - output[key] = defaultValue - console.log("Type mismatch", key, sourceValue) - } - }) + if (isObject(defaultValue) && sourceValue != null) { + // Recursively merge nested objects + output[key] = mergeDeep(defaultValue, sourceValue) + } else if (checkType(defaultValue, sourceValue)) { + output[key] = sourceValue + } else { + // If the type is different, use the default value + output[key] = defaultValue + console.log("Type mismatch", key, sourceValue) + } + }) - return output + return output } function checkType(defaultValue: any, value: any): boolean { - // Check if the value type is the same type as the default value or null - // there are only strings, booleans, nulls and arrays as types left - return (typeof value === typeof defaultValue && Array.isArray(value) == Array.isArray(defaultValue)) || value === null + // Check if the value type is the same type as the default value or null + // there are only strings, booleans, nulls and arrays as types left + return ( + (typeof value === typeof defaultValue && + Array.isArray(value) == Array.isArray(defaultValue)) || + value === null + ) } + function isObject(value: any): boolean { - return value !== null && value instanceof Object && !Array.isArray(value) + return value !== null && value instanceof Object && !Array.isArray(value) } export function useBrowserSyncStorage(key: string, defaultValue: T) { - return useBrowserStorage(key, defaultValue, "sync") + return useBrowserStorage(key, defaultValue, "sync") } export function useBrowserLocalStorage(key: string, defaultValue: T) { - return useBrowserStorage(key, defaultValue, "local") + return useBrowserStorage(key, defaultValue, "local") } -function useBrowserStorage(key: string, defaultValue: T, storageType: "sync" | "local" = "sync") { - const data = ref(defaultValue) - // Blocking setting storage if it is updating from storage - let isUpdatingFromStorage = true - const defaultIsObject = isObject(defaultValue) - // Initialize storage with the value from chrome.storage - const promise = new Promise((resolve) => { - chrome.storage[storageType].get(key, async (result) => { - if (result?.[key] !== undefined) { - if (defaultIsObject && isObject(result[key])) { - data.value = mergeDeep(defaultValue, result[key]) - } else if (checkType(defaultValue, result[key])) { - data.value = result[key] - } - } - await nextTick() - isUpdatingFromStorage = false - resolve(true) - }) - }) +function useBrowserStorage( + key: string, + defaultValue: T, + storageType: "sync" | "local" = "sync", +) { + const data = ref(defaultValue) + // Blocking setting storage if it is updating from storage + let isUpdatingFromStorage = true + const defaultIsObject = isObject(defaultValue) + // Initialize storage with the value from chrome.storage + const promise = new Promise((resolve) => { + chrome.storage[storageType].get(key, async (result) => { + if (result?.[key] !== undefined) { + if (defaultIsObject && isObject(result[key])) { + data.value = mergeDeep(defaultValue, result[key]) + } else if (checkType(defaultValue, result[key])) { + data.value = result[key] + } + } + await nextTick() + isUpdatingFromStorage = false + resolve(true) + }) + }) + + // Watch for changes in the storage and update chrome.storage + watch( + data, + (newValue) => { + if (!isUpdatingFromStorage) { + if (checkType(defaultValue, newValue)) { + chrome.storage[storageType].set({ [key]: toRaw(newValue) }) + } else { + console.error("not updating " + key + ": type mismatch") + } + } + }, + { deep: true, flush: "post" }, + ) + + // Add the onChanged listener here + chrome.storage[storageType].onChanged.addListener(async function (changes) { + if (changes?.[key]) { + isUpdatingFromStorage = true + const { oldValue, newValue } = changes[key] + data.value = newValue + await nextTick() + isUpdatingFromStorage = false + } + }) - // Watch for changes in the storage and update chrome.storage - watch( - data, - (newValue) => { - if (!isUpdatingFromStorage) { - if (checkType(defaultValue, newValue)) { - chrome.storage[storageType].set({ [key]: toRaw(newValue) }) - } else { - console.error("not updating " + key + ": type mismatch") - } - } - }, - { deep: true, flush: "post" }, - ) - // Add the onChanged listener here - chrome.storage[storageType].onChanged.addListener(async function (changes) { - if (changes?.[key]) { - isUpdatingFromStorage = true - const { oldValue, newValue } = changes[key] - data.value = newValue - await nextTick() - isUpdatingFromStorage = false - } - }) - return { data, promise } + return { data, promise } } diff --git a/src/stores/test.store.ts b/src/stores/test.store.ts index 732c694..81eef24 100644 --- a/src/stores/test.store.ts +++ b/src/stores/test.store.ts @@ -1,6 +1,6 @@ -export const useTestStore = defineStore('app', () => { - const count = useBrowserLocalStorage('count', 0) - const name = useBrowserLocalStorage('name', 'John Doe') +export const useTestStore = defineStore("app", () => { + const { data: count } = useBrowserLocalStorage("count", 0) + const { data: name } = useBrowserLocalStorage("name", "John Doe") // You should probably use chrome.storage API instead of localStorage since localStorage history can be cleared by the user. // See https://developer.chrome.com/docs/extensions/reference/api/storage