Files
football2801 019a3363c5
CI / test (push) Has been cancelled
feat(design): v2 becomes the default — drop beta conversation
Atmospheric design is now the default for everyone:
- User.getDesignVersion() returns 'v2' when unset (was 'v1')
- All Twig templates default the cookie read to 'v2'
- SettingsView 'Design (beta)' section removed entirely along with the
  selectDesign() handler and currentDesign computed

The /api/user/design endpoint stays in place so the design_version column
can still be set programmatically (or migrated later), but the UI no
longer exposes it as a user-facing choice. Existing users with explicit
'v1' in their DB row continue to see v1 — their preference persists.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 20:22:18 -04:00

1 line
7.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{C as e,F as t,J as n,K as r,N as i,U as a,V as o,Y as s,f as c,g as l,h as u,p as ee,q as d,t as f,u as p,v as m,x as h,y as g}from"./_plugin-vue_export-helper-BNDVmFr7.js";import{n as te,r as _,t as ne}from"./index-B_gtMXqz.js";var v=a(null),y=a(!1);function b(){return typeof window>`u`?!1:window.matchMedia?.(`(display-mode: standalone)`).matches?!0:window.navigator.standalone===!0}function x(){if(typeof navigator>`u`)return!1;let e=navigator.userAgent,t=e.includes(`Mac`)&&navigator.maxTouchPoints>1;return/iPhone|iPod/.test(e)||t}var S=!1;function C(){S||typeof window>`u`||(S=!0,y.value=b(),window.addEventListener(`beforeinstallprompt`,e=>{e.preventDefault(),v.value=e}),window.addEventListener(`appinstalled`,()=>{v.value=null,y.value=!0}),window.matchMedia?.(`(display-mode: standalone)`).addEventListener(`change`,e=>{y.value=e.matches}))}C();function re(){let e=x(),t=u(()=>v.value!==null);async function n(){let e=v.value;if(!e)return!1;await e.prompt();let t=await e.userChoice;return v.value=null,t.outcome===`accepted`}return{isStandalone:y,isIOS:e,canPromptInstall:t,install:n}}var ie={class:`settings`},ae={class:`settings__section`},oe={class:`settings__row`},se={class:`settings__row-value`},ce={class:`settings__section`},w={class:`theme-grid`,role:`radiogroup`,"aria-label":`Choose theme`},T=[`aria-checked`,`aria-label`,`onClick`],E={class:`theme-swatch__label`},D={key:0,class:`theme-swatch__check`,"aria-hidden":`true`},O={key:0,class:`settings__section`},k={class:`install-modal__card`},A={class:`pw-form__field`},j={class:`pw-form__field`},M={class:`pw-form__field`},N=[`aria-invalid`],P={key:0,class:`pw-form__error`},F={key:0,class:`pw-form__error`,role:`alert`},I={key:1,class:`pw-form__success`,role:`status`},L=[`disabled`],R={class:`install-modal__card`},z={id:`install-modal-title`,class:`install-modal__title`},le={class:`install-modal__steps`},B={key:0},V={key:1},H={key:0},U=f(e({__name:`SettingsView`,setup(e){let f=_(),{saveTheme:v}=te(),{isStandalone:y,isIOS:b,canPromptInstall:x,install:S}=re(),C=u(()=>f.user?.theme??`warm-craft`),U=a(!1);function W(e){v(e)}async function ue(){!await S()&&!x.value&&(U.value=!0)}let G=a(!1),K=a(``),q=a(``),J=a(``),Y=a(!1),X=a(null),Z=a(!1),Q=u(()=>J.value.length>0&&J.value!==q.value);function de(){K.value=``,q.value=``,J.value=``,X.value=null,Z.value=!1,Y.value=!1}function $(){G.value=!1,de()}async function fe(){if(!Q.value){X.value=null,Z.value=!1,Y.value=!0;try{let e=await fetch(`/api/user/password`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({currentPassword:K.value,newPassword:q.value})});if(e.status===204){Z.value=!0,K.value=``,q.value=``,J.value=``,setTimeout($,1500);return}X.value=(await e.json().catch(()=>({})))?.error??`Could not update password.`}catch{X.value=`Network error. Try again.`}finally{Y.value=!1}}}return(e,a)=>(i(),g(`main`,ie,[a[27]||=l(`h1`,{class:`settings__title`},`Settings`,-1),l(`section`,ae,[a[8]||=l(`h2`,{class:`settings__section-title`},`Account`,-1),l(`div`,oe,[a[7]||=l(`span`,{class:`settings__row-label`},`Signed in as`,-1),l(`span`,se,s(r(f).user?.email),1)]),l(`button`,{type:`button`,class:`settings__action-link`,onClick:a[0]||=e=>G.value=!0},` Change password `),a[9]||=l(`a`,{href:`/logout`,class:`settings__logout`},`Sign out`,-1)]),l(`section`,ce,[a[11]||=l(`h2`,{class:`settings__section-title`},`Theme`,-1),l(`div`,w,[(i(!0),g(ee,null,t(r(ne),e=>(i(),g(`button`,{key:e.id,type:`button`,role:`radio`,"aria-checked":C.value===e.id,"aria-label":e.label,class:d([`theme-swatch`,{"theme-swatch--active":C.value===e.id}]),style:n({"--swatch-bg":e.bg,"--swatch-primary":e.primary,"--swatch-text":e.text}),onClick:t=>W(e.id)},[a[10]||=l(`span`,{class:`theme-swatch__preview`,"aria-hidden":`true`},[l(`span`,{class:`theme-swatch__bar`}),l(`span`,{class:`theme-swatch__dot`})],-1),l(`span`,E,s(e.label),1),C.value===e.id?(i(),g(`span`,D,``)):m(``,!0)],14,T))),128))])]),r(y)?m(``,!0):(i(),g(`section`,O,[a[12]||=l(`h2`,{class:`settings__section-title`},`Install app`,-1),a[13]||=l(`p`,{class:`settings__hint`},` Pin WeVisto to your home screen so it opens like a native app. `,-1),r(x)?(i(),g(`button`,{key:0,type:`button`,class:`settings__install`,onClick:ue},` Install WeVisto `)):(i(),g(`button`,{key:1,type:`button`,class:`settings__install`,onClick:a[1]||=e=>U.value=!0},` Add to Home Screen `))])),G.value?(i(),g(`div`,{key:1,class:`install-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`pw-modal-title`,onClick:c($,[`self`])},[l(`div`,k,[l(`button`,{type:`button`,class:`install-modal__close`,"aria-label":`Close`,onClick:$},`×`),a[18]||=l(`h2`,{id:`pw-modal-title`,class:`install-modal__title`},`Change password`,-1),l(`form`,{class:`pw-form`,onSubmit:c(fe,[`prevent`])},[l(`label`,A,[a[14]||=l(`span`,{class:`pw-form__label`},`Current password`,-1),o(l(`input`,{"onUpdate:modelValue":a[2]||=e=>K.value=e,type:`password`,autocomplete:`current-password`,required:``,class:`pw-form__input`},null,512),[[p,K.value]])]),l(`label`,j,[a[15]||=l(`span`,{class:`pw-form__label`},`New password`,-1),o(l(`input`,{"onUpdate:modelValue":a[3]||=e=>q.value=e,type:`password`,autocomplete:`new-password`,minlength:`8`,required:``,class:`pw-form__input`},null,512),[[p,q.value]]),a[16]||=l(`span`,{class:`pw-form__hint`},`At least 8 characters.`,-1)]),l(`label`,M,[a[17]||=l(`span`,{class:`pw-form__label`},`Confirm new password`,-1),o(l(`input`,{"onUpdate:modelValue":a[4]||=e=>J.value=e,type:`password`,autocomplete:`new-password`,required:``,class:`pw-form__input`,"aria-invalid":Q.value?`true`:`false`},null,8,N),[[p,J.value]]),Q.value?(i(),g(`span`,P,`Passwords don't match.`)):m(``,!0)]),X.value?(i(),g(`p`,F,s(X.value),1)):m(``,!0),Z.value?(i(),g(`p`,I,`Password updated.`)):m(``,!0),l(`button`,{type:`submit`,class:`settings__install`,disabled:Y.value||Q.value||!K.value||!q.value},s(Y.value?`Saving…`:`Update password`),9,L)],32)])])):m(``,!0),U.value?(i(),g(`div`,{key:2,class:`install-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`install-modal-title`,onClick:a[6]||=c(e=>U.value=!1,[`self`])},[l(`div`,R,[l(`button`,{type:`button`,class:`install-modal__close`,"aria-label":`Close`,onClick:a[5]||=e=>U.value=!1},`×`),l(`h2`,z,s(r(b)?`Add to your iPhone home screen`:`Add to your home screen`),1),l(`ol`,le,[r(b)?(i(),g(`li`,B,[...a[19]||=[h(` Tap the `,-1),l(`strong`,null,`Share`,-1),h(` icon at the bottom of Safari (the square with an up-arrow). `,-1)]])):(i(),g(`li`,V,[...a[20]||=[h(` Open your browser's menu (usually the three dots `,-1),l(`strong`,null,``,-1),h(` in the top right). `,-1)]])),l(`li`,null,[a[22]||=h(` Scroll down and tap `,-1),a[23]||=l(`strong`,null,`Add to Home Screen`,-1),r(b)?m(``,!0):(i(),g(`span`,H,[...a[21]||=[h(`or `,-1),l(`strong`,null,`Install app`,-1)]])),a[24]||=h(`. `,-1)]),a[25]||=l(`li`,null,[h(` Tap `),l(`strong`,null,`Add`),h(` in the top right to confirm. `)],-1)]),a[26]||=l(`p`,{class:`install-modal__footer`},` The app will appear on your home screen. Open it from there and it runs like a regular app — no address bar, no tabs. `,-1)])])):m(``,!0)]))}}),[[`__scopeId`,`data-v-0680ba01`]]);export{U as default};