mirror of
https://github.com/jzillmann/pdf-to-markdown.git
synced 2025-06-25 12:01:45 +02:00
Initial UI module
This commit is contained in:
parent
0aa56386c7
commit
26e5b785cd
16
ui/README.md
Normal file
16
ui/README.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# PDF-To-Markdown Converter Core
|
||||||
|
|
||||||
|
Javascript UI to parse PDF files and convert them into Markdown format. Online at http://pdf2md.morethan.io!
|
||||||
|
|
||||||
|
## Contribute
|
||||||
|
|
||||||
|
Use the [issue tracker](https://github.com/jzillmann/pdf-to-markdown/issues) and/or open [pull requests](https://github.com/jzillmann/pdf-to-markdown/pulls)!
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
- `npm install` Download all necessary npm packages
|
||||||
|
- `npm start` Run local development build
|
||||||
|
|
||||||
|
## Release
|
||||||
|
|
||||||
|
//TBD
|
5336
ui/package-lock.json
generated
Normal file
5336
ui/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
51
ui/package.json
Normal file
51
ui/package.json
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
"name": "pdf-to-markdown",
|
||||||
|
"version": "0.2.0",
|
||||||
|
"description": "A PDF to Markdown Converter",
|
||||||
|
"keywords": [
|
||||||
|
"PDF",
|
||||||
|
"Markdown",
|
||||||
|
"Converter"
|
||||||
|
],
|
||||||
|
"author": "Johannes Zillmann",
|
||||||
|
"license": "AGPL-3.0",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/jzillmann/pdf-to-markdown"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"start": "snowpack dev",
|
||||||
|
"build": "snowpack build",
|
||||||
|
"svelte-check": "svelte-check",
|
||||||
|
"test": "web-test-runner \"src/**/*.test.ts\""
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"pdfjs-dist": "^2.5.207",
|
||||||
|
"svelte-file-dropzone": "0.0.15"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@snowpack/plugin-dotenv": "^2.0.5",
|
||||||
|
"@snowpack/plugin-svelte": "^3.4.0",
|
||||||
|
"@snowpack/plugin-typescript": "^1.1.1",
|
||||||
|
"@snowpack/web-test-runner-plugin": "^0.1.5",
|
||||||
|
"@testing-library/svelte": "^3.0.0",
|
||||||
|
"@types/chai": "^4.2.13",
|
||||||
|
"@types/snowpack-env": "^2.3.2",
|
||||||
|
"@web/test-runner": "^0.10.0",
|
||||||
|
"chai": "^4.2.0",
|
||||||
|
"postcss": "^8.2.2",
|
||||||
|
"postcss-cli": "^8.3.1",
|
||||||
|
"postcss-import": "^14.0.0",
|
||||||
|
"postcss-load-config": "^3.0.0",
|
||||||
|
"prettier": "^2.2.1",
|
||||||
|
"prettier-plugin-svelte": "^1.4.2",
|
||||||
|
"rollup-plugin-svelte": "^7.0.0",
|
||||||
|
"snowpack": "^2.18.4",
|
||||||
|
"svelte": "^3.31.1",
|
||||||
|
"svelte-check": "^1.1.24",
|
||||||
|
"svelte-hero-icons": "^1.0.7",
|
||||||
|
"svelte-preprocess": "^4.6.1",
|
||||||
|
"tailwindcss": "^2.0.2",
|
||||||
|
"typescript": "^4.0.0"
|
||||||
|
}
|
||||||
|
}
|
7
ui/postcss.config.js
Normal file
7
ui/postcss.config.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
module.exports = {
|
||||||
|
plugins: [
|
||||||
|
require("postcss-import"),
|
||||||
|
require("tailwindcss"),
|
||||||
|
require("autoprefixer"),
|
||||||
|
],
|
||||||
|
};
|
BIN
ui/public/favicon.ico
Normal file
BIN
ui/public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 318 B |
23
ui/public/index.html
Normal file
23
ui/public/index.html
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link rel="icon" href="/favicon.ico" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<meta name="description" content="Web site created using create-snowpack-app" />
|
||||||
|
<title>Snowpack App</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
<script type="module" src="/dist/index.js"></script>
|
||||||
|
<!--
|
||||||
|
This HTML file is a template.
|
||||||
|
If you open it directly in the browser, you will see an empty page.
|
||||||
|
|
||||||
|
You can add webfonts, meta tags, or analytics to this file.
|
||||||
|
The build step will place the bundled scripts into the <body> tag.
|
||||||
|
|
||||||
|
To begin the development, run `npm start` or `yarn start`.
|
||||||
|
To create a production bundle, use `npm run build` or `yarn build`.
|
||||||
|
--></body>
|
||||||
|
</html>
|
3
ui/public/robots.txt
Normal file
3
ui/public/robots.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# https://www.robotstxt.org/robotstxt.html
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|
33
ui/snowpack.config.js
Normal file
33
ui/snowpack.config.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
/** @type {import("snowpack").SnowpackUserConfig } */
|
||||||
|
module.exports = {
|
||||||
|
mount: {
|
||||||
|
public: { url: '/', static: true },
|
||||||
|
src: { url: '/dist' },
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
['@snowpack/plugin-build-script', { cmd: 'postcss', input: ['.css'], output: ['.css'] }],
|
||||||
|
'@snowpack/plugin-svelte',
|
||||||
|
'@snowpack/plugin-dotenv',
|
||||||
|
'@snowpack/plugin-typescript',
|
||||||
|
],
|
||||||
|
install: [
|
||||||
|
/* ... */
|
||||||
|
],
|
||||||
|
installOptions: {
|
||||||
|
installTypes: true,
|
||||||
|
packageLookupFields: ['svelte', 'module', 'main'],
|
||||||
|
//rollup: { plugins: [require('rollup-plugin-svelte')()] },
|
||||||
|
},
|
||||||
|
devOptions: {
|
||||||
|
/* ... */
|
||||||
|
},
|
||||||
|
buildOptions: {
|
||||||
|
/* ... */
|
||||||
|
},
|
||||||
|
proxy: {
|
||||||
|
/* ... */
|
||||||
|
},
|
||||||
|
alias: {
|
||||||
|
/* ... */
|
||||||
|
},
|
||||||
|
};
|
17
ui/src/App.svelte
Normal file
17
ui/src/App.svelte
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
import Upload from './Upload.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="text-2xl font-semibold font-serif text-center bg-gray-400">PDF to Markdown Converter</div>
|
||||||
|
<main class="container mx-auto mt-5 h-full">
|
||||||
|
<Upload />
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
:global(body) {
|
||||||
|
margin: 0;
|
||||||
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
|
@apply text-gray-800;
|
||||||
|
@apply bg-gray-50;
|
||||||
|
}
|
||||||
|
</style>
|
11
ui/src/App.test.ts
Normal file
11
ui/src/App.test.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import {render} from '@testing-library/svelte';
|
||||||
|
import {expect} from 'chai';
|
||||||
|
import App from './App.svelte';
|
||||||
|
|
||||||
|
describe('<App>', () => {
|
||||||
|
it('renders learn svelte link', () => {
|
||||||
|
const {getByText} = render(App);
|
||||||
|
const linkElement = getByText(/learn svelte/i);
|
||||||
|
expect(document.body.contains(linkElement));
|
||||||
|
});
|
||||||
|
});
|
3
ui/src/Tailwind.css
Normal file
3
ui/src/Tailwind.css
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
66
ui/src/Upload.svelte
Normal file
66
ui/src/Upload.svelte
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<script>
|
||||||
|
import Dropzone from 'svelte-file-dropzone';
|
||||||
|
import { Download } from 'svelte-hero-icons';
|
||||||
|
import { processUpload } from './store';
|
||||||
|
|
||||||
|
let specifiedFile: File;
|
||||||
|
let dragover = false;
|
||||||
|
let upload: Promise<any>;
|
||||||
|
let rejectionError;
|
||||||
|
|
||||||
|
function handleFilesSelect(e) {
|
||||||
|
rejectionError = undefined;
|
||||||
|
const { acceptedFiles, fileRejections } = e.detail;
|
||||||
|
console.log(e.detail);
|
||||||
|
if (acceptedFiles.length === 1) {
|
||||||
|
specifiedFile = acceptedFiles[0];
|
||||||
|
upload = processUpload(specifiedFile);
|
||||||
|
}
|
||||||
|
if (fileRejections.length > 1) {
|
||||||
|
const fileNames = fileRejections.map((r) => r.file.name);
|
||||||
|
rejectionError = `Only one file at a time allowed! Rejected ${fileRejections.length} files: '${fileNames}'.`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="border-2 border-dashed border-gray-400 hover:border-blue-800" class:dragover>
|
||||||
|
<Dropzone
|
||||||
|
on:drop={handleFilesSelect}
|
||||||
|
on:dragenter={() => (dragover = true)}
|
||||||
|
on:dragleave={() => (dragover = false)}
|
||||||
|
multiple={false}
|
||||||
|
noClick={false}
|
||||||
|
disableDefaultStyles={true}>
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-2 justify-items-center">
|
||||||
|
<Download size="21x" />
|
||||||
|
<div class="mt-4">
|
||||||
|
<div class="text-5xl font-bold my-4">Drop your PDF file here...</div>
|
||||||
|
<div class="text-2xl font-bold">Or click the box to select one...</div>
|
||||||
|
<div class="mt-14"><strong>Note:</strong> Your data stays locally in your browser.</div>
|
||||||
|
<div class="mt-5 text-sm italic font-serif">
|
||||||
|
This tool converts a PDF file into a Markdown text format! Simply drag & drop your PDF file on the
|
||||||
|
upload area and go from there. Don't expect wonders, there are a lot of variances in generated PDF's
|
||||||
|
from different tools and different ages. No matter how good the parser works for your PDF, you will
|
||||||
|
have to invest a good amount of manuell work to complete it.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Dropzone>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mt-5 text-center font-bold">
|
||||||
|
{#await upload}
|
||||||
|
<div>Parsing {specifiedFile.name}...</div>
|
||||||
|
{:catch error}
|
||||||
|
<div class="text-red-700">Failed to parse '{specifiedFile.name}': {error.message}</div>
|
||||||
|
{/await}
|
||||||
|
{#if rejectionError}
|
||||||
|
<div class="text-red-700">{rejectionError}</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.dragover {
|
||||||
|
@apply border-purple-600;
|
||||||
|
}
|
||||||
|
</style>
|
17
ui/src/index.ts
Normal file
17
ui/src/index.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import App from './App.svelte';
|
||||||
|
import './Tailwind.css';
|
||||||
|
|
||||||
|
var app = new App({
|
||||||
|
target: document.body,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default app;
|
||||||
|
|
||||||
|
// Hot Module Replacement (HMR) - Remove this snippet to remove HMR.
|
||||||
|
// Learn more: https://www.snowpack.dev/concepts/hot-module-replacement
|
||||||
|
if (import.meta.hot) {
|
||||||
|
import.meta.hot.accept();
|
||||||
|
import.meta.hot.dispose(() => {
|
||||||
|
app.$destroy();
|
||||||
|
});
|
||||||
|
}
|
23
ui/src/store.ts
Normal file
23
ui/src/store.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { pdfParser } from 'pdf-to-markdown-core';
|
||||||
|
import type ParseResult from 'pdf-to-markdown-core/lib/src/ParseResult';
|
||||||
|
import * as pdfjs from 'pdfjs-dist/es5/build/pdf';
|
||||||
|
|
||||||
|
// TODO this will setup fake worker cause getMainThreadWorkerMessageHandler isn't null
|
||||||
|
import pdfjsWorker from 'pdfjs-dist//es5/build/pdf.worker.entry';
|
||||||
|
pdfjs.GlobalWorkerOptions.workerSrc = pdfjsWorker;
|
||||||
|
|
||||||
|
const parser = pdfParser(pdfjs);
|
||||||
|
|
||||||
|
export function processUpload(file: File): Promise<ParseResult> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onerror = reject;
|
||||||
|
reader.onload = () => {
|
||||||
|
resolve(reader.result as ArrayBuffer);
|
||||||
|
};
|
||||||
|
reader.readAsArrayBuffer(file);
|
||||||
|
}).then((buffer) => {
|
||||||
|
const uintArray = new Uint8Array(buffer as ArrayBuffer);
|
||||||
|
return parser.parse(uintArray);
|
||||||
|
});
|
||||||
|
}
|
10
ui/svelte.config.js
Normal file
10
ui/svelte.config.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
const autoPreprocess = require('svelte-preprocess');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
preprocess: autoPreprocess({
|
||||||
|
defaults: {
|
||||||
|
script: 'typescript',
|
||||||
|
},
|
||||||
|
postcss: true,
|
||||||
|
}),
|
||||||
|
};
|
855
ui/tailwind.config.js
Normal file
855
ui/tailwind.config.js
Normal file
@ -0,0 +1,855 @@
|
|||||||
|
const colors = require('tailwindcss/colors')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
purge: [],
|
||||||
|
presets: [],
|
||||||
|
darkMode: false, // or 'media' or 'class'
|
||||||
|
theme: {
|
||||||
|
screens: {
|
||||||
|
sm: '640px',
|
||||||
|
md: '768px',
|
||||||
|
lg: '1024px',
|
||||||
|
xl: '1280px',
|
||||||
|
'2xl': '1536px',
|
||||||
|
},
|
||||||
|
colors: {
|
||||||
|
transparent: 'transparent',
|
||||||
|
current: 'currentColor',
|
||||||
|
|
||||||
|
black: colors.black,
|
||||||
|
white: colors.white,
|
||||||
|
gray: colors.coolGray,
|
||||||
|
red: colors.red,
|
||||||
|
yellow: colors.amber,
|
||||||
|
green: colors.emerald,
|
||||||
|
blue: colors.blue,
|
||||||
|
indigo: colors.indigo,
|
||||||
|
purple: colors.violet,
|
||||||
|
pink: colors.pink,
|
||||||
|
},
|
||||||
|
spacing: {
|
||||||
|
px: '1px',
|
||||||
|
0: '0px',
|
||||||
|
0.5: '0.125rem',
|
||||||
|
1: '0.25rem',
|
||||||
|
1.5: '0.375rem',
|
||||||
|
2: '0.5rem',
|
||||||
|
2.5: '0.625rem',
|
||||||
|
3: '0.75rem',
|
||||||
|
3.5: '0.875rem',
|
||||||
|
4: '1rem',
|
||||||
|
5: '1.25rem',
|
||||||
|
6: '1.5rem',
|
||||||
|
7: '1.75rem',
|
||||||
|
8: '2rem',
|
||||||
|
9: '2.25rem',
|
||||||
|
10: '2.5rem',
|
||||||
|
11: '2.75rem',
|
||||||
|
12: '3rem',
|
||||||
|
14: '3.5rem',
|
||||||
|
16: '4rem',
|
||||||
|
20: '5rem',
|
||||||
|
24: '6rem',
|
||||||
|
28: '7rem',
|
||||||
|
32: '8rem',
|
||||||
|
36: '9rem',
|
||||||
|
40: '10rem',
|
||||||
|
44: '11rem',
|
||||||
|
48: '12rem',
|
||||||
|
52: '13rem',
|
||||||
|
56: '14rem',
|
||||||
|
60: '15rem',
|
||||||
|
64: '16rem',
|
||||||
|
72: '18rem',
|
||||||
|
80: '20rem',
|
||||||
|
96: '24rem',
|
||||||
|
},
|
||||||
|
animation: {
|
||||||
|
none: 'none',
|
||||||
|
spin: 'spin 1s linear infinite',
|
||||||
|
ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
|
||||||
|
pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
|
||||||
|
bounce: 'bounce 1s infinite',
|
||||||
|
},
|
||||||
|
backgroundColor: (theme) => theme('colors'),
|
||||||
|
backgroundImage: {
|
||||||
|
none: 'none',
|
||||||
|
'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))',
|
||||||
|
'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))',
|
||||||
|
'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))',
|
||||||
|
'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))',
|
||||||
|
'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))',
|
||||||
|
'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))',
|
||||||
|
'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))',
|
||||||
|
'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))',
|
||||||
|
},
|
||||||
|
backgroundOpacity: (theme) => theme('opacity'),
|
||||||
|
backgroundPosition: {
|
||||||
|
bottom: 'bottom',
|
||||||
|
center: 'center',
|
||||||
|
left: 'left',
|
||||||
|
'left-bottom': 'left bottom',
|
||||||
|
'left-top': 'left top',
|
||||||
|
right: 'right',
|
||||||
|
'right-bottom': 'right bottom',
|
||||||
|
'right-top': 'right top',
|
||||||
|
top: 'top',
|
||||||
|
},
|
||||||
|
backgroundSize: {
|
||||||
|
auto: 'auto',
|
||||||
|
cover: 'cover',
|
||||||
|
contain: 'contain',
|
||||||
|
},
|
||||||
|
borderColor: (theme) => ({
|
||||||
|
...theme('colors'),
|
||||||
|
DEFAULT: theme('colors.gray.200', 'currentColor'),
|
||||||
|
}),
|
||||||
|
borderOpacity: (theme) => theme('opacity'),
|
||||||
|
borderRadius: {
|
||||||
|
none: '0px',
|
||||||
|
sm: '0.125rem',
|
||||||
|
DEFAULT: '0.25rem',
|
||||||
|
md: '0.375rem',
|
||||||
|
lg: '0.5rem',
|
||||||
|
xl: '0.75rem',
|
||||||
|
'2xl': '1rem',
|
||||||
|
'3xl': '1.5rem',
|
||||||
|
full: '9999px',
|
||||||
|
},
|
||||||
|
borderWidth: {
|
||||||
|
DEFAULT: '1px',
|
||||||
|
0: '0px',
|
||||||
|
2: '2px',
|
||||||
|
4: '4px',
|
||||||
|
8: '8px',
|
||||||
|
},
|
||||||
|
boxShadow: {
|
||||||
|
sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
|
||||||
|
DEFAULT: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)',
|
||||||
|
md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
|
||||||
|
lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
|
||||||
|
xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
|
||||||
|
'2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
|
||||||
|
inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)',
|
||||||
|
none: 'none',
|
||||||
|
},
|
||||||
|
container: {},
|
||||||
|
cursor: {
|
||||||
|
auto: 'auto',
|
||||||
|
default: 'default',
|
||||||
|
pointer: 'pointer',
|
||||||
|
wait: 'wait',
|
||||||
|
text: 'text',
|
||||||
|
move: 'move',
|
||||||
|
'not-allowed': 'not-allowed',
|
||||||
|
},
|
||||||
|
divideColor: (theme) => theme('borderColor'),
|
||||||
|
divideOpacity: (theme) => theme('borderOpacity'),
|
||||||
|
divideWidth: (theme) => theme('borderWidth'),
|
||||||
|
fill: { current: 'currentColor' },
|
||||||
|
flex: {
|
||||||
|
1: '1 1 0%',
|
||||||
|
auto: '1 1 auto',
|
||||||
|
initial: '0 1 auto',
|
||||||
|
none: 'none',
|
||||||
|
},
|
||||||
|
flexGrow: {
|
||||||
|
0: '0',
|
||||||
|
DEFAULT: '1',
|
||||||
|
},
|
||||||
|
flexShrink: {
|
||||||
|
0: '0',
|
||||||
|
DEFAULT: '1',
|
||||||
|
},
|
||||||
|
fontFamily: {
|
||||||
|
sans: [
|
||||||
|
'ui-sans-serif',
|
||||||
|
'system-ui',
|
||||||
|
'-apple-system',
|
||||||
|
'BlinkMacSystemFont',
|
||||||
|
'"Segoe UI"',
|
||||||
|
'Roboto',
|
||||||
|
'"Helvetica Neue"',
|
||||||
|
'Arial',
|
||||||
|
'"Noto Sans"',
|
||||||
|
'sans-serif',
|
||||||
|
'"Apple Color Emoji"',
|
||||||
|
'"Segoe UI Emoji"',
|
||||||
|
'"Segoe UI Symbol"',
|
||||||
|
'"Noto Color Emoji"',
|
||||||
|
],
|
||||||
|
serif: ['ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'],
|
||||||
|
mono: [
|
||||||
|
'ui-monospace',
|
||||||
|
'SFMono-Regular',
|
||||||
|
'Menlo',
|
||||||
|
'Monaco',
|
||||||
|
'Consolas',
|
||||||
|
'"Liberation Mono"',
|
||||||
|
'"Courier New"',
|
||||||
|
'monospace',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
fontSize: {
|
||||||
|
xs: ['0.75rem', { lineHeight: '1rem' }],
|
||||||
|
sm: ['0.875rem', { lineHeight: '1.25rem' }],
|
||||||
|
base: ['1rem', { lineHeight: '1.5rem' }],
|
||||||
|
lg: ['1.125rem', { lineHeight: '1.75rem' }],
|
||||||
|
xl: ['1.25rem', { lineHeight: '1.75rem' }],
|
||||||
|
'2xl': ['1.5rem', { lineHeight: '2rem' }],
|
||||||
|
'3xl': ['1.875rem', { lineHeight: '2.25rem' }],
|
||||||
|
'4xl': ['2.25rem', { lineHeight: '2.5rem' }],
|
||||||
|
'5xl': ['3rem', { lineHeight: '1' }],
|
||||||
|
'6xl': ['3.75rem', { lineHeight: '1' }],
|
||||||
|
'7xl': ['4.5rem', { lineHeight: '1' }],
|
||||||
|
'8xl': ['6rem', { lineHeight: '1' }],
|
||||||
|
'9xl': ['8rem', { lineHeight: '1' }],
|
||||||
|
},
|
||||||
|
fontWeight: {
|
||||||
|
thin: '100',
|
||||||
|
extralight: '200',
|
||||||
|
light: '300',
|
||||||
|
normal: '400',
|
||||||
|
medium: '500',
|
||||||
|
semibold: '600',
|
||||||
|
bold: '700',
|
||||||
|
extrabold: '800',
|
||||||
|
black: '900',
|
||||||
|
},
|
||||||
|
gap: (theme) => theme('spacing'),
|
||||||
|
gradientColorStops: (theme) => theme('colors'),
|
||||||
|
gridAutoColumns: {
|
||||||
|
auto: 'auto',
|
||||||
|
min: 'min-content',
|
||||||
|
max: 'max-content',
|
||||||
|
fr: 'minmax(0, 1fr)',
|
||||||
|
},
|
||||||
|
gridAutoRows: {
|
||||||
|
auto: 'auto',
|
||||||
|
min: 'min-content',
|
||||||
|
max: 'max-content',
|
||||||
|
fr: 'minmax(0, 1fr)',
|
||||||
|
},
|
||||||
|
gridColumn: {
|
||||||
|
auto: 'auto',
|
||||||
|
'span-1': 'span 1 / span 1',
|
||||||
|
'span-2': 'span 2 / span 2',
|
||||||
|
'span-3': 'span 3 / span 3',
|
||||||
|
'span-4': 'span 4 / span 4',
|
||||||
|
'span-5': 'span 5 / span 5',
|
||||||
|
'span-6': 'span 6 / span 6',
|
||||||
|
'span-7': 'span 7 / span 7',
|
||||||
|
'span-8': 'span 8 / span 8',
|
||||||
|
'span-9': 'span 9 / span 9',
|
||||||
|
'span-10': 'span 10 / span 10',
|
||||||
|
'span-11': 'span 11 / span 11',
|
||||||
|
'span-12': 'span 12 / span 12',
|
||||||
|
'span-full': '1 / -1',
|
||||||
|
},
|
||||||
|
gridColumnEnd: {
|
||||||
|
auto: 'auto',
|
||||||
|
1: '1',
|
||||||
|
2: '2',
|
||||||
|
3: '3',
|
||||||
|
4: '4',
|
||||||
|
5: '5',
|
||||||
|
6: '6',
|
||||||
|
7: '7',
|
||||||
|
8: '8',
|
||||||
|
9: '9',
|
||||||
|
10: '10',
|
||||||
|
11: '11',
|
||||||
|
12: '12',
|
||||||
|
13: '13',
|
||||||
|
},
|
||||||
|
gridColumnStart: {
|
||||||
|
auto: 'auto',
|
||||||
|
1: '1',
|
||||||
|
2: '2',
|
||||||
|
3: '3',
|
||||||
|
4: '4',
|
||||||
|
5: '5',
|
||||||
|
6: '6',
|
||||||
|
7: '7',
|
||||||
|
8: '8',
|
||||||
|
9: '9',
|
||||||
|
10: '10',
|
||||||
|
11: '11',
|
||||||
|
12: '12',
|
||||||
|
13: '13',
|
||||||
|
},
|
||||||
|
gridRow: {
|
||||||
|
auto: 'auto',
|
||||||
|
'span-1': 'span 1 / span 1',
|
||||||
|
'span-2': 'span 2 / span 2',
|
||||||
|
'span-3': 'span 3 / span 3',
|
||||||
|
'span-4': 'span 4 / span 4',
|
||||||
|
'span-5': 'span 5 / span 5',
|
||||||
|
'span-6': 'span 6 / span 6',
|
||||||
|
'span-full': '1 / -1',
|
||||||
|
},
|
||||||
|
gridRowStart: {
|
||||||
|
auto: 'auto',
|
||||||
|
1: '1',
|
||||||
|
2: '2',
|
||||||
|
3: '3',
|
||||||
|
4: '4',
|
||||||
|
5: '5',
|
||||||
|
6: '6',
|
||||||
|
7: '7',
|
||||||
|
},
|
||||||
|
gridRowEnd: {
|
||||||
|
auto: 'auto',
|
||||||
|
1: '1',
|
||||||
|
2: '2',
|
||||||
|
3: '3',
|
||||||
|
4: '4',
|
||||||
|
5: '5',
|
||||||
|
6: '6',
|
||||||
|
7: '7',
|
||||||
|
},
|
||||||
|
transformOrigin: {
|
||||||
|
center: 'center',
|
||||||
|
top: 'top',
|
||||||
|
'top-right': 'top right',
|
||||||
|
right: 'right',
|
||||||
|
'bottom-right': 'bottom right',
|
||||||
|
bottom: 'bottom',
|
||||||
|
'bottom-left': 'bottom left',
|
||||||
|
left: 'left',
|
||||||
|
'top-left': 'top left',
|
||||||
|
},
|
||||||
|
gridTemplateColumns: {
|
||||||
|
none: 'none',
|
||||||
|
1: 'repeat(1, minmax(0, 1fr))',
|
||||||
|
2: 'repeat(2, minmax(0, 1fr))',
|
||||||
|
3: 'repeat(3, minmax(0, 1fr))',
|
||||||
|
4: 'repeat(4, minmax(0, 1fr))',
|
||||||
|
5: 'repeat(5, minmax(0, 1fr))',
|
||||||
|
6: 'repeat(6, minmax(0, 1fr))',
|
||||||
|
7: 'repeat(7, minmax(0, 1fr))',
|
||||||
|
8: 'repeat(8, minmax(0, 1fr))',
|
||||||
|
9: 'repeat(9, minmax(0, 1fr))',
|
||||||
|
10: 'repeat(10, minmax(0, 1fr))',
|
||||||
|
11: 'repeat(11, minmax(0, 1fr))',
|
||||||
|
12: 'repeat(12, minmax(0, 1fr))',
|
||||||
|
},
|
||||||
|
gridTemplateRows: {
|
||||||
|
none: 'none',
|
||||||
|
1: 'repeat(1, minmax(0, 1fr))',
|
||||||
|
2: 'repeat(2, minmax(0, 1fr))',
|
||||||
|
3: 'repeat(3, minmax(0, 1fr))',
|
||||||
|
4: 'repeat(4, minmax(0, 1fr))',
|
||||||
|
5: 'repeat(5, minmax(0, 1fr))',
|
||||||
|
6: 'repeat(6, minmax(0, 1fr))',
|
||||||
|
},
|
||||||
|
height: (theme) => ({
|
||||||
|
auto: 'auto',
|
||||||
|
...theme('spacing'),
|
||||||
|
'1/2': '50%',
|
||||||
|
'1/3': '33.333333%',
|
||||||
|
'2/3': '66.666667%',
|
||||||
|
'1/4': '25%',
|
||||||
|
'2/4': '50%',
|
||||||
|
'3/4': '75%',
|
||||||
|
'1/5': '20%',
|
||||||
|
'2/5': '40%',
|
||||||
|
'3/5': '60%',
|
||||||
|
'4/5': '80%',
|
||||||
|
'1/6': '16.666667%',
|
||||||
|
'2/6': '33.333333%',
|
||||||
|
'3/6': '50%',
|
||||||
|
'4/6': '66.666667%',
|
||||||
|
'5/6': '83.333333%',
|
||||||
|
full: '100%',
|
||||||
|
screen: '100vh',
|
||||||
|
}),
|
||||||
|
inset: (theme, { negative }) => ({
|
||||||
|
auto: 'auto',
|
||||||
|
...theme('spacing'),
|
||||||
|
...negative(theme('spacing')),
|
||||||
|
'1/2': '50%',
|
||||||
|
'1/3': '33.333333%',
|
||||||
|
'2/3': '66.666667%',
|
||||||
|
'1/4': '25%',
|
||||||
|
'2/4': '50%',
|
||||||
|
'3/4': '75%',
|
||||||
|
full: '100%',
|
||||||
|
'-1/2': '-50%',
|
||||||
|
'-1/3': '-33.333333%',
|
||||||
|
'-2/3': '-66.666667%',
|
||||||
|
'-1/4': '-25%',
|
||||||
|
'-2/4': '-50%',
|
||||||
|
'-3/4': '-75%',
|
||||||
|
'-full': '-100%',
|
||||||
|
}),
|
||||||
|
keyframes: {
|
||||||
|
spin: {
|
||||||
|
to: {
|
||||||
|
transform: 'rotate(360deg)',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ping: {
|
||||||
|
'75%, 100%': {
|
||||||
|
transform: 'scale(2)',
|
||||||
|
opacity: '0',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
pulse: {
|
||||||
|
'50%': {
|
||||||
|
opacity: '.5',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
bounce: {
|
||||||
|
'0%, 100%': {
|
||||||
|
transform: 'translateY(-25%)',
|
||||||
|
animationTimingFunction: 'cubic-bezier(0.8,0,1,1)',
|
||||||
|
},
|
||||||
|
'50%': {
|
||||||
|
transform: 'none',
|
||||||
|
animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
letterSpacing: {
|
||||||
|
tighter: '-0.05em',
|
||||||
|
tight: '-0.025em',
|
||||||
|
normal: '0em',
|
||||||
|
wide: '0.025em',
|
||||||
|
wider: '0.05em',
|
||||||
|
widest: '0.1em',
|
||||||
|
},
|
||||||
|
lineHeight: {
|
||||||
|
none: '1',
|
||||||
|
tight: '1.25',
|
||||||
|
snug: '1.375',
|
||||||
|
normal: '1.5',
|
||||||
|
relaxed: '1.625',
|
||||||
|
loose: '2',
|
||||||
|
3: '.75rem',
|
||||||
|
4: '1rem',
|
||||||
|
5: '1.25rem',
|
||||||
|
6: '1.5rem',
|
||||||
|
7: '1.75rem',
|
||||||
|
8: '2rem',
|
||||||
|
9: '2.25rem',
|
||||||
|
10: '2.5rem',
|
||||||
|
},
|
||||||
|
listStyleType: {
|
||||||
|
none: 'none',
|
||||||
|
disc: 'disc',
|
||||||
|
decimal: 'decimal',
|
||||||
|
},
|
||||||
|
margin: (theme, { negative }) => ({
|
||||||
|
auto: 'auto',
|
||||||
|
...theme('spacing'),
|
||||||
|
...negative(theme('spacing')),
|
||||||
|
}),
|
||||||
|
maxHeight: (theme) => ({
|
||||||
|
...theme('spacing'),
|
||||||
|
full: '100%',
|
||||||
|
screen: '100vh',
|
||||||
|
}),
|
||||||
|
maxWidth: (theme, { breakpoints }) => ({
|
||||||
|
none: 'none',
|
||||||
|
0: '0rem',
|
||||||
|
xs: '20rem',
|
||||||
|
sm: '24rem',
|
||||||
|
md: '28rem',
|
||||||
|
lg: '32rem',
|
||||||
|
xl: '36rem',
|
||||||
|
'2xl': '42rem',
|
||||||
|
'3xl': '48rem',
|
||||||
|
'4xl': '56rem',
|
||||||
|
'5xl': '64rem',
|
||||||
|
'6xl': '72rem',
|
||||||
|
'7xl': '80rem',
|
||||||
|
full: '100%',
|
||||||
|
min: 'min-content',
|
||||||
|
max: 'max-content',
|
||||||
|
prose: '65ch',
|
||||||
|
...breakpoints(theme('screens')),
|
||||||
|
}),
|
||||||
|
minHeight: {
|
||||||
|
0: '0px',
|
||||||
|
full: '100%',
|
||||||
|
screen: '100vh',
|
||||||
|
},
|
||||||
|
minWidth: {
|
||||||
|
0: '0px',
|
||||||
|
full: '100%',
|
||||||
|
min: 'min-content',
|
||||||
|
max: 'max-content',
|
||||||
|
},
|
||||||
|
objectPosition: {
|
||||||
|
bottom: 'bottom',
|
||||||
|
center: 'center',
|
||||||
|
left: 'left',
|
||||||
|
'left-bottom': 'left bottom',
|
||||||
|
'left-top': 'left top',
|
||||||
|
right: 'right',
|
||||||
|
'right-bottom': 'right bottom',
|
||||||
|
'right-top': 'right top',
|
||||||
|
top: 'top',
|
||||||
|
},
|
||||||
|
opacity: {
|
||||||
|
0: '0',
|
||||||
|
5: '0.05',
|
||||||
|
10: '0.1',
|
||||||
|
20: '0.2',
|
||||||
|
25: '0.25',
|
||||||
|
30: '0.3',
|
||||||
|
40: '0.4',
|
||||||
|
50: '0.5',
|
||||||
|
60: '0.6',
|
||||||
|
70: '0.7',
|
||||||
|
75: '0.75',
|
||||||
|
80: '0.8',
|
||||||
|
90: '0.9',
|
||||||
|
95: '0.95',
|
||||||
|
100: '1',
|
||||||
|
},
|
||||||
|
order: {
|
||||||
|
first: '-9999',
|
||||||
|
last: '9999',
|
||||||
|
none: '0',
|
||||||
|
1: '1',
|
||||||
|
2: '2',
|
||||||
|
3: '3',
|
||||||
|
4: '4',
|
||||||
|
5: '5',
|
||||||
|
6: '6',
|
||||||
|
7: '7',
|
||||||
|
8: '8',
|
||||||
|
9: '9',
|
||||||
|
10: '10',
|
||||||
|
11: '11',
|
||||||
|
12: '12',
|
||||||
|
},
|
||||||
|
outline: {
|
||||||
|
none: ['2px solid transparent', '2px'],
|
||||||
|
white: ['2px dotted white', '2px'],
|
||||||
|
black: ['2px dotted black', '2px'],
|
||||||
|
},
|
||||||
|
padding: (theme) => theme('spacing'),
|
||||||
|
placeholderColor: (theme) => theme('colors'),
|
||||||
|
placeholderOpacity: (theme) => theme('opacity'),
|
||||||
|
ringColor: (theme) => ({
|
||||||
|
DEFAULT: theme('colors.blue.500', '#3b82f6'),
|
||||||
|
...theme('colors'),
|
||||||
|
}),
|
||||||
|
ringOffsetColor: (theme) => theme('colors'),
|
||||||
|
ringOffsetWidth: {
|
||||||
|
0: '0px',
|
||||||
|
1: '1px',
|
||||||
|
2: '2px',
|
||||||
|
4: '4px',
|
||||||
|
8: '8px',
|
||||||
|
},
|
||||||
|
ringOpacity: (theme) => ({
|
||||||
|
DEFAULT: '0.5',
|
||||||
|
...theme('opacity'),
|
||||||
|
}),
|
||||||
|
ringWidth: {
|
||||||
|
DEFAULT: '3px',
|
||||||
|
0: '0px',
|
||||||
|
1: '1px',
|
||||||
|
2: '2px',
|
||||||
|
4: '4px',
|
||||||
|
8: '8px',
|
||||||
|
},
|
||||||
|
rotate: {
|
||||||
|
'-180': '-180deg',
|
||||||
|
'-90': '-90deg',
|
||||||
|
'-45': '-45deg',
|
||||||
|
'-12': '-12deg',
|
||||||
|
'-6': '-6deg',
|
||||||
|
'-3': '-3deg',
|
||||||
|
'-2': '-2deg',
|
||||||
|
'-1': '-1deg',
|
||||||
|
0: '0deg',
|
||||||
|
1: '1deg',
|
||||||
|
2: '2deg',
|
||||||
|
3: '3deg',
|
||||||
|
6: '6deg',
|
||||||
|
12: '12deg',
|
||||||
|
45: '45deg',
|
||||||
|
90: '90deg',
|
||||||
|
180: '180deg',
|
||||||
|
},
|
||||||
|
scale: {
|
||||||
|
0: '0',
|
||||||
|
50: '.5',
|
||||||
|
75: '.75',
|
||||||
|
90: '.9',
|
||||||
|
95: '.95',
|
||||||
|
100: '1',
|
||||||
|
105: '1.05',
|
||||||
|
110: '1.1',
|
||||||
|
125: '1.25',
|
||||||
|
150: '1.5',
|
||||||
|
},
|
||||||
|
skew: {
|
||||||
|
'-12': '-12deg',
|
||||||
|
'-6': '-6deg',
|
||||||
|
'-3': '-3deg',
|
||||||
|
'-2': '-2deg',
|
||||||
|
'-1': '-1deg',
|
||||||
|
0: '0deg',
|
||||||
|
1: '1deg',
|
||||||
|
2: '2deg',
|
||||||
|
3: '3deg',
|
||||||
|
6: '6deg',
|
||||||
|
12: '12deg',
|
||||||
|
},
|
||||||
|
space: (theme, { negative }) => ({
|
||||||
|
...theme('spacing'),
|
||||||
|
...negative(theme('spacing')),
|
||||||
|
}),
|
||||||
|
stroke: {
|
||||||
|
current: 'currentColor',
|
||||||
|
},
|
||||||
|
strokeWidth: {
|
||||||
|
0: '0',
|
||||||
|
1: '1',
|
||||||
|
2: '2',
|
||||||
|
},
|
||||||
|
textColor: (theme) => theme('colors'),
|
||||||
|
textOpacity: (theme) => theme('opacity'),
|
||||||
|
transitionDuration: {
|
||||||
|
DEFAULT: '150ms',
|
||||||
|
75: '75ms',
|
||||||
|
100: '100ms',
|
||||||
|
150: '150ms',
|
||||||
|
200: '200ms',
|
||||||
|
300: '300ms',
|
||||||
|
500: '500ms',
|
||||||
|
700: '700ms',
|
||||||
|
1000: '1000ms',
|
||||||
|
},
|
||||||
|
transitionDelay: {
|
||||||
|
75: '75ms',
|
||||||
|
100: '100ms',
|
||||||
|
150: '150ms',
|
||||||
|
200: '200ms',
|
||||||
|
300: '300ms',
|
||||||
|
500: '500ms',
|
||||||
|
700: '700ms',
|
||||||
|
1000: '1000ms',
|
||||||
|
},
|
||||||
|
transitionProperty: {
|
||||||
|
none: 'none',
|
||||||
|
all: 'all',
|
||||||
|
DEFAULT: 'background-color, border-color, color, fill, stroke, opacity, box-shadow, transform',
|
||||||
|
colors: 'background-color, border-color, color, fill, stroke',
|
||||||
|
opacity: 'opacity',
|
||||||
|
shadow: 'box-shadow',
|
||||||
|
transform: 'transform',
|
||||||
|
},
|
||||||
|
transitionTimingFunction: {
|
||||||
|
DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)',
|
||||||
|
linear: 'linear',
|
||||||
|
in: 'cubic-bezier(0.4, 0, 1, 1)',
|
||||||
|
out: 'cubic-bezier(0, 0, 0.2, 1)',
|
||||||
|
'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)',
|
||||||
|
},
|
||||||
|
translate: (theme, { negative }) => ({
|
||||||
|
...theme('spacing'),
|
||||||
|
...negative(theme('spacing')),
|
||||||
|
'1/2': '50%',
|
||||||
|
'1/3': '33.333333%',
|
||||||
|
'2/3': '66.666667%',
|
||||||
|
'1/4': '25%',
|
||||||
|
'2/4': '50%',
|
||||||
|
'3/4': '75%',
|
||||||
|
full: '100%',
|
||||||
|
'-1/2': '-50%',
|
||||||
|
'-1/3': '-33.333333%',
|
||||||
|
'-2/3': '-66.666667%',
|
||||||
|
'-1/4': '-25%',
|
||||||
|
'-2/4': '-50%',
|
||||||
|
'-3/4': '-75%',
|
||||||
|
'-full': '-100%',
|
||||||
|
}),
|
||||||
|
width: (theme) => ({
|
||||||
|
auto: 'auto',
|
||||||
|
...theme('spacing'),
|
||||||
|
'1/2': '50%',
|
||||||
|
'1/3': '33.333333%',
|
||||||
|
'2/3': '66.666667%',
|
||||||
|
'1/4': '25%',
|
||||||
|
'2/4': '50%',
|
||||||
|
'3/4': '75%',
|
||||||
|
'1/5': '20%',
|
||||||
|
'2/5': '40%',
|
||||||
|
'3/5': '60%',
|
||||||
|
'4/5': '80%',
|
||||||
|
'1/6': '16.666667%',
|
||||||
|
'2/6': '33.333333%',
|
||||||
|
'3/6': '50%',
|
||||||
|
'4/6': '66.666667%',
|
||||||
|
'5/6': '83.333333%',
|
||||||
|
'1/12': '8.333333%',
|
||||||
|
'2/12': '16.666667%',
|
||||||
|
'3/12': '25%',
|
||||||
|
'4/12': '33.333333%',
|
||||||
|
'5/12': '41.666667%',
|
||||||
|
'6/12': '50%',
|
||||||
|
'7/12': '58.333333%',
|
||||||
|
'8/12': '66.666667%',
|
||||||
|
'9/12': '75%',
|
||||||
|
'10/12': '83.333333%',
|
||||||
|
'11/12': '91.666667%',
|
||||||
|
full: '100%',
|
||||||
|
screen: '100vw',
|
||||||
|
min: 'min-content',
|
||||||
|
max: 'max-content',
|
||||||
|
}),
|
||||||
|
zIndex: {
|
||||||
|
auto: 'auto',
|
||||||
|
0: '0',
|
||||||
|
10: '10',
|
||||||
|
20: '20',
|
||||||
|
30: '30',
|
||||||
|
40: '40',
|
||||||
|
50: '50',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
variantOrder: [
|
||||||
|
'first',
|
||||||
|
'last',
|
||||||
|
'odd',
|
||||||
|
'even',
|
||||||
|
'visited',
|
||||||
|
'checked',
|
||||||
|
'group-hover',
|
||||||
|
'group-focus',
|
||||||
|
'focus-within',
|
||||||
|
'hover',
|
||||||
|
'focus',
|
||||||
|
'focus-visible',
|
||||||
|
'active',
|
||||||
|
'disabled',
|
||||||
|
],
|
||||||
|
variants: {
|
||||||
|
accessibility: ['responsive', 'focus-within', 'focus'],
|
||||||
|
alignContent: ['responsive'],
|
||||||
|
alignItems: ['responsive'],
|
||||||
|
alignSelf: ['responsive'],
|
||||||
|
animation: ['responsive'],
|
||||||
|
appearance: ['responsive'],
|
||||||
|
backgroundAttachment: ['responsive'],
|
||||||
|
backgroundClip: ['responsive'],
|
||||||
|
backgroundColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
backgroundImage: ['responsive'],
|
||||||
|
backgroundOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
backgroundPosition: ['responsive'],
|
||||||
|
backgroundRepeat: ['responsive'],
|
||||||
|
backgroundSize: ['responsive'],
|
||||||
|
borderCollapse: ['responsive'],
|
||||||
|
borderColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
borderOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
borderRadius: ['responsive'],
|
||||||
|
borderStyle: ['responsive'],
|
||||||
|
borderWidth: ['responsive'],
|
||||||
|
boxShadow: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
boxSizing: ['responsive'],
|
||||||
|
clear: ['responsive'],
|
||||||
|
container: ['responsive'],
|
||||||
|
cursor: ['responsive'],
|
||||||
|
display: ['responsive'],
|
||||||
|
divideColor: ['responsive', 'dark'],
|
||||||
|
divideOpacity: ['responsive'],
|
||||||
|
divideStyle: ['responsive'],
|
||||||
|
divideWidth: ['responsive'],
|
||||||
|
fill: ['responsive'],
|
||||||
|
flex: ['responsive'],
|
||||||
|
flexDirection: ['responsive'],
|
||||||
|
flexGrow: ['responsive'],
|
||||||
|
flexShrink: ['responsive'],
|
||||||
|
flexWrap: ['responsive'],
|
||||||
|
float: ['responsive'],
|
||||||
|
fontFamily: ['responsive'],
|
||||||
|
fontSize: ['responsive'],
|
||||||
|
fontSmoothing: ['responsive'],
|
||||||
|
fontStyle: ['responsive'],
|
||||||
|
fontVariantNumeric: ['responsive'],
|
||||||
|
fontWeight: ['responsive'],
|
||||||
|
gap: ['responsive'],
|
||||||
|
gradientColorStops: ['responsive', 'dark', 'hover', 'focus'],
|
||||||
|
gridAutoColumns: ['responsive'],
|
||||||
|
gridAutoFlow: ['responsive'],
|
||||||
|
gridAutoRows: ['responsive'],
|
||||||
|
gridColumn: ['responsive'],
|
||||||
|
gridColumnEnd: ['responsive'],
|
||||||
|
gridColumnStart: ['responsive'],
|
||||||
|
gridRow: ['responsive'],
|
||||||
|
gridRowEnd: ['responsive'],
|
||||||
|
gridRowStart: ['responsive'],
|
||||||
|
gridTemplateColumns: ['responsive'],
|
||||||
|
gridTemplateRows: ['responsive'],
|
||||||
|
height: ['responsive'],
|
||||||
|
inset: ['responsive'],
|
||||||
|
justifyContent: ['responsive'],
|
||||||
|
justifyItems: ['responsive'],
|
||||||
|
justifySelf: ['responsive'],
|
||||||
|
letterSpacing: ['responsive'],
|
||||||
|
lineHeight: ['responsive'],
|
||||||
|
listStylePosition: ['responsive'],
|
||||||
|
listStyleType: ['responsive'],
|
||||||
|
margin: ['responsive'],
|
||||||
|
maxHeight: ['responsive'],
|
||||||
|
maxWidth: ['responsive'],
|
||||||
|
minHeight: ['responsive'],
|
||||||
|
minWidth: ['responsive'],
|
||||||
|
objectFit: ['responsive'],
|
||||||
|
objectPosition: ['responsive'],
|
||||||
|
opacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
order: ['responsive'],
|
||||||
|
outline: ['responsive', 'focus-within', 'focus'],
|
||||||
|
overflow: ['responsive'],
|
||||||
|
overscrollBehavior: ['responsive'],
|
||||||
|
padding: ['responsive'],
|
||||||
|
placeContent: ['responsive'],
|
||||||
|
placeItems: ['responsive'],
|
||||||
|
placeSelf: ['responsive'],
|
||||||
|
placeholderColor: ['responsive', 'dark', 'focus'],
|
||||||
|
placeholderOpacity: ['responsive', 'focus'],
|
||||||
|
pointerEvents: ['responsive'],
|
||||||
|
position: ['responsive'],
|
||||||
|
resize: ['responsive'],
|
||||||
|
ringColor: ['responsive', 'dark', 'focus-within', 'focus'],
|
||||||
|
ringOffsetColor: ['responsive', 'dark', 'focus-within', 'focus'],
|
||||||
|
ringOffsetWidth: ['responsive', 'focus-within', 'focus'],
|
||||||
|
ringOpacity: ['responsive', 'focus-within', 'focus'],
|
||||||
|
ringWidth: ['responsive', 'focus-within', 'focus'],
|
||||||
|
rotate: ['responsive', 'hover', 'focus'],
|
||||||
|
scale: ['responsive', 'hover', 'focus'],
|
||||||
|
skew: ['responsive', 'hover', 'focus'],
|
||||||
|
space: ['responsive'],
|
||||||
|
stroke: ['responsive'],
|
||||||
|
strokeWidth: ['responsive'],
|
||||||
|
tableLayout: ['responsive'],
|
||||||
|
textAlign: ['responsive'],
|
||||||
|
textColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
textDecoration: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
textOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'],
|
||||||
|
textOverflow: ['responsive'],
|
||||||
|
textTransform: ['responsive'],
|
||||||
|
transform: ['responsive'],
|
||||||
|
transformOrigin: ['responsive'],
|
||||||
|
transitionDelay: ['responsive'],
|
||||||
|
transitionDuration: ['responsive'],
|
||||||
|
transitionProperty: ['responsive'],
|
||||||
|
transitionTimingFunction: ['responsive'],
|
||||||
|
translate: ['responsive', 'hover', 'focus'],
|
||||||
|
userSelect: ['responsive'],
|
||||||
|
verticalAlign: ['responsive'],
|
||||||
|
visibility: ['responsive'],
|
||||||
|
whitespace: ['responsive'],
|
||||||
|
width: ['responsive'],
|
||||||
|
wordBreak: ['responsive'],
|
||||||
|
zIndex: ['responsive', 'focus-within', 'focus'],
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
}
|
23
ui/tsconfig.json
Normal file
23
ui/tsconfig.json
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"include": ["src", "types"],
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "esnext",
|
||||||
|
"target": "esnext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"jsx": "preserve",
|
||||||
|
"baseUrl": "./",
|
||||||
|
/* paths - If you configure Snowpack import aliases, add them here. */
|
||||||
|
"paths": {},
|
||||||
|
/* noEmit - Snowpack builds (emits) files, not tsc. */
|
||||||
|
"noEmit": true,
|
||||||
|
/* Additional Options */
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"importsNotUsedAsValues": "error"
|
||||||
|
}
|
||||||
|
}
|
61
ui/types/static.d.ts
vendored
Normal file
61
ui/types/static.d.ts
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/* Use this file to declare any custom file extensions for importing */
|
||||||
|
/* Use this folder to also add/extend a package d.ts file, if needed. */
|
||||||
|
|
||||||
|
declare module 'svelte-file-dropzone';
|
||||||
|
|
||||||
|
/* CSS MODULES */
|
||||||
|
declare module '*.module.css' {
|
||||||
|
const classes: { [key: string]: string };
|
||||||
|
export default classes;
|
||||||
|
}
|
||||||
|
declare module '*.module.scss' {
|
||||||
|
const classes: { [key: string]: string };
|
||||||
|
export default classes;
|
||||||
|
}
|
||||||
|
declare module '*.module.sass' {
|
||||||
|
const classes: { [key: string]: string };
|
||||||
|
export default classes;
|
||||||
|
}
|
||||||
|
declare module '*.module.less' {
|
||||||
|
const classes: { [key: string]: string };
|
||||||
|
export default classes;
|
||||||
|
}
|
||||||
|
declare module '*.module.styl' {
|
||||||
|
const classes: { [key: string]: string };
|
||||||
|
export default classes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CSS */
|
||||||
|
declare module '*.css';
|
||||||
|
declare module '*.scss';
|
||||||
|
declare module '*.sass';
|
||||||
|
declare module '*.less';
|
||||||
|
declare module '*.styl';
|
||||||
|
|
||||||
|
/* IMAGES */
|
||||||
|
declare module '*.svg' {
|
||||||
|
const ref: string;
|
||||||
|
export default ref;
|
||||||
|
}
|
||||||
|
declare module '*.bmp' {
|
||||||
|
const ref: string;
|
||||||
|
export default ref;
|
||||||
|
}
|
||||||
|
declare module '*.gif' {
|
||||||
|
const ref: string;
|
||||||
|
export default ref;
|
||||||
|
}
|
||||||
|
declare module '*.jpg' {
|
||||||
|
const ref: string;
|
||||||
|
export default ref;
|
||||||
|
}
|
||||||
|
declare module '*.jpeg' {
|
||||||
|
const ref: string;
|
||||||
|
export default ref;
|
||||||
|
}
|
||||||
|
declare module '*.png' {
|
||||||
|
const ref: string;
|
||||||
|
export default ref;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CUSTOM: ADD YOUR OWN HERE */
|
6
ui/web-test-runner.config.js
Normal file
6
ui/web-test-runner.config.js
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// NODE_ENV=test - Needed by "@snowpack/web-test-runner-plugin"
|
||||||
|
process.env.NODE_ENV = 'test';
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
plugins: [require('@snowpack/web-test-runner-plugin')()],
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user