diff --git a/.github/workflows/publish-action.yml b/.github/workflows/publish-action.yml index beaaf4f8..3ace5aa9 100644 --- a/.github/workflows/publish-action.yml +++ b/.github/workflows/publish-action.yml @@ -77,7 +77,17 @@ jobs: - name: Install OAuth server dependencies run: yarn install working-directory: ./server + - name: Download and Unzip eSignerCKA Setup + run: | + Invoke-WebRequest -OutFile CodeSignTool.zip "https://www.ssl.com/download/codesigntool-for-windows" + Expand-Archive -Force CodeSignTool.zip + Remove-Item CodeSignTool.zip - name: Publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + WINDOWS_SIGN_USER_NAME: ${{ secrets.WINDOWS_SIGN_USER_NAME }} + WINDOWS_SIGN_USER_PASSWORD: ${{ secrets.WINDOWS_SIGN_USER_PASSWORD }} + WINDOWS_SIGN_CREDENTIAL_ID: ${{ secrets.WINDOWS_SIGN_CREDENTIAL_ID }} + WINDOWS_SIGN_USER_TOTP: ${{ secrets.WINDOWS_SIGN_USER_TOTP }} run: npm run publish + diff --git a/build/signWindows.js b/build/signWindows.js new file mode 100644 index 00000000..2c80363f --- /dev/null +++ b/build/signWindows.js @@ -0,0 +1,40 @@ +const path = require('path'); +const fs = require('fs'); +const childProcess = require('child_process'); + +const TEMP_DIR = path.join(__dirname, 'release', 'temp'); + +if (!fs.existsSync(TEMP_DIR)) { + fs.mkdirSync(TEMP_DIR, { recursive: true }); +} + +function sign(configuration) { + // credentials from ssl.com + const USER_NAME = process.env.WINDOWS_SIGN_USER_NAME; + const USER_PASSWORD = process.env.WINDOWS_SIGN_USER_PASSWORD; + const CREDENTIAL_ID = process.env.WINDOWS_SIGN_CREDENTIAL_ID; + const USER_TOTP = process.env.WINDOWS_SIGN_USER_TOTP; + if (USER_NAME && USER_PASSWORD && USER_TOTP && CREDENTIAL_ID) { + console.log(`Signing ${configuration.path}`); + const { name, dir } = path.parse(configuration.path); + // CodeSignTool can't sign in place without verifying the overwrite with a + // y/m interaction so we are creating a new file in a temp directory and + // then replacing the original file with the signed file. + const tempFile = path.join(TEMP_DIR, name); + const setDir = `cd CodeSignTool/CodeSignTool-v1.2.7-windows`; + const signFile = `"CodeSignTool" sign -input_file_path="${configuration.path}" -output_dir_path="${TEMP_DIR}" -credential_id="${CREDENTIAL_ID}" -username="${USER_NAME}" -password="${USER_PASSWORD}" -totp_secret="${USER_TOTP}"`; + const moveFile = `mv "${tempFile}" "${dir}"`; + childProcess.execSync(`${setDir} && ${signFile}`, { stdio: 'inherit' }); + childProcess.execSync(`${moveFile}`, { stdio: 'inherit' }); + } else { + console.warn(`sign.js - Can't sign file ${configuration.path}, missing value for: +${USER_NAME ? '' : 'WINDOWS_SIGN_USER_NAME'} +${USER_PASSWORD ? '' : 'WINDOWS_SIGN_USER_PASSWORD'} +${CREDENTIAL_ID ? '' : 'WINDOWS_SIGN_CREDENTIAL_ID'} +${USER_TOTP ? '' : 'WINDOWS_SIGN_USER_TOTP'} +`); + process.exit(1); + } +} + +exports.default = sign; diff --git a/package.json b/package.json index 9f867314..0a449ba3 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,13 @@ { "name": "yattie", - "version": "0.5.3", + "version": "0.5.4", "engines": { "npm": ">=8.0.0 <9.0.0", "node": ">=16.0.0 <17.0.0" }, "keywords": [], "author": { - "name": "YATT", + "name": "YATT, Inc", "email": "contact@yatt.ai" }, "license": "GPL-3.0-only", diff --git a/src/assets/icon/camera-gray.svg b/src/assets/icon/camera-gray.svg new file mode 100644 index 00000000..05a5d8ce --- /dev/null +++ b/src/assets/icon/camera-gray.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icon/connect-gray.svg b/src/assets/icon/connect-gray.svg new file mode 100644 index 00000000..20a39569 --- /dev/null +++ b/src/assets/icon/connect-gray.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icon/drag-drop.png b/src/assets/icon/drag-drop.png new file mode 100644 index 00000000..3f519a71 Binary files /dev/null and b/src/assets/icon/drag-drop.png differ diff --git a/src/assets/icon/microphone-slash-solid-gray.svg b/src/assets/icon/microphone-slash-solid-gray.svg new file mode 100644 index 00000000..833fd947 --- /dev/null +++ b/src/assets/icon/microphone-slash-solid-gray.svg @@ -0,0 +1,10 @@ + + + +Created with Fabric.js 4.6.0 + + + + + + \ No newline at end of file diff --git a/src/assets/icon/microphone-solid-gray.svg b/src/assets/icon/microphone-solid-gray.svg new file mode 100644 index 00000000..2b6fe9b7 --- /dev/null +++ b/src/assets/icon/microphone-solid-gray.svg @@ -0,0 +1,10 @@ + + + +Created with Fabric.js 4.6.0 + + + + + + \ No newline at end of file diff --git a/src/assets/icon/pause-gray.svg b/src/assets/icon/pause-gray.svg new file mode 100644 index 00000000..3d695dc7 --- /dev/null +++ b/src/assets/icon/pause-gray.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icon/pencil-gray.svg b/src/assets/icon/pencil-gray.svg new file mode 100644 index 00000000..1ff8bd61 --- /dev/null +++ b/src/assets/icon/pencil-gray.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/icon/play-gray.svg b/src/assets/icon/play-gray.svg new file mode 100644 index 00000000..aacced6a --- /dev/null +++ b/src/assets/icon/play-gray.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icon/stop-gray.svg b/src/assets/icon/stop-gray.svg new file mode 100644 index 00000000..aec9ba30 --- /dev/null +++ b/src/assets/icon/stop-gray.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icon/union-gray.svg b/src/assets/icon/union-gray.svg new file mode 100644 index 00000000..5913bb23 --- /dev/null +++ b/src/assets/icon/union-gray.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/icon/video-slash-solid-gray.svg b/src/assets/icon/video-slash-solid-gray.svg new file mode 100644 index 00000000..d46eaab9 --- /dev/null +++ b/src/assets/icon/video-slash-solid-gray.svg @@ -0,0 +1,10 @@ + + + +Created with Fabric.js 4.6.0 + + + + + + \ No newline at end of file diff --git a/src/assets/icon/video-solid-gray.svg b/src/assets/icon/video-solid-gray.svg new file mode 100644 index 00000000..71423a2e --- /dev/null +++ b/src/assets/icon/video-solid-gray.svg @@ -0,0 +1,10 @@ + + + +Created with Fabric.js 4.6.0 + + + + + + \ No newline at end of file diff --git a/src/components/CheckTaskWrapper.vue b/src/components/CheckTaskWrapper.vue index 8cf5e0ed..b320f914 100644 --- a/src/components/CheckTaskWrapper.vue +++ b/src/components/CheckTaskWrapper.vue @@ -1,6 +1,11 @@ {{ $tc("caption.resume_session", 1) }} @@ -114,7 +118,10 @@ v-on="on" @click="newSessionDialog = true" > - mdi-content-save + + mdi-content-save + + mdi-content-save {{ $tc("caption.save_session") }} @@ -131,7 +138,10 @@ v-on="on" @click="resetConfirmDialog = true" > - mdi-close-circle + + mdi-close-circle + + mdi-close-circle {{ $tc("caption.clear_session", 1) }} @@ -156,10 +166,17 @@ @click="pauseSession()" > + {{ $tc("caption.pause_session", 1) }} @@ -177,10 +194,17 @@ @click="resumeSession()" > + {{ $tc("caption.resume_session", 1) }} @@ -198,10 +222,17 @@ @click="endSession()" > + {{ $tc("caption.end_session", 1) }} @@ -220,10 +251,17 @@ @click="startRecordVideo()" > + {{ $tc("caption.start_video_record", 1) }} @@ -242,10 +280,17 @@ @click="stopRecordVideo()" > + {{ $tc("caption.stop_video_record", 1) }} @@ -264,10 +309,17 @@ @click="screenshot()" > + {{ $tc("caption.screenshot", 1) }} @@ -286,10 +338,17 @@ @click="startRecordAudio()" > + {{ $tc("caption.start_audio_record", 1) }} @@ -308,10 +367,19 @@ @click="stopRecordAudio()" > + {{ $tc("caption.stop_audio_record", 1) }} @@ -330,10 +398,17 @@ @click="showNoteDialog" > + {{ $tc("caption.note", 1) }} @@ -351,10 +426,17 @@ @click="mindMap" > + {{ $tc("caption.mind_map", 1) }} @@ -371,10 +453,17 @@ @click="minimize" > + {{ $tc("caption.minimize", 1) }} @@ -391,7 +480,10 @@ v-on="on" v-bind="attrs" > - mdi-dots-vertical + + mdi-dots-vertical + + mdi-dots-vertical @@ -627,6 +719,13 @@ export default { const result = date.toISOString().substr(11, 8); return result; }, + currentTheme() { + if (this.$vuetify.theme.dark) { + return this.$vuetify.theme.themes.dark; + } else { + return this.$vuetify.theme.themes.light; + } + }, summary() { let summary = {}; this.items.map((item) => { @@ -842,7 +941,7 @@ export default { data: { path: "noteEditor", size: { - width: 400, + width: 500, height: 550, }, data: this.config, @@ -984,7 +1083,7 @@ export default { data: { path: "endsession", size: { - width: 350, + width: 450, height: 500, }, data: this.config, @@ -1585,4 +1684,11 @@ export default { .v-btn--disabled img { opacity: 0.5; } +.theme--dark .control-btn-wrapper { + background-color: #374151; +} +.theme--dark .control-btn { + background-color: #4b5563; + border-color: #4b5563; +} diff --git a/src/components/TestWrapper.vue b/src/components/TestWrapper.vue index 6b6b4dd8..c830959f 100644 --- a/src/components/TestWrapper.vue +++ b/src/components/TestWrapper.vue @@ -3,7 +3,12 @@
-
{{ $tc("caption.title", 1) }}
+
+ {{ $tc("caption.title", 1) }} +
-
+
{{ $tc("caption.charter", 1) }}
-
+
{{ $tc("caption.time_limit", 1) }}
@@ -94,7 +104,7 @@ diff --git a/src/components/TimelineWrapper.vue b/src/components/TimelineWrapper.vue index 66736283..78a165b5 100644 --- a/src/components/TimelineWrapper.vue +++ b/src/components/TimelineWrapper.vue @@ -2,10 +2,13 @@ -
+
{{ $tc("caption.session_started", 1) }}
-
+
mdi-calendar-minus-outline {{ $store.state.started }} {{ current }} @@ -760,6 +763,13 @@ export default { current() { return dayjs().format("MM-DD-YYYY"); }, + currentTheme() { + if (this.$vuetify.theme.dark) { + return this.$vuetify.theme.themes.dark; + } else { + return this.$vuetify.theme.themes.light; + } + }, }, mounted() { this.itemLists.map((item) => { diff --git a/src/components/VideoWrapper.vue b/src/components/VideoWrapper.vue index 3d688aa3..c994859d 100644 --- a/src/components/VideoWrapper.vue +++ b/src/components/VideoWrapper.vue @@ -26,7 +26,10 @@
-
+
{{ $tc("caption.start", 1) }}
-
-
{{ $tc("caption.end", 1) }}
+
+ {{ $tc("caption.end", 1) }} +
diff --git a/src/components/authentication/SigninWrapper.vue b/src/components/authentication/SigninWrapper.vue index 87bdcc87..a01799eb 100644 --- a/src/components/authentication/SigninWrapper.vue +++ b/src/components/authentication/SigninWrapper.vue @@ -5,7 +5,10 @@ mdi-chevron-left {{ $tc("caption.back", 1) }} - @@ -22,7 +25,9 @@ -
{{ $tc("caption.signin_jira", 1) }}
+
+ {{ $tc("caption.signin_jira", 1) }} +
@@ -132,7 +143,15 @@ export default { }, }; }, - computed: {}, + computed: { + currentTheme() { + if (this.$vuetify.theme.dark) { + return this.$vuetify.theme.themes.dark; + } else { + return this.$vuetify.theme.themes.light; + } + }, + }, mounted() { window.ipc.on("JIRA_LOGIN", (data) => { this.jiraLogin(data); @@ -275,7 +294,6 @@ export default { font-weight: 600; font-size: 16px; line-height: 24px; - color: #111827; text-align: center; } .header .signup-title span { @@ -287,6 +305,9 @@ export default { border-radius: 8px; padding: 32px 40px; } +.theme--dark .content { + background-color: #374151 !important; +} .outline-btn { display: flex; border: 1px solid #d1d5db; @@ -297,12 +318,15 @@ export default { .outline-btn:hover { background-color: #d1d5db; } +.theme--dark .outline-btn { + background-color: #4b5563; + border: 0; +} .outline-btn .btn-text { flex-grow: 1; display: flex; justify-content: center; align-items: center; - color: #111827; font-size: 13px; font-weight: 500; line-height: 16px; diff --git a/src/components/dialogs/EndSessionDialog.vue b/src/components/dialogs/EndSessionDialog.vue index 44dd67a6..b4fb3cde 100644 --- a/src/components/dialogs/EndSessionDialog.vue +++ b/src/components/dialogs/EndSessionDialog.vue @@ -1,7 +1,7 @@