Skip to content

Commit 771809f

Browse files
authored
Merge pull request #3 from headerly/feat/refactor-shadcn
refactor: migrating from daisy ui to shadcn-vue
2 parents 08c2c90 + 85f8078 commit 771809f

210 files changed

Lines changed: 7405 additions & 4066 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitattributes

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
* text=auto eol=lf
2+
3+
# Mark Shadcn UI components as generated
4+
extension/src/entrypoints/popup/ui/** linguist-generated

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,5 @@ stats.html
4343
.husky/
4444
docs/.vitepress/dist
4545
docs/.vitepress/cache
46+
.rolldown
47+
dist

.vscode/extensions.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
"dbaeumer.vscode-eslint",
44
"antfu.iconify",
55
"bradlc.vscode-tailwindcss",
6-
"naumovs.color-highlight",
7-
"lokalise.i18n-ally",
86
"Vue.volar",
97
"EditorConfig.EditorConfig"
108
]

.vscode/settings.json

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@
4848
"postcss"
4949
],
5050

51-
"i18n-ally.localesPaths": ["src/assets/_locales"],
52-
"i18n-ally.keystyle": "flat",
53-
"i18n-ally.enabledFrameworks": ["vue"]
51+
// Tailwind CSS IntelliSense settings
52+
"tailwindCSS.classFunctions": ["cva", "cn"],
53+
54+
// Exclude some files from the "Go to Definition" recommendation list
55+
"search.exclude": {
56+
"**/*.css": true
57+
}
5458
}

docs/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
"preview": "vitepress preview"
88
},
99
"dependencies": {
10-
"vitepress": "2.0.0-alpha.15",
10+
"vitepress": "catalog:",
1111
"vue": "catalog:"
1212
},
1313
"devDependencies": {
14-
"oxc-minify": "^0.101.0"
14+
"oxc-minify": "catalog:"
1515
}
1616
}

eslint.config.ts

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,18 @@ export default antfu(
1717
"antfu/no-top-level-await": "off",
1818
"style/brace-style": ["error", "1tbs"],
1919
"vue/brace-style": ["error", "1tbs"],
20+
"vue/v-bind-style": ["error", "shorthand", { sameNameShorthand: "always" }],
21+
"vue/no-duplicate-class-names": "error",
22+
"vue/prefer-use-template-ref": "error",
23+
"vue/no-import-compiler-macros": "error",
24+
"vue/no-v-html": "error",
25+
"vue/define-macros-order": [
26+
"error",
27+
{
28+
order: ["defineOptions", "defineModel", "defineProps", "defineEmits", "defineSlots"],
29+
defineExposeLast: true,
30+
},
31+
],
2032
},
2133
},
2234
{
@@ -25,22 +37,28 @@ export default antfu(
2537
},
2638
settings: {
2739
"better-tailwindcss": {
28-
entryPoint: "./src/entrypoints/popup/index.css",
40+
entryPoint: "./extension/src/entrypoints/popup/index.css",
2941
},
3042
},
3143
rules: {
3244
...tailwind.configs.recommended!.rules,
33-
"better-tailwindcss/no-unregistered-classes": [
45+
"better-tailwindcss/no-unknown-classes": [
3446
"error",
3547
{
3648
ignore: [
37-
"indicator-item",
38-
"list-row",
49+
"i-lucide-*",
50+
"toaster",
3951
],
4052
},
4153
],
4254
},
4355
},
56+
{
57+
files: ["pnpm-workspace.yaml"],
58+
rules: {
59+
"yaml/sort-keys": "off",
60+
},
61+
},
4462
{
4563
ignores: ["**/*.md"],
4664
},

extension/components.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"$schema": "https://shadcn-vue.com/schema.json",
3+
"style": "new-york",
4+
"typescript": true,
5+
"tailwind": {
6+
"config": "",
7+
"css": "./src/entrypoints/popup/index.css",
8+
"baseColor": "neutral",
9+
"cssVariables": true,
10+
"prefix": ""
11+
},
12+
"aliases": {
13+
"components": "#/",
14+
"composables": "#/composables",
15+
"utils": "@/lib/utils",
16+
"ui": "#/ui",
17+
"lib": "@/lib"
18+
},
19+
"iconLibrary": "lucide"
20+
}

extension/package.json

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,54 +14,53 @@
1414
"typecheck": "vue-tsc --noEmit"
1515
},
1616
"dependencies": {
17-
"@codemirror/lang-json": "^6.0.2",
18-
"@codemirror/theme-one-dark": "^6.1.3",
19-
"@formkit/auto-animate": "^0.9.0",
17+
"@codemirror/lang-json": "catalog:",
18+
"@codemirror/theme-one-dark": "catalog:",
19+
"@formkit/auto-animate": "catalog:",
2020
"@tanstack/vue-query": "catalog:",
21-
"@tanstack/vue-virtual": "^3.13.12",
21+
"@tanstack/vue-virtual": "catalog:",
2222
"@vueuse/core": "catalog:",
23-
"@webext-core/messaging": "^2.3.0",
23+
"@webext-core/messaging": "catalog:",
2424
"class-variance-authority": "catalog:",
2525
"clsx": "catalog:",
26-
"codemirror": "^6.0.2",
27-
"codemirror-json-schema": "^0.8.1",
26+
"codemirror": "catalog:",
27+
"codemirror-json-schema": "catalog:",
2828
"es-toolkit": "catalog:",
29+
"lucide-vue-next": "catalog:",
2930
"pinia": "catalog:",
3031
"reka-ui": "catalog:",
3132
"tailwind-merge": "catalog:",
33+
"ts-pattern": "catalog:",
3234
"type-fest": "catalog:",
3335
"vee-validate": "catalog:",
3436
"vue": "catalog:",
35-
"vue-codemirror6": "^1.4.1",
37+
"vue-codemirror6": "catalog:",
3638
"vue-router": "catalog:",
37-
"vue-sonner": "^2.0.9",
38-
"zod": "^4.1.12"
39+
"vue-sonner": "catalog:",
40+
"zod": "catalog:"
3941
},
4042
"devDependencies": {
4143
"@egoist/tailwindcss-icons": "catalog:",
42-
"@fontsource-variable/inter": "^5.2.8",
44+
"@fontsource-variable/inter": "catalog:",
4345
"@fontsource-variable/jetbrains-mono": "catalog:",
4446
"@iconify-json/lucide": "catalog:",
4547
"@tailwindcss/typography": "catalog:",
4648
"@tailwindcss/vite": "catalog:",
4749
"@total-typescript/ts-reset": "catalog:",
48-
"@types/node": "^24.8.1",
49-
"@vitejs/plugin-vue": "^6.0.1",
50-
"@vitejs/plugin-vue-jsx": "^5.1.1",
51-
"@vitest/browser-playwright": "^4.0.3",
52-
"@wxt-dev/auto-icons": "^1.1.0",
53-
"daisyui": "catalog:",
54-
"eslint": "^9.38.0",
55-
"eslint-plugin-better-tailwindcss": "^3.7.10",
56-
"lefthook": "^2.0.0",
57-
"playwright": "^1.56.1",
50+
"@types/node": "catalog:",
51+
"@vitejs/plugin-vue": "catalog:",
52+
"@vitejs/plugin-vue-jsx": "catalog:",
53+
"@vitest/browser-playwright": "catalog:",
54+
"@wxt-dev/auto-icons": "catalog:",
55+
"baseline-browser-mapping": "catalog:",
56+
"playwright": "catalog:",
5857
"tailwindcss": "catalog:",
5958
"tw-animate-css": "catalog:",
60-
"unplugin-turbo-console": "^2.2.0",
61-
"unplugin-vue-router": "^0.16.0",
59+
"unplugin-turbo-console": "catalog:",
60+
"unplugin-vue-router": "catalog:",
6261
"vite-plugin-vue-devtools": "catalog:",
63-
"vitest": "^4.0.3",
64-
"vitest-browser-vue": "^2.0.0",
65-
"wxt": "^0.20.11"
62+
"vitest": "catalog:",
63+
"vitest-browser-vue": "catalog:",
64+
"wxt": "catalog:"
6665
}
6766
}
Lines changed: 52 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { ProfileCoreData } from "..";
2+
import { match } from "ts-pattern";
23

34
interface BuildConditionOptions {
45
nativeResourceTypeBehavior: boolean;
@@ -13,91 +14,57 @@ export function buildCondition(profile: ProfileCoreData, options: BuildCondition
1314
condition.resourceTypes = Object.values(browser.declarativeNetRequest.ResourceType);
1415
}
1516

16-
if (profile.filters.resourceTypes) {
17-
const enabledResourceTypes = profile.filters.resourceTypes;
18-
if (enabledResourceTypes && enabledResourceTypes.length > 0) {
19-
condition.resourceTypes = enabledResourceTypes;
20-
}
21-
}
22-
23-
if (profile.filters.excludedResourceTypes) {
24-
const excludedResourceTypes = profile.filters.excludedResourceTypes;
25-
if (excludedResourceTypes && excludedResourceTypes.length > 0) {
26-
condition.excludedResourceTypes = excludedResourceTypes;
27-
}
28-
}
29-
30-
if (profile.filters.requestMethods) {
31-
const enabledRequestMethods = profile.filters.requestMethods;
32-
if (enabledRequestMethods && enabledRequestMethods.length > 0) {
33-
condition.requestMethods = enabledRequestMethods;
34-
}
35-
}
36-
37-
if (profile.filters.excludedRequestMethods) {
38-
const excludedRequestMethods = profile.filters.excludedRequestMethods;
39-
if (excludedRequestMethods && excludedRequestMethods.length > 0) {
40-
condition.excludedRequestMethods = excludedRequestMethods;
41-
}
42-
}
43-
44-
if (profile.filters.urlFilter?.length) {
45-
const enabledUrlFilter = profile.filters.urlFilter.find(f => f.enabled);
46-
if (enabledUrlFilter && enabledUrlFilter.value.trim()) {
47-
condition.urlFilter = enabledUrlFilter.value.trim();
48-
}
49-
}
50-
51-
if (profile.filters.regexFilter?.length) {
52-
const enabledRegexFilter = profile.filters.regexFilter.find(f => f.enabled);
53-
if (enabledRegexFilter && enabledRegexFilter.value.trim()) {
54-
condition.regexFilter = enabledRegexFilter.value.trim();
55-
}
56-
}
57-
58-
if (profile.filters.requestDomains?.items.length) {
59-
const enabledDomains = profile.filters.requestDomains.items
60-
.filter(item => item.enabled && item.value.trim())
61-
.map(item => item.value.trim());
62-
if (enabledDomains.length > 0) {
63-
condition.requestDomains = enabledDomains;
64-
}
65-
}
66-
67-
if (profile.filters.excludedRequestDomains?.items.length) {
68-
const excludedDomains = profile.filters.excludedRequestDomains.items
69-
.filter(item => item.enabled && item.value.trim())
70-
.map(item => item.value.trim());
71-
if (excludedDomains.length > 0) {
72-
condition.excludedRequestDomains = excludedDomains;
73-
}
74-
}
75-
76-
if (profile.filters.initiatorDomains?.items.length) {
77-
const initiatorDomains = profile.filters.initiatorDomains.items
78-
.filter(item => item.enabled && item.value.trim())
79-
.map(item => item.value.trim());
80-
if (initiatorDomains.length > 0) {
81-
condition.initiatorDomains = initiatorDomains;
82-
}
83-
}
84-
85-
if (profile.filters.excludedInitiatorDomains?.items.length) {
86-
const excludedInitiatorDomains = profile.filters.excludedInitiatorDomains.items
87-
.filter(item => item.enabled && item.value.trim())
88-
.map(item => item.value.trim());
89-
if (excludedInitiatorDomains.length > 0) {
90-
condition.excludedInitiatorDomains = excludedInitiatorDomains;
91-
}
92-
}
93-
94-
if (profile.filters.domainType?.enabled) {
95-
condition.domainType = profile.filters.domainType.value;
96-
}
97-
98-
if (profile.filters.isUrlFilterCaseSensitive?.enabled) {
99-
condition.isUrlFilterCaseSensitive = profile.filters.isUrlFilterCaseSensitive.value;
100-
}
17+
(Object.keys(profile.filters) as (keyof typeof profile.filters)[]).forEach((key) => {
18+
match(key)
19+
.with("resourceTypes", "excludedResourceTypes", (k) => {
20+
const value = profile.filters[k];
21+
if (value && value.length > 0) {
22+
condition[k] = value;
23+
}
24+
})
25+
.with("requestMethods", "excludedRequestMethods", (k) => {
26+
const value = profile.filters[k];
27+
if (value && value.length > 0) {
28+
condition[k] = value;
29+
}
30+
})
31+
.with("urlFilter", "regexFilter", (k) => {
32+
const enabledFilter = profile.filters[k]?.find(f => f.enabled);
33+
if (enabledFilter && enabledFilter.value.trim()) {
34+
condition[k] = enabledFilter.value.trim();
35+
}
36+
})
37+
.with(
38+
"requestDomains",
39+
"excludedRequestDomains",
40+
"initiatorDomains",
41+
"excludedInitiatorDomains",
42+
(k) => {
43+
const enabledDomains = profile.filters[k]?.items
44+
.filter(item => item.enabled && item.value.trim())
45+
.map(item => item.value.trim());
46+
if (enabledDomains && enabledDomains.length > 0) {
47+
condition[k] = enabledDomains;
48+
}
49+
},
50+
)
51+
.with("domainType", (k) => {
52+
const value = profile.filters[k];
53+
if (value?.enabled) {
54+
condition[k] = value.value;
55+
}
56+
})
57+
.with("isUrlFilterCaseSensitive", (k) => {
58+
const value = profile.filters[k];
59+
if (value?.enabled) {
60+
condition[k] = value.value;
61+
}
62+
})
63+
.with("tabIds", () => {
64+
// Developing
65+
})
66+
.exhaustive();
67+
});
10168

10269
return condition;
10370
}

0 commit comments

Comments
 (0)