@jogak/ui 0.1.0-alpha.9.1 → 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +136 -0
- package/dist/components/Preview/format-usage.d.ts +6 -0
- package/dist/components/Preview/index.d.ts +1 -1
- package/dist/host/index.cjs +1 -1
- package/dist/host/index.d.ts +1 -1
- package/dist/host/index.mjs +12 -12
- package/dist/index.cjs +9 -1
- package/dist/index.mjs +637 -462
- package/dist/lib/adapter-for.d.ts +17 -0
- package/package.json +10 -7
- package/src/app/App.tsx +1 -1
- package/src/app/preview-frame.tsx +21 -4
- package/src/components/Controls/index.tsx +36 -0
- package/src/components/Preview/format-usage.test.ts +115 -0
- package/src/components/Preview/format-usage.ts +132 -0
- package/src/components/Preview/index.tsx +72 -15
- package/src/components/Sidebar/index.tsx +1 -1
- package/src/hooks/useRegistry.ts +1 -1
- package/src/lib/adapter-for.ts +173 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,142 @@ All notable changes to Jogak packages are documented here. The repository follow
|
|
|
5
5
|
|
|
6
6
|
Version numbers apply to all packages in the workspace (synchronized release).
|
|
7
7
|
|
|
8
|
+
## [1.0.0-beta.0] — 2026-06-04
|
|
9
|
+
|
|
10
|
+
### Milestone — alpha → beta 졸업
|
|
11
|
+
|
|
12
|
+
본 릴리스는 코드 변경이 아닌 안정도 등급 승격이다. alpha.14.5 시점 코드와 동일,
|
|
13
|
+
sync 버전 bump만 수행. 자세한 졸업 기준 + API 동결 정책은 `@jogak/core@1.0.0-beta.0`
|
|
14
|
+
CHANGELOG 참조.
|
|
15
|
+
|
|
16
|
+
## [0.1.0-alpha.14.5] — 2026-06-04
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- **버전 동기화 (no functional change)**: `@jogak/cli@0.1.0-alpha.14.5` (vite 6.4.3 high severity bump) publish에 맞춰 caret semver 일관성 유지. `@jogak/ui` 소스/dist 변경 없음. 본 패키지의 dev `vite.config.ts`만 `previewIsolation: 'none'` 명시 추가 — VR/local demo가 단일 ui dev server로 동작할 때 alpha.14.1 (`d64a8f8`)부터 도입된 chrome scope `component=null` stub로 인해 component가 hydrate되지 않던 회귀 fix. 사용자 publish 산출물에는 영향 없음.
|
|
21
|
+
|
|
22
|
+
## [0.1.0-alpha.14.4] — 2026-05-15
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
|
|
26
|
+
- **버전 동기화 (no functional change)**: `@jogak/core@0.1.0-alpha.14.4` (Next.js Client 어댑터 nested root unmount race fix) publish에 맞춰 동기화. `@jogak/ui` 소스/dist 변경 없음.
|
|
27
|
+
|
|
28
|
+
## [0.1.0-alpha.14.3] — 2026-05-15
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **버전 동기화 (no functional change)**: `@jogak/core@0.1.0-alpha.14.3` 결함 fix(web-components iframe 어댑터 + codegen strict typecheck) publish에 맞춰 동기화. `@jogak/ui` 소스/dist 변경 없음.
|
|
33
|
+
|
|
34
|
+
## [0.1.0-alpha.14.2] — 2026-05-11
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
|
|
38
|
+
- **`src/lib/adapter-for.ts` 누락 publish 결함**: 알파.14.1에서 `package.json` `files` 배열에 `src/lib/`이 빠져 있어, npm 설치 사용자 환경에서 `preview-frame.tsx`의 `import '../lib/adapter-for.js'` resolve가 실패하던 회귀를 수정. `src/lib/adapter-for.ts`를 명시적으로 publish 목록에 추가 (테스트 폴더 `__tests__/`는 의도적으로 제외). 외부 개발자가 `^0.1.0-alpha.14.1`로 설치해 `jogak build` 시 Rollup이 빈 모듈 에러를 던지던 케이스가 해소.
|
|
39
|
+
|
|
40
|
+
## [0.1.0-alpha.14.1] — 2026-05-11
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
- **`adapterFor()` dispatch 라우터** (`src/lib/adapter-for.ts`): framework별 어댑터를 dynamic import + Map 캐시로 lazy 로드. 단위 테스트 14건.
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- **Preview / preview-frame의 hardcoded `reactAdapter` 제거**: 11개 호출을 `adapterFor(entry.meta.framework ?? 'react')`로 교체. React-only 사용자는 vue/svelte 모듈을 받지 않음.
|
|
49
|
+
- **Preview iframe-aware**: `previewIsolation === 'iframe'`일 때 `useEntry` skipHydrate로 chrome scope에서 component import를 건너뛰고 synthetic entry로 IframeMount에 위임.
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- **`format-usage`의 `component=null` 처리**: iframe isolation 모드 synthetic entry는 component=null. `resolveComponentName`이 title 마지막 segment fallback으로 직행.
|
|
54
|
+
|
|
55
|
+
## [0.1.0-alpha.10.3] — 2026-05-11
|
|
56
|
+
|
|
57
|
+
### Fixed
|
|
58
|
+
|
|
59
|
+
- **`@jogak/ui` 코드 패널**: 알파.10.2까지 syntax-highlight 영역에 `.jogak.tsx` 파일 전체(meta/argTypes/exports 포함)를 노출했다. 의도된 동작은 **현재 args 기반 컴포넌트 사용 코드** 표시 — 사용자가 Controls 패널에서 args를 변경하면 코드도 즉시 갱신. `formatUsageCode(entry, args)` 추가, JogakRenderer에서 `entry.source`(파일 전체) 대신 사용 스니펫을 SourceViewer에 전달.
|
|
60
|
+
|
|
61
|
+
변경 전:
|
|
62
|
+
```tsx
|
|
63
|
+
import type { JogakMeta, Jogak } from '@jogak/core'
|
|
64
|
+
import { Badge } from './badge'
|
|
65
|
+
|
|
66
|
+
const meta = { title: 'UI/Badge', component: Badge, ... } satisfies JogakMeta
|
|
67
|
+
export default meta
|
|
68
|
+
export const Default: Jogak = { ... }
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
변경 후:
|
|
72
|
+
```tsx
|
|
73
|
+
<Badge variant="default">New</Badge>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- **포매터 규칙**: children은 태그 본문에, props는 attribute로. `boolean true → key`, `false → key={false}`, `string → key="value"`(escape), `number → key={n}`, `function → key={fn}`, 객체/배열 `→ key={JSON}`. 한 줄이 60자 초과 시 multi-line 자동 wrapping. 단위 테스트 11개 추가.
|
|
77
|
+
|
|
78
|
+
### Added
|
|
79
|
+
|
|
80
|
+
- `e2e/code-panel-check.mjs` — 코드 패널이 사용 코드를 보여주는지 visual 검증 (jogak meta keyword 부재 + 컴포넌트 태그 존재).
|
|
81
|
+
|
|
82
|
+
기타: source 변경 외 패키지는 synchronized release 유지를 위해 버전만 bump.
|
|
83
|
+
|
|
84
|
+
## [0.1.0-alpha.10.2] — 2026-05-09
|
|
85
|
+
|
|
86
|
+
### Fixed
|
|
87
|
+
|
|
88
|
+
- **vitest.workspace.ts**: 알파.10에서 7개 패키지 디렉토리를 삭제했지만 `vitest.workspace.ts`가 여전히 `packages/react`, `packages/next`, `packages/web-components`를 참조해 `pnpm test` 시 startup error. core/ui/cli 3개로 정리.
|
|
89
|
+
|
|
90
|
+
기타 패키지: source 변경 없음, synchronized release 유지를 위해 버전만 bump.
|
|
91
|
+
|
|
92
|
+
## [0.1.0-alpha.10.1] — 2026-05-09
|
|
93
|
+
|
|
94
|
+
### Fixed
|
|
95
|
+
|
|
96
|
+
- **CI typecheck**: 알파.10에서 root `tsconfig.json` references에 `packages/cli`를 추가했으나, `tsc -b`가 cli typecheck 시점에 ui의 `dist/host/index.d.ts` (실제 파일은 없음 — ui는 `noEmit: true`)를 찾으려 해 `Cannot find module '@jogak/ui/host'` 에러 발생. 알파.9 이전처럼 cli는 root references에서 제외 — cli는 자기 `pnpm build` 단계의 `tsc -p tsconfig.json`에서 typecheck됨 (그 시점엔 ui dist가 이미 빌드돼 있음).
|
|
97
|
+
|
|
98
|
+
기타 패키지: source 변경 없음, synchronized release 유지를 위해 버전만 bump.
|
|
99
|
+
|
|
100
|
+
## [0.1.0-alpha.10] — 2026-05-09
|
|
101
|
+
|
|
102
|
+
### Architectural unification — 10 packages → 3 packages
|
|
103
|
+
|
|
104
|
+
알파.9.x에서 분리됐던 4개 빌더 어댑터(`@jogak/vite-adapter`, `@jogak/next-adapter`, `@jogak/webpack-adapter`, `@jogak/standalone-adapter`)와 3개 프레임워크 렌더러(`@jogak/react`, `@jogak/next`, `@jogak/web-components`)를 모두 `@jogak/core`로 통합. 이들의 본질은 build-tool / runtime 통합 코드이며 별도 패키지로 격리할 만한 런타임 substance가 없다는 판단.
|
|
105
|
+
|
|
106
|
+
이제 publish되는 패키지는 `@jogak/core`, `@jogak/ui`, `@jogak/cli` 3개로 축소. 기능은 모두 유지되며 사용자 install도 단순화 (vite/next/webpack peer deps는 모두 `peerDependenciesMeta.optional` 처리 — 사용자가 실제로 쓰는 빌더만 install).
|
|
107
|
+
|
|
108
|
+
### Added
|
|
109
|
+
|
|
110
|
+
- **`@jogak/core/adapters/{vite,next,webpack,standalone}`**: 4개 builder adapter subpath. `@jogak/${name}-adapter` 패키지를 흡수.
|
|
111
|
+
- **`@jogak/core/renderers/{react,next,web-components}`**: 3개 framework renderer subpath. 동명 별도 패키지를 흡수.
|
|
112
|
+
- **`@jogak/core/vite-plugin`**: 알파.9.x의 `@jogak/core/vite`를 정식 명명. 기존 `@jogak/core/vite`는 backward-compat alias로 유지.
|
|
113
|
+
- **CLI `loadAdapter`**: 사용자 cwd의 `@jogak/core` exports를 직접 lookup해서 adapter dynamic import. 별도 어댑터 패키지 install 불필요.
|
|
114
|
+
|
|
115
|
+
### Changed
|
|
116
|
+
|
|
117
|
+
- **import 경로 마이그레이션** (사용자 영향):
|
|
118
|
+
- `import ... from '@jogak/react'` → `import ... from '@jogak/core/renderers/react'`
|
|
119
|
+
- `import ... from '@jogak/next'` → `import ... from '@jogak/core/renderers/next'`
|
|
120
|
+
- `import ... from '@jogak/web-components'` → `import ... from '@jogak/core/renderers/web-components'`
|
|
121
|
+
- `import { jogak } from '@jogak/core/vite'` → `import { jogak } from '@jogak/core/vite-plugin'` (구 경로도 동작하지만 deprecated)
|
|
122
|
+
- **`@jogak/core` peer deps 확장**: react/react-dom/next/webpack/webpack-dev-server/webpack-merge/html-webpack-plugin 추가 (모두 optional). 사용자가 쓰는 빌더만 설치.
|
|
123
|
+
- **iframe scaffold 코드** (next-adapter, webpack-adapter): 생성되는 page.tsx/preview-entry.tsx가 `@jogak/core/renderers/react`를 import (이전 `@jogak/react`).
|
|
124
|
+
|
|
125
|
+
### Removed
|
|
126
|
+
|
|
127
|
+
- 7개 패키지 디렉토리 + npm registry deprecate notice:
|
|
128
|
+
- `@jogak/react`, `@jogak/next`, `@jogak/web-components`
|
|
129
|
+
- `@jogak/vite-adapter`, `@jogak/next-adapter`, `@jogak/webpack-adapter`, `@jogak/standalone-adapter`
|
|
130
|
+
- 알파.9.x 사용자는 `npm view @jogak/<pkg> deprecated` 메시지로 마이그레이션 안내 받음.
|
|
131
|
+
|
|
132
|
+
### CI
|
|
133
|
+
|
|
134
|
+
- `release.yml`: pack/publish 목록을 `core/ui/cli` 3개로 축소. Trusted Publisher 신규 등록 zero (3개 모두 알파.9 시점 등록 완료).
|
|
135
|
+
|
|
136
|
+
## [0.1.0-alpha.9.2] — 2026-05-09
|
|
137
|
+
|
|
138
|
+
### Fixed
|
|
139
|
+
|
|
140
|
+
- **CI**: `release.yml`의 publish 단계가 `jogak-next-*.tgz` 글로브 패턴을 사용해 `next` 패키지 publish 시 `next-adapter` tarball까지 매치되어 npm publish가 EUSAGE(다중 tarball)으로 실패. 이로 인해 알파.9.1에서 `core/react/ui/web-components`만 publish되고 `next/cli` 및 4개 어댑터는 publish 안 됨. 정확한 파일명(`jogak-${pkg}-${VERSION}.tgz`)으로 변경.
|
|
141
|
+
|
|
142
|
+
기타 패키지: source 변경 없음, synchronized release 유지를 위해 버전만 bump.
|
|
143
|
+
|
|
8
144
|
## [0.1.0-alpha.9.1] — 2026-05-09
|
|
9
145
|
|
|
10
146
|
### Fixed
|
package/dist/host/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var S=Object.create;var g=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var H=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of A(t))!E.call(e,o)&&o!==r&&g(e,o,{get:()=>t[o],enumerable:!(n=k(t,o))||n.enumerable});return e};var a=(e,t,r)=>(r=e!=null?S(B(e)):{},H(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const N=require("node:url"),u=require("node:path");var f=typeof document<"u"?document.currentScript:null;const x=N.fileURLToPath(typeof document>"u"?require("url").pathToFileURL(__filename).href:f&&f.tagName.toUpperCase()==="SCRIPT"&&f.src||new URL("host/index.cjs",document.baseURI).href),s=u.resolve(u.dirname(x),"..",".."),F=u.resolve(s,"index.html"),V=u.resolve(s,"src/app/main.tsx");async function Y(e){const t=await import("vite"),r=await import("@vitejs/plugin-react"),n=await import("@jogak/core/vite"),o=await import("@tailwindcss/vite"),{createServer:y,build:h}=t,w=r.default,b=o.default,{jogak:P}=n,U=e.codeTheme??"vsDark",i={patterns:e.patterns,codeTheme:U,cwd:e.userRoot};e.tsConfigFilePath!==void 0&&(i.tsConfigFilePath=e.tsConfigFilePath),e.globalCss!==void 0&&(i.globalCss=e.globalCss),e.previewIsolation!==void 0&&(i.previewIsolation=e.previewIsolation),e.userPreviewUrl!==void 0&&(i.userPreviewUrl=e.userPreviewUrl),e.previewEntryPath!==void 0&&(i.previewEntryPath=e.previewEntryPath),e.userViteUrl!==void 0&&e.userPreviewUrl===void 0&&(i.userViteUrl=e.userViteUrl);const _=e.extraPlugins??[],d={root:s,configFile:!1,plugins:[w(),b(),P(i),..._],optimizeDeps:{include:["react","react-dom/client","@jogak/core","@jogak/react"]}};if(e.mode==="dev"){const D={port:e.port??5173,host:e.host??"localhost",open:e.open??!1,fs:{allow:[s,e.userRoot]}},L={...d,server:D},l=await y(L);await l.listen();const v=l.config.server.port??e.port??5173,c=e.host??"localhost",M=`http://${typeof c=="boolean"?c?"0.0.0.0":"localhost":c}:${v.toString()}/`;let p=!1;return{url:M,port:v,close:async()=>{p||(p=!0,await l.close())},printUrls:()=>{l.printUrls()}}}const C={...d,base:e.base??"./",build:{outDir:e.outDir,emptyOutDir:!0,sourcemap:e.sourcemap??!1,minify:e.minify??"esbuild",rollupOptions:{input:{main:u.resolve(s,"index.html"),preview:u.resolve(s,"preview-frame.html")}}}},R=Date.now(),I=await h(C),T=Date.now()-R,{assetCount:O,totalBytes:j}=q(I);return{outDir:e.outDir,elapsedMs:T,assetCount:O,totalBytes:j}}function q(e){const t=z(e);if(t===void 0)return{assetCount:0,totalBytes:0};let r=0,n=0;for(const o of t)r+=1,n+=$(o);return{assetCount:r,totalBytes:n}}function m(e){return typeof e=="object"&&e!==null&&Array.isArray(e.output)}function z(e){if(Array.isArray(e)){const t=[];for(const r of e)m(r)&&t.push(...r.output);return t}if(m(e))return e.output}function $(e){if(typeof e!="object"||e===null)return 0;const t=e;if(t.type==="chunk"&&typeof t.code=="string")return Buffer.byteLength(t.code,"utf8");if(t.type==="asset"){const r=t.source;if(typeof r=="string")return Buffer.byteLength(r,"utf8");if(r instanceof Uint8Array)return r.byteLength}return 0}exports.UI_HTML_ENTRY=F;exports.UI_MAIN_ENTRY=V;exports.runHost=Y;
|
|
1
|
+
"use strict";var S=Object.create;var g=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,E=Object.prototype.hasOwnProperty;var H=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of A(t))!E.call(e,o)&&o!==r&&g(e,o,{get:()=>t[o],enumerable:!(n=k(t,o))||n.enumerable});return e};var a=(e,t,r)=>(r=e!=null?S(B(e)):{},H(t||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const N=require("node:url"),u=require("node:path");var f=typeof document<"u"?document.currentScript:null;const x=N.fileURLToPath(typeof document>"u"?require("url").pathToFileURL(__filename).href:f&&f.tagName.toUpperCase()==="SCRIPT"&&f.src||new URL("host/index.cjs",document.baseURI).href),s=u.resolve(u.dirname(x),"..",".."),F=u.resolve(s,"index.html"),V=u.resolve(s,"src/app/main.tsx");async function Y(e){const t=await import("vite"),r=await import("@vitejs/plugin-react"),n=await import("@jogak/core/vite-plugin"),o=await import("@tailwindcss/vite"),{createServer:y,build:h}=t,w=r.default,b=o.default,{jogak:P}=n,U=e.codeTheme??"vsDark",i={patterns:e.patterns,codeTheme:U,cwd:e.userRoot};e.tsConfigFilePath!==void 0&&(i.tsConfigFilePath=e.tsConfigFilePath),e.globalCss!==void 0&&(i.globalCss=e.globalCss),e.previewIsolation!==void 0&&(i.previewIsolation=e.previewIsolation),e.userPreviewUrl!==void 0&&(i.userPreviewUrl=e.userPreviewUrl),e.previewEntryPath!==void 0&&(i.previewEntryPath=e.previewEntryPath),e.userViteUrl!==void 0&&e.userPreviewUrl===void 0&&(i.userViteUrl=e.userViteUrl);const _=e.extraPlugins??[],d={root:s,configFile:!1,plugins:[w(),b(),P(i),..._],optimizeDeps:{include:["react","react-dom/client","@jogak/core","@jogak/core/renderers/react"]}};if(e.mode==="dev"){const D={port:e.port??5173,host:e.host??"localhost",open:e.open??!1,fs:{allow:[s,e.userRoot]}},L={...d,server:D},l=await y(L);await l.listen();const v=l.config.server.port??e.port??5173,c=e.host??"localhost",M=`http://${typeof c=="boolean"?c?"0.0.0.0":"localhost":c}:${v.toString()}/`;let p=!1;return{url:M,port:v,close:async()=>{p||(p=!0,await l.close())},printUrls:()=>{l.printUrls()}}}const C={...d,base:e.base??"./",build:{outDir:e.outDir,emptyOutDir:!0,sourcemap:e.sourcemap??!1,minify:e.minify??"esbuild",rollupOptions:{input:{main:u.resolve(s,"index.html"),preview:u.resolve(s,"preview-frame.html")}}}},R=Date.now(),I=await h(C),T=Date.now()-R,{assetCount:O,totalBytes:j}=q(I);return{outDir:e.outDir,elapsedMs:T,assetCount:O,totalBytes:j}}function q(e){const t=z(e);if(t===void 0)return{assetCount:0,totalBytes:0};let r=0,n=0;for(const o of t)r+=1,n+=$(o);return{assetCount:r,totalBytes:n}}function m(e){return typeof e=="object"&&e!==null&&Array.isArray(e.output)}function z(e){if(Array.isArray(e)){const t=[];for(const r of e)m(r)&&t.push(...r.output);return t}if(m(e))return e.output}function $(e){if(typeof e!="object"||e===null)return 0;const t=e;if(t.type==="chunk"&&typeof t.code=="string")return Buffer.byteLength(t.code,"utf8");if(t.type==="asset"){const r=t.source;if(typeof r=="string")return Buffer.byteLength(r,"utf8");if(r instanceof Uint8Array)return r.byteLength}return 0}exports.UI_HTML_ENTRY=F;exports.UI_MAIN_ENTRY=V;exports.runHost=Y;
|
package/dist/host/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* 주의:
|
|
8
8
|
* - 이 파일은 Node.js 환경에서만 import되어야 한다.
|
|
9
|
-
* - `vite`, `@vitejs/plugin-react`, `@jogak/core/vite
|
|
9
|
+
* - `vite`, `@vitejs/plugin-react`, `@jogak/core/vite-plugin`은 모두 dynamic import로
|
|
10
10
|
* 로드한다 — `@jogak/ui` 메인 entry(브라우저 SPA)에서 우연히 host를 import
|
|
11
11
|
* 하더라도 vite가 브라우저 번들에 포함되지 않게 하기 위함.
|
|
12
12
|
*/
|
package/dist/host/index.mjs
CHANGED
|
@@ -2,19 +2,19 @@ import { fileURLToPath as k } from "node:url";
|
|
|
2
2
|
import { resolve as n, dirname as B } from "node:path";
|
|
3
3
|
const T = k(import.meta.url), i = n(B(T), "..", ".."), V = n(i, "index.html"), z = n(i, "src/app/main.tsx");
|
|
4
4
|
async function N(t) {
|
|
5
|
-
const e = await import("vite"),
|
|
5
|
+
const e = await import("vite"), r = await import("@vitejs/plugin-react"), s = await import("@jogak/core/vite-plugin"), l = await import("@tailwindcss/vite"), { createServer: v, build: m } = e, g = r.default, y = l.default, { jogak: w } = s, h = t.codeTheme ?? "vsDark", o = {
|
|
6
6
|
patterns: t.patterns,
|
|
7
7
|
codeTheme: h,
|
|
8
8
|
cwd: t.userRoot
|
|
9
9
|
};
|
|
10
|
-
t.tsConfigFilePath !== void 0 && (
|
|
10
|
+
t.tsConfigFilePath !== void 0 && (o.tsConfigFilePath = t.tsConfigFilePath), t.globalCss !== void 0 && (o.globalCss = t.globalCss), t.previewIsolation !== void 0 && (o.previewIsolation = t.previewIsolation), t.userPreviewUrl !== void 0 && (o.userPreviewUrl = t.userPreviewUrl), t.previewEntryPath !== void 0 && (o.previewEntryPath = t.previewEntryPath), t.userViteUrl !== void 0 && t.userPreviewUrl === void 0 && (o.userViteUrl = t.userViteUrl);
|
|
11
11
|
const b = t.extraPlugins ?? [], c = {
|
|
12
12
|
root: i,
|
|
13
13
|
configFile: !1,
|
|
14
14
|
// ui/vite.config.ts 무시
|
|
15
|
-
plugins: [g(), y(), w(
|
|
15
|
+
plugins: [g(), y(), w(o), ...b],
|
|
16
16
|
optimizeDeps: {
|
|
17
|
-
include: ["react", "react-dom/client", "@jogak/core", "@jogak/react"]
|
|
17
|
+
include: ["react", "react-dom/client", "@jogak/core", "@jogak/core/renderers/react"]
|
|
18
18
|
}
|
|
19
19
|
};
|
|
20
20
|
if (t.mode === "dev") {
|
|
@@ -68,10 +68,10 @@ function x(t) {
|
|
|
68
68
|
const e = A(t);
|
|
69
69
|
if (e === void 0)
|
|
70
70
|
return { assetCount: 0, totalBytes: 0 };
|
|
71
|
-
let
|
|
71
|
+
let r = 0, s = 0;
|
|
72
72
|
for (const l of e)
|
|
73
|
-
|
|
74
|
-
return { assetCount:
|
|
73
|
+
r += 1, s += L(l);
|
|
74
|
+
return { assetCount: r, totalBytes: s };
|
|
75
75
|
}
|
|
76
76
|
function p(t) {
|
|
77
77
|
return typeof t == "object" && t !== null && Array.isArray(t.output);
|
|
@@ -79,8 +79,8 @@ function p(t) {
|
|
|
79
79
|
function A(t) {
|
|
80
80
|
if (Array.isArray(t)) {
|
|
81
81
|
const e = [];
|
|
82
|
-
for (const
|
|
83
|
-
p(
|
|
82
|
+
for (const r of t)
|
|
83
|
+
p(r) && e.push(...r.output);
|
|
84
84
|
return e;
|
|
85
85
|
}
|
|
86
86
|
if (p(t))
|
|
@@ -92,9 +92,9 @@ function L(t) {
|
|
|
92
92
|
if (e.type === "chunk" && typeof e.code == "string")
|
|
93
93
|
return Buffer.byteLength(e.code, "utf8");
|
|
94
94
|
if (e.type === "asset") {
|
|
95
|
-
const
|
|
96
|
-
if (typeof
|
|
97
|
-
if (
|
|
95
|
+
const r = e.source;
|
|
96
|
+
if (typeof r == "string") return Buffer.byteLength(r, "utf8");
|
|
97
|
+
if (r instanceof Uint8Array) return r.byteLength;
|
|
98
98
|
}
|
|
99
99
|
return 0;
|
|
100
100
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1,9 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),l=require("react"),C=require("@jogak/core"),h=require("@jogak/react"),$=require("prism-react-renderer"),Q=require("react-dom");function B(a){var e,t,r="";if(typeof a=="string"||typeof a=="number")r+=a;else if(typeof a=="object")if(Array.isArray(a)){var s=a.length;for(e=0;e<s;e++)a[e]&&(t=B(a[e]))&&(r&&(r+=" "),r+=t)}else for(t in a)a[t]&&(r&&(r+=" "),r+=t);return r}function w(){for(var a,e,t=0,r="",s=arguments.length;t<s;t++)(a=arguments[t])&&(e=B(a))&&(r&&(r+=" "),r+=e);return r}function W({selectedEntryId:a,selectedJogakName:e,onSelect:t}){const[r,s]=l.useState(""),{metaTree:n,searchMeta:g}=h.useRegistryMeta(),j=r.trim().length>0?g(r):null;return o.jsxs("aside",{"data-testid":"sidebar",className:"jogak:flex jogak:flex-col jogak:h-full jogak:overflow-auto jogak:border-r jogak:border-[var(--jogak-color-border)]",children:[o.jsx("div",{className:"jogak:p-3 jogak:border-b jogak:border-[var(--jogak-color-border)]",children:o.jsx("input",{type:"search",placeholder:"Search components...",value:r,onChange:c=>{s(c.target.value)},className:"jogak:w-full jogak:px-2 jogak:py-1.5 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)]","aria-label":"Search components"})}),o.jsx("nav",{className:"jogak:flex-1 jogak:overflow-auto jogak:py-2",children:j!==null?o.jsx(X,{metas:j,selectedEntryId:a,selectedJogakName:e,onSelect:t}):o.jsx(z,{node:n,selectedEntryId:a,selectedJogakName:e,onSelect:t})})]})}function X({metas:a,selectedEntryId:e,selectedJogakName:t,onSelect:r}){return a.length===0?o.jsx("p",{className:"jogak:px-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]",children:"No results"}):o.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:p-0",children:a.map(s=>o.jsx("li",{children:o.jsx(D,{meta:s,selectedEntryId:e,selectedJogakName:t,onSelect:r,indent:0})},s.id))})}function z({node:a,selectedEntryId:e,selectedJogakName:t,onSelect:r,depth:s=0}){return o.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:pr-0 jogak:py-0 jogak:pl-[var(--jogak-tree-pl)]",style:{"--jogak-tree-pl":`${s*12}px`},children:Object.entries(a).map(([n,g])=>o.jsx("li",{children:"id"in g?o.jsx(D,{meta:g,selectedEntryId:e,selectedJogakName:t,onSelect:r,indent:0}):o.jsx(Y,{label:n,node:g,selectedEntryId:e,selectedJogakName:t,onSelect:r,depth:s+1})},n))})}function Y({label:a,node:e,selectedEntryId:t,selectedJogakName:r,onSelect:s,depth:n}){const[g,j]=l.useState(!0);return o.jsxs("div",{children:[o.jsxs("button",{type:"button",onClick:()=>{j(c=>!c)},className:"jogak:flex jogak:items-center jogak:gap-1 jogak:w-full jogak:px-3 jogak:py-1 jogak:bg-transparent jogak:border-none jogak:cursor-pointer jogak:text-[12px] jogak:font-semibold jogak:text-[var(--jogak-color-fg-muted)] jogak:uppercase jogak:tracking-wider","aria-expanded":g,children:[o.jsx("span",{children:g?"▾":"▸"}),a]}),g&&o.jsx(z,{node:e,selectedEntryId:t,selectedJogakName:r,onSelect:s,depth:n})]})}function D({meta:a,selectedEntryId:e,selectedJogakName:t,onSelect:r,indent:s}){const n=a.id===e,[g,j]=l.useState(n);l.useEffect(()=>{n&&j(!0)},[n]);const c=a.title.split("/").pop()??a.title,d=16+s*12;return o.jsxs("div",{children:[o.jsxs("button",{type:"button",onClick:()=>{if(n)j(k=>!k);else{j(!0);const k=a.jogakNames[0];k!==void 0&&r(a.id,k)}},className:w("jogak:flex jogak:items-center jogak:gap-1.5 jogak:w-full jogak:pr-3 jogak:py-[5px]","jogak:pl-[var(--jogak-entry-pl)]","jogak:border-none jogak:cursor-pointer jogak:text-left jogak:text-[13px]",n?"jogak:bg-[var(--jogak-color-accent-bg)] jogak:text-[var(--jogak-color-accent)] jogak:font-medium":"jogak:bg-transparent jogak:text-[var(--jogak-color-fg)] jogak:font-normal"),style:{"--jogak-entry-pl":`${d}px`},"aria-expanded":g,children:[o.jsx("span",{className:"jogak:text-[10px] jogak:shrink-0 jogak:leading-none",children:g?"▾":"▸"}),c]}),g&&o.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:p-0",children:a.jogakNames.map(k=>{const i=n&&k===t;return o.jsx("li",{children:o.jsx("button",{type:"button",onClick:()=>{r(a.id,k)},className:w("jogak:block jogak:w-full jogak:text-left jogak:pr-3 jogak:py-1","jogak:pl-[var(--jogak-jogak-pl)]","jogak:border-none jogak:cursor-pointer jogak:text-[12px]",i?"jogak:bg-[var(--jogak-color-accent-bg-soft)] jogak:text-[var(--jogak-color-accent-fg)] jogak:font-medium":"jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal"),style:{"--jogak-jogak-pl":`${d+18}px`},"aria-current":i?"true":void 0,children:k})},k)})})]})}function Z(a,e){const t=e==null?void 0:e.control,r=(e==null?void 0:e.action)!==void 0&&e.action!==!1,s=(e==null?void 0:e.type)==="function"||typeof a=="function";return r||s?"action":t==="boolean"||typeof a=="boolean"?"boolean":t==="number"||t==="range"||typeof a=="number"?"number":t==="select"||t==="radio"||(e==null?void 0:e.options)!==void 0&&e.options.length>0?"select":t==="text"||t==="color"||typeof a=="string"?"text":"json"}const A="jogak:px-2 jogak:py-1 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)] jogak:text-[13px] jogak:w-full jogak:max-w-[280px]",_="jogak:px-5 jogak:py-1.5 jogak:text-left jogak:text-[var(--jogak-color-fg-muted)] jogak:font-medium jogak:text-[12px] jogak:border-b jogak:border-[var(--jogak-color-border)]",E="jogak:px-5 jogak:py-2 jogak:align-middle jogak:border-b jogak:border-[var(--jogak-color-border-muted)]";function K({argKey:a,value:e,argType:t,onArgChange:r}){switch(Z(e,t)){case"boolean":return o.jsx("input",{type:"checkbox",checked:e===!0,onChange:n=>{r(a,n.target.checked)},className:"jogak:cursor-pointer jogak:w-4 jogak:h-4 jogak:accent-[var(--jogak-color-accent)]"});case"number":return o.jsx("input",{type:"number",value:typeof e=="number"?e:"",onChange:n=>{r(a,n.target.valueAsNumber)},className:A});case"select":{const n=(t==null?void 0:t.options)??[];return o.jsx("select",{value:String(e??""),onChange:g=>{r(a,g.target.value)},className:A,children:n.map(g=>o.jsx("option",{value:String(g),children:String(g)},String(g)))})}case"text":return o.jsx("input",{type:"text",value:typeof e=="string"?e:String(e??""),onChange:n=>{r(a,n.target.value)},className:A});case"action":return o.jsx("span",{className:"jogak:inline-block jogak:px-2 jogak:py-0.5 jogak:text-[11px] jogak:font-semibold jogak:text-[var(--jogak-color-violet)] jogak:bg-[var(--jogak-color-violet-bg)] jogak:border jogak:border-[var(--jogak-color-violet-border)] jogak:rounded-[var(--jogak-radius-md)] jogak:font-[family-name:var(--jogak-font-mono)] jogak:leading-none",children:"(action)"});case"json":return o.jsx("code",{className:"jogak:text-[12px] jogak:text-[var(--jogak-color-fg-muted)] jogak:font-[family-name:var(--jogak-font-mono)]",children:JSON.stringify(e)})}}function F({args:a,argTypes:e,onArgChange:t}){const s=Array.from(new Set([...Object.keys(a),...Object.keys(e)])).map(n=>[n,a[n]]);return o.jsxs("div",{className:"jogak:border-t-2 jogak:border-[var(--jogak-color-border)]",children:[o.jsx("div",{className:"jogak:px-5 jogak:py-1.5 jogak:text-[11px] jogak:font-bold jogak:text-[var(--jogak-color-fg-subtle)] jogak:uppercase jogak:tracking-[0.08em] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg-subtle)]",children:"Controls"}),s.length===0?o.jsx("div",{className:"jogak:px-5 jogak:py-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]",children:"No args defined"}):o.jsxs("table",{className:"jogak:w-full jogak:border-collapse jogak:text-[13px]",children:[o.jsx("thead",{children:o.jsxs("tr",{children:[o.jsx("th",{className:_,children:"Name"}),o.jsx("th",{className:_,children:"Control"}),o.jsx("th",{className:_,children:"Description"})]})}),o.jsx("tbody",{children:s.map(([n,g])=>{const j=e[n];return o.jsxs("tr",{children:[o.jsx("td",{className:w(E,"jogak:font-[family-name:var(--jogak-font-mono)] jogak:text-[12px] jogak:text-[var(--jogak-color-fg)] jogak:whitespace-nowrap"),children:n}),o.jsx("td",{className:E,children:o.jsx(K,{argKey:n,value:g,argType:j,onArgChange:t})}),o.jsx("td",{className:w(E,"jogak:text-[var(--jogak-color-fg-subtle)]"),children:(j==null?void 0:j.description)??""})]},n)})})]})]})}function T(a){if(a.length===0)return"()";try{return a.map(e=>{var t;if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="function")return"[Function]";if(typeof e=="object"){const r=((t=e.constructor)==null?void 0:t.name)??"Object";return r!=="Object"&&r!=="Array"?`[${r}]`:JSON.stringify(e)}return JSON.stringify(e)}).join(", ")}catch{return"[unserializable]"}}function oo(a){const e=new Date(a),t=e.getHours().toString().padStart(2,"0"),r=e.getMinutes().toString().padStart(2,"0"),s=e.getSeconds().toString().padStart(2,"0"),n=e.getMilliseconds().toString().padStart(3,"0");return`${t}:${r}:${s}.${n}`}function H(){const[a,e]=l.useState(()=>C.defaultActionChannel.getLogs());l.useEffect(()=>C.defaultActionChannel.subscribe(e),[]);const t=a.length===0;return o.jsxs("div",{className:"jogak:h-full jogak:flex jogak:flex-col",children:[o.jsxs("div",{className:"jogak:px-5 jogak:py-1.5 jogak:text-[11px] jogak:font-bold jogak:text-[var(--jogak-color-fg-subtle)] jogak:uppercase jogak:tracking-[0.08em] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg-subtle)] jogak:flex jogak:items-center jogak:justify-between jogak:shrink-0",children:[o.jsxs("span",{children:["Actions ",a.length>0&&`(${a.length.toString()})`]}),o.jsx("button",{type:"button",onClick:()=>{C.defaultActionChannel.clear()},disabled:t,className:w("jogak:text-[10px] jogak:font-semibold jogak:px-2 jogak:py-0.5 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-sm)] jogak:bg-[var(--jogak-color-bg)] jogak:normal-case jogak:tracking-normal",t?"jogak:text-[var(--jogak-color-fg-subtle)] jogak:cursor-default":"jogak:text-[var(--jogak-color-fg)] jogak:cursor-pointer"),children:"Clear"})]}),o.jsx("div",{className:"jogak:flex-1 jogak:overflow-auto",children:t?o.jsx("div",{className:"jogak:px-5 jogak:py-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px] jogak:leading-none",children:"함수 prop이 호출되면 여기에 기록됩니다"}):o.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:p-0 jogak:font-[family-name:var(--jogak-font-mono)] jogak:text-[12px]",children:a.map(r=>o.jsxs("li",{className:"jogak:flex jogak:items-baseline jogak:gap-[10px] jogak:px-5 jogak:py-1.5 jogak:border-b jogak:border-[var(--jogak-color-border-muted)]",children:[o.jsx("span",{className:"jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[11px] jogak:min-w-[92px]",children:oo(r.timestamp)}),o.jsx("span",{className:"jogak:text-[var(--jogak-color-violet)] jogak:font-semibold",children:r.name}),o.jsxs("span",{className:"jogak:text-[var(--jogak-color-fg)] jogak:break-all jogak:flex-1",children:["(",T(r.args),")"]})]},r.id))})})]})}function ao({children:a,className:e,style:t,"data-testid":r}){const s=l.useRef(null),[n,g]=l.useState(null);return l.useEffect(()=>{const j=s.current;if(j===null)return;const c=j.shadowRoot??j.attachShadow({mode:"open"});g(c)},[]),o.jsx("div",{ref:s,className:e,"data-testid":r,style:t,children:n!==null?Q.createPortal(a,n):null})}function eo({entry:a,args:e,userPreviewUrl:t,previewEntryPath:r,className:s,"data-testid":n}){const g=l.useRef(null),[j,c]=l.useState(!1),d=t!==""?`${t}${r}`:"/preview-frame.html";return l.useEffect(()=>{const k=i=>{const m=g.current;if(m===null||i.source!==m.contentWindow)return;const x=i.data;x==null||typeof x!="object"||x.type==="jogak:ready"&&c(!0)};return window.addEventListener("message",k),()=>{window.removeEventListener("message",k)}},[]),l.useEffect(()=>{var i;if(!j)return;const k=g.current;k!==null&&((i=k.contentWindow)==null||i.postMessage({type:"jogak:setProps",entryId:a.id,args:e},"*"))},[j,a,e]),l.useEffect(()=>{const k=g.current;return()=>{k!==null&&queueMicrotask(()=>{var i;(i=k.contentWindow)==null||i.postMessage({type:"jogak:unmount"},"*")})}},[]),o.jsx("iframe",{ref:g,src:d,title:"Preview",className:s,"data-testid":n})}const U={mobile:375,tablet:768,desktop:"none"},to={mobile:"Mobile",tablet:"Tablet",desktop:"Desktop"},O={white:{"--jogak-canvas-bg":"#ffffff","--jogak-canvas-bg-image":"none","--jogak-canvas-bg-size":"auto","--jogak-canvas-bg-position":"0 0"},dark:{"--jogak-canvas-bg":"#1f2937","--jogak-canvas-bg-image":"none","--jogak-canvas-bg-size":"auto","--jogak-canvas-bg-position":"0 0"},transparent:{"--jogak-canvas-bg":"#ffffff","--jogak-canvas-bg-image":"linear-gradient(45deg, #e2e8f0 25%, transparent 25%), linear-gradient(-45deg, #e2e8f0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e2e8f0 75%), linear-gradient(-45deg, transparent 75%, #e2e8f0 75%)","--jogak-canvas-bg-size":"16px 16px","--jogak-canvas-bg-position":"0 0, 0 8px, 8px -8px, -8px 0px"}},L="jogak:bg-[var(--jogak-canvas-bg)] jogak:bg-[image:var(--jogak-canvas-bg-image)] jogak:bg-[length:var(--jogak-canvas-bg-size)] jogak:bg-[position:var(--jogak-canvas-bg-position)]";function ro(a){return $.themes[a]??$.themes.vsDark}function G({entryId:a,jogakName:e,overrideArgs:t,onArgChange:r,onReset:s,codeTheme:n,onResolveJogak:g,previewIsolation:j="iframe",userPreviewUrl:c="",previewEntryPath:d="/__jogak_preview__/index.html"}){const k=h.useEntry(a),[i,m]=l.useState("desktop"),[x,y]=l.useState("white"),[N,b]=l.useState("controls"),v=ro(n);return k.status==="unknown"?o.jsxs("div",{"data-testid":"preview-not-found",className:"jogak:p-6 jogak:text-[var(--jogak-color-error)]",children:["Entry not found: ",a]}):k.status==="error"?o.jsxs("div",{"data-testid":"preview-error",className:"jogak:p-6 jogak:text-[var(--jogak-color-error-fg)] jogak:bg-[var(--jogak-color-bg-error)] jogak:h-full jogak:flex jogak:flex-col jogak:gap-3 jogak:items-start",children:[o.jsxs("div",{className:"jogak:font-semibold",children:["Failed to load entry: ",a]}),o.jsx("pre",{className:"jogak:m-0 jogak:p-3 jogak:bg-[var(--jogak-color-bg)] jogak:border jogak:border-[var(--jogak-color-error-border)] jogak:rounded-[var(--jogak-radius-lg)] jogak:text-[12px] jogak:whitespace-pre-wrap jogak:max-w-full",children:k.error.message})]}):k.status==="loading"?o.jsx(no,{meta:k.meta,jogakName:e,viewport:i,bgMode:x,onViewportChange:m,onBgModeChange:y}):o.jsx(so,{entry:k.entry,jogakName:e,overrideArgs:t,onArgChange:r,onReset:s,onResolveJogak:g,viewport:i,bgMode:x,bottomTab:N,onViewportChange:m,onBgModeChange:y,onBottomTabChange:b,prismTheme:v,previewIsolation:j,userPreviewUrl:c,previewEntryPath:d})}function no({meta:a,jogakName:e,viewport:t,bgMode:r,onViewportChange:s,onBgModeChange:n}){const g=e??a.jogakNames[0]??"...",j=U[t];return o.jsxs("div",{"data-testid":"preview-loading",className:"jogak:flex jogak:flex-col jogak:h-full",children:[o.jsx(I,{title:a.title,jogakName:g,viewport:t,bgMode:r,onViewportChange:s,onBgModeChange:n,showReset:!1,onReset:()=>{}}),o.jsx("div",{className:`jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${L}`,style:O[r],children:o.jsx("div",{className:"jogak:mx-auto jogak:p-6 jogak:max-w-[var(--jogak-canvas-mw)]",style:{"--jogak-canvas-mw":j==="none"?"100%":`${j}px`},children:o.jsxs("div",{className:"jogak-skeleton-shimmer jogak:border jogak:border-dashed jogak:border-[var(--jogak-color-border)] jogak:rounded-[var(--jogak-radius-xl)] jogak:p-4 jogak:flex jogak:items-center jogak:justify-center jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px] jogak:min-h-[256px]",children:["Loading ",a.title,"…"]})})})]})}function so({entry:a,jogakName:e,overrideArgs:t,onArgChange:r,onReset:s,onResolveJogak:n,viewport:g,bgMode:j,bottomTab:c,onViewportChange:d,onBgModeChange:k,onBottomTabChange:i,prismTheme:m,previewIsolation:x,userPreviewUrl:y,previewEntryPath:N}){var J;const b=e??((J=a.jogaks[0])==null?void 0:J.name)??null;if(l.useEffect(()=>{e===null&&b!==null&&n!==void 0&&n(a.id,b)},[e,b,a.id,n]),b===null)return o.jsxs("div",{className:"jogak:p-6 jogak:text-[var(--jogak-color-error)]",children:["Entry has no jogaks: ",a.id]});const v=a.jogaks.find(S=>S.name===b);if(v===void 0)return o.jsxs("div",{className:"jogak:p-6 jogak:text-[var(--jogak-color-error)]",children:["Jogak not found: ",b]});const R={...v.args??{},...t},u={...a.meta.argTypes??{},...v.argTypes??{}},p=Object.keys(t).length>0,f=U[g];return o.jsxs("div",{className:"jogak:flex jogak:flex-col jogak:h-full",children:[o.jsx(I,{title:a.title,jogakName:v.name,viewport:g,bgMode:j,onViewportChange:d,onBgModeChange:k,showReset:p,onReset:s}),o.jsx("div",{className:`jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${L}`,style:O[j],children:o.jsx("div",{"data-jogak-content":!0,className:"jogak:mx-auto jogak:p-6 jogak:max-w-[var(--jogak-canvas-mw)]",style:{"--jogak-canvas-mw":f==="none"?"100%":`${f}px`},children:o.jsx(go,{entry:a,args:R,source:a.source,theme:m,previewIsolation:x,userPreviewUrl:y,previewEntryPath:N},`${a.id}/${v.name}`)})}),o.jsxs("div",{"data-testid":"bottom-panel",className:"jogak:h-[260px] jogak:shrink-0 jogak:flex jogak:flex-col jogak:border-t-2 jogak:border-[var(--jogak-color-border)]",children:[o.jsx("div",{role:"tablist",className:"jogak:flex jogak:gap-1 jogak:pt-1 jogak:px-3 jogak:pb-0 jogak:bg-[var(--jogak-color-bg)] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:shrink-0",children:["controls","actions"].map(S=>{const q=c===S;return o.jsx("button",{type:"button",role:"tab","aria-selected":q,onClick:()=>{i(S)},className:w("jogak:px-[14px] jogak:py-[6px] jogak:text-[12px] jogak:bg-transparent jogak:border-x-0 jogak:border-t-0 jogak:border-b-2 jogak:border-solid jogak:-mb-px jogak:cursor-pointer jogak:capitalize",q?"jogak:font-semibold jogak:text-[var(--jogak-color-fg-strong)] jogak:border-[var(--jogak-color-accent)]":"jogak:font-medium jogak:text-[var(--jogak-color-fg-muted)] jogak:border-transparent"),children:S},S)})}),o.jsx("div",{className:"jogak:flex-1 jogak:min-h-0 jogak:overflow-auto",children:c==="controls"?o.jsx(F,{args:R,argTypes:u,onArgChange:r}):o.jsx(H,{})})]})]})}function I({title:a,jogakName:e,viewport:t,bgMode:r,onViewportChange:s,onBgModeChange:n,showReset:g,onReset:j}){return o.jsxs("div",{className:"jogak:flex jogak:items-center jogak:gap-[10px] jogak:px-[14px] jogak:py-[7px] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg)] jogak:shrink-0",children:[o.jsxs("div",{className:"jogak:flex-1 jogak:text-[13px]",children:[o.jsx("span",{className:"jogak:text-[var(--jogak-color-fg-subtle)]",children:a}),o.jsx("span",{className:"jogak:text-[var(--jogak-color-border-strong)] jogak:mx-1.5 jogak:leading-none",children:"/"}),o.jsx("span",{className:"jogak:text-[var(--jogak-color-fg-strong)] jogak:font-semibold",children:e})]}),o.jsx("div",{className:"jogak:flex jogak:gap-0.5 jogak:bg-[var(--jogak-color-bg-subtle)] jogak:rounded-[var(--jogak-radius-lg)] jogak:p-0.5",children:["mobile","tablet","desktop"].map(c=>o.jsx("button",{type:"button",onClick:()=>{s(c)},"aria-pressed":t===c,className:w("jogak:px-[9px] jogak:py-[3px] jogak:text-[12px] jogak:border-none jogak:rounded-[var(--jogak-radius-md)] jogak:cursor-pointer jogak:transition-all jogak:duration-100",t===c?"jogak:bg-[var(--jogak-color-bg-elevated)] jogak:text-[var(--jogak-color-fg-strong)] jogak:font-semibold jogak:shadow-[0_1px_2px_rgba(0,0,0,0.08)]":"jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal jogak:shadow-none"),children:to[c]},c))}),o.jsx("div",{className:"jogak:flex jogak:gap-1 jogak:items-center",children:["white","dark","transparent"].map(c=>o.jsx("button",{type:"button",onClick:()=>{n(c)},"aria-pressed":r===c,"aria-label":`${c} background`,className:w("jogak:w-5 jogak:h-5 jogak:rounded-[var(--jogak-radius-md)] jogak:border-2 jogak:cursor-pointer jogak:p-0 jogak:shrink-0",L,r===c?"jogak:border-[var(--jogak-color-accent)]":"jogak:border-[var(--jogak-color-border-strong)]"),style:O[c]},c))}),g&&o.jsx("button",{type:"button",onClick:j,className:"jogak:px-[10px] jogak:py-[3px] jogak:text-[12px] jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)] jogak:bg-[var(--jogak-color-bg)] jogak:cursor-pointer jogak:text-[var(--jogak-color-fg)] jogak:leading-none",children:"Reset"})]})}function go({entry:a,args:e,source:t,theme:r,previewIsolation:s,userPreviewUrl:n,previewEntryPath:g}){const[j,c]=l.useState(!1),d=o.jsxs("div",{className:"jogak:relative",children:[o.jsx(jo,{entry:a,args:e,previewIsolation:s,userPreviewUrl:n,previewEntryPath:g}),o.jsx("button",{type:"button",onClick:()=>{c(k=>!k)},"aria-pressed":j,"aria-label":j?"Hide source code":"Show source code",className:w("jogak:absolute jogak:bottom-2 jogak:right-2 jogak:px-[9px] jogak:py-1","jogak:text-[11px] jogak:font-[family-name:var(--jogak-font-mono)] jogak:font-semibold jogak:tracking-[0.02em]","jogak:text-[var(--jogak-color-bg)] jogak:border-none jogak:rounded-[5px] jogak:cursor-pointer","jogak:shadow-[0_1px_4px_rgba(0,0,0,0.2)] jogak:transition-[background-color] jogak:duration-150 jogak:leading-none",j?"jogak:bg-[var(--jogak-color-accent)]":"jogak:bg-[#1e293b]"),children:"</>"})]});return o.jsxs("div",{children:[d,j&&o.jsx("div",{className:"jogak:mt-2 jogak:rounded-[var(--jogak-radius-xl)] jogak:overflow-hidden jogak:h-[320px] jogak:shadow-[0_0_0_1px_rgba(0,0,0,0.08),_0_4px_16px_rgba(0,0,0,0.12)]",children:o.jsx(co,{source:t,theme:r})})]})}const M="jogak:border jogak:border-dashed jogak:border-[var(--jogak-color-border)] jogak:rounded-[var(--jogak-radius-xl)] jogak:p-4 jogak:pb-9";function jo({entry:a,args:e,previewIsolation:t,userPreviewUrl:r,previewEntryPath:s}){return t==="shadow"?o.jsx(ao,{"data-testid":"preview-content",className:M,children:o.jsx(ko,{entry:a,args:e})}):t==="iframe"?o.jsx(eo,{entry:a,args:e,userPreviewUrl:r,previewEntryPath:s,"data-testid":"preview-content",className:`${M} jogak:block jogak:w-full jogak:bg-transparent jogak:min-h-[256px]`}):o.jsx(lo,{entry:a,args:e})}function lo({entry:a,args:e}){const t=l.useRef(null);return l.useEffect(()=>{const r=t.current;if(r!==null)return h.reactAdapter.render(a,e,r),()=>{queueMicrotask(()=>{h.reactAdapter.unmount(r)})}},[a]),l.useEffect(()=>{const r=t.current;r!==null&&h.reactAdapter.render(a,e,r)},[a,e]),o.jsx("div",{ref:t,"data-testid":"preview-content",className:M})}function ko({entry:a,args:e}){const t=l.useRef(null);return l.useEffect(()=>{const r=t.current;if(r!==null)return h.reactAdapter.render(a,e,r),()=>{queueMicrotask(()=>{h.reactAdapter.unmount(r)})}},[a]),l.useEffect(()=>{const r=t.current;r!==null&&h.reactAdapter.render(a,e,r)},[a,e]),o.jsx("div",{ref:t,"data-testid":"preview-content-shadow"})}function co({source:a,theme:e}){const[t,r]=l.useState(!1),s=e.plain.backgroundColor??"#1e293b";if(a===void 0)return o.jsx("div",{className:"jogak:h-full jogak:flex jogak:items-center jogak:justify-center jogak:bg-[var(--jogak-source-bg)] jogak:text-[#94a3b8] jogak:text-[13px]",style:{"--jogak-source-bg":s},children:"Source not available"});const n=()=>{navigator.clipboard.writeText(a).then(()=>{r(!0),setTimeout(()=>{r(!1)},2e3)})};return o.jsxs("div",{className:"jogak:relative jogak:h-full",children:[o.jsx("button",{type:"button",onClick:n,className:"jogak:absolute jogak:top-[10px] jogak:right-3 jogak:z-[1] jogak:px-[9px] jogak:py-[3px] jogak:text-[11px] jogak:bg-[rgba(255,255,255,0.1)] jogak:text-[#e2e8f0] jogak:border jogak:border-[rgba(255,255,255,0.18)] jogak:rounded-[var(--jogak-radius-md)] jogak:cursor-pointer jogak:leading-none",children:t?"✓ Copied":"Copy"}),o.jsx($.Highlight,{code:a.trim(),language:"tsx",theme:e,children:({style:g,tokens:j,getLineProps:c,getTokenProps:d})=>o.jsx("pre",{className:"jogak:m-0 jogak:py-3 jogak:px-0 jogak:text-[12.5px] jogak:leading-[1.7] jogak:font-[family-name:var(--jogak-font-mono)] jogak:h-full jogak:box-border jogak:overflow-auto",style:g,children:j.map((k,i)=>o.jsxs("div",{...c({line:k}),className:"jogak:flex jogak:pr-6",style:c({line:k}).style,children:[o.jsx("span",{className:"jogak:select-none jogak:min-w-10 jogak:pl-[14px] jogak:pr-[14px] jogak:text-right jogak:text-[rgba(148,163,184,0.45)] jogak:shrink-0 jogak:leading-[1.7]",children:i+1}),o.jsx("span",{children:k.map((m,x)=>o.jsx("span",{...d({token:m})},x))})]},i))})})]})}function V(){if(typeof window>"u")return null;const a=new URLSearchParams(window.location.search),e=a.get("entry");if(e===null)return null;const t=a.get("jogak");return{entryId:e,jogakName:t}}function io(a,e){const t=new URLSearchParams;t.set("entry",a),t.set("jogak",e),window.history.pushState({},"",`?${t.toString()}`)}function uo({entries:a,metas:e,codeTheme:t="vsDark",previewIsolation:r="iframe",userPreviewUrl:s="",previewEntryPath:n="/__jogak_preview__/index.html",userViteUrl:g}={}){const j=s!==""?s:g??"",c=l.useMemo(()=>{if(a!==void 0){e!==void 0&&console.warn("[jogak] JogakApp received both `entries` and `metas` — `entries` (eager) takes precedence.");const u=new C.ComponentRegistry;for(const p of a)u.register(p);return u}if(e!==void 0)for(const u of e)C.defaultRegistry.registerMeta(u);return C.defaultRegistry},[a,e]),d=l.useMemo(()=>V(),[]),[k,i]=l.useState((d==null?void 0:d.entryId)??null),[m,x]=l.useState((d==null?void 0:d.jogakName)??null),[y,N]=l.useState({});l.useEffect(()=>{const u=()=>{const p=V();p!==null?(i(p.entryId),x(p.jogakName),N({})):(i(null),x(null))};return window.addEventListener("popstate",u),()=>{window.removeEventListener("popstate",u)}},[]);const b=l.useCallback((u,p)=>{i(u),x(p),N({}),io(u,p)},[]),v=l.useCallback((u,p)=>{if(i(f=>f===u?u:f),x(f=>f??p),typeof window<"u"){const f=new URLSearchParams(window.location.search);f.get("entry")===u&&f.get("jogak")===null&&(f.set("jogak",p),window.history.replaceState({},"",`?${f.toString()}`))}},[]),P=l.useCallback((u,p)=>{N(f=>({...f,[u]:p}))},[]),R=l.useCallback(()=>{N({})},[]);return o.jsx(h.JogakProvider,{registry:c,children:o.jsxs("div",{"data-jogak-shell":!0,className:"jogak:grid jogak:grid-cols-[260px_1fr] jogak:h-dvh jogak:overflow-hidden",children:[o.jsx(W,{selectedEntryId:k,selectedJogakName:m,onSelect:b}),o.jsx("main",{className:"jogak:overflow-hidden jogak:min-h-0",children:k!==null?o.jsx(G,{entryId:k,jogakName:m,overrideArgs:y,onArgChange:P,onReset:R,codeTheme:t,onResolveJogak:v,previewIsolation:r,userPreviewUrl:j,previewEntryPath:n}):o.jsx("div",{className:"jogak:flex jogak:items-center jogak:justify-center jogak:h-full jogak:text-[var(--jogak-color-fg-subtle)]",children:"Select a component from the sidebar"})})]})})}function xo(){const a=h.useRegistry(),e=l.useMemo(()=>a.getAll(),[a]),t=l.useMemo(()=>a.getTree(),[a]),r=l.useMemo(()=>s=>a.search(s),[a]);return{entries:e,tree:t,search:r}}exports.Actions=H;exports.Controls=F;exports.JogakApp=uo;exports.Preview=G;exports.Sidebar=W;exports.useRegistry=xo;
|
|
1
|
+
"use strict";var oo=Object.create;var z=Object.defineProperty;var eo=Object.getOwnPropertyDescriptor;var ao=Object.getOwnPropertyNames;var to=Object.getPrototypeOf,ro=Object.prototype.hasOwnProperty;var no=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ao(e))!ro.call(o,n)&&n!==t&&z(o,n,{get:()=>e[n],enumerable:!(r=eo(e,n))||r.enumerable});return o};var $=(o,e,t)=>(t=o!=null?oo(to(o)):{},no(e||!o||!o.__esModule?z(t,"default",{value:o,enumerable:!0}):t,o));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),j=require("react"),S=require("@jogak/core"),E=require("@jogak/core/renderers/react"),L=require("prism-react-renderer"),so=require("react-dom");function F(o){var e,t,r="";if(typeof o=="string"||typeof o=="number")r+=o;else if(typeof o=="object")if(Array.isArray(o)){var n=o.length;for(e=0;e<n;e++)o[e]&&(t=F(o[e]))&&(r&&(r+=" "),r+=t)}else for(t in o)o[t]&&(r&&(r+=" "),r+=t);return r}function h(){for(var o,e,t=0,r="",n=arguments.length;t<n;t++)(o=arguments[t])&&(e=F(o))&&(r&&(r+=" "),r+=e);return r}function U({selectedEntryId:o,selectedJogakName:e,onSelect:t}){const[r,n]=j.useState(""),{metaTree:g,searchMeta:s}=E.useRegistryMeta(),l=r.trim().length>0?s(r):null;return a.jsxs("aside",{"data-testid":"sidebar",className:"jogak:flex jogak:flex-col jogak:h-full jogak:overflow-auto jogak:border-r jogak:border-[var(--jogak-color-border)]",children:[a.jsx("div",{className:"jogak:p-3 jogak:border-b jogak:border-[var(--jogak-color-border)]",children:a.jsx("input",{type:"search",placeholder:"Search components...",value:r,onChange:i=>{n(i.target.value)},className:"jogak:w-full jogak:px-2 jogak:py-1.5 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)]","aria-label":"Search components"})}),a.jsx("nav",{className:"jogak:flex-1 jogak:overflow-auto jogak:py-2",children:l!==null?a.jsx(go,{metas:l,selectedEntryId:o,selectedJogakName:e,onSelect:t}):a.jsx(G,{node:g,selectedEntryId:o,selectedJogakName:e,onSelect:t})})]})}function go({metas:o,selectedEntryId:e,selectedJogakName:t,onSelect:r}){return o.length===0?a.jsx("p",{className:"jogak:px-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]",children:"No results"}):a.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:p-0",children:o.map(n=>a.jsx("li",{children:a.jsx(I,{meta:n,selectedEntryId:e,selectedJogakName:t,onSelect:r,indent:0})},n.id))})}function G({node:o,selectedEntryId:e,selectedJogakName:t,onSelect:r,depth:n=0}){return a.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:pr-0 jogak:py-0 jogak:pl-[var(--jogak-tree-pl)]",style:{"--jogak-tree-pl":`${n*12}px`},children:Object.entries(o).map(([g,s])=>a.jsx("li",{children:"id"in s?a.jsx(I,{meta:s,selectedEntryId:e,selectedJogakName:t,onSelect:r,indent:0}):a.jsx(lo,{label:g,node:s,selectedEntryId:e,selectedJogakName:t,onSelect:r,depth:n+1})},g))})}function lo({label:o,node:e,selectedEntryId:t,selectedJogakName:r,onSelect:n,depth:g}){const[s,l]=j.useState(!0);return a.jsxs("div",{children:[a.jsxs("button",{type:"button",onClick:()=>{l(i=>!i)},className:"jogak:flex jogak:items-center jogak:gap-1 jogak:w-full jogak:px-3 jogak:py-1 jogak:bg-transparent jogak:border-none jogak:cursor-pointer jogak:text-[12px] jogak:font-semibold jogak:text-[var(--jogak-color-fg-muted)] jogak:uppercase jogak:tracking-wider","aria-expanded":s,children:[a.jsx("span",{children:s?"▾":"▸"}),o]}),s&&a.jsx(G,{node:e,selectedEntryId:t,selectedJogakName:r,onSelect:n,depth:g})]})}function I({meta:o,selectedEntryId:e,selectedJogakName:t,onSelect:r,indent:n}){const g=o.id===e,[s,l]=j.useState(g);j.useEffect(()=>{g&&l(!0)},[g]);const i=o.title.split("/").pop()??o.title,d=16+n*12;return a.jsxs("div",{children:[a.jsxs("button",{type:"button",onClick:()=>{if(g)l(c=>!c);else{l(!0);const c=o.jogakNames[0];c!==void 0&&r(o.id,c)}},className:h("jogak:flex jogak:items-center jogak:gap-1.5 jogak:w-full jogak:pr-3 jogak:py-[5px]","jogak:pl-[var(--jogak-entry-pl)]","jogak:border-none jogak:cursor-pointer jogak:text-left jogak:text-[13px]",g?"jogak:bg-[var(--jogak-color-accent-bg)] jogak:text-[var(--jogak-color-accent)] jogak:font-medium":"jogak:bg-transparent jogak:text-[var(--jogak-color-fg)] jogak:font-normal"),style:{"--jogak-entry-pl":`${d}px`},"aria-expanded":s,children:[a.jsx("span",{className:"jogak:text-[10px] jogak:shrink-0 jogak:leading-none",children:s?"▾":"▸"}),i]}),s&&a.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:p-0",children:o.jogakNames.map(c=>{const k=g&&c===t;return a.jsx("li",{children:a.jsx("button",{type:"button",onClick:()=>{r(o.id,c)},className:h("jogak:block jogak:w-full jogak:text-left jogak:pr-3 jogak:py-1","jogak:pl-[var(--jogak-jogak-pl)]","jogak:border-none jogak:cursor-pointer jogak:text-[12px]",k?"jogak:bg-[var(--jogak-color-accent-bg-soft)] jogak:text-[var(--jogak-color-accent-fg)] jogak:font-medium":"jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal"),style:{"--jogak-jogak-pl":`${d+18}px`},"aria-current":k?"true":void 0,children:c})},c)})})]})}const B=new Map,M=new Map;async function A(o){const e=o,t=B.get(e);if(t!==void 0)return t;const r=M.get(e);if(r!==void 0)return r;const n=io(e);M.set(e,n);try{const g=await n;return B.set(e,g),g}finally{M.delete(e)}}async function io(o){switch(o){case"react":case"next":return(await import("@jogak/core/renderers/react")).reactAdapter;case"vue":return(await import("@jogak/core/renderers/vue")).vueAdapter;case"svelte":return(await import("@jogak/core/renderers/svelte")).svelteAdapter;case"web-components":{const e=await import("@jogak/core/renderers/web-components");return ko(e.defineJogakElement)}default:throw new Error(`[jogak/ui] Unknown framework: '${o}'. Expected one of: 'react' | 'next' | 'vue' | 'svelte' | 'web-components'.`)}}function jo(o){return`jogak-${o.toLowerCase().replace(/[^a-z0-9]+/gu,"-").replace(/^-+|-+$/gu,"")||"entry"}`}function co(o){return o==null?null:typeof o=="string"?o:typeof o=="number"||typeof o=="boolean"?String(o):typeof o=="function"||typeof o=="object"?null:String(o)}function ko(o){return{framework:"web-components",render(e,t,r){const n=r,g=jo(e.id);o(g,e);let s=n._jogakWCElement;(s===void 0||n._jogakWCTagName!==g)&&(s!==void 0&&s.remove(),s=document.createElement(g),r.replaceChildren(s),n._jogakWCElement=s,n._jogakWCTagName=g);for(const[l,i]of Object.entries(t)){const d=co(i);d===null?s.removeAttribute(l):s.setAttribute(l,d)}},unmount(e){const t=e,r=t._jogakWCElement;r!==void 0&&r.remove(),delete t._jogakWCElement,delete t._jogakWCTagName}}}function uo(o,e){const t=e==null?void 0:e.control,r=(e==null?void 0:e.action)!==void 0&&e.action!==!1,n=(e==null?void 0:e.type)==="function"||typeof o=="function";return r||n?"action":t==="boolean"||typeof o=="boolean"?"boolean":t==="number"||t==="range"||typeof o=="number"?"number":t==="select"||t==="radio"||(e==null?void 0:e.options)!==void 0&&e.options.length>0?"select":t==="text"||t==="color"||typeof o=="string"?"text":"json"}const O="jogak:px-2 jogak:py-1 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)] jogak:text-[13px] jogak:w-full jogak:max-w-[280px]",R="jogak:px-5 jogak:py-1.5 jogak:text-left jogak:text-[var(--jogak-color-fg-muted)] jogak:font-medium jogak:text-[12px] jogak:border-b jogak:border-[var(--jogak-color-border)]",_="jogak:px-5 jogak:py-2 jogak:align-middle jogak:border-b jogak:border-[var(--jogak-color-border-muted)]";function fo({argKey:o,value:e,argType:t,onArgChange:r}){switch(uo(e,t)){case"boolean":return a.jsx("input",{type:"checkbox",checked:e===!0,onChange:g=>{r(o,g.target.checked)},className:"jogak:cursor-pointer jogak:w-4 jogak:h-4 jogak:accent-[var(--jogak-color-accent)]"});case"number":return a.jsx("input",{type:"number",value:typeof e=="number"?e:"",onChange:g=>{r(o,g.target.valueAsNumber)},className:O});case"select":{const g=(t==null?void 0:t.options)??[];return a.jsx("select",{value:String(e??""),onChange:s=>{r(o,s.target.value)},className:O,children:g.map(s=>a.jsx("option",{value:String(s),children:String(s)},String(s)))})}case"text":return a.jsx("input",{type:"text",value:typeof e=="string"?e:String(e??""),onChange:g=>{r(o,g.target.value)},className:O});case"action":return a.jsx("span",{className:"jogak:inline-block jogak:px-2 jogak:py-0.5 jogak:text-[11px] jogak:font-semibold jogak:text-[var(--jogak-color-violet)] jogak:bg-[var(--jogak-color-violet-bg)] jogak:border jogak:border-[var(--jogak-color-violet-border)] jogak:rounded-[var(--jogak-radius-md)] jogak:font-[family-name:var(--jogak-font-mono)] jogak:leading-none",children:"(action)"});case"json":return a.jsx("code",{className:"jogak:text-[12px] jogak:text-[var(--jogak-color-fg-muted)] jogak:font-[family-name:var(--jogak-font-mono)]",children:JSON.stringify(e)})}}function Q({args:o,argTypes:e,onArgChange:t}){const n=Array.from(new Set([...Object.keys(o),...Object.keys(e)])).map(s=>[s,o[s]]),g=n.some(([s])=>{var l;return((l=e[s])==null?void 0:l.defaultValue)!==void 0});return a.jsxs("div",{className:"jogak:border-t-2 jogak:border-[var(--jogak-color-border)]",children:[a.jsx("div",{className:"jogak:px-5 jogak:py-1.5 jogak:text-[11px] jogak:font-bold jogak:text-[var(--jogak-color-fg-subtle)] jogak:uppercase jogak:tracking-[0.08em] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg-subtle)]",children:"Controls"}),n.length===0?a.jsx("div",{className:"jogak:px-5 jogak:py-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px]",children:"No args defined"}):a.jsxs("table",{className:"jogak:w-full jogak:border-collapse jogak:text-[13px]",children:[a.jsx("thead",{children:a.jsxs("tr",{children:[a.jsx("th",{className:R,children:"Name"}),a.jsx("th",{className:R,children:"Control"}),g&&a.jsx("th",{className:R,children:"Default"}),a.jsx("th",{className:R,children:"Description"})]})}),a.jsx("tbody",{children:n.map(([s,l])=>{const i=e[s];return a.jsxs("tr",{children:[a.jsx("td",{className:h(_,"jogak:font-[family-name:var(--jogak-font-mono)] jogak:text-[12px] jogak:text-[var(--jogak-color-fg)] jogak:whitespace-nowrap"),children:s}),a.jsx("td",{className:_,children:a.jsx(fo,{argKey:s,value:l,argType:i,onArgChange:t})}),g&&a.jsx("td",{className:h(_,"jogak:font-[family-name:var(--jogak-font-mono)] jogak:text-[12px] jogak:text-[var(--jogak-color-fg-muted)] jogak:whitespace-nowrap"),children:(i==null?void 0:i.defaultValue)!==void 0?po(i.defaultValue):""}),a.jsx("td",{className:h(_,"jogak:text-[var(--jogak-color-fg-subtle)]"),children:(i==null?void 0:i.description)??""})]},s)})})]})]})}function po(o){if(typeof o=="string")return`'${o}'`;if(typeof o=="number"||typeof o=="boolean"||o===null)return String(o);try{return JSON.stringify(o)}catch{return String(o)}}function mo(o){if(o.length===0)return"()";try{return o.map(e=>{var t;if(e===null)return"null";if(e===void 0)return"undefined";if(typeof e=="function")return"[Function]";if(typeof e=="object"){const r=((t=e.constructor)==null?void 0:t.name)??"Object";return r!=="Object"&&r!=="Array"?`[${r}]`:JSON.stringify(e)}return JSON.stringify(e)}).join(", ")}catch{return"[unserializable]"}}function xo(o){const e=new Date(o),t=e.getHours().toString().padStart(2,"0"),r=e.getMinutes().toString().padStart(2,"0"),n=e.getSeconds().toString().padStart(2,"0"),g=e.getMilliseconds().toString().padStart(3,"0");return`${t}:${r}:${n}.${g}`}function X(){const[o,e]=j.useState(()=>S.defaultActionChannel.getLogs());j.useEffect(()=>S.defaultActionChannel.subscribe(e),[]);const t=o.length===0;return a.jsxs("div",{className:"jogak:h-full jogak:flex jogak:flex-col",children:[a.jsxs("div",{className:"jogak:px-5 jogak:py-1.5 jogak:text-[11px] jogak:font-bold jogak:text-[var(--jogak-color-fg-subtle)] jogak:uppercase jogak:tracking-[0.08em] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg-subtle)] jogak:flex jogak:items-center jogak:justify-between jogak:shrink-0",children:[a.jsxs("span",{children:["Actions ",o.length>0&&`(${o.length.toString()})`]}),a.jsx("button",{type:"button",onClick:()=>{S.defaultActionChannel.clear()},disabled:t,className:h("jogak:text-[10px] jogak:font-semibold jogak:px-2 jogak:py-0.5 jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-sm)] jogak:bg-[var(--jogak-color-bg)] jogak:normal-case jogak:tracking-normal",t?"jogak:text-[var(--jogak-color-fg-subtle)] jogak:cursor-default":"jogak:text-[var(--jogak-color-fg)] jogak:cursor-pointer"),children:"Clear"})]}),a.jsx("div",{className:"jogak:flex-1 jogak:overflow-auto",children:t?a.jsx("div",{className:"jogak:px-5 jogak:py-3 jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px] jogak:leading-none",children:"함수 prop이 호출되면 여기에 기록됩니다"}):a.jsx("ul",{className:"jogak:list-none jogak:m-0 jogak:p-0 jogak:font-[family-name:var(--jogak-font-mono)] jogak:text-[12px]",children:o.map(r=>a.jsxs("li",{className:"jogak:flex jogak:items-baseline jogak:gap-[10px] jogak:px-5 jogak:py-1.5 jogak:border-b jogak:border-[var(--jogak-color-border-muted)]",children:[a.jsx("span",{className:"jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[11px] jogak:min-w-[92px]",children:xo(r.timestamp)}),a.jsx("span",{className:"jogak:text-[var(--jogak-color-violet)] jogak:font-semibold",children:r.name}),a.jsxs("span",{className:"jogak:text-[var(--jogak-color-fg)] jogak:break-all jogak:flex-1",children:["(",mo(r.args),")"]})]},r.id))})})]})}function bo({children:o,className:e,style:t,"data-testid":r}){const n=j.useRef(null),[g,s]=j.useState(null);return j.useEffect(()=>{const l=n.current;if(l===null)return;const i=l.shadowRoot??l.attachShadow({mode:"open"});s(i)},[]),a.jsx("div",{ref:n,className:e,"data-testid":r,style:t,children:g!==null?so.createPortal(o,g):null})}function ho({entry:o,args:e,userPreviewUrl:t,previewEntryPath:r,className:n,"data-testid":g}){const s=j.useRef(null),[l,i]=j.useState(!1),d=t!==""?`${t}${r}`:"/preview-frame.html";return j.useEffect(()=>{const c=k=>{const f=s.current;if(f===null||k.source!==f.contentWindow)return;const p=k.data;p==null||typeof p!="object"||p.type==="jogak:ready"&&i(!0)};return window.addEventListener("message",c),()=>{window.removeEventListener("message",c)}},[]),j.useEffect(()=>{var k;if(!l)return;const c=s.current;c!==null&&((k=c.contentWindow)==null||k.postMessage({type:"jogak:setProps",entryId:o.id,args:e},"*"))},[l,o,e]),j.useEffect(()=>{const c=s.current;return()=>{c!==null&&queueMicrotask(()=>{var k;(k=c.contentWindow)==null||k.postMessage({type:"jogak:unmount"},"*")})}},[]),a.jsx("iframe",{ref:s,src:d,title:"Preview",className:n,"data-testid":g})}const vo=60;function wo(o,e){const t=No(o),{children:r,restProps:n}=yo(e),g=Object.entries(n).filter(([,k])=>k!==void 0).map(([k,f])=>Co(k,f)),s=So(r),l=s!==null,i=g.length===0?"":" "+g.join(" "),d=l?`<${t}${i}>${s??""}</${t}>`:`<${t}${i} />`;if(d.length<=vo&&!d.includes(`
|
|
2
|
+
`))return d;const c=g.length===0?"":`
|
|
3
|
+
`+g.join(`
|
|
4
|
+
`)+`
|
|
5
|
+
`;if(l){const k=(s??"").split(`
|
|
6
|
+
`).map(f=>` ${f}`).join(`
|
|
7
|
+
`);return`<${t}${c}>
|
|
8
|
+
${k}
|
|
9
|
+
</${t}>`}return`<${t}${c}/>`}function No(o){const e=o.meta.component;if(e!=null){if(typeof e.displayName=="string"&&e.displayName.length>0)return e.displayName;if(typeof e.name=="string"&&e.name.length>0)return e.name}const t=o.title.split("/").pop();return t!==void 0&&t.length>0?t:"Component"}function yo(o){const{children:e,...t}=o;return{children:e,restProps:t}}function So(o){return o==null?null:typeof o=="string"?o.length===0?null:o:typeof o=="number"||typeof o=="bigint"?`{${o.toString()}}`:typeof o=="boolean"?null:`{${Y(o)}}`}function Co(o,e){if(e===!0)return o;if(e===!1)return`${o}={false}`;if(e===null)return`${o}={null}`;if(typeof e=="string"){const t=e.replace(/"/gu,""");return`${o}="${t}"`}return typeof e=="number"||typeof e=="bigint"?`${o}={${e.toString()}}`:typeof e=="function"?`${o}={fn}`:`${o}={${Y(e)}}`}function Y(o){try{return JSON.stringify(o)}catch{return String(o)}}const Z={mobile:375,tablet:768,desktop:"none"},$o={mobile:"Mobile",tablet:"Tablet",desktop:"Desktop"},W={white:{"--jogak-canvas-bg":"#ffffff","--jogak-canvas-bg-image":"none","--jogak-canvas-bg-size":"auto","--jogak-canvas-bg-position":"0 0"},dark:{"--jogak-canvas-bg":"#1f2937","--jogak-canvas-bg-image":"none","--jogak-canvas-bg-size":"auto","--jogak-canvas-bg-position":"0 0"},transparent:{"--jogak-canvas-bg":"#ffffff","--jogak-canvas-bg-image":"linear-gradient(45deg, #e2e8f0 25%, transparent 25%), linear-gradient(-45deg, #e2e8f0 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #e2e8f0 75%), linear-gradient(-45deg, transparent 75%, #e2e8f0 75%)","--jogak-canvas-bg-size":"16px 16px","--jogak-canvas-bg-position":"0 0, 0 8px, 8px -8px, -8px 0px"}},V="jogak:bg-[var(--jogak-canvas-bg)] jogak:bg-[image:var(--jogak-canvas-bg-image)] jogak:bg-[length:var(--jogak-canvas-bg-size)] jogak:bg-[position:var(--jogak-canvas-bg-position)]";function Ro(o){return L.themes[o]??L.themes.vsDark}function K({entryId:o,jogakName:e,overrideArgs:t,onArgChange:r,onReset:n,codeTheme:g,onResolveJogak:s,previewIsolation:l="iframe",userPreviewUrl:i="",previewEntryPath:d="/__jogak_preview__/index.html"}){const c=E.useEntry(o,{skipHydrate:l==="iframe"}),[k,f]=j.useState("desktop"),[p,N]=j.useState("white"),[w,b]=j.useState("controls"),v=Ro(g);return c.status==="unknown"?a.jsxs("div",{"data-testid":"preview-not-found",className:"jogak:p-6 jogak:text-[var(--jogak-color-error)]",children:["Entry not found: ",o]}):c.status==="error"?a.jsxs("div",{"data-testid":"preview-error",className:"jogak:p-6 jogak:text-[var(--jogak-color-error-fg)] jogak:bg-[var(--jogak-color-bg-error)] jogak:h-full jogak:flex jogak:flex-col jogak:gap-3 jogak:items-start",children:[a.jsxs("div",{className:"jogak:font-semibold",children:["Failed to load entry: ",o]}),a.jsx("pre",{className:"jogak:m-0 jogak:p-3 jogak:bg-[var(--jogak-color-bg)] jogak:border jogak:border-[var(--jogak-color-error-border)] jogak:rounded-[var(--jogak-radius-lg)] jogak:text-[12px] jogak:whitespace-pre-wrap jogak:max-w-full",children:c.error.message})]}):c.status==="loading"?a.jsx(_o,{meta:c.meta,jogakName:e,viewport:k,bgMode:p,onViewportChange:f,onBgModeChange:N}):a.jsx(Ao,{entry:c.entry,jogakName:e,overrideArgs:t,onArgChange:r,onReset:n,onResolveJogak:s,viewport:k,bgMode:p,bottomTab:w,onViewportChange:f,onBgModeChange:N,onBottomTabChange:b,prismTheme:v,previewIsolation:l,userPreviewUrl:i,previewEntryPath:d})}function _o({meta:o,jogakName:e,viewport:t,bgMode:r,onViewportChange:n,onBgModeChange:g}){const s=e??o.jogakNames[0]??"...",l=Z[t];return a.jsxs("div",{"data-testid":"preview-loading",className:"jogak:flex jogak:flex-col jogak:h-full",children:[a.jsx(T,{title:o.title,jogakName:s,viewport:t,bgMode:r,onViewportChange:n,onBgModeChange:g,showReset:!1,onReset:()=>{}}),a.jsx("div",{className:`jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${V}`,style:W[r],children:a.jsx("div",{className:"jogak:mx-auto jogak:p-6 jogak:max-w-[var(--jogak-canvas-mw)]",style:{"--jogak-canvas-mw":l==="none"?"100%":`${l}px`},children:a.jsxs("div",{className:"jogak-skeleton-shimmer jogak:border jogak:border-dashed jogak:border-[var(--jogak-color-border)] jogak:rounded-[var(--jogak-radius-xl)] jogak:p-4 jogak:flex jogak:items-center jogak:justify-center jogak:text-[var(--jogak-color-fg-subtle)] jogak:text-[13px] jogak:min-h-[256px]",children:["Loading ",o.title,"…"]})})})]})}function Ao({entry:o,jogakName:e,overrideArgs:t,onArgChange:r,onReset:n,onResolveJogak:g,viewport:s,bgMode:l,bottomTab:i,onViewportChange:d,onBgModeChange:c,onBottomTabChange:k,prismTheme:f,previewIsolation:p,userPreviewUrl:N,previewEntryPath:w}){var q;const b=e??((q=o.jogaks[0])==null?void 0:q.name)??null;if(j.useEffect(()=>{e===null&&b!==null&&g!==void 0&&g(o.id,b)},[e,b,o.id,g]),b===null)return a.jsxs("div",{className:"jogak:p-6 jogak:text-[var(--jogak-color-error)]",children:["Entry has no jogaks: ",o.id]});const v=o.jogaks.find(y=>y.name===b);if(v===void 0)return a.jsxs("div",{className:"jogak:p-6 jogak:text-[var(--jogak-color-error)]",children:["Jogak not found: ",b]});const C={...v.args??{},...t},u={...o.meta.argTypes??{},...v.argTypes??{}},m=Object.keys(t).length>0,x=Z[s];return a.jsxs("div",{className:"jogak:flex jogak:flex-col jogak:h-full",children:[a.jsx(T,{title:o.title,jogakName:v.name,viewport:s,bgMode:l,onViewportChange:d,onBgModeChange:c,showReset:m,onReset:n}),a.jsx("div",{className:`jogak:flex-1 jogak:overflow-auto jogak:min-h-[320px] ${V}`,style:W[l],children:a.jsx("div",{"data-jogak-content":!0,className:"jogak:mx-auto jogak:p-6 jogak:max-w-[var(--jogak-canvas-mw)]",style:{"--jogak-canvas-mw":x==="none"?"100%":`${x}px`},children:a.jsx(Eo,{entry:o,args:C,theme:f,previewIsolation:p,userPreviewUrl:N,previewEntryPath:w},`${o.id}/${v.name}`)})}),a.jsxs("div",{"data-testid":"bottom-panel",className:"jogak:h-[260px] jogak:shrink-0 jogak:flex jogak:flex-col jogak:border-t-2 jogak:border-[var(--jogak-color-border)]",children:[a.jsx("div",{role:"tablist",className:"jogak:flex jogak:gap-1 jogak:pt-1 jogak:px-3 jogak:pb-0 jogak:bg-[var(--jogak-color-bg)] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:shrink-0",children:["controls","actions"].map(y=>{const D=i===y;return a.jsx("button",{type:"button",role:"tab","aria-selected":D,onClick:()=>{k(y)},className:h("jogak:px-[14px] jogak:py-[6px] jogak:text-[12px] jogak:bg-transparent jogak:border-x-0 jogak:border-t-0 jogak:border-b-2 jogak:border-solid jogak:-mb-px jogak:cursor-pointer jogak:capitalize",D?"jogak:font-semibold jogak:text-[var(--jogak-color-fg-strong)] jogak:border-[var(--jogak-color-accent)]":"jogak:font-medium jogak:text-[var(--jogak-color-fg-muted)] jogak:border-transparent"),children:y},y)})}),a.jsx("div",{className:"jogak:flex-1 jogak:min-h-0 jogak:overflow-auto",children:i==="controls"?a.jsx(Q,{args:C,argTypes:u,onArgChange:r}):a.jsx(X,{})})]})]})}function T({title:o,jogakName:e,viewport:t,bgMode:r,onViewportChange:n,onBgModeChange:g,showReset:s,onReset:l}){return a.jsxs("div",{className:"jogak:flex jogak:items-center jogak:gap-[10px] jogak:px-[14px] jogak:py-[7px] jogak:border-b jogak:border-[var(--jogak-color-border)] jogak:bg-[var(--jogak-color-bg)] jogak:shrink-0",children:[a.jsxs("div",{className:"jogak:flex-1 jogak:text-[13px]",children:[a.jsx("span",{className:"jogak:text-[var(--jogak-color-fg-subtle)]",children:o}),a.jsx("span",{className:"jogak:text-[var(--jogak-color-border-strong)] jogak:mx-1.5 jogak:leading-none",children:"/"}),a.jsx("span",{className:"jogak:text-[var(--jogak-color-fg-strong)] jogak:font-semibold",children:e})]}),a.jsx("div",{className:"jogak:flex jogak:gap-0.5 jogak:bg-[var(--jogak-color-bg-subtle)] jogak:rounded-[var(--jogak-radius-lg)] jogak:p-0.5",children:["mobile","tablet","desktop"].map(i=>a.jsx("button",{type:"button",onClick:()=>{n(i)},"aria-pressed":t===i,className:h("jogak:px-[9px] jogak:py-[3px] jogak:text-[12px] jogak:border-none jogak:rounded-[var(--jogak-radius-md)] jogak:cursor-pointer jogak:transition-all jogak:duration-100",t===i?"jogak:bg-[var(--jogak-color-bg-elevated)] jogak:text-[var(--jogak-color-fg-strong)] jogak:font-semibold jogak:shadow-[0_1px_2px_rgba(0,0,0,0.08)]":"jogak:bg-transparent jogak:text-[var(--jogak-color-fg-muted)] jogak:font-normal jogak:shadow-none"),children:$o[i]},i))}),a.jsx("div",{className:"jogak:flex jogak:gap-1 jogak:items-center",children:["white","dark","transparent"].map(i=>a.jsx("button",{type:"button",onClick:()=>{g(i)},"aria-pressed":r===i,"aria-label":`${i} background`,className:h("jogak:w-5 jogak:h-5 jogak:rounded-[var(--jogak-radius-md)] jogak:border-2 jogak:cursor-pointer jogak:p-0 jogak:shrink-0",V,r===i?"jogak:border-[var(--jogak-color-accent)]":"jogak:border-[var(--jogak-color-border-strong)]"),style:W[i]},i))}),s&&a.jsx("button",{type:"button",onClick:l,className:"jogak:px-[10px] jogak:py-[3px] jogak:text-[12px] jogak:border jogak:border-[var(--jogak-color-border-strong)] jogak:rounded-[var(--jogak-radius-md)] jogak:bg-[var(--jogak-color-bg)] jogak:cursor-pointer jogak:text-[var(--jogak-color-fg)] jogak:leading-none",children:"Reset"})]})}function Eo({entry:o,args:e,theme:t,previewIsolation:r,userPreviewUrl:n,previewEntryPath:g}){const[s,l]=j.useState(!1),i=wo(o,e),d=a.jsxs("div",{className:"jogak:relative",children:[a.jsx(Mo,{entry:o,args:e,previewIsolation:r,userPreviewUrl:n,previewEntryPath:g}),a.jsx("button",{type:"button",onClick:()=>{l(c=>!c)},"aria-pressed":s,"aria-label":s?"Hide source code":"Show source code",className:h("jogak:absolute jogak:bottom-2 jogak:right-2 jogak:px-[9px] jogak:py-1","jogak:text-[11px] jogak:font-[family-name:var(--jogak-font-mono)] jogak:font-semibold jogak:tracking-[0.02em]","jogak:text-[var(--jogak-color-bg)] jogak:border-none jogak:rounded-[5px] jogak:cursor-pointer","jogak:shadow-[0_1px_4px_rgba(0,0,0,0.2)] jogak:transition-[background-color] jogak:duration-150 jogak:leading-none",s?"jogak:bg-[var(--jogak-color-accent)]":"jogak:bg-[#1e293b]"),children:"</>"})]});return a.jsxs("div",{children:[d,s&&a.jsx("div",{className:"jogak:mt-2 jogak:rounded-[var(--jogak-radius-xl)] jogak:overflow-hidden jogak:h-[320px] jogak:shadow-[0_0_0_1px_rgba(0,0,0,0.08),_0_4px_16px_rgba(0,0,0,0.12)]",children:a.jsx(Po,{source:i,theme:t})})]})}const P="jogak:border jogak:border-dashed jogak:border-[var(--jogak-color-border)] jogak:rounded-[var(--jogak-radius-xl)] jogak:p-4 jogak:pb-9";function Mo({entry:o,args:e,previewIsolation:t,userPreviewUrl:r,previewEntryPath:n}){return t==="shadow"?a.jsx(bo,{"data-testid":"preview-content",className:P,children:a.jsx(Lo,{entry:o,args:e})}):t==="iframe"?a.jsx(ho,{entry:o,args:e,userPreviewUrl:r,previewEntryPath:n,"data-testid":"preview-content",className:`${P} jogak:block jogak:w-full jogak:bg-transparent jogak:min-h-[256px]`}):a.jsx(Oo,{entry:o,args:e})}function Oo({entry:o,args:e}){const t=j.useRef(null),r=j.useRef(null);return j.useEffect(()=>{const n=t.current;if(n===null)return;let g=!1;const s=o.meta.framework??"react";return A(s).then(l=>{g||(r.current=l,l.render(o,e,n))}),()=>{g=!0;const l=r.current;l!==null&&queueMicrotask(()=>{l.unmount(n)})}},[o]),j.useEffect(()=>{const n=t.current;if(n===null)return;let g=!1;const s=r.current;if(s!==null){s.render(o,e,n);return}const l=o.meta.framework??"react";return A(l).then(i=>{g||(r.current=i,i.render(o,e,n))}),()=>{g=!0}},[o,e]),a.jsx("div",{ref:t,"data-testid":"preview-content",className:P})}function Lo({entry:o,args:e}){const t=j.useRef(null),r=j.useRef(null);return j.useEffect(()=>{const n=t.current;if(n===null)return;let g=!1;const s=o.meta.framework??"react";return A(s).then(l=>{g||(r.current=l,l.render(o,e,n))}),()=>{g=!0;const l=r.current;l!==null&&queueMicrotask(()=>{l.unmount(n)})}},[o]),j.useEffect(()=>{const n=t.current;if(n===null)return;let g=!1;const s=r.current;if(s!==null){s.render(o,e,n);return}const l=o.meta.framework??"react";return A(l).then(i=>{g||(r.current=i,i.render(o,e,n))}),()=>{g=!0}},[o,e]),a.jsx("div",{ref:t,"data-testid":"preview-content-shadow"})}function Po({source:o,theme:e}){const[t,r]=j.useState(!1),n=e.plain.backgroundColor??"#1e293b";if(o===void 0)return a.jsx("div",{className:"jogak:h-full jogak:flex jogak:items-center jogak:justify-center jogak:bg-[var(--jogak-source-bg)] jogak:text-[#94a3b8] jogak:text-[13px]",style:{"--jogak-source-bg":n},children:"Source not available"});const g=()=>{navigator.clipboard.writeText(o).then(()=>{r(!0),setTimeout(()=>{r(!1)},2e3)})};return a.jsxs("div",{className:"jogak:relative jogak:h-full",children:[a.jsx("button",{type:"button",onClick:g,className:"jogak:absolute jogak:top-[10px] jogak:right-3 jogak:z-[1] jogak:px-[9px] jogak:py-[3px] jogak:text-[11px] jogak:bg-[rgba(255,255,255,0.1)] jogak:text-[#e2e8f0] jogak:border jogak:border-[rgba(255,255,255,0.18)] jogak:rounded-[var(--jogak-radius-md)] jogak:cursor-pointer jogak:leading-none",children:t?"✓ Copied":"Copy"}),a.jsx(L.Highlight,{code:o.trim(),language:"tsx",theme:e,children:({style:s,tokens:l,getLineProps:i,getTokenProps:d})=>a.jsx("pre",{className:"jogak:m-0 jogak:py-3 jogak:px-0 jogak:text-[12.5px] jogak:leading-[1.7] jogak:font-[family-name:var(--jogak-font-mono)] jogak:h-full jogak:box-border jogak:overflow-auto",style:s,children:l.map((c,k)=>a.jsxs("div",{...i({line:c}),className:"jogak:flex jogak:pr-6",style:i({line:c}).style,children:[a.jsx("span",{className:"jogak:select-none jogak:min-w-10 jogak:pl-[14px] jogak:pr-[14px] jogak:text-right jogak:text-[rgba(148,163,184,0.45)] jogak:shrink-0 jogak:leading-[1.7]",children:k+1}),a.jsx("span",{children:c.map((f,p)=>a.jsx("span",{...d({token:f})},p))})]},k))})})]})}function H(){if(typeof window>"u")return null;const o=new URLSearchParams(window.location.search),e=o.get("entry");if(e===null)return null;const t=o.get("jogak");return{entryId:e,jogakName:t}}function Wo(o,e){const t=new URLSearchParams;t.set("entry",o),t.set("jogak",e),window.history.pushState({},"",`?${t.toString()}`)}function Vo({entries:o,metas:e,codeTheme:t="vsDark",previewIsolation:r="iframe",userPreviewUrl:n="",previewEntryPath:g="/__jogak_preview__/index.html",userViteUrl:s}={}){const l=n!==""?n:s??"",i=j.useMemo(()=>{if(o!==void 0){e!==void 0&&console.warn("[jogak] JogakApp received both `entries` and `metas` — `entries` (eager) takes precedence.");const u=new S.ComponentRegistry;for(const m of o)u.register(m);return u}if(e!==void 0)for(const u of e)S.defaultRegistry.registerMeta(u);return S.defaultRegistry},[o,e]),d=j.useMemo(()=>H(),[]),[c,k]=j.useState((d==null?void 0:d.entryId)??null),[f,p]=j.useState((d==null?void 0:d.jogakName)??null),[N,w]=j.useState({});j.useEffect(()=>{const u=()=>{const m=H();m!==null?(k(m.entryId),p(m.jogakName),w({})):(k(null),p(null))};return window.addEventListener("popstate",u),()=>{window.removeEventListener("popstate",u)}},[]);const b=j.useCallback((u,m)=>{k(u),p(m),w({}),Wo(u,m)},[]),v=j.useCallback((u,m)=>{if(k(x=>x===u?u:x),p(x=>x??m),typeof window<"u"){const x=new URLSearchParams(window.location.search);x.get("entry")===u&&x.get("jogak")===null&&(x.set("jogak",m),window.history.replaceState({},"",`?${x.toString()}`))}},[]),J=j.useCallback((u,m)=>{w(x=>({...x,[u]:m}))},[]),C=j.useCallback(()=>{w({})},[]);return a.jsx(E.JogakProvider,{registry:i,children:a.jsxs("div",{"data-jogak-shell":!0,className:"jogak:grid jogak:grid-cols-[260px_1fr] jogak:h-dvh jogak:overflow-hidden",children:[a.jsx(U,{selectedEntryId:c,selectedJogakName:f,onSelect:b}),a.jsx("main",{className:"jogak:overflow-hidden jogak:min-h-0",children:c!==null?a.jsx(K,{entryId:c,jogakName:f,overrideArgs:N,onArgChange:J,onReset:C,codeTheme:t,onResolveJogak:v,previewIsolation:r,userPreviewUrl:l,previewEntryPath:g}):a.jsx("div",{className:"jogak:flex jogak:items-center jogak:justify-center jogak:h-full jogak:text-[var(--jogak-color-fg-subtle)]",children:"Select a component from the sidebar"})})]})})}function Jo(){const o=E.useRegistry(),e=j.useMemo(()=>o.getAll(),[o]),t=j.useMemo(()=>o.getTree(),[o]),r=j.useMemo(()=>n=>o.search(n),[o]);return{entries:e,tree:t,search:r}}exports.Actions=X;exports.Controls=Q;exports.JogakApp=Vo;exports.Preview=K;exports.Sidebar=U;exports.useRegistry=Jo;
|