diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 15f62d7..9d509b5 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,11 +1,11 @@ /* eslint-env node */ module.exports = { root: true, - 'extends': [ + extends: [ 'plugin:vue/vue3-essential', - 'eslint:recommended' + 'eslint:recommended', ], parserOptions: { - ecmaVersion: 'latest' + ecmaVersion: 'latest', } } diff --git a/package-lock.json b/package-lock.json index e879e03..2e7e4a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,10 +12,12 @@ "@codemirror/theme-one-dark": "^6.1.0", "@gkucmierz/utils": "^1.12.1", "codemirror": "^6.0.1", + "copy-to-clipboard": "^3.3.3", "eventemitter3": "^4.0.7", "javascript-stringify": "^2.1.0", "meriyah": "^4.3.3", "normalize.css": "^8.0.1", + "primeicons": "^6.0.1", "primevue": "^3.18.0", "vue": "^3.2.41", "vue-codemirror": "^6.1.1", @@ -2892,6 +2894,14 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, "node_modules/core-js-compat": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", @@ -4703,8 +4713,7 @@ "node_modules/primeicons": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", - "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==", - "peer": true + "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==" }, "node_modules/primevue": { "version": "3.18.0", @@ -5475,6 +5484,11 @@ "node": ">=8.0" } }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, "node_modules/tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", @@ -8412,6 +8426,14 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, "core-js-compat": { "version": "3.26.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", @@ -9738,8 +9760,7 @@ "primeicons": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", - "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==", - "peer": true + "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==" }, "primevue": { "version": "3.18.0", @@ -10252,6 +10273,11 @@ "is-number": "^7.0.0" } }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, "tr46": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", diff --git a/package.json b/package.json index 9bb9eb3..0440d69 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,12 @@ "@codemirror/theme-one-dark": "^6.1.0", "@gkucmierz/utils": "^1.12.1", "codemirror": "^6.0.1", + "copy-to-clipboard": "^3.3.3", "eventemitter3": "^4.0.7", "javascript-stringify": "^2.1.0", "meriyah": "^4.3.3", "normalize.css": "^8.0.1", + "primeicons": "^6.0.1", "primevue": "^3.18.0", "vue": "^3.2.41", "vue-codemirror": "^6.1.1", diff --git a/src/app.config.mjs b/src/app.config.mjs index fe1ac42..411fdf7 100644 --- a/src/app.config.mjs +++ b/src/app.config.mjs @@ -1,4 +1,5 @@ +export const APP_URL = 'https://instacode.app'; export const MAX_DATA_SIZE = 1e5; export const ERROR_MAX_DATA_SIZE = 'Error: Output exceeded maximum size allowed'; export const WELCOME_CODE = ` @@ -17,3 +18,5 @@ for (let i = 0; i < 42; ++i) { // storage unique keys: export const STORAGE_KEY_CODE = 'code'; export const STORAGE_KEY_SETTINGS = 'settings'; + +export const SHARE_CODE_ROUTE_NAME = 'run'; diff --git a/src/assets/main.scss b/src/assets/main.scss index 1028c17..515b1fb 100644 --- a/src/assets/main.scss +++ b/src/assets/main.scss @@ -1,6 +1,7 @@ @import 'normalize.css'; // @import 'primeicons/primeicons.css'; @import 'primevue/resources/primevue.min.css'; +@import 'primeicons/primeicons.css'; @import 'primevue/resources/themes/bootstrap4-dark-blue/theme.css'; // @import 'primevue/resources/themes/bootstrap4-light-blue/theme.css'; diff --git a/src/components/CodeEditor.vue b/src/components/CodeEditor.vue index 35f0411..cf25e7c 100644 --- a/src/components/CodeEditor.vue +++ b/src/components/CodeEditor.vue @@ -5,11 +5,10 @@ import { Codemirror } from 'vue-codemirror' import { javascript } from '@codemirror/lang-javascript' import { oneDark } from '@codemirror/theme-one-dark' +import codeService from '../services/codeService'; + export default defineComponent({ name: 'CodeEditor', - props: { - code: String, - }, components: { Codemirror, }, @@ -37,8 +36,14 @@ export default defineComponent({ return { extensions, handleReady, + code: codeService.get(), } }, + methods: { + change(code) { + codeService.change(code); + }, + } }); @@ -59,7 +64,7 @@ export default defineComponent({ :tab-size="2" :extensions="extensions" @ready="handleReady" - @change="$emit('change', $event)" + @change="change($event)" /> diff --git a/src/components/ShareModal.vue b/src/components/ShareModal.vue index 1b14ed3..f5d454a 100644 --- a/src/components/ShareModal.vue +++ b/src/components/ShareModal.vue @@ -1,6 +1,14 @@ @@ -52,7 +56,10 @@ b {

Share Code