├── .env ├── .env.production ├── .eslintrc.json ├── .gitignore ├── Icon ├── LICENSE.md ├── README.md ├── babel.config.js ├── jsconfig.json ├── package.json ├── postcss.config.js ├── public ├── img │ ├── icons │ │ ├── favicon-52.png │ │ ├── icon-192.png │ │ └── icon-512.png │ └── meta │ │ ├── facebook.png │ │ └── twitter.png ├── index.html ├── manifest.json └── robots.txt ├── src ├── App.vue ├── assets │ ├── branding │ │ ├── logo-dark.png │ │ ├── logo-dark.svg │ │ ├── logo-light.png │ │ └── logo-light.svg │ ├── color_blind_filters.svg │ ├── fonts │ │ ├── inter.ttf │ │ ├── sourceCode.ttf │ │ └── sourceSerif.ttf │ └── projects │ │ ├── ceev.png │ │ └── tidycamp.png ├── components │ ├── filters.js │ ├── mixins │ │ ├── keyboard.js │ │ └── screenResizeMixin.js │ ├── plugins │ │ ├── Dayjs.js │ │ ├── logging.js │ │ └── plugins.js │ └── ui │ │ ├── Common │ │ ├── Alert.vue │ │ ├── Callout.vue │ │ ├── Toast.vue │ │ └── Tooltip.vue │ │ ├── Forms │ │ └── Selections.vue │ │ ├── Modals │ │ ├── Confirm.vue │ │ ├── ConfirmLeave.vue │ │ └── Modal.vue │ │ └── Single │ │ ├── Launcher.vue │ │ ├── NavBar.vue │ │ └── ThemeEditor.vue ├── definitions │ ├── changelog.js │ └── characters.js ├── main.js ├── registerServiceWorker.js ├── router.js ├── routes.js ├── service-worker.js ├── store │ ├── database.js │ ├── modules │ │ ├── device.store.js │ │ ├── hold.store.js │ │ ├── site.store.js │ │ └── user.store.js │ └── store.js ├── styles │ ├── animations.scss │ ├── base.scss │ ├── custom-forms.scss │ ├── forms.scss │ ├── helpers.scss │ ├── layout.scss │ ├── main.scss │ ├── modal.scss │ ├── print.scss │ ├── reset.scss │ ├── themes │ │ ├── default.scss │ │ ├── greys.scss │ │ ├── muted.scss │ │ └── primary.scss │ ├── typography.scss │ ├── ui.scss │ └── variables.scss └── views │ ├── Home.vue │ ├── Settings.vue │ ├── apps │ ├── Animations.vue │ ├── AppTemplate.vue │ ├── Characters.vue │ ├── Colors.vue │ └── Shadows.vue │ └── other │ ├── docs │ ├── Changelog.vue │ ├── PrivacyPolicy.vue │ ├── Sponsor.vue │ ├── TermsOfService.vue │ └── design │ │ ├── Design.vue │ │ ├── DesignColors.vue │ │ ├── DesignForms.vue │ │ ├── DesignText.vue │ │ └── DesignUI.vue │ └── error.vue └── vue.config.js /.env: -------------------------------------------------------------------------------- 1 | NODE_ENV=development 2 | VUE_APP_BASE_URL=localhost:8080 3 | VUE_APP_BASE_PATH=/ 4 | VUE_APP_FULL_URL=dev.keyframes.app 5 | VUE_APP_COMPANY_NAME=Keyframes.app -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | NODE_ENV=test 2 | VUE_APP_BASE_URL=keyframes.app 3 | VUE_APP_BASE_PATH=/ 4 | VUE_APP_FULL_URL=keyframes.app 5 | VUE_APP_COMPANY_NAME=Keyframes.app 6 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "root": true, 4 | "parserOptions": { 5 | "parser": "babel-eslint" 6 | }, 7 | "env": { 8 | "browser": true 9 | }, 10 | "extends": [ 11 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 12 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 13 | "plugin:vue/essential" 14 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 15 | // "standard" 16 | ], 17 | // required to lint *.vue files 18 | "plugins": [ 19 | "vue" 20 | ], 21 | // add your custom rules here 22 | "rules": { 23 | // allow async-await 24 | "generator-star-spacing": "off", 25 | // allow debugger during development 26 | // "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off", 27 | "semi": ["warn", "always"], 28 | "quotes": ["warn", "double"] 29 | 30 | } 31 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | package-lock.json 3 | 4 | # Build/Dist 5 | /dist 6 | /tmp 7 | /out-tsc 8 | # Only exists if Bazel was run 9 | /bazel-out 10 | 11 | # Don't commit local configs 12 | *.local 13 | 14 | # dependencies 15 | /node_modules 16 | bower_components 17 | 18 | # profiling files 19 | chrome-profiler-events.json 20 | speed-measure-plugin.json 21 | 22 | # IDEs and editors 23 | /.idea 24 | .project 25 | .classpath 26 | .c9/ 27 | *.launch 28 | .settings/ 29 | *.sublime-workspace 30 | 31 | # IDE - VSCode 32 | .vscode/* 33 | !.vscode/settings.json 34 | !.vscode/tasks.json 35 | !.vscode/launch.json 36 | !.vscode/extensions.json 37 | .history/* 38 | 39 | # misc 40 | /.sass-cache 41 | /connect.lock 42 | /coverage 43 | /libpeerconnection.log 44 | npm-debug.log 45 | yarn-error.log 46 | testem.log 47 | /typings 48 | **/*npm-debug.log.* 49 | **/*yarn-error.log.* 50 | 51 | # System Files 52 | .DS_Store 53 | Thumbs.db 54 | -------------------------------------------------------------------------------- /Icon : -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitchas/Keyframes/ec3065e7e968ad7433db42cf809ea5c7ace10484/Icon -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Keyframes.app v2 2 | 3 | A collection of simple tools for frontend development. 4 | - Visual CSS @keyframe editor. 5 | - Color palette creator with gradients, conversion, contrast, and color blindness. 6 | - CSS box-shadow generator 7 | - Special character search 8 | 9 | ## Built With 10 | 11 | * [Vue](https://vuejs.org) - Framework 12 | * [{scss}](https://sass-lang.com/) - Styling 13 | * No frontend/CSS frameworks or plugins 14 | 15 | ### Third-party packages: 16 | * [DayJS](https://day.js.org/) for Dates 17 | * [Numeral.js](http://numeraljs.com/) for Number stuff 18 | * [Font Awesome](https://fontawesome.com/) icons 19 | 20 | 21 | 22 | 23 | 24 | # Project Installation & Development 25 | 26 | #### You need config values in your .env files. 27 | 28 | ## Packages 29 | ```bash 30 | npm install 31 | ``` 32 | 33 | ## NPM Commands 34 | 35 | ### **Run** 36 | #### Serve on [localhost:8080](https://localhost:8080) 37 | ```bash 38 | npm run serve 39 | ``` 40 | Bundle Analyzer will also be running at :8888 41 | 42 | ### **Build** 43 | #### Build with test configuration 44 | ```bash 45 | npm run build 46 | ``` 47 | #### Build with live configuration 48 | ```bash 49 | npm run build-prod 50 | ``` 51 | 52 | ### **Deploy** 53 | After running `npm run build` or `npm run build-prod`, the compiled project will be in the `/dist` folder. 54 | 55 | 56 | ### **Run your tests** 57 | ```bash 58 | npm run test 59 | ``` 60 | ### **Lints and fixes files** 61 | ```bash 62 | npm run lint 63 | ``` 64 | 65 | 66 | 67 | 68 | # Authors 69 | 70 | * **Mitch Samuels** - [hotdi.sh](https://hotdi.sh/) 71 | 72 | Also view the [contributors](https://github.com/mitchas/keyframes/graphs/contributors) for others who have contributed. 73 | 74 | 75 | 76 | 77 | 78 | # License 79 | This project is licensed under the GNU General Public License - see the [LICENSE.md](LICENSE.md) file for details 80 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | "@vue/app" 4 | ] 5 | }; 6 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": [ 3 | "./src/**/*" 4 | ], 5 | "compilerOptions": { 6 | "allowJs": true 7 | } 8 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "keyframes", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve --mode test", 7 | "serve-prod": "vue-cli-service serve --mode production", 8 | "serve-build": "cd dist && serve", 9 | "lint": "vue-cli-service lint", 10 | "build": "npm run lint && vue-cli-service build --mode test", 11 | "build-prod": "npm run lint && vue-cli-service build --mode production" 12 | }, 13 | "dependencies": { 14 | "axios": "^0.21.4", 15 | "core-js": "^2.6.12", 16 | "dayjs": "^1.10.4", 17 | "eslint-loader": "^2.1.2", 18 | "lodash": "^4.17.21", 19 | "numeral": "^2.0.6", 20 | "register-service-worker": "^1.7.2", 21 | "vue": "^2.6.12", 22 | "vue-object-merge": "^1.0.0", 23 | "vue-router": "^3.5.1", 24 | "vue2-touch-events": "^2.3.2", 25 | "vuex": "^3.6.2" 26 | }, 27 | "devDependencies": { 28 | "@vue/cli-plugin-babel": "^3.8.0", 29 | "@vue/cli-plugin-eslint": "^3.8.0", 30 | "@vue/cli-plugin-pwa": "^3.8.0", 31 | "@vue/cli-service": "^3.8.0", 32 | "babel-eslint": "^10.1.0", 33 | "eslint": "^5.16.0", 34 | "eslint-plugin-vue": "^5.2.3", 35 | "imagemin-webpack-plugin": "^2.4.2", 36 | "sass": "^1.32.8", 37 | "sass-loader": "^10.1.1", 38 | "vue-cli-plugin-html-replace": "^1.3.0", 39 | "vue-template-compiler": "^2.6.12" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | }; -------------------------------------------------------------------------------- /public/img/icons/favicon-52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitchas/Keyframes/ec3065e7e968ad7433db42cf809ea5c7ace10484/public/img/icons/favicon-52.png -------------------------------------------------------------------------------- /public/img/icons/icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitchas/Keyframes/ec3065e7e968ad7433db42cf809ea5c7ace10484/public/img/icons/icon-192.png -------------------------------------------------------------------------------- /public/img/icons/icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitchas/Keyframes/ec3065e7e968ad7433db42cf809ea5c7ace10484/public/img/icons/icon-512.png -------------------------------------------------------------------------------- /public/img/meta/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitchas/Keyframes/ec3065e7e968ad7433db42cf809ea5c7ace10484/public/img/meta/facebook.png -------------------------------------------------------------------------------- /public/img/meta/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mitchas/Keyframes/ec3065e7e968ad7433db42cf809ea5c7ace10484/public/img/meta/twitter.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |51 | Promote your project or company to a bunch* of developers each week with a link and a popup like this right at the end of the nav bar. 52 |
53 | 54 |55 | * I don't actually know the number - because of very simple tracking for privacy reasons. The bare minimum visitors on any given day is around 250, much higher than that early in the week. 56 |
57 | 58 |{{change.description}}
22 |23 |
12 | {{company}}'s Privacy Policy was last updated and went into effect July 11, 2022. 13 |
14 | 15 | 16 |21 |
31 | Hi! We are the people running {{company}}. Our goal with {{company}} is to make useful tools without all the extra junk. 32 |
33 |34 | This Privacy Policy applies to information that we collect about you when you use: 35 |
45 | The only information we collect is basic website traffic analytics. 46 |
60 | We use information as mentioned above and for the purposes listed below: 61 |
69 | Although most changes are likely to be minor, {{company}} may change its Privacy Policy from time to time. {{company}} encourages visitors to frequently check this page for any changes to its Privacy Policy. If we make changes, we will notify you by updating the version number and date at the top of the page, and, in some cases, we may provide additional notice (such as adding a statement to your dashboard account, or sending you a notification through email). Your further use of the Services after a change to our Privacy Policy will be subject to the updated policy. 70 |
71 | 72 | 73 | 74 | 75 | 76 |11 | Get your business or side project in front of hundreds* of developers and designers each day. 12 |
13 | 14 |15 | Check out the options below then send me an email at hello@hotdi.sh with the package you would like. I'll get the content from you, send an invoice, and can usually get it live or scheduled within an hour or whenever you would like. 16 |
17 | 18 |19 | *Because of limited tracking, I don't have an accurate user count. The bare minimum visitors on any given day is around 250 (weekend days), and normally 2-3x higher than that early in the week. 20 |
21 | 22 | 23 |25 | Add a link to your project or company right to the nav bar on Keyframes. 26 |
27 |43 | Sponsor your favorite application on Keyframes.app 44 |
45 |59 | Do you have an idea for a similar mini-app that would fit in here? Lets make it happen. 60 |
61 |72 | Alternatively, if you want your own separate project similar to Keyframes - I do freelance work. Send me an email and we can talk about what you need! 73 |
74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 |11 | {{company}}'s Terms of Service was last updated and went into effect July 11, 2022. 12 |
13 | 14 | 15 |19 |
32 | By accessing the website at https://{{url}} and all subdomains, you are agreeing to be bound by these terms of service, all applicable laws and regulations, and agree that you are responsible for compliance with any applicable local laws. If you do not agree with any of these terms, you are prohibited from using or accessing this site. The materials contained in this website are protected by applicable copyright and trademark law. 33 |
34 |38 |
39 | Permission is granted to temporarily use {{company}}'s website for personal and commercial use. This is the grant of a license, not a transfer of title, and under this license you may not: 40 |
51 | The materials on {{company}}'s website are provided on an 'as is' basis. {{company}} makes no warranties, expressed or implied, and hereby disclaims and negates all other warranties including, without limitation, implied warranties or conditions of merchantability, fitness for a particular purpose, or non-infringement of intellectual property or other violation of rights. 52 |
53 |57 | In no event shall {{company}} or its suppliers be liable for any damages (including, without limitation, damages for loss of data or profit, or due to business interruption) arising out of the use or inability to use the materials on {{company}}'s website, even if {{company}} or a {{company}} authorized representative has been notified orally or in writing of the possibility of such damage. Because some jurisdictions do not allow limitations on implied warranties, or limitations of liability for consequential or incidental damages, these limitations may not apply to you. 58 |
59 |63 | The materials appearing on {{company}} website could include technical, typographical, or photographic errors. {{company}} does not warrant that any of the materials on its website are accurate, complete or current. {{company}} may make changes to the materials contained on its website at any time without notice. However {{company}} does not make any commitment to update the materials. 64 |
65 |69 | {{company}} has not reviewed all of the sites linked to its website and is not responsible for the contents of any such linked site. The inclusion of any link does not imply endorsement by {{company}} of the site. Use of any such linked website is at the user's own risk. 70 |
71 |75 | {{company}} may revise these terms of service for its website at any time without notice. By using this website you are agreeing to be bound by the then current version of these terms of service. 76 |
77 |81 | These terms and conditions are governed by and construed in accordance with the laws of Minnesota and you irrevocably submit to the exclusive jurisdiction of the courts in that State or location. 82 |
83 | 84 | 85 | 86 | 87 |Custom select picker with search, multi select
225 |17 | Lorem ipsum dolor sit amet, large paragraph consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 18 |
19 | 20 |23 | Lorem ipsum dolor sit amet, regular paragraph consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 24 |
25 |26 | Lorem ipsum dolor sit amet, small paragraph consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 27 |
28 | 29 |40 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 41 |
42 | 43 |46 | Lorem ipsum dolor sit amet, regular paragraph consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 47 |
48 | 49 |52 | Lorem ipsum dolor sit amet, regular paragraph consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 53 |
54 | 55 |58 | Lorem ipsum dolor sit amet, .small paragraph consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 59 |
60 | 61 | 62 | 63 | 64 | 65 | 66 |
50 | Call: toast('Title', 'Toast Body.', 'color', 'icon-string');
51 |
52 |
91 | call: hello('Message', 'icon-string', 'color');
92 |
93 | Toggle the loader to indicate something is happening.
178 | 179 | 183 | 184 |