tanstack-start-sitemap 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +17 -0
- package/dist/index.cjs.js +13 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.es.js +80 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +13 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +95 -0
package/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (C) 2025 Go
|
2
|
+
Copyright (c) 2025 rfedoruk
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5
|
+
of this software and associated documentation files (the "Software"), to deal
|
6
|
+
in the Software without restriction, including without limitation the rights
|
7
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the Software is
|
9
|
+
furnished to do so, subject to the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
12
|
+
copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
SOFTWARE.
|
package/README.md
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# React Component Library Template
|
2
|
+
|
3
|
+
A robust and customizable React component library template built with modern tools and best practices. Ideal for developers looking to create reusable UI components with ease.
|
4
|
+
|
5
|
+
## 🚀 Features
|
6
|
+
|
7
|
+
- **Storybook**: Interactive UI component explorer and documentation.
|
8
|
+
- **Tailwind CSS**: Utility-first CSS framework for rapid UI development.
|
9
|
+
- **ShadCN**: Accessible and customizable component primitives.
|
10
|
+
- **Playwright**: End-to-end testing for reliable and maintainable tests.
|
11
|
+
- **Dark Mode Toggle**: Easily switch between light and dark themes for testing.
|
12
|
+
- **ESM & CJS Support**: Generates both ES Modules and CommonJS for maximum compatibility.
|
13
|
+
- **Typescript Support**: Generates properly .d.ts.
|
14
|
+
- **Structured Folder Layout**: Organized directory structure for scalability and maintainability.
|
15
|
+
- **Example Folder**: Contains example usage of components with a simple setup.
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=n=>{const s=n.match(/ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/);if(!s)return[];try{const e=JSON.parse(s[1]);return Object.keys(e.routes).filter(t=>t!=="__root__").map(t=>t==="/"?t:t.replace(/\/$/,""))}catch(e){return console.error("Error parsing route manifest:",e),[]}},T=n=>{const{hostname:s,routeTreePath:e="app/routeTree.gen.ts",routes:t={},defaultChangefreq:f="weekly",defaultPriority:d=.5}=n;return{name:"vite-plugin-sitemap",apply:"build",closeBundle:async()=>{try{const{promises:r}=await Promise.resolve().then(()=>m),{resolve:u}=await Promise.resolve().then(()=>m),p=[e,`src/${e}`,`${process.cwd()}/${e}`,`${process.cwd()}/src/${e}`];let a=null,i=null;for(const o of p)try{a=await r.readFile(o,"utf-8"),i=o;break}catch{}if(!a||!i)throw new Error(`Could not find route tree file. Tried the following paths:
|
2
|
+
${p.join(`
|
3
|
+
`)}`);console.log(`Found route tree at: ${i}`);const g=y(a),h=new Date().toISOString().split("T")[0],w=`<?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
5
|
+
${g.map(o=>{const c=t[o]||{};return` <url>
|
6
|
+
<loc>${s}${o}</loc>
|
7
|
+
<lastmod>${c.lastmod||h}</lastmod>
|
8
|
+
<changefreq>${c.changefreq||f}</changefreq>
|
9
|
+
<priority>${c.priority||d}</priority>
|
10
|
+
</url>`}).join(`
|
11
|
+
`)}
|
12
|
+
</urlset>`,l=u(process.cwd(),"public");try{await r.access(l)}catch{await r.mkdir(l,{recursive:!0})}await r.writeFile(u(l,"sitemap.xml"),w),console.log("✓ Sitemap generated successfully")}catch(r){console.error("Error generating sitemap:",r)}}}},m=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));exports.sitemapPlugin=T;
|
13
|
+
//# sourceMappingURL=index.cjs.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["// vite-sitemap-plugin.ts\nimport type { Plugin } from \"vite\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n // Dynamically import Node built-in modules to avoid bundling issues\n const { promises: fsPromises } = await import(\"fs\");\n const { resolve } = await import(\"path\");\n\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n\nexport default sitemapPlugin;\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","fsPromises","__viteBrowserExternal","resolve","possiblePaths","routeTreeContent","foundPath","testPath","allRoutes","today","sitemapContent","routeConfig","publicDir","error"],"mappings":"gFA+BA,MAAMA,EAA6BC,GAA8B,CAC/D,MAAMC,EAAgBD,EAAQ,MAC5B,kDACF,EACI,GAAA,CAACC,EAAe,MAAO,CAAC,EAExB,GAAA,CACF,MAAMC,EAAW,KAAK,MAAMD,EAAc,CAAC,CAAC,EACrC,OAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAQC,GAAUA,IAAU,UAAU,EACtC,IAAKA,GAAWA,IAAU,IAAMA,EAAQA,EAAM,QAAQ,MAAO,EAAE,CAAE,QAC7D,EAAG,CACF,eAAA,MAAM,gCAAiC,CAAC,EACzC,CAAC,CAAA,CAEZ,EAEaC,EAAiBC,GAAoC,CAC1D,KAAA,CACJ,SAAAC,EACA,cAAAC,EAAgB,uBAChB,OAAAC,EAAS,CAAC,EACV,kBAAAC,EAAoB,SACpB,gBAAAC,EAAkB,EAAA,EAChBL,EAEG,MAAA,CACL,KAAM,sBACN,MAAO,QACP,YAAa,SAAY,CACnB,GAAA,CAEF,KAAM,CAAE,SAAUM,CAAe,EAAA,MAAM,QAAW,QAAA,EAAA,KAAA,IAAAC,CAAA,EAC5C,CAAE,QAAAC,CAAY,EAAA,MAAM,QAAa,QAAA,EAAA,KAAA,IAAAD,CAAA,EAEjCE,EAAgB,CACpBP,EACA,OAAOA,CAAa,GACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa,GACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa,EACvC,EAEA,IAAIQ,EAAkC,KAClCC,EAA2B,KAG/B,UAAWC,KAAYH,EACjB,GAAA,CACFC,EAAmB,MAAMJ,EAAW,SAASM,EAAU,OAAO,EAClDD,EAAAC,EACZ,KAAA,MACM,CAAA,CAKN,GAAA,CAACF,GAAoB,CAACC,EACxB,MAAM,IAAI,MACR;AAAA,EAA+DF,EAAc,KAC3E;AAAA,CAAA,CACD,EACH,EAGM,QAAA,IAAI,wBAAwBE,CAAS,EAAE,EAEzC,MAAAE,EAAYnB,EAA0BgB,CAAgB,EACtDI,MAAY,KAAK,EAAE,cAAc,MAAM,GAAG,EAAE,CAAC,EAE7CC,EAAiB;AAAA;AAAA,EAE7BF,EACC,IAAKf,GAAU,CACd,MAAMkB,EAAcb,EAAOL,CAAK,GAAK,CAAC,EAC/B,MAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZkB,EAAY,SAAWF,CAAK;AAAA,kBACzBE,EAAY,YAAcZ,CAAiB;AAAA,gBAC7CY,EAAY,UAAYX,CAAe;AAAA,SAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,WAGCY,EAAYT,EAAQ,QAAQ,IAAA,EAAO,QAAQ,EAG7C,GAAA,CACI,MAAAF,EAAW,OAAOW,CAAS,CAAA,MAC3B,CACN,MAAMX,EAAW,MAAMW,EAAW,CAAE,UAAW,GAAM,CAAA,CAIvD,MAAMX,EAAW,UACfE,EAAQS,EAAW,aAAa,EAChCF,CACF,EAEA,QAAQ,IAAI,kCAAkC,QACvCG,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAAA,CAClD,CAEJ,CACF"}
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
import { Plugin as Plugin_2 } from 'vite';
|
2
|
+
|
3
|
+
declare interface SitemapOptions {
|
4
|
+
hostname: string;
|
5
|
+
routeTreePath?: string;
|
6
|
+
routes?: {
|
7
|
+
[key: string]: {
|
8
|
+
changefreq?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never";
|
9
|
+
priority?: number;
|
10
|
+
lastmod?: string;
|
11
|
+
};
|
12
|
+
};
|
13
|
+
defaultChangefreq?: "always" | "hourly" | "daily" | "weekly" | "monthly" | "yearly" | "never";
|
14
|
+
defaultPriority?: number;
|
15
|
+
}
|
16
|
+
|
17
|
+
export declare const sitemapPlugin: (options: SitemapOptions) => Plugin_2;
|
18
|
+
|
19
|
+
export { }
|
20
|
+
|
21
|
+
|
22
|
+
declare namespace Calendar {
|
23
|
+
var displayName: string;
|
24
|
+
}
|
package/dist/index.es.js
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
const y = (n) => {
|
2
|
+
const s = n.match(
|
3
|
+
/ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/
|
4
|
+
);
|
5
|
+
if (!s) return [];
|
6
|
+
try {
|
7
|
+
const e = JSON.parse(s[1]);
|
8
|
+
return Object.keys(e.routes).filter((t) => t !== "__root__").map((t) => t === "/" ? t : t.replace(/\/$/, ""));
|
9
|
+
} catch (e) {
|
10
|
+
return console.error("Error parsing route manifest:", e), [];
|
11
|
+
}
|
12
|
+
}, _ = (n) => {
|
13
|
+
const {
|
14
|
+
hostname: s,
|
15
|
+
routeTreePath: e = "app/routeTree.gen.ts",
|
16
|
+
routes: t = {},
|
17
|
+
defaultChangefreq: f = "weekly",
|
18
|
+
defaultPriority: d = 0.5
|
19
|
+
} = n;
|
20
|
+
return {
|
21
|
+
name: "vite-plugin-sitemap",
|
22
|
+
apply: "build",
|
23
|
+
closeBundle: async () => {
|
24
|
+
try {
|
25
|
+
const { promises: r } = await Promise.resolve().then(() => m), { resolve: u } = await Promise.resolve().then(() => m), p = [
|
26
|
+
e,
|
27
|
+
`src/${e}`,
|
28
|
+
`${process.cwd()}/${e}`,
|
29
|
+
`${process.cwd()}/src/${e}`
|
30
|
+
];
|
31
|
+
let a = null, i = null;
|
32
|
+
for (const o of p)
|
33
|
+
try {
|
34
|
+
a = await r.readFile(o, "utf-8"), i = o;
|
35
|
+
break;
|
36
|
+
} catch {
|
37
|
+
}
|
38
|
+
if (!a || !i)
|
39
|
+
throw new Error(
|
40
|
+
`Could not find route tree file. Tried the following paths:
|
41
|
+
${p.join(
|
42
|
+
`
|
43
|
+
`
|
44
|
+
)}`
|
45
|
+
);
|
46
|
+
console.log(`Found route tree at: ${i}`);
|
47
|
+
const h = y(a), g = (/* @__PURE__ */ new Date()).toISOString().split("T")[0], w = `<?xml version="1.0" encoding="UTF-8"?>
|
48
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
49
|
+
${h.map((o) => {
|
50
|
+
const l = t[o] || {};
|
51
|
+
return ` <url>
|
52
|
+
<loc>${s}${o}</loc>
|
53
|
+
<lastmod>${l.lastmod || g}</lastmod>
|
54
|
+
<changefreq>${l.changefreq || f}</changefreq>
|
55
|
+
<priority>${l.priority || d}</priority>
|
56
|
+
</url>`;
|
57
|
+
}).join(`
|
58
|
+
`)}
|
59
|
+
</urlset>`, c = u(process.cwd(), "public");
|
60
|
+
try {
|
61
|
+
await r.access(c);
|
62
|
+
} catch {
|
63
|
+
await r.mkdir(c, { recursive: !0 });
|
64
|
+
}
|
65
|
+
await r.writeFile(
|
66
|
+
u(c, "sitemap.xml"),
|
67
|
+
w
|
68
|
+
), console.log("✓ Sitemap generated successfully");
|
69
|
+
} catch (r) {
|
70
|
+
console.error("Error generating sitemap:", r);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
};
|
74
|
+
}, m = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
75
|
+
__proto__: null
|
76
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
77
|
+
export {
|
78
|
+
_ as sitemapPlugin
|
79
|
+
};
|
80
|
+
//# sourceMappingURL=index.es.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["// vite-sitemap-plugin.ts\nimport type { Plugin } from \"vite\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n // Dynamically import Node built-in modules to avoid bundling issues\n const { promises: fsPromises } = await import(\"fs\");\n const { resolve } = await import(\"path\");\n\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n\nexport default sitemapPlugin;\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","fsPromises","__viteBrowserExternal","resolve","possiblePaths","routeTreeContent","foundPath","testPath","allRoutes","today","sitemapContent","routeConfig","publicDir","error"],"mappings":"AA+BA,MAAMA,IAA4B,CAACC,MAA8B;AAC/D,QAAMC,IAAgBD,EAAQ;AAAA,IAC5B;AAAA,EACF;AACI,MAAA,CAACC,EAAe,QAAO,CAAC;AAExB,MAAA;AACF,UAAMC,IAAW,KAAK,MAAMD,EAAc,CAAC,CAAC;AACrC,WAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAO,CAACC,MAAUA,MAAU,UAAU,EACtC,IAAI,CAACA,MAAWA,MAAU,MAAMA,IAAQA,EAAM,QAAQ,OAAO,EAAE,CAAE;AAAA,WAC7D,GAAG;AACF,mBAAA,MAAM,iCAAiC,CAAC,GACzC,CAAC;AAAA,EAAA;AAEZ,GAEaC,IAAgB,CAACC,MAAoC;AAC1D,QAAA;AAAA,IACJ,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC,IAAS,CAAC;AAAA,IACV,mBAAAC,IAAoB;AAAA,IACpB,iBAAAC,IAAkB;AAAA,EAAA,IAChBL;AAEG,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa,YAAY;AACnB,UAAA;AAEF,cAAM,EAAE,UAAUM,EAAe,IAAA,MAAM,QAAW,QAAA,EAAA,KAAA,MAAAC,CAAA,GAC5C,EAAE,SAAAC,EAAY,IAAA,MAAM,QAAa,QAAA,EAAA,KAAA,MAAAD,CAAA,GAEjCE,IAAgB;AAAA,UACpBP;AAAA,UACA,OAAOA,CAAa;AAAA,UACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa;AAAA,UACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa;AAAA,QACvC;AAEA,YAAIQ,IAAkC,MAClCC,IAA2B;AAG/B,mBAAWC,KAAYH;AACjB,cAAA;AACF,YAAAC,IAAmB,MAAMJ,EAAW,SAASM,GAAU,OAAO,GAClDD,IAAAC;AACZ;AAAA,UAAA,QACM;AAAA,UAAA;AAKN,YAAA,CAACF,KAAoB,CAACC;AACxB,gBAAM,IAAI;AAAA,YACR;AAAA,EAA+DF,EAAc;AAAA,cAC3E;AAAA;AAAA,YAAA,CACD;AAAA,UACH;AAGM,gBAAA,IAAI,wBAAwBE,CAAS,EAAE;AAEzC,cAAAE,IAAYnB,EAA0BgB,CAAgB,GACtDI,yBAAY,KAAK,GAAE,cAAc,MAAM,GAAG,EAAE,CAAC,GAE7CC,IAAiB;AAAA;AAAA,EAE7BF,EACC,IAAI,CAACf,MAAU;AACd,gBAAMkB,IAAcb,EAAOL,CAAK,KAAK,CAAC;AAC/B,iBAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZkB,EAAY,WAAWF,CAAK;AAAA,kBACzBE,EAAY,cAAcZ,CAAiB;AAAA,gBAC7CY,EAAY,YAAYX,CAAe;AAAA;AAAA,QAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,YAGCY,IAAYT,EAAQ,QAAQ,IAAA,GAAO,QAAQ;AAG7C,YAAA;AACI,gBAAAF,EAAW,OAAOW,CAAS;AAAA,QAAA,QAC3B;AACN,gBAAMX,EAAW,MAAMW,GAAW,EAAE,WAAW,IAAM;AAAA,QAAA;AAIvD,cAAMX,EAAW;AAAA,UACfE,EAAQS,GAAW,aAAa;AAAA,UAChCF;AAAA,QACF,GAEA,QAAQ,IAAI,kCAAkC;AAAA,eACvCG,GAAO;AACN,gBAAA,MAAM,6BAA6BA,CAAK;AAAA,MAAA;AAAA,IAClD;AAAA,EAEJ;AACF;;;"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
(function(r,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(r=typeof globalThis<"u"?globalThis:r||self,s(r["tanstack-start-sitemap"]={}))})(this,function(r){"use strict";const s=a=>{const i=a.match(/ROUTE_MANIFEST_START([\s\S]*?)ROUTE_MANIFEST_END/);if(!i)return[];try{const e=JSON.parse(i[1]);return Object.keys(e.routes).filter(t=>t!=="__root__").map(t=>t==="/"?t:t.replace(/\/$/,""))}catch(e){return console.error("Error parsing route manifest:",e),[]}},h=a=>{const{hostname:i,routeTreePath:e="app/routeTree.gen.ts",routes:t={},defaultChangefreq:g="weekly",defaultPriority:y=.5}=a;return{name:"vite-plugin-sitemap",apply:"build",closeBundle:async()=>{try{const{promises:o}=await Promise.resolve().then(()=>f),{resolve:m}=await Promise.resolve().then(()=>f),d=[e,`src/${e}`,`${process.cwd()}/${e}`,`${process.cwd()}/src/${e}`];let l=null,c=null;for(const n of d)try{l=await o.readFile(n,"utf-8"),c=n;break}catch{}if(!l||!c)throw new Error(`Could not find route tree file. Tried the following paths:
|
2
|
+
${d.join(`
|
3
|
+
`)}`);console.log(`Found route tree at: ${c}`);const w=s(l),T=new Date().toISOString().split("T")[0],_=`<?xml version="1.0" encoding="UTF-8"?>
|
4
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
5
|
+
${w.map(n=>{const p=t[n]||{};return` <url>
|
6
|
+
<loc>${i}${n}</loc>
|
7
|
+
<lastmod>${p.lastmod||T}</lastmod>
|
8
|
+
<changefreq>${p.changefreq||g}</changefreq>
|
9
|
+
<priority>${p.priority||y}</priority>
|
10
|
+
</url>`}).join(`
|
11
|
+
`)}
|
12
|
+
</urlset>`,u=m(process.cwd(),"public");try{await o.access(u)}catch{await o.mkdir(u,{recursive:!0})}await o.writeFile(m(u,"sitemap.xml"),_),console.log("✓ Sitemap generated successfully")}catch(o){console.error("Error generating sitemap:",o)}}}},f=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));r.sitemapPlugin=h,Object.defineProperty(r,Symbol.toStringTag,{value:"Module"})});
|
13
|
+
//# sourceMappingURL=index.umd.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/lib/gen-sitemap.ts"],"sourcesContent":["// vite-sitemap-plugin.ts\nimport type { Plugin } from \"vite\";\n\nexport interface SitemapOptions {\n hostname: string;\n routeTreePath?: string;\n routes?: {\n [key: string]: {\n changefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n priority?: number;\n lastmod?: string;\n };\n };\n defaultChangefreq?:\n | \"always\"\n | \"hourly\"\n | \"daily\"\n | \"weekly\"\n | \"monthly\"\n | \"yearly\"\n | \"never\";\n defaultPriority?: number;\n}\n\nconst extractRoutesFromManifest = (content: string): string[] => {\n const manifestMatch = content.match(\n /ROUTE_MANIFEST_START([\\s\\S]*?)ROUTE_MANIFEST_END/\n );\n if (!manifestMatch) return [];\n\n try {\n const manifest = JSON.parse(manifestMatch[1]);\n return Object.keys(manifest.routes)\n .filter((route) => route !== \"__root__\")\n .map((route) => (route === \"/\" ? route : route.replace(/\\/$/, \"\")));\n } catch (e) {\n console.error(\"Error parsing route manifest:\", e);\n return [];\n }\n};\n\nexport const sitemapPlugin = (options: SitemapOptions): Plugin => {\n const {\n hostname,\n routeTreePath = \"app/routeTree.gen.ts\",\n routes = {},\n defaultChangefreq = \"weekly\",\n defaultPriority = 0.5,\n } = options;\n\n return {\n name: \"vite-plugin-sitemap\",\n apply: \"build\",\n closeBundle: async () => {\n try {\n // Dynamically import Node built-in modules to avoid bundling issues\n const { promises: fsPromises } = await import(\"fs\");\n const { resolve } = await import(\"path\");\n\n const possiblePaths = [\n routeTreePath,\n `src/${routeTreePath}`,\n `${process.cwd()}/${routeTreePath}`,\n `${process.cwd()}/src/${routeTreePath}`,\n ];\n\n let routeTreeContent: string | null = null;\n let foundPath: string | null = null;\n\n // Attempt to read the route tree file from the possible paths\n for (const testPath of possiblePaths) {\n try {\n routeTreeContent = await fsPromises.readFile(testPath, \"utf-8\");\n foundPath = testPath;\n break;\n } catch {\n // Try the next path if this one fails\n }\n }\n\n if (!routeTreeContent || !foundPath) {\n throw new Error(\n `Could not find route tree file. Tried the following paths:\\n${possiblePaths.join(\n \"\\n\"\n )}`\n );\n }\n\n console.log(`Found route tree at: ${foundPath}`);\n\n const allRoutes = extractRoutesFromManifest(routeTreeContent);\n const today = new Date().toISOString().split(\"T\")[0];\n\n const sitemapContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n${allRoutes\n .map((route) => {\n const routeConfig = routes[route] || {};\n return ` <url>\n <loc>${hostname}${route}</loc>\n <lastmod>${routeConfig.lastmod || today}</lastmod>\n <changefreq>${routeConfig.changefreq || defaultChangefreq}</changefreq>\n <priority>${routeConfig.priority || defaultPriority}</priority>\n </url>`;\n })\n .join(\"\\n\")}\n</urlset>`;\n\n const publicDir = resolve(process.cwd(), \"public\");\n\n // Ensure the public directory exists\n try {\n await fsPromises.access(publicDir);\n } catch {\n await fsPromises.mkdir(publicDir, { recursive: true });\n }\n\n // Write the sitemap.xml file to the public directory\n await fsPromises.writeFile(\n resolve(publicDir, \"sitemap.xml\"),\n sitemapContent\n );\n\n console.log(\"✓ Sitemap generated successfully\");\n } catch (error) {\n console.error(\"Error generating sitemap:\", error);\n }\n },\n };\n};\n\nexport default sitemapPlugin;\n"],"names":["extractRoutesFromManifest","content","manifestMatch","manifest","route","sitemapPlugin","options","hostname","routeTreePath","routes","defaultChangefreq","defaultPriority","fsPromises","__viteBrowserExternal","resolve","possiblePaths","routeTreeContent","foundPath","testPath","allRoutes","today","sitemapContent","routeConfig","publicDir","error"],"mappings":"iPA+BA,MAAMA,EAA6BC,GAA8B,CAC/D,MAAMC,EAAgBD,EAAQ,MAC5B,kDACF,EACI,GAAA,CAACC,EAAe,MAAO,CAAC,EAExB,GAAA,CACF,MAAMC,EAAW,KAAK,MAAMD,EAAc,CAAC,CAAC,EACrC,OAAA,OAAO,KAAKC,EAAS,MAAM,EAC/B,OAAQC,GAAUA,IAAU,UAAU,EACtC,IAAKA,GAAWA,IAAU,IAAMA,EAAQA,EAAM,QAAQ,MAAO,EAAE,CAAE,QAC7D,EAAG,CACF,eAAA,MAAM,gCAAiC,CAAC,EACzC,CAAC,CAAA,CAEZ,EAEaC,EAAiBC,GAAoC,CAC1D,KAAA,CACJ,SAAAC,EACA,cAAAC,EAAgB,uBAChB,OAAAC,EAAS,CAAC,EACV,kBAAAC,EAAoB,SACpB,gBAAAC,EAAkB,EAAA,EAChBL,EAEG,MAAA,CACL,KAAM,sBACN,MAAO,QACP,YAAa,SAAY,CACnB,GAAA,CAEF,KAAM,CAAE,SAAUM,CAAe,EAAA,MAAM,QAAW,QAAA,EAAA,KAAA,IAAAC,CAAA,EAC5C,CAAE,QAAAC,CAAY,EAAA,MAAM,QAAa,QAAA,EAAA,KAAA,IAAAD,CAAA,EAEjCE,EAAgB,CACpBP,EACA,OAAOA,CAAa,GACpB,GAAG,QAAQ,IAAK,CAAA,IAAIA,CAAa,GACjC,GAAG,QAAQ,KAAK,QAAQA,CAAa,EACvC,EAEA,IAAIQ,EAAkC,KAClCC,EAA2B,KAG/B,UAAWC,KAAYH,EACjB,GAAA,CACFC,EAAmB,MAAMJ,EAAW,SAASM,EAAU,OAAO,EAClDD,EAAAC,EACZ,KAAA,MACM,CAAA,CAKN,GAAA,CAACF,GAAoB,CAACC,EACxB,MAAM,IAAI,MACR;AAAA,EAA+DF,EAAc,KAC3E;AAAA,CAAA,CACD,EACH,EAGM,QAAA,IAAI,wBAAwBE,CAAS,EAAE,EAEzC,MAAAE,EAAYnB,EAA0BgB,CAAgB,EACtDI,MAAY,KAAK,EAAE,cAAc,MAAM,GAAG,EAAE,CAAC,EAE7CC,EAAiB;AAAA;AAAA,EAE7BF,EACC,IAAKf,GAAU,CACd,MAAMkB,EAAcb,EAAOL,CAAK,GAAK,CAAC,EAC/B,MAAA;AAAA,WACAG,CAAQ,GAAGH,CAAK;AAAA,eACZkB,EAAY,SAAWF,CAAK;AAAA,kBACzBE,EAAY,YAAcZ,CAAiB;AAAA,gBAC7CY,EAAY,UAAYX,CAAe;AAAA,SAAA,CAEpD,EACA,KAAK;AAAA,CAAI,CAAC;AAAA,WAGCY,EAAYT,EAAQ,QAAQ,IAAA,EAAO,QAAQ,EAG7C,GAAA,CACI,MAAAF,EAAW,OAAOW,CAAS,CAAA,MAC3B,CACN,MAAMX,EAAW,MAAMW,EAAW,CAAE,UAAW,GAAM,CAAA,CAIvD,MAAMX,EAAW,UACfE,EAAQS,EAAW,aAAa,EAChCF,CACF,EAEA,QAAQ,IAAI,kCAAkC,QACvCG,EAAO,CACN,QAAA,MAAM,4BAA6BA,CAAK,CAAA,CAClD,CAEJ,CACF"}
|
package/dist/styles.css
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.15 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:0 0% 3.9%;--card:0 0% 100%;--card-foreground:0 0% 3.9%;--popover:0 0% 100%;--popover-foreground:0 0% 3.9%;--primary:0 0% 9%;--primary-foreground:0 0% 98%;--secondary:0 0% 96.1%;--secondary-foreground:0 0% 9%;--muted:0 0% 96.1%;--muted-foreground:0 0% 45.1%;--accent:0 0% 96.1%;--accent-foreground:0 0% 9%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:0 0% 89.8%;--input:0 0% 89.8%;--ring:0 0% 3.9%;--chart-1:12 76% 61%;--chart-2:173 58% 39%;--chart-3:197 37% 24%;--chart-4:43 74% 66%;--chart-5:27 87% 67%;--radius:0.5rem}.dark{--background:0 0% 3.9%;--foreground:0 0% 98%;--card:0 0% 3.9%;--card-foreground:0 0% 98%;--popover:0 0% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:0 0% 9%;--secondary:0 0% 14.9%;--secondary-foreground:0 0% 98%;--muted:0 0% 14.9%;--muted-foreground:0 0% 63.9%;--accent:0 0% 14.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:0 0% 14.9%;--input:0 0% 14.9%;--ring:0 0% 83.1%;--chart-1:220 70% 50%;--chart-2:160 60% 45%;--chart-3:30 80% 55%;--chart-4:280 65% 60%;--chart-5:340 75% 55%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.left-1{left:.25rem}.left-\[50\%\]{left:50%}.right-1{right:.25rem}.right-2{right:.5rem}.right-4{right:1rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-50{z-index:50}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mt-2{margin-top:.5rem}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.h-10{height:2.5rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-px{height:1px}.max-h-96{max-height:24rem}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-full{width:100%}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-lg{max-width:32rem}.border-collapse{border-collapse:collapse}.translate-x-\[-50\%\]{--tw-translate-x:-50%}.translate-x-\[-50\%\],.translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-\[-50\%\]{--tw-translate-y:-50%}.cursor-default{cursor:default}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.bg-black\/80{background-color:rgba(0,0,0,.8)}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-2{padding-left:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.text-center{text-align:center}.text-\[0\.8rem\]{font-size:.8rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-md,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-offset-white{--tw-ring-offset-color:#fff}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-zinc-950::file-selector-button{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.placeholder\:text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\:text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:bg-red-500\/80:hover{background-color:rgba(239,68,68,.8)}.hover\:bg-red-500\/90:hover{background-color:rgba(239,68,68,.9)}.hover\:bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\:bg-zinc-100\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\:bg-zinc-900:hover{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.hover\:bg-zinc-900\/80:hover{background-color:rgba(24,24,27,.8)}.hover\:bg-zinc-900\/90:hover{background-color:rgba(24,24,27,.9)}.hover\:text-zinc-50:hover{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.hover\:text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\:bg-zinc-900:focus{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.focus\:text-zinc-50:focus{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.focus\:text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-1:focus,.focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(99 102 241/var(--tw-ring-opacity,1))}.focus\:ring-zinc-950:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity,1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-zinc-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity,1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.aria-selected\:bg-zinc-100[aria-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.aria-selected\:bg-zinc-100\/50[aria-selected=true]{background-color:hsla(240,5%,96%,.5)}.aria-selected\:text-zinc-500[aria-selected=true]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.aria-selected\:text-zinc-900[aria-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\[side\=right\]\:translate-x-1[data-side=right],.data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\[state\=active\]\:bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\[state\=open\]\:bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\[state\=active\]\:text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\[state\=open\]\:text-zinc-500[data-state=open]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.dark\:border-gray-600:is(.dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:border-zinc-800:is(.dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:bg-red-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\:bg-zinc-50:is(.dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\:bg-zinc-800:is(.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\:bg-zinc-950:is(.dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:text-white:is(.dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:text-zinc-400:is(.dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\:text-zinc-50:is(.dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\:text-zinc-900:is(.dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\:ring-offset-zinc-950:is(.dark *){--tw-ring-offset-color:#09090b}.dark\:file\:text-zinc-50:is(.dark *)::file-selector-button{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\:placeholder\:text-zinc-400:is(.dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\:placeholder\:text-zinc-400:is(.dark *)::placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:bg-red-900\/80:hover:is(.dark *){background-color:rgba(127,29,29,.8)}.dark\:hover\:bg-red-900\/90:hover:is(.dark *){background-color:rgba(127,29,29,.9)}.dark\:hover\:bg-zinc-50:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\:hover\:bg-zinc-50\/80:hover:is(.dark *){background-color:hsla(0,0%,98%,.8)}.dark\:hover\:bg-zinc-50\/90:hover:is(.dark *){background-color:hsla(0,0%,98%,.9)}.dark\:hover\:bg-zinc-800:hover:is(.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\:hover\:bg-zinc-800\/80:hover:is(.dark *){background-color:rgba(39,39,42,.8)}.dark\:hover\:text-zinc-50:hover:is(.dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\:hover\:text-zinc-900:hover:is(.dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\:focus\:bg-zinc-50:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\:focus\:bg-zinc-800:focus:is(.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\:focus\:text-zinc-50:focus:is(.dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\:focus\:text-zinc-900:focus:is(.dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\:focus\:ring-zinc-300:focus:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity,1))}.dark\:focus-visible\:ring-zinc-300:focus-visible:is(.dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity,1))}.dark\:aria-selected\:bg-zinc-800[aria-selected=true]:is(.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\:aria-selected\:bg-zinc-800\/50[aria-selected=true]:is(.dark *){background-color:rgba(39,39,42,.5)}.dark\:aria-selected\:text-zinc-400[aria-selected=true]:is(.dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\:aria-selected\:text-zinc-50[aria-selected=true]:is(.dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\:data-\[state\=active\]\:bg-zinc-950[data-state=active]:is(.dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\:data-\[state\=open\]\:bg-zinc-800[data-state=open]:is(.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\:data-\[state\=active\]\:text-zinc-50[data-state=active]:is(.dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\:data-\[state\=open\]\:text-zinc-400[data-state=open]:is(.dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.sm\:space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.sm\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:text-sm{font-size:.875rem;line-height:1.25rem}}.\[\&\:has\(\>\.day-range-end\)\]\:rounded-r-md:has(>.day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\>\.day-range-start\)\]\:rounded-l-md:has(>.day-range-start){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:rounded-md:has([aria-selected]){border-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:bg-zinc-100:has([aria-selected]){--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:has([aria-selected]):first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:has([aria-selected]):last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.dark\:\[\&\:has\(\[aria-selected\]\)\]\:bg-zinc-800:has([aria-selected]):is(.dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-zinc-100\/50:has([aria-selected].day-outside){background-color:hsla(240,5%,96%,.5)}.dark\:\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-zinc-800\/50:has([aria-selected].day-outside):is(.dark *){background-color:rgba(39,39,42,.5)}.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}
|
package/package.json
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
{
|
2
|
+
"name": "tanstack-start-sitemap",
|
3
|
+
"private": false,
|
4
|
+
"version": "0.0.1",
|
5
|
+
"type": "module",
|
6
|
+
"types": "dist/index.d.ts",
|
7
|
+
"license": "MIT",
|
8
|
+
"exports": {
|
9
|
+
".": {
|
10
|
+
"types": "./dist/index.d.ts",
|
11
|
+
"import": "./dist/index.es.js",
|
12
|
+
"require": "./dist/index.umd.js"
|
13
|
+
},
|
14
|
+
"./styles.css": {
|
15
|
+
"require": "./dist/styles.css",
|
16
|
+
"default": "./dist/styles.css"
|
17
|
+
}
|
18
|
+
},
|
19
|
+
"files": [
|
20
|
+
"dist"
|
21
|
+
],
|
22
|
+
"peerDependencies": {
|
23
|
+
"react": "^18.3.1",
|
24
|
+
"react-dom": "^18.3.1"
|
25
|
+
},
|
26
|
+
"devDependencies": {
|
27
|
+
"@chromatic-com/storybook": "^3.2.2",
|
28
|
+
"@eslint/js": "^9.13.0",
|
29
|
+
"@storybook/addon-essentials": "^8.4.4",
|
30
|
+
"@storybook/addon-interactions": "^8.4.4",
|
31
|
+
"@storybook/addon-links": "^8.4.4",
|
32
|
+
"@storybook/addon-onboarding": "^8.4.4",
|
33
|
+
"@storybook/blocks": "^8.4.4",
|
34
|
+
"@storybook/manager-api": "^8.4.4",
|
35
|
+
"@storybook/react": "^8.4.4",
|
36
|
+
"@storybook/react-vite": "^8.4.4",
|
37
|
+
"@storybook/test": "^8.4.4",
|
38
|
+
"@storybook/theming": "^8.4.4",
|
39
|
+
"@types/node": "^22.9.1",
|
40
|
+
"@types/react": "^18.3.12",
|
41
|
+
"@types/react-dom": "^18.3.1",
|
42
|
+
"@vitejs/plugin-react": "^4.3.3",
|
43
|
+
"autoprefixer": "^10.4.20",
|
44
|
+
"concurrently": "^9.1.0",
|
45
|
+
"eslint": "^9.13.0",
|
46
|
+
"eslint-plugin-react-hooks": "^5.0.0",
|
47
|
+
"eslint-plugin-react-refresh": "^0.4.14",
|
48
|
+
"eslint-plugin-storybook": "^0.11.1",
|
49
|
+
"globals": "^15.11.0",
|
50
|
+
"postcss": "^8.4.49",
|
51
|
+
"storybook": "^8.4.4",
|
52
|
+
"tailwindcss": "^3.4.15",
|
53
|
+
"typescript": "~5.6.2",
|
54
|
+
"typescript-eslint": "^8.11.0",
|
55
|
+
"vite": "^5.4.11",
|
56
|
+
"vite-plugin-dts": "^4.3.0"
|
57
|
+
},
|
58
|
+
"eslintConfig": {
|
59
|
+
"extends": [
|
60
|
+
"plugin:storybook/recommended"
|
61
|
+
]
|
62
|
+
},
|
63
|
+
"dependencies": {
|
64
|
+
"@hookform/resolvers": "^3.9.1",
|
65
|
+
"@radix-ui/react-dialog": "^1.1.2",
|
66
|
+
"@radix-ui/react-popover": "^1.1.2",
|
67
|
+
"@radix-ui/react-select": "^2.1.2",
|
68
|
+
"@radix-ui/react-slot": "^1.1.0",
|
69
|
+
"@radix-ui/react-tabs": "^1.1.1",
|
70
|
+
"class-variance-authority": "^0.7.0",
|
71
|
+
"clsx": "^2.1.1",
|
72
|
+
"date-fns": "^4.1.0",
|
73
|
+
"framer-motion": "^11.11.17",
|
74
|
+
"lucide-react": "^0.460.0",
|
75
|
+
"nanoid": "^5.0.8",
|
76
|
+
"react-day-picker": "8.10.1",
|
77
|
+
"react-hook-form": "^7.53.2",
|
78
|
+
"react-icons": "^5.3.0",
|
79
|
+
"tailwind-merge": "^2.5.4",
|
80
|
+
"tailwindcss-animate": "^1.0.7",
|
81
|
+
"zod": "^3.23.8"
|
82
|
+
},
|
83
|
+
"scripts": {
|
84
|
+
"dev": "vite",
|
85
|
+
"build": "tsc && vite build && pnpm run build:css",
|
86
|
+
"build:css": "tailwindcss -m -i ./src/tailwind-entry.css -o ./dist/styles.css",
|
87
|
+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
88
|
+
"preview": "vite preview",
|
89
|
+
"storybook": "concurrently \"pnpm run storybook:css\" \"storybook dev\"",
|
90
|
+
"storybook:css": "tailwindcss -w -i ./src/tailwind-entry.css -o ./src/index.css",
|
91
|
+
"build-storybook": "concurrently \"pnpm run build-storybook:css\" \"storybook build\"",
|
92
|
+
"build-storybook:css": "tailwindcss -m -i ./src/tailwind-entry.css -o ./src/index.css",
|
93
|
+
"test-ct": "playwright test -c playwright-ct.config.ts"
|
94
|
+
}
|
95
|
+
}
|