First commit
						commit
						d8f7645dd7
					
				| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					*.exe
 | 
				
			||||||
 | 
					node_modules
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,73 @@
 | 
				
			||||||
 | 
					import express from "express";
 | 
				
			||||||
 | 
					import {Liquid} from 'liquidjs';
 | 
				
			||||||
 | 
					import path from "path";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const liquidEngine = new Liquid({root: path.resolve(__dirname, 'views/'), jsTruthy: true});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const app = express();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.use(express.json()); // to support JSON-encoded bodies
 | 
				
			||||||
 | 
					app.use(express.urlencoded()); // to support URL-encoded bodies
 | 
				
			||||||
 | 
					app.engine('liquid', liquidEngine.express());
 | 
				
			||||||
 | 
					app.set('views', [path.join(__dirname, 'views')]);
 | 
				
			||||||
 | 
					app.set('view engine', 'liquid');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.use('/static', express.static('static'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.get('/', (req, res) => {
 | 
				
			||||||
 | 
					    res.render('index');
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function extractInfoFromPythonDepString(depstring) {
 | 
				
			||||||
 | 
					    const info = {
 | 
				
			||||||
 | 
					        name: "",
 | 
				
			||||||
 | 
					        version_operator: "",
 | 
				
			||||||
 | 
					        version: "",
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const parts = depstring.split(';');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const namever = parts[0];
 | 
				
			||||||
 | 
					    // https://stackoverflow.com/questions/24470567/what-are-the-requirements-for-naming-python-modules
 | 
				
			||||||
 | 
					    const match = namever.match(/^(?<name>[a-zA-Z_][a-zA-Z_0-9]*)(?<operator>.=)(?<version>[0-9.])/);
 | 
				
			||||||
 | 
					    if(match !== null && match.groups !== undefined) {
 | 
				
			||||||
 | 
					        info.name = match.groups['name'];
 | 
				
			||||||
 | 
					        info.operator = match.groups['operator'];
 | 
				
			||||||
 | 
					        info.version = match.groups['version'];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return info;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.post('/api/dependency', async (req, res) => {
 | 
				
			||||||
 | 
					    const packagename = req.body.package;
 | 
				
			||||||
 | 
					    console.log(packagename)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    const pypires = await fetch(`https://pypi.org/pypi/${packagename}/json`);
 | 
				
			||||||
 | 
					    const json = await pypires.json();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const name = json.info.name;
 | 
				
			||||||
 | 
					    const summary = json.info.summary;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const deps = json.info.requires_dist.map( e => extractInfoFromPythonDepString(e) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const versions = json.releases;
 | 
				
			||||||
 | 
					    const latestVersionNumber = Object.entries(versions).sort( ([k1, v1], [k2, v2]) => k2 - v2 )[0];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const latestVersion = versions[latestVersionNumber];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    const size = latestVersion.sort((a, b) => b.size - a.size )[0].size;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    res.render('dependency', {
 | 
				
			||||||
 | 
					        name: name,
 | 
				
			||||||
 | 
					        summary: summary,
 | 
				
			||||||
 | 
					        weight: size,
 | 
				
			||||||
 | 
					        dependencies: deps
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.listen(8080)
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					    font-family: 'Material Icons';
 | 
				
			||||||
 | 
					    font-style: normal;
 | 
				
			||||||
 | 
					    font-weight: 300;
 | 
				
			||||||
 | 
					    src: url(/static/fonts/MaterialSymbolsOutlined.woff2) format('woff2');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@tailwind base;
 | 
				
			||||||
 | 
					@tailwind components;
 | 
				
			||||||
 | 
					@tailwind utilities;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@layer base {
 | 
				
			||||||
 | 
					    html {
 | 
				
			||||||
 | 
					        text-rendering: geometricPrecision;
 | 
				
			||||||
 | 
					        font-smooth: always;
 | 
				
			||||||
 | 
					        -moz-osx-font-smoothing: grayscale;
 | 
				
			||||||
 | 
					        -webkit-font-smoothing: antialiased;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@layer components {
 | 
				
			||||||
 | 
					    .icon {
 | 
				
			||||||
 | 
					        font-family: 'Material Icons';
 | 
				
			||||||
 | 
					        font-size: 1.25em;
 | 
				
			||||||
 | 
					        line-height: 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "compilerOptions": {
 | 
				
			||||||
 | 
					    // Enable latest features
 | 
				
			||||||
 | 
					    "lib": ["ESNext", "DOM"],
 | 
				
			||||||
 | 
					    "target": "ESNext",
 | 
				
			||||||
 | 
					    "module": "ESNext",
 | 
				
			||||||
 | 
					    "moduleDetection": "force",
 | 
				
			||||||
 | 
					    "jsx": "react-jsx",
 | 
				
			||||||
 | 
					    "allowJs": true,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Bundler mode
 | 
				
			||||||
 | 
					    "moduleResolution": "bundler",
 | 
				
			||||||
 | 
					    "allowImportingTsExtensions": true,
 | 
				
			||||||
 | 
					    "verbatimModuleSyntax": true,
 | 
				
			||||||
 | 
					    "noEmit": true,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Best practices
 | 
				
			||||||
 | 
					    "strict": true,
 | 
				
			||||||
 | 
					    "skipLibCheck": true,
 | 
				
			||||||
 | 
					    "noFallthroughCasesInSwitch": true,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Some stricter flags (disabled by default)
 | 
				
			||||||
 | 
					    "noUnusedLocals": false,
 | 
				
			||||||
 | 
					    "noUnusedParameters": false,
 | 
				
			||||||
 | 
					    "noPropertyAccessFromIndexSignature": false
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					{"dependencies":{"express":"^4.19.2","liquidjs":"^10.10.2"},"name":"depyth","module":"index.js","type":"module","devDependencies":{"@types/bun":"latest"},"peerDependencies":{"typescript":"^5.0.0"}}
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -0,0 +1,856 @@
 | 
				
			||||||
 | 
					@font-face {
 | 
				
			||||||
 | 
					  font-family: 'Material Icons';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  font-style: normal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  font-weight: 300;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  src: url(/static/fonts/MaterialSymbolsOutlined.woff2) format('woff2');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
 | 
				
			||||||
 | 
					2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*,
 | 
				
			||||||
 | 
					::before,
 | 
				
			||||||
 | 
					::after {
 | 
				
			||||||
 | 
					  box-sizing: border-box;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  border-width: 0;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  border-style: solid;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  border-color: #e5e7eb;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::before,
 | 
				
			||||||
 | 
					::after {
 | 
				
			||||||
 | 
					  --tw-content: '';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Use a consistent sensible line-height in all browsers.
 | 
				
			||||||
 | 
					2. Prevent adjustments of font size after orientation changes in iOS.
 | 
				
			||||||
 | 
					3. Use a more readable tab size.
 | 
				
			||||||
 | 
					4. Use the user's configured `sans` font-family by default.
 | 
				
			||||||
 | 
					5. Use the user's configured `sans` font-feature-settings by default.
 | 
				
			||||||
 | 
					6. Use the user's configured `sans` font-variation-settings by default.
 | 
				
			||||||
 | 
					7. Disable tap highlights on iOS
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html,
 | 
				
			||||||
 | 
					:host {
 | 
				
			||||||
 | 
					  line-height: 1.5;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  -webkit-text-size-adjust: 100%;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  -moz-tab-size: 4;
 | 
				
			||||||
 | 
					  /* 3 */
 | 
				
			||||||
 | 
					  -o-tab-size: 4;
 | 
				
			||||||
 | 
					     tab-size: 4;
 | 
				
			||||||
 | 
					  /* 3 */
 | 
				
			||||||
 | 
					  font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
 | 
				
			||||||
 | 
					  /* 4 */
 | 
				
			||||||
 | 
					  font-feature-settings: normal;
 | 
				
			||||||
 | 
					  /* 5 */
 | 
				
			||||||
 | 
					  font-variation-settings: normal;
 | 
				
			||||||
 | 
					  /* 6 */
 | 
				
			||||||
 | 
					  -webkit-tap-highlight-color: transparent;
 | 
				
			||||||
 | 
					  /* 7 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Remove the margin in all browsers.
 | 
				
			||||||
 | 
					2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  line-height: inherit;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Add the correct height in Firefox.
 | 
				
			||||||
 | 
					2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
 | 
				
			||||||
 | 
					3. Ensure horizontal rules are visible by default.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hr {
 | 
				
			||||||
 | 
					  height: 0;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  color: inherit;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  border-top-width: 1px;
 | 
				
			||||||
 | 
					  /* 3 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Add the correct text decoration in Chrome, Edge, and Safari.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					abbr:where([title]) {
 | 
				
			||||||
 | 
					  -webkit-text-decoration: underline dotted;
 | 
				
			||||||
 | 
					          text-decoration: underline dotted;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Remove the default font size and weight for headings.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					h1,
 | 
				
			||||||
 | 
					h2,
 | 
				
			||||||
 | 
					h3,
 | 
				
			||||||
 | 
					h4,
 | 
				
			||||||
 | 
					h5,
 | 
				
			||||||
 | 
					h6 {
 | 
				
			||||||
 | 
					  font-size: inherit;
 | 
				
			||||||
 | 
					  font-weight: inherit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Reset links to optimize for opt-in styling instead of opt-out.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					a {
 | 
				
			||||||
 | 
					  color: inherit;
 | 
				
			||||||
 | 
					  text-decoration: inherit;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Add the correct font weight in Edge and Safari.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					b,
 | 
				
			||||||
 | 
					strong {
 | 
				
			||||||
 | 
					  font-weight: bolder;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Use the user's configured `mono` font-family by default.
 | 
				
			||||||
 | 
					2. Use the user's configured `mono` font-feature-settings by default.
 | 
				
			||||||
 | 
					3. Use the user's configured `mono` font-variation-settings by default.
 | 
				
			||||||
 | 
					4. Correct the odd `em` font sizing in all browsers.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					code,
 | 
				
			||||||
 | 
					kbd,
 | 
				
			||||||
 | 
					samp,
 | 
				
			||||||
 | 
					pre {
 | 
				
			||||||
 | 
					  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  font-feature-settings: normal;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  font-variation-settings: normal;
 | 
				
			||||||
 | 
					  /* 3 */
 | 
				
			||||||
 | 
					  font-size: 1em;
 | 
				
			||||||
 | 
					  /* 4 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Add the correct font size in all browsers.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					small {
 | 
				
			||||||
 | 
					  font-size: 80%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Prevent `sub` and `sup` elements from affecting the line height in all browsers.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub,
 | 
				
			||||||
 | 
					sup {
 | 
				
			||||||
 | 
					  font-size: 75%;
 | 
				
			||||||
 | 
					  line-height: 0;
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					  vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub {
 | 
				
			||||||
 | 
					  bottom: -0.25em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sup {
 | 
				
			||||||
 | 
					  top: -0.5em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
 | 
				
			||||||
 | 
					2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
 | 
				
			||||||
 | 
					3. Remove gaps between table borders by default.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					table {
 | 
				
			||||||
 | 
					  text-indent: 0;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  border-color: inherit;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  border-collapse: collapse;
 | 
				
			||||||
 | 
					  /* 3 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Change the font styles in all browsers.
 | 
				
			||||||
 | 
					2. Remove the margin in Firefox and Safari.
 | 
				
			||||||
 | 
					3. Remove default padding in all browsers.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					input,
 | 
				
			||||||
 | 
					optgroup,
 | 
				
			||||||
 | 
					select,
 | 
				
			||||||
 | 
					textarea {
 | 
				
			||||||
 | 
					  font-family: inherit;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  font-feature-settings: inherit;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  font-variation-settings: inherit;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  font-size: 100%;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  font-weight: inherit;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  line-height: inherit;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  color: inherit;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					  /* 3 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Remove the inheritance of text transform in Edge and Firefox.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					select {
 | 
				
			||||||
 | 
					  text-transform: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Correct the inability to style clickable types in iOS and Safari.
 | 
				
			||||||
 | 
					2. Remove default button styles.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					[type='button'],
 | 
				
			||||||
 | 
					[type='reset'],
 | 
				
			||||||
 | 
					[type='submit'] {
 | 
				
			||||||
 | 
					  -webkit-appearance: button;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  background-color: transparent;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					  background-image: none;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Use the modern Firefox focus style for all focusable elements.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:-moz-focusring {
 | 
				
			||||||
 | 
					  outline: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:-moz-ui-invalid {
 | 
				
			||||||
 | 
					  box-shadow: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Add the correct vertical alignment in Chrome and Firefox.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					progress {
 | 
				
			||||||
 | 
					  vertical-align: baseline;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Correct the cursor style of increment and decrement buttons in Safari.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::-webkit-inner-spin-button,
 | 
				
			||||||
 | 
					::-webkit-outer-spin-button {
 | 
				
			||||||
 | 
					  height: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Correct the odd appearance in Chrome and Safari.
 | 
				
			||||||
 | 
					2. Correct the outline style in Safari.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[type='search'] {
 | 
				
			||||||
 | 
					  -webkit-appearance: textfield;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  outline-offset: -2px;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Remove the inner padding in Chrome and Safari on macOS.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::-webkit-search-decoration {
 | 
				
			||||||
 | 
					  -webkit-appearance: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Correct the inability to style clickable types in iOS and Safari.
 | 
				
			||||||
 | 
					2. Change font properties to `inherit` in Safari.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::-webkit-file-upload-button {
 | 
				
			||||||
 | 
					  -webkit-appearance: button;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  font: inherit;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Add the correct display in Chrome and Safari.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					summary {
 | 
				
			||||||
 | 
					  display: list-item;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Removes the default spacing and border for appropriate elements.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					blockquote,
 | 
				
			||||||
 | 
					dl,
 | 
				
			||||||
 | 
					dd,
 | 
				
			||||||
 | 
					h1,
 | 
				
			||||||
 | 
					h2,
 | 
				
			||||||
 | 
					h3,
 | 
				
			||||||
 | 
					h4,
 | 
				
			||||||
 | 
					h5,
 | 
				
			||||||
 | 
					h6,
 | 
				
			||||||
 | 
					hr,
 | 
				
			||||||
 | 
					figure,
 | 
				
			||||||
 | 
					p,
 | 
				
			||||||
 | 
					pre {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fieldset {
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					legend {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ol,
 | 
				
			||||||
 | 
					ul,
 | 
				
			||||||
 | 
					menu {
 | 
				
			||||||
 | 
					  list-style: none;
 | 
				
			||||||
 | 
					  margin: 0;
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Reset default styling for dialogs.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dialog {
 | 
				
			||||||
 | 
					  padding: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Prevent resizing textareas horizontally by default.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					textarea {
 | 
				
			||||||
 | 
					  resize: vertical;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
 | 
				
			||||||
 | 
					2. Set the default placeholder color to the user's configured gray 400 color.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input::-moz-placeholder, textarea::-moz-placeholder {
 | 
				
			||||||
 | 
					  opacity: 1;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  color: #9ca3af;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input::placeholder,
 | 
				
			||||||
 | 
					textarea::placeholder {
 | 
				
			||||||
 | 
					  opacity: 1;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  color: #9ca3af;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Set the default cursor for buttons.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					button,
 | 
				
			||||||
 | 
					[role="button"] {
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Make sure disabled buttons don't get the pointer cursor.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:disabled {
 | 
				
			||||||
 | 
					  cursor: default;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
 | 
				
			||||||
 | 
					2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
 | 
				
			||||||
 | 
					   This can trigger a poorly considered lint error in some tools but is included by design.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img,
 | 
				
			||||||
 | 
					svg,
 | 
				
			||||||
 | 
					video,
 | 
				
			||||||
 | 
					canvas,
 | 
				
			||||||
 | 
					audio,
 | 
				
			||||||
 | 
					iframe,
 | 
				
			||||||
 | 
					embed,
 | 
				
			||||||
 | 
					object {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  /* 1 */
 | 
				
			||||||
 | 
					  vertical-align: middle;
 | 
				
			||||||
 | 
					  /* 2 */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					img,
 | 
				
			||||||
 | 
					video {
 | 
				
			||||||
 | 
					  max-width: 100%;
 | 
				
			||||||
 | 
					  height: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Make elements with the HTML hidden attribute stay hidden by default */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[hidden] {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					html {
 | 
				
			||||||
 | 
					  text-rendering: geometricPrecision;
 | 
				
			||||||
 | 
					  font-smooth: always;
 | 
				
			||||||
 | 
					  -moz-osx-font-smoothing: grayscale;
 | 
				
			||||||
 | 
					  -webkit-font-smoothing: antialiased;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*, ::before, ::after {
 | 
				
			||||||
 | 
					  --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: rgb(59 130 246 / 0.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:  ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					::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: rgb(59 130 246 / 0.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:  ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.container {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (min-width: 640px) {
 | 
				
			||||||
 | 
					  .container {
 | 
				
			||||||
 | 
					    max-width: 640px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (min-width: 768px) {
 | 
				
			||||||
 | 
					  .container {
 | 
				
			||||||
 | 
					    max-width: 768px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (min-width: 1024px) {
 | 
				
			||||||
 | 
					  .container {
 | 
				
			||||||
 | 
					    max-width: 1024px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (min-width: 1280px) {
 | 
				
			||||||
 | 
					  .container {
 | 
				
			||||||
 | 
					    max-width: 1280px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@media (min-width: 1536px) {
 | 
				
			||||||
 | 
					  .container {
 | 
				
			||||||
 | 
					    max-width: 1536px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.m-2 {
 | 
				
			||||||
 | 
					  margin: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.m-1 {
 | 
				
			||||||
 | 
					  margin: 0.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.my-4 {
 | 
				
			||||||
 | 
					  margin-top: 1rem;
 | 
				
			||||||
 | 
					  margin-bottom: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.mx-auto {
 | 
				
			||||||
 | 
					  margin-left: auto;
 | 
				
			||||||
 | 
					  margin-right: auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.my-1 {
 | 
				
			||||||
 | 
					  margin-top: 0.25rem;
 | 
				
			||||||
 | 
					  margin-bottom: 0.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.my-8 {
 | 
				
			||||||
 | 
					  margin-top: 2rem;
 | 
				
			||||||
 | 
					  margin-bottom: 2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.ml-2 {
 | 
				
			||||||
 | 
					  margin-left: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.mt-1 {
 | 
				
			||||||
 | 
					  margin-top: 0.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.mt-2 {
 | 
				
			||||||
 | 
					  margin-top: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.ml-1 {
 | 
				
			||||||
 | 
					  margin-left: 0.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.block {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.flex {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.hidden {
 | 
				
			||||||
 | 
					  display: none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.h-full {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.h-max {
 | 
				
			||||||
 | 
					  height: -moz-max-content;
 | 
				
			||||||
 | 
					  height: max-content;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.h-min {
 | 
				
			||||||
 | 
					  height: -moz-min-content;
 | 
				
			||||||
 | 
					  height: min-content;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.min-h-max {
 | 
				
			||||||
 | 
					  min-height: -moz-max-content;
 | 
				
			||||||
 | 
					  min-height: max-content;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.min-h-screen {
 | 
				
			||||||
 | 
					  min-height: 100vh;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.w-fit {
 | 
				
			||||||
 | 
					  width: -moz-fit-content;
 | 
				
			||||||
 | 
					  width: fit-content;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.w-full {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.min-w-\[50vw\] {
 | 
				
			||||||
 | 
					  min-width: 50vw;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.min-w-\[80vw\] {
 | 
				
			||||||
 | 
					  min-width: 80vw;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.max-w-\[600px\] {
 | 
				
			||||||
 | 
					  max-width: 600px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.max-w-\[300px\] {
 | 
				
			||||||
 | 
					  max-width: 300px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.max-w-\[200px\] {
 | 
				
			||||||
 | 
					  max-width: 200px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.max-w-\[20rem\] {
 | 
				
			||||||
 | 
					  max-width: 20rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.max-w-\[800px\] {
 | 
				
			||||||
 | 
					  max-width: 800px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.flex-1 {
 | 
				
			||||||
 | 
					  flex: 1 1 0%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.list-disc {
 | 
				
			||||||
 | 
					  list-style-type: disc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.flex-col {
 | 
				
			||||||
 | 
					  flex-direction: column;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.items-center {
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.justify-center {
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.border-2 {
 | 
				
			||||||
 | 
					  border-width: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.border {
 | 
				
			||||||
 | 
					  border-width: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.border-r-0 {
 | 
				
			||||||
 | 
					  border-right-width: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.border-black {
 | 
				
			||||||
 | 
					  --tw-border-opacity: 1;
 | 
				
			||||||
 | 
					  border-color: rgb(0 0 0 / var(--tw-border-opacity));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.bg-cyan-700 {
 | 
				
			||||||
 | 
					  --tw-bg-opacity: 1;
 | 
				
			||||||
 | 
					  background-color: rgb(14 116 144 / var(--tw-bg-opacity));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.bg-emerald-400 {
 | 
				
			||||||
 | 
					  --tw-bg-opacity: 1;
 | 
				
			||||||
 | 
					  background-color: rgb(52 211 153 / var(--tw-bg-opacity));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.bg-emerald-300 {
 | 
				
			||||||
 | 
					  --tw-bg-opacity: 1;
 | 
				
			||||||
 | 
					  background-color: rgb(110 231 183 / var(--tw-bg-opacity));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.p-4 {
 | 
				
			||||||
 | 
					  padding: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.p-2 {
 | 
				
			||||||
 | 
					  padding: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.px-2 {
 | 
				
			||||||
 | 
					  padding-left: 0.5rem;
 | 
				
			||||||
 | 
					  padding-right: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.py-1 {
 | 
				
			||||||
 | 
					  padding-top: 0.25rem;
 | 
				
			||||||
 | 
					  padding-bottom: 0.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.px-8 {
 | 
				
			||||||
 | 
					  padding-left: 2rem;
 | 
				
			||||||
 | 
					  padding-right: 2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.py-8 {
 | 
				
			||||||
 | 
					  padding-top: 2rem;
 | 
				
			||||||
 | 
					  padding-bottom: 2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.pl-0 {
 | 
				
			||||||
 | 
					  padding-left: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.pl-4 {
 | 
				
			||||||
 | 
					  padding-left: 1rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-center {
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.align-middle {
 | 
				
			||||||
 | 
					  vertical-align: middle;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.font-mono {
 | 
				
			||||||
 | 
					  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-4xl {
 | 
				
			||||||
 | 
					  font-size: 2.25rem;
 | 
				
			||||||
 | 
					  line-height: 2.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-xl {
 | 
				
			||||||
 | 
					  font-size: 1.25rem;
 | 
				
			||||||
 | 
					  line-height: 1.75rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-sm {
 | 
				
			||||||
 | 
					  font-size: 0.875rem;
 | 
				
			||||||
 | 
					  line-height: 1.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-2xl {
 | 
				
			||||||
 | 
					  font-size: 1.5rem;
 | 
				
			||||||
 | 
					  line-height: 2rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-3xl {
 | 
				
			||||||
 | 
					  font-size: 1.875rem;
 | 
				
			||||||
 | 
					  line-height: 2.25rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-5xl {
 | 
				
			||||||
 | 
					  font-size: 3rem;
 | 
				
			||||||
 | 
					  line-height: 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.font-bold {
 | 
				
			||||||
 | 
					  font-weight: 700;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-black {
 | 
				
			||||||
 | 
					  --tw-text-opacity: 1;
 | 
				
			||||||
 | 
					  color: rgb(0 0 0 / var(--tw-text-opacity));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.text-white {
 | 
				
			||||||
 | 
					  --tw-text-opacity: 1;
 | 
				
			||||||
 | 
					  color: rgb(255 255 255 / var(--tw-text-opacity));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    content: ["./views/**/*.liquid"],
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,13 @@
 | 
				
			||||||
 | 
					<div class="p-2 w-full border border-black">
 | 
				
			||||||
 | 
					    <p class="text-2xl font-mono">{{name}} <span class="text-sm">{{weight}}</span></p>
 | 
				
			||||||
 | 
					    <p>{{summary}}</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <ul class="mt-2">
 | 
				
			||||||
 | 
					        {% for dep in dependencies %}
 | 
				
			||||||
 | 
					            <form class="p-2 w-full border border-black" hx-post="/api/dependency" hx-swap="outerHTML" hx-trigger="load delay:100ms">
 | 
				
			||||||
 | 
					                <input type="hidden" name="package" value="{{dep.name}}"/>
 | 
				
			||||||
 | 
					                <p class="text-2xl font-mono">{{dep.name}}</p>
 | 
				
			||||||
 | 
					            </form>
 | 
				
			||||||
 | 
					        {% endfor %}
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					{% layout 'layout.liquid' %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block head %}
 | 
				
			||||||
 | 
					<title>Depyth</title>
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% block content %}
 | 
				
			||||||
 | 
					<main class="p-4 mx-auto flex-1 max-w-[800px]">
 | 
				
			||||||
 | 
					    <h1 class="text-5xl my-4">Depyth</h1>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    <form hx-post="/api/dependency" hx-target="#displaybox" hx-swap="innerHTML" class="flex flex-col">
 | 
				
			||||||
 | 
					        <label for="package-name-input" class="block my-1">Enter the name of the package to inspect</label>
 | 
				
			||||||
 | 
					        <div class="flex h-min w-full">
 | 
				
			||||||
 | 
					            <input 
 | 
				
			||||||
 | 
					            type="text" 
 | 
				
			||||||
 | 
					            placeholder="torch" 
 | 
				
			||||||
 | 
					            id="package-name-input" 
 | 
				
			||||||
 | 
					            name="package"
 | 
				
			||||||
 | 
					            autofocus 
 | 
				
			||||||
 | 
					            required 
 | 
				
			||||||
 | 
					            class="border-2 border-black border-r-0 px-2 py-1 flex-1"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					            <button class="h-full w-fit px-2 py-1 bg-cyan-700 text-white flex border-2 border-black">submit</button>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </form>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div class="flex flex-col w-full my-8" id="displaybox">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <!--<div class="p-2 w-full border border-black">
 | 
				
			||||||
 | 
					            <p class="text-2xl font-mono">torch <span class="text-sm">158kb</span></p>
 | 
				
			||||||
 | 
					            <p>Tensors and Dynamic neural networks in Python with strong GPU acceleration.</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <ul class="mt-2">
 | 
				
			||||||
 | 
					                <div class="p-2 w-full border border-black">
 | 
				
			||||||
 | 
					                    <p class="text-2xl font-mono">filelock <span class="text-sm">33kb</span></p>
 | 
				
			||||||
 | 
					                    <p>A platform independent file lock.</p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </ul>
 | 
				
			||||||
 | 
					        </div>-->
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</main>
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html class="h-max min-h-screen flex flex-col" lang="en">
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
				
			||||||
 | 
					    <title>Document</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <meta name="color-scheme" content="light" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <link href="/static/styles.css" rel="stylesheet">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="/static/htmx.min.js" defer></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {% block head %}{% endblock %}
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body class="w-full max-w-screen flex-1 h-full min-h-max flex text-black">
 | 
				
			||||||
 | 
					    {% block content %}{% endblock %}
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
		Loading…
	
		Reference in New Issue