packages/api-client (@d3ro/api-client) 신규: - types.ts: 12개 테이블 Row/Insert/Update 타입 + Database 형식 - client.ts: createD3roSupabaseClient 팩토리 (placeholder fallback) - auth.ts: signInWithOAuth/signOut/getSession/onAuthStateChange - meetings.ts: 회의 + 메모 + 문서 + 전사 CRUD - history.ts: 음성 입력 이력 CRUD - usage.ts: 일일 쿼터 + 구독 조회 - 루트 barrel은 types만 re-export, 함수는 subpath import 전용 apps/web (@d3ro/web) 신규 — Next.js 15 App Router: - transpilePackages: @d3ro/core, ui, i18n, api-client - ThemeProvider (MUI + AppRouterCacheProvider) - I18nProvider (localStorage 어댑터) - AuthProvider (Supabase session Context) - 라우트 9개: - / (auth 상태 기반 리다이렉트) - /login (Google/GitHub OAuth, 미설정 경고) - /auth/callback (code -> session 교환) - /dashboard (요약 카드 + 최근 회의) - /meetings (카드 그리드 리스트) - /meetings/[id] (transcripts/memos/documents) - /record (getUserMedia + MediaRecorder + stt-proxy) - Sidebar, 인증 가드, 9바 웨이브폼, 레벨 미터 packages/ui 확장: - MetalCard가 BoxProps 상속 (sx/onClick 등 전달) - theme.ts에 typoSx(key) 헬퍼 추가 (d3roTypo -> MUI sx 변환) - d3roPalette.tag.blue 추가 (M5 정리 포함) - DS 컴포넌트 9개에 'use client' directive - MetalDial 미사용 import 제거 packages/i18n 확장: - ko.json에 7개 새 키 (nav.meetings/record/logout, login.*) 설계 결정: - Database 제네릭 현재는 기본 타입 (V2-4에서 supabase gen types로 자동화) - api-client barrel은 타입만 노출해서 컴파일 전파 차단 - DS 컴포넌트 client 경계 명시 - env 없어도 Next.js 빌드 성공 (placeholder URL/key) 검증: - web typecheck OK - desktop typecheck OK (회귀 없음) - web next build OK (9 라우트 정적/동적 생성) - desktop build OK (회귀 없음)
1 line
No EOL
4.6 KiB
JavaScript
1 line
No EOL
4.6 KiB
JavaScript
"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[140],{4620:(e,t,o)=>{o.d(t,{A:()=>l});let l=function(e){return"string"==typeof e}},8703:(e,t,o)=>{o.d(t,{A:()=>y});var l=o(7620),n=o(2902),r=o(7138),i=o(9407),a=o(8613),s=o(9468),c=o(5120),u=o(8020),f=o(3664);function p(e){return(0,f.Ay)("MuiSvgIcon",e)}(0,u.A)("MuiSvgIcon",["root","colorPrimary","colorSecondary","colorAction","colorError","colorDisabled","fontSizeInherit","fontSizeSmall","fontSizeMedium","fontSizeLarge"]);var d=o(4568);let m=(0,a.default)("svg",{name:"MuiSvgIcon",slot:"Root",overridesResolver:(e,t)=>{let{ownerState:o}=e;return[t.root,"inherit"!==o.color&&t["color".concat((0,i.A)(o.color))],t["fontSize".concat((0,i.A)(o.fontSize))]]}})((0,s.A)(e=>{var t,o,l,n,r,i,a,s,c,u,f,p,d,m,v,y,h,S;let{theme:g}=e;return{userSelect:"none",width:"1em",height:"1em",display:"inline-block",flexShrink:0,transition:null==(n=g.transitions)||null==(l=n.create)?void 0:l.call(n,"fill",{duration:null==(o=(null!=(v=g.vars)?v:g).transitions)||null==(t=o.duration)?void 0:t.shorter}),variants:[{props:e=>!e.hasSvgAsChild,style:{fill:"currentColor"}},{props:{fontSize:"inherit"},style:{fontSize:"inherit"}},{props:{fontSize:"small"},style:{fontSize:(null==(i=g.typography)||null==(r=i.pxToRem)?void 0:r.call(i,20))||"1.25rem"}},{props:{fontSize:"medium"},style:{fontSize:(null==(s=g.typography)||null==(a=s.pxToRem)?void 0:a.call(s,24))||"1.5rem"}},{props:{fontSize:"large"},style:{fontSize:(null==(u=g.typography)||null==(c=u.pxToRem)?void 0:c.call(u,35))||"2.1875rem"}},...Object.entries((null!=(y=g.vars)?y:g).palette).filter(e=>{let[,t]=e;return t&&t.main}).map(e=>{var t,o,l;let[n]=e;return{props:{color:n},style:{color:null==(o=(null!=(l=g.vars)?l:g).palette)||null==(t=o[n])?void 0:t.main}}}),{props:{color:"action"},style:{color:null==(p=(null!=(h=g.vars)?h:g).palette)||null==(f=p.action)?void 0:f.active}},{props:{color:"disabled"},style:{color:null==(m=(null!=(S=g.vars)?S:g).palette)||null==(d=m.action)?void 0:d.disabled}},{props:{color:"inherit"},style:{color:void 0}}]}})),v=l.forwardRef(function(e,t){let o=(0,c.b)({props:e,name:"MuiSvgIcon"}),{children:a,className:s,color:u="inherit",component:f="svg",fontSize:v="medium",htmlColor:y,inheritViewBox:h=!1,titleAccess:S,viewBox:g="0 0 24 24",...A}=o,z=l.isValidElement(a)&&"svg"===a.type,N={...o,color:u,component:f,fontSize:v,instanceFontSize:e.fontSize,inheritViewBox:h,viewBox:g,hasSvgAsChild:z},b={};h||(b.viewBox=g);let k=(e=>{let{color:t,fontSize:o,classes:l}=e,n={root:["root","inherit"!==t&&"color".concat((0,i.A)(t)),"fontSize".concat((0,i.A)(o))]};return(0,r.A)(n,p,l)})(N);return(0,d.jsxs)(m,{as:f,className:(0,n.A)(k.root,s),focusable:"false",color:y,"aria-hidden":!S||void 0,role:S?"img":void 0,ref:t,...b,...A,...z&&a.props,ownerState:N,children:[z?a.props.children:a,S?(0,d.jsx)("title",{children:S}):null]})});function y(e,t){function o(t,o){return(0,d.jsx)(v,{"data-testid":void 0,ref:o,...t,children:e})}return o.muiName=v.muiName,l.memo(l.forwardRef(o))}v.muiName="SvgIcon"},8804:(e,t,o)=>{o.d(t,{A:()=>c});var l=o(3786),n=o(4620),r=o(2902);let i=function(e,t=[]){if(void 0===e)return{};let o={};return Object.keys(e).filter(o=>o.match(/^on[A-Z]/)&&"function"==typeof e[o]&&!t.includes(o)).forEach(t=>{o[t]=e[t]}),o},a=function(e){if(void 0===e)return{};let t={};return Object.keys(e).filter(t=>!(t.match(/^on[A-Z]/)&&"function"==typeof e[t])).forEach(o=>{t[o]=e[o]}),t},s=function(e){let{getSlotProps:t,additionalProps:o,externalSlotProps:l,externalForwardedProps:n,className:s}=e;if(!t){let e=(0,r.A)(o?.className,s,n?.className,l?.className),t={...o?.style,...n?.style,...l?.style},i={...o,...n,...l};return e.length>0&&(i.className=e),Object.keys(t).length>0&&(i.style=t),{props:i,internalRef:void 0}}let c=i({...n,...l}),u=a(l),f=a(n),p=t(c),d=(0,r.A)(p?.className,o?.className,s,n?.className,l?.className),m={...p?.style,...o?.style,...n?.style,...l?.style},v={...p,...o,...f,...u};return d.length>0&&(v.className=d),Object.keys(m).length>0&&(v.style=m),{props:v,internalRef:p.ref}};function c(e,t){var o,r;let{className:i,elementType:a,ownerState:c,externalForwardedProps:u,internalForwardedProps:f,shouldForwardComponentProp:p=!1,...d}=t,{component:m,slots:v={[e]:void 0},slotProps:y={[e]:void 0},...h}=u,S=v[e]||a,g=(o=y[e],"function"==typeof o?o(c,void 0):o),{props:{component:A,...z},internalRef:N}=s({className:i,...d,externalForwardedProps:"root"===e?h:void 0,externalSlotProps:g}),b=(0,l.A)(N,null==g?void 0:g.ref,t.ref),k="root"===e?A||m:A,w=(r={..."root"===e&&!m&&!v[e]&&f,..."root"!==e&&!v[e]&&f,...z,...k&&!p&&{as:k},...k&&p&&{component:k},ref:b},void 0===S||(0,n.A)(S)?r:{...r,ownerState:{...r.ownerState,...c}});return[S,w]}}}]); |