├── ss.jpeg
├── header.png
├── src
├── logo.png
├── favicon.ico
├── assets
│ ├── ss.jpeg
│ ├── default.webp
│ ├── mountain.webp
│ ├── box.svg
│ ├── github.svg
│ ├── fence.svg
│ ├── download.svg
│ ├── edit.svg
│ ├── upload.svg
│ ├── reset.svg
│ ├── random.svg
│ ├── top.svg
│ └── wand.svg
├── styles
│ ├── tailwind.css
│ ├── slider.css
│ ├── scroll.css
│ └── main.css
├── utils
│ ├── getFileType.js
│ ├── loadElement.js
│ ├── dynamicCanvasResize.js
│ ├── generateColors.js
│ ├── generateRandomURL.js
│ ├── hslToRgb.js
│ ├── downscaleCanvasImage.js
│ └── downloadImage.js
├── index.jsx
├── App.jsx
├── Components
│ ├── UI
│ │ ├── Slider.jsx
│ │ ├── Checkbox.jsx
│ │ ├── AnimatedText.jsx
│ │ ├── Spinner.jsx
│ │ ├── Button.jsx
│ │ ├── Navbar.jsx
│ │ ├── Toast.jsx
│ │ └── Modal.jsx
│ ├── OutputSection
│ │ ├── OutputGrid.jsx
│ │ └── AdjustedOutput.jsx
│ ├── Main
│ │ └── ImageSection.jsx
│ ├── AbstractArt
│ │ ├── GlowEffect.jsx
│ │ └── AbstractArt.jsx
│ ├── Home.jsx
│ ├── ImageButtons
│ │ └── ImageButtons.jsx
│ ├── CanvasComponents
│ │ ├── MainCanvas.jsx
│ │ └── OuputCanvas.jsx
│ └── MainConfig
│ │ └── ConfigBar.jsx
├── constants.js
├── hooks
│ ├── useCanvas.jsx
│ ├── useWorker.jsx
│ ├── useWindowSize.jsx
│ └── useStore.jsx
├── worker
│ ├── runWorker.js
│ └── tintWorker.js
├── loader.svg
└── index.html
├── postcss.config.js
├── .prettierrc.json
├── .babelrc
├── webpack.dev.js
├── .gitignore
├── .eslintrc.js
├── webpack.prod.js
├── LICENSE
├── README.md
├── webpack.common.js
├── package.json
├── tailwind.config.js
└── lib
└── webcomponent
├── banner.js
└── float-menu.js
/ss.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uxie-io/tinter/HEAD/ss.jpeg
--------------------------------------------------------------------------------
/header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uxie-io/tinter/HEAD/header.png
--------------------------------------------------------------------------------
/src/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uxie-io/tinter/HEAD/src/logo.png
--------------------------------------------------------------------------------
/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uxie-io/tinter/HEAD/src/favicon.ico
--------------------------------------------------------------------------------
/src/assets/ss.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uxie-io/tinter/HEAD/src/assets/ss.jpeg
--------------------------------------------------------------------------------
/src/assets/default.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uxie-io/tinter/HEAD/src/assets/default.webp
--------------------------------------------------------------------------------
/src/assets/mountain.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/uxie-io/tinter/HEAD/src/assets/mountain.webp
--------------------------------------------------------------------------------
/src/styles/tailwind.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 |
3 | @tailwind components;
4 |
5 | @tailwind utilities;
6 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: [require('tailwindcss'), require('autoprefixer')],
3 | }
4 |
--------------------------------------------------------------------------------
/src/utils/getFileType.js:
--------------------------------------------------------------------------------
1 | export const getFileType = (fname) =>
2 | fname.slice(((fname.lastIndexOf('.') - 1) >>> 0) + 2)
3 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all",
3 | "tabWidth": 2,
4 | "semi": false,
5 | "singleQuote": true
6 | }
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["@babel/preset-env", "@babel/preset-react"],
3 | "plugins": [
4 | ["@babel/plugin-transform-react-jsx", { "pragma": "h" }]
5 | ]
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/webpack.dev.js:
--------------------------------------------------------------------------------
1 | const { merge } = require('webpack-merge')
2 | const common = require('./webpack.common.js')
3 |
4 | module.exports = merge(common, {
5 | mode: 'development',
6 | })
7 |
--------------------------------------------------------------------------------
/src/index.jsx:
--------------------------------------------------------------------------------
1 | import { h, render } from 'preact'
2 | import App from './App.jsx'
3 | import './styles/main.css'
4 | import './styles/slider.css'
5 | import './styles/scroll.css'
6 |
7 | render(
{textList[textIdx]}
18 | } 19 | 20 | export default AnimatedText 21 | -------------------------------------------------------------------------------- /src/utils/generateRandomURL.js: -------------------------------------------------------------------------------- 1 | import { UNSPLASH_URI } from '../constants' 2 | 3 | export const generateRandomURL = () => 4 | new Promise((resolve) => { 5 | try { 6 | fetch(UNSPLASH_URI).then((response) => { 7 | if (response.ok) { 8 | resolve({ 9 | ok: true, 10 | url: response.url, 11 | }) 12 | } else { 13 | resolve({ 14 | ok: false, 15 | err: 'Error Fetching', 16 | }) 17 | } 18 | }) 19 | } catch (e) { 20 | resolve({ 21 | ok: false, 22 | err: e.message, 23 | }) 24 | } 25 | }) 26 | -------------------------------------------------------------------------------- /src/assets/edit.svg: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /webpack.prod.js: -------------------------------------------------------------------------------- 1 | const { merge } = require('webpack-merge') 2 | const common = require('./webpack.common.js') 3 | const CompressionPlugin = require('compression-webpack-plugin') 4 | const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin') 5 | const webpack = require('webpack') 6 | 7 | module.exports = merge(common, { 8 | mode: 'production', 9 | plugins: [ 10 | new webpack.DefinePlugin({ 11 | // <-- key to reducing React's size 12 | 'process.env': { 13 | NODE_ENV: JSON.stringify('production'), 14 | }, 15 | }), 16 | new CompressionPlugin(), 17 | new OptimizeCSSAssetsPlugin({}), 18 | ], 19 | }) 20 | -------------------------------------------------------------------------------- /src/Components/OutputSection/OutputGrid.jsx: -------------------------------------------------------------------------------- 1 | import { h } from 'preact' 2 | import { useState } from 'preact/hooks' 3 | import { generateColors } from '../../utils/generateColors' 4 | import { AdjustedOutput } from './AdjustedOutput' 5 | import { OUTPUT_IMAGES } from '../../constants' 6 | 7 | const OutputGrid = () => { 8 | const [colors] = useState(() => generateColors(OUTPUT_IMAGES).reverse()) 9 | 10 | return ( 11 |
loading...
66 | 67 |loading...
{' '} 82 | 83 |
35 | {toastContent.spinner &&
40 | {toastContent.texts[0]} 41 |
42 | )} 43 | 44 |55 | Fine tune 56 |
57 |