diff --git a/components/account/AccountHeader.vue b/components/account/AccountHeader.vue index cbcc8d6a..e0c65995 100644 --- a/components/account/AccountHeader.vue +++ b/components/account/AccountHeader.vue @@ -62,6 +62,8 @@ watchEffect(() => { namedFields.value = named iconFields.value = icons }) + +const isSelf = $computed(() => currentUser.value?.account.id === account.id) @@ -91,6 +93,15 @@ watchEffect(() => { + + + {{ $t('settings.profile.appearance.title') }} + + + + + + + + + + + + + + + + + + {{ $t('settings.profile.appearance.display_name') }} + + + + + + + + {{ $t('settings.profile.appearance.bio') }} + + + + + + + + + + {{ $t('action.save') }} + + + + + + + diff --git a/pages/settings/profile/featured-tags.vue b/pages/settings/profile/featured-tags.vue new file mode 100644 index 00000000..67724091 --- /dev/null +++ b/pages/settings/profile/featured-tags.vue @@ -0,0 +1,18 @@ + + + + + + {{ $t('settings.profile.featured_tags.label') }} + + + + + 🚧 + + + {{ $t('settings.profile.featured_tags.label') }} + + + + diff --git a/pages/settings/profile/index.vue b/pages/settings/profile/index.vue new file mode 100644 index 00000000..c44f20fb --- /dev/null +++ b/pages/settings/profile/index.vue @@ -0,0 +1,34 @@ + + + + + + + {{ $t('settings.profile.label') }} + + + + + + {{ $t('settings.profile.appearance.description') }} + + + + + {{ $t('settings.profile.featured_tags.description') }} + + + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84f43284..5fc4a893 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -56,6 +56,7 @@ specifiers: shiki: ^0.12.1 shiki-es: ^0.1.2 simple-git-hooks: ^2.8.1 + slimeform: ^0.8.0 std-env: ^3.3.1 tauri-plugin-log-api: github:tauri-apps/tauri-plugin-log tauri-plugin-store-api: github:tauri-apps/tauri-plugin-store @@ -68,6 +69,7 @@ specifiers: vite-plugin-inspect: ^0.7.11 vite-plugin-pwa: ^0.13.3 vitest: ^0.26.2 + vue-advanced-cropper: ^2.8.6 vue-tsc: ^1.0.16 vue-virtual-scroller: 2.0.0-beta.7 workbox-window: ^6.5.4 @@ -97,11 +99,13 @@ dependencies: pinia: 2.0.28_typescript@4.9.4 shiki: 0.12.1 shiki-es: 0.1.2 + slimeform: 0.8.0 tauri-plugin-log-api: github.com/tauri-apps/tauri-plugin-log/b58475bbc410fa78eb69276c62d0b64c91c07914 tauri-plugin-store-api: github.com/tauri-apps/tauri-plugin-store/9bd993aa67766596638bbfd91e79a1bf8f632014 tippy.js: 6.3.7 ufo: 1.0.1 ultrahtml: 1.2.0 + vue-advanced-cropper: 2.8.6 vue-virtual-scroller: 2.0.0-beta.7 devDependencies: @@ -4163,6 +4167,10 @@ packages: engines: {node: '>=8'} dev: true + /classnames/2.3.2: + resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} + dev: false + /clean-regexp/1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -4544,6 +4552,10 @@ packages: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} dev: true + /debounce/1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: false + /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -4758,6 +4770,10 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /easy-bem/1.1.1: + resolution: {integrity: sha512-GJRqdiy2h+EXy6a8E6R+ubmqUM08BK0FWNq41k24fup6045biQ8NXxoXimiwegMQvFFV3t1emADdGNL1TlS61A==} + dev: false + /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true @@ -8807,6 +8823,12 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true + /slimeform/0.8.0: + resolution: {integrity: sha512-oh0GY3qPkN1ouH3TQex/+SbVsgGmJhZvgz8NqfECuMuSy7k0NOQNUudH/bebcAY7fIk5nVunMS2GPfo4UWwmDw==} + peerDependencies: + vue: '>=3' + dev: false + /snake-case/3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: @@ -10013,6 +10035,17 @@ packages: resolution: {integrity: sha512-fmL7V1eiDBFRRnu+gfRWTzyPpNIHJTc4mWnFkwBUmO9U3KPgJAmTx7oxi2bl/Rh6HLdU7+4C9wlj0k2E4AdKFQ==} dev: true + /vue-advanced-cropper/2.8.6: + resolution: {integrity: sha512-R1vkXG/Vam3OEd3vMJsVSJkXUc9ejM9l/NzPcPvkyzKGHwF69c2v1lh2Kqj2A5MCqrTmk76bmzmWFuYj+AcwmA==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + vue: ^3.0.0 + dependencies: + classnames: 2.3.2 + debounce: 1.2.1 + easy-bem: 1.1.1 + dev: false + /vue-bundle-renderer/1.0.0: resolution: {integrity: sha512-43vCqTgaMXfHhtR8/VcxxWD1DgtzyvNc4wNyG5NKCIH19O1z5G9ZCRXTGEA2wifVec5PU82CkRLD2sTK9NkTdA==} dependencies: diff --git a/styles/vars.css b/styles/vars.css index f2436f52..2bc92948 100644 --- a/styles/vars.css +++ b/styles/vars.css @@ -3,6 +3,7 @@ --c-primary-active: #C16929; --c-primary-light: #EA9E441A; --c-border: #eee; + --c-border-dark: #dccfcf; --c-bg-base: #fff; --c-bg-active: #f6f6f6; @@ -18,10 +19,15 @@ --c-bg-btn-disabled: #a1a1a1; --c-text-btn-disabled: #fff; --c-text-btn: #232323; + + --c-success: #67C23A; + --c-warning: #E6A23C; + --c-error: #F56C6C; } .dark { --c-border: #222; + --c-border-dark: #545251; --c-bg-base: #111; --c-bg-active: #191919; diff --git a/unocss.config.ts b/unocss.config.ts index 0ab11e87..e3f22363 100644 --- a/unocss.config.ts +++ b/unocss.config.ts @@ -13,6 +13,7 @@ export default defineConfig({ shortcuts: [ { 'border-base': 'border-$c-border', + 'border-dark': 'border-$c-border-dark', 'border-strong': 'border-$c-text-base', 'border-bg-base': 'border-$c-bg-base', 'border-primary-light': 'border-$c-primary-light', @@ -38,6 +39,12 @@ export default defineConfig({ 'btn-text': 'btn-base px-4 py-2 text-$c-primary hover:text-$c-primary-active', 'btn-action-icon': 'btn-base hover:bg-active rounded-full h9 w9 flex items-center justify-center', + // input + 'input-base-focus': 'focus:outline-none focus:border-$c-primary', + 'input-base-disabled': 'disabled:pointer-events-none disabled:bg-gray-500/5 disabled:text-gray-500/50', + 'input-base': 'p2 rounded w-full bg-transparent border border-dark input-base-focus input-base-disabled', + 'input-error': 'border-$c-error focus:(outline-offset-0 outline-$c-error outline-1px)', + // link 'text-link-rounded': 'focus:outline-none focus:ring-(2 primary inset) hover:bg-active rounded md:rounded-full px2 mx--2',
+ {{ $t('settings.profile.appearance.display_name') }} +
+ {{ $t('settings.profile.appearance.bio') }} +